icinga2-checks/check_speedtest.py

67 lines
3.2 KiB
Python
Raw Normal View History

2023-04-21 23:54:20 -06:00
#!/usr/bin/env python3
import argparse
import sys
import traceback
from cloudflarepycli import cloudflareclass
import checker.nagios as nagios
def main():
"""
Copied from __main__.py
https://github.com/tevslin/cloudflarepycli/blob/main/src/cloudflarepycli/__main__.py
"""
parser = argparse.ArgumentParser(description='Check internet speed.')
2023-04-21 23:54:20 -06:00
parser.add_argument('--warn-up', type=int, default=0, help='Warn level of upload speed in Mbps.')
parser.add_argument('--critical-up', type=int, default=0, help='Critical level of upload speed in Mbps.')
parser.add_argument('--warn-down', type=int, default=0, help='Warn level of download speed in Mbps.')
parser.add_argument('--critical-down', type=int, default=0, help='Critical level of download speed in Mbps.')
2023-04-21 23:54:20 -06:00
parser.add_argument('--warn-latency', type=int, default=60, help='Warn level of latency in ms.')
parser.add_argument('--critical-latency', type=int, default=100, help='Critical level of latency in ms.')
args = parser.parse_args()
speedtest_results = cloudflareclass.cloudflare(printit=False).runalltests()
out_str = f"upload: {speedtest_results['90th_percentile_upload_speed']['value']} Mbps, download: {speedtest_results['90th_percentile_download_speed']['value']} Mbps, latency: {speedtest_results['latency_ms']['value']} ms, Jitter: {speedtest_results['Jitter_ms']['value']} ms"
perf_data = f"'upload'={speedtest_results['90th_percentile_upload_speed']['value'] * 1e+6}B;{args.warn_up * 1e+6};{args.critical_up * 1e+6};0; 'download'={speedtest_results['90th_percentile_download_speed']['value'] * 1e+6}B;{args.warn_down * 1e+6};{args.critical_down * 1e+6};0; 'latency_ms'={speedtest_results['latency_ms']['value']}ms;{args.warn_latency};{args.critical_latency};0; 'Jitter_ms'={speedtest_results['Jitter_ms']['value']}ms;;;0;"
exit_code = nagios.OK
if speedtest_results['90th_percentile_upload_speed']['value'] <= args.warn_up and exit_code < nagios.WARNING:
exit_code = nagios.WARNING
2023-04-21 23:54:20 -06:00
elif speedtest_results['90th_percentile_upload_speed']['value'] <= args.critical_up and exit_code < nagios.CRITICAL:
2023-04-21 23:54:20 -06:00
exit_code = nagios.CRITICAL
if speedtest_results['90th_percentile_download_speed']['value'] <= args.warn_down and exit_code < nagios.WARNING:
exit_code = nagios.WARNING
2023-04-21 23:54:20 -06:00
elif speedtest_results['90th_percentile_download_speed']['value'] <= args.critical_down and exit_code < nagios.CRITICAL:
2023-04-21 23:54:20 -06:00
exit_code = nagios.CRITICAL
2023-04-21 23:54:20 -06:00
if speedtest_results['latency_ms']['value'] >= args.warn_latency and exit_code < nagios.WARNING:
2023-04-21 23:54:20 -06:00
exit_code = nagios.WARNING
2023-04-21 23:54:20 -06:00
elif speedtest_results['latency_ms']['value'] >= args.warn_latency and exit_code < nagios.CRITICAL:
2023-04-21 23:54:20 -06:00
exit_code = nagios.CRITICAL
if exit_code == nagios.OK:
status_str = 'OK'
elif exit_code == nagios.WARNING:
status_str = 'WARN'
elif exit_code == nagios.CRITICAL:
status_str = 'CRITICAL'
else:
status_str = 'UNKNOWN'
print(f'{status_str} - {out_str} |{perf_data}')
sys.exit(exit_code)
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f'UNKNOWN: exception "{e}"')
print(traceback.format_exc())
sys.exit(nagios.UNKNOWN)