#!/usr/bin/env python3 from sys import argv, exit from requests import get meshviewer_url = argv[1] node_id = argv[2] node = None try: for n in get(meshviewer_url).json()['nodes']: if node_id == n['node_id']: node = n break if not node: print('CRITICAL: Node {} not found in {}'.format( node_id, meshviewer_url, )) exit(2) if not node['is_online']: print('CRITICAL: Node "{}" is offline!'.format( node['hostname'], )) exit(2) crit = set() warn = set() if node['loadavg'] > 1: warn.add('has high load: {}'.format( node['loadavg'], )) if node['rootfs_usage'] > 0.9: crit.add('rootfs usage is {}%'.format( int(node['rootfs_usage']*100) )) elif node['rootfs_usage'] > 0.8: warn.add('rootfs usage is {}%'.format( int(node['rootfs_usage']*100) )) if node['memory_usage'] > 0.9: crit.add('ram usage is {}%'.format( int(node['memory_usage']*100) )) elif node['memory_usage'] > 0.8: warn.add('ram usage is {}%'.format( int(node['memory_usage']*100) )) for line in sorted(crit): print('CRITICAL: Node "{}" {}'.format( node['hostname'], line, )) for line in sorted(warn): print('WARNING: Node "{}" {}'.format( node['hostname'], line, )) if crit: exit(2) elif warn: exit(1) else: print('Node "{}" reports no errors'.format( node['hostname'], )) exit(0) except Exception as e: print(repr(e)) exit(3)