diff --git a/roles/pips/files/cpu_usage.py b/roles/pips/files/cpu_usage.py index 52fc894..3ce5c7d 100644 --- a/roles/pips/files/cpu_usage.py +++ b/roles/pips/files/cpu_usage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3.11 """Nagios plugin: report current memory usage. Outputs a one-line status and perfdata and uses Nagios exit codes: @@ -11,53 +11,43 @@ 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() + 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) + 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) + try: + cpu = psutil.cpu_percent(interval=5,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 + cpu_list = "" + cpu_print = "" + cpu_num = 0 + status_str = "OK" + for percent_used in cpu: + if percent_used >= args.critical: + status = 2 + status_str = "CRITICAL" + elif percent_used >= args.warning: + status = 1 + status_str = "WARNING" + cpu_list += f"cpu{cpu_num}={percent_used:.1f};;;0; " + cpu_print += f"{percent_used:.1f}% " + cpu_num += 1 - status = 0 - status_str = "OK" - for percent_used in cpu: - 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"CPU {status_str} - {used_mb:.1f}MiB used of {total_mb:.1f}MiB ({percent_used:.1f}%) | {perf}") - sys.exit(status) + print(f"CPU {status_str} {cpu_print} | {cpu_list} ") + sys.exit(status) if __name__ == "__main__": - main() - + main()