diff --git a/roles/pips/files/cpu_usage.py b/roles/pips/files/cpu_usage.py new file mode 100644 index 0000000..6505db3 --- /dev/null +++ b/roles/pips/files/cpu_usage.py @@ -0,0 +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: + cpu = psutil.cpu_percent(interval=1,percpu=True) + except Exception as e: + print(f"UNKNOWN - failed to read cpu's: {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() +