From cfdaf3771ef33e2f9c89a862bfd3bc18b9b45864 Mon Sep 17 00:00:00 2001 From: Danny Date: Sun, 23 Nov 2025 19:55:41 +0100 Subject: [PATCH] AI build me the python script --- roles/pips/files/memory_usage.py | 58 +++++++++++++++++++++++++++++++ roles/pips/tasks/nagios_tasks.yml | 2 +- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/roles/pips/files/memory_usage.py b/roles/pips/files/memory_usage.py index f171066..55f032f 100644 --- a/roles/pips/files/memory_usage.py +++ b/roles/pips/files/memory_usage.py @@ -1,4 +1,62 @@ #!/usr/bin/env python3 +"""Nagios plugin: report current memory usage. +Outputs a one-line status and perfdata and uses Nagios exit codes: + 0 OK, 1 WARNING, 2 CRITICAL, 3 UNKNOWN + +Defaults: warning=80%%, critical=90%% (percent used). +""" + +import argparse +import sys import psutil + +def human_mb(bytes_val): + return bytes_val / (1024 * 1024) + + +def main(): + parser = argparse.ArgumentParser(description="Nagios memory usage check") + parser.add_argument("-w", "--warning", type=int, default=80, + help="warning threshold (percent used)") + parser.add_argument("-c", "--critical", type=int, default=90, + help="critical threshold (percent used)") + args = parser.parse_args() + + if args.warning >= args.critical: + print("UNKNOWN - warning threshold must be less than critical") + sys.exit(3) + + try: + vm = psutil.virtual_memory() + except Exception as e: + print(f"UNKNOWN - failed to read memory: {e}") + sys.exit(3) + + total_mb = human_mb(vm.total) + used_mb = human_mb(vm.total - vm.available) + percent_used = vm.percent + + status = 0 + status_str = "OK" + if percent_used >= args.critical: + status = 2 + status_str = "CRITICAL" + elif percent_used >= args.warning: + status = 1 + status_str = "WARNING" + + # Perfdata: used and total in MiB, and percent + perf = ( + f"used={used_mb:.1f}MiB;{args.warning};{args.critical};0;{total_mb:.1f}" + f" total={total_mb:.1f}MiB" + ) + + print(f"MEMORY {status_str} - {used_mb:.1f}MiB used of {total_mb:.1f}MiB ({percent_used:.1f}%) | {perf}") + sys.exit(status) + + +if __name__ == "__main__": + main() + diff --git a/roles/pips/tasks/nagios_tasks.yml b/roles/pips/tasks/nagios_tasks.yml index 34d8ed3..34148e1 100644 --- a/roles/pips/tasks/nagios_tasks.yml +++ b/roles/pips/tasks/nagios_tasks.yml @@ -1,5 +1,5 @@ - name: Gather installed package facts - package_facts: + ansible.builtin.package_facts: manager: auto - name: Debug OS family fact