def main(): client = Client(['localhost']) plugins = client.get_plugins([[args.plugin]]) # No plugin found if not plugins: nagios.exit_unknown("plugin %s not found" % args.plugin) if args.force: plugins = client.force_run(plugins, progress=False) # Manage plugin result. We can't return much data to Nagios, so just say if it's alright or not for plugin in plugins.values()[0]['plugins'].itervalues(): if not plugin['lastResult']: # No result?! -> UNKNOWN nagios.exit_unknown("plugin has no last result") elif plugin['lastResult']['status'] == 'OK': try: nagios.exit_ok(plugin['lastResult']['messages']['ok'][0]) except (KeyError, IndexError, TypeError): nagios.exit_ok("smoke test succeeded at %s" % plugin['lastResult']['lastRun']) elif plugin['lastResult']['status'] == 'WARN': try: nagios.exit_warning(plugin['lastResult']['messages']['warn'][0]) except (KeyError, IndexError, TypeError): nagios.exit_warning("smoke test returned warnings at %s" % plugin['lastResult']['lastRun']) elif plugin['lastResult']['status'] == 'ERROR': try: nagios.exit_critical(plugin['lastResult']['messages']['error'][0]) except (KeyError, IndexError, TypeError): nagios.exit_critical("smoke test failed at %s" % plugin['lastResult']['lastRun']) else: nagios.exit_unknown("unknown status %s at %s" % (plugin['lastResult']['status'], plugin['lastResult']['lastRun']))
def main(): client = Client(['localhost']) plugins = None if args.plugin: if args.category or args.component or args.health: lg.warn( "Plugins specified by name, ignoring --category, --component and --health" ) plugins = client.get_plugins([args.plugin]) elif args.category or args.component or args.health: filter = [] if args.category: filter.append({'key': 'Category', 'value': args.category}) if args.component: filter.append({'key': 'Component', 'value': args.component}) if args.health: filter.append({'key': 'Type', 'value': 'healthCheck'}) plugins = client.get_plugins(filter) else: nagios.exit_unknown( "invalid startup configuration - neither plugin nor --category nor --component " "nor --health specified") # No plugin found if not plugins: if args.plugin: message = "plugin %s not found" % args.plugin else: message = "no plugin found by category %s and component %s, health: %s" % \ (args.category, args.component, args.health) nagios.exit_unknown(message) if args.force: plugins = client.force_run(plugins, progress=False) status_methods_pairs = [(ERROR, nagios.exit_critical), (UNKNOWN, nagios.exit_unknown), (WARN, nagios.exit_warning), (OK, nagios.exit_ok)] # Manage plugin result. We can't return much data to Nagios, so just say if it's alright or not results = dict((s, []) for s, _ in status_methods_pairs) for plugin in list(plugins.values())[0]['plugins'].itervalues(): plugin_name = plugin['name'] if not plugin['lastResult']: results[UNKNOWN].append({ 'name': plugin_name, 'message': "plugin has no last result" }) else: last_status = plugin['lastResult']['status'] if last_status in [ERROR, WARN, OK]: try: results[last_status].append({ 'name': plugin_name, 'message': plugin['lastResult']['messages'][last_status.lower()] [0] }) except (KeyError, IndexError, TypeError): if last_status == OK: results[last_status].append({ 'name': plugin_name, 'message': "smoke test %s succeeded at %s" % (plugin['name'], plugin['lastResult']['lastRun']) }) else: results[last_status].append({ 'name': plugin_name, 'message': parse_issue(plugin) }) else: results[UNKNOWN].append({ 'name': plugin_name, 'message': "unknown status %s at %s" % (plugin['lastResult']['status'], plugin['lastResult']['lastRun']) }) for status, exit_method in status_methods_pairs: if results[status]: if len(list(plugins.values())[0]['plugins']) == 1: # if only one plugin has been executed, do not print summary exit_method(results[status][0]['message']) else: summary = ', '.join([ "%s: %s" % (s, len(results[s])) for s, _ in status_methods_pairs if results[s] ]) messages = [ '\n'.join([ "%s - %s - %s" % (s, item['name'], item['message']) for item in list ]) for s, list in results.items() if list ] exit_method("%s\n%s" % (summary, '\n'.join(messages)))
# Manage plugin result. We can't return much data to Nagios, so just say if it's alright or not for plugin in plugins.values()[0]['plugins'].itervalues(): if not plugin['lastResult']: # No result?! -> UNKNOWN nagios.exit_unknown("plugin has no last result") elif plugin['lastResult']['status'] == 'OK': try: nagios.exit_ok(plugin['lastResult']['messages']['ok'][0]) except (KeyError, IndexError, TypeError): nagios.exit_ok("smoke test succeeded at %s" % plugin['lastResult']['lastRun']) elif plugin['lastResult']['status'] == 'WARN': try: nagios.exit_warning(plugin['lastResult']['messages']['warn'][0]) except (KeyError, IndexError, TypeError): nagios.exit_warning("smoke test returned warnings at %s" % plugin['lastResult']['lastRun']) elif plugin['lastResult']['status'] == 'ERROR': try: nagios.exit_critical(plugin['lastResult']['messages']['error'][0]) except (KeyError, IndexError, TypeError): nagios.exit_critical("smoke test failed at %s" % plugin['lastResult']['lastRun']) else: nagios.exit_unknown("unknown status %s at %s" % (plugin['lastResult']['status'], plugin['lastResult']['lastRun'])) if __name__ == '__main__': try: main() except Exception as e: lg.exception(e) nagios.exit_unknown(e)
def main(): client = Client(['localhost']) plugins = None if args.plugin: if args.category or args.component or args.health: lg.warn("Plugins specified by name, ignoring --category, --component and --health") plugins = client.get_plugins([args.plugin]) elif args.category or args.component or args.health: filter = [] if args.category: filter.append({'key': 'Category', 'value': args.category}) if args.component: filter.append({'key': 'Component', 'value': args.component}) if args.health: filter.append({'key': 'Type', 'value': 'healthCheck'}) plugins = client.get_plugins(filter) else: nagios.exit_unknown("invalid startup configuration - neither plugin nor --category nor --component " "nor --health specified") # No plugin found if not plugins: if args.plugin: message = "plugin %s not found" % args.plugin else: message = "no plugin found by category %s and component %s, health: %s" % \ (args.category, args.component, args.health) nagios.exit_unknown(message) if args.force: plugins = client.force_run(plugins, progress=False) status_methods_pairs = [(ERROR, nagios.exit_critical), (UNKNOWN, nagios.exit_unknown), (WARN, nagios.exit_warning), (OK, nagios.exit_ok)] # Manage plugin result. We can't return much data to Nagios, so just say if it's alright or not results = dict((s, []) for s, _ in status_methods_pairs) for plugin in plugins.values()[0]['plugins'].itervalues(): plugin_name = plugin['name'] if not plugin['lastResult']: results[UNKNOWN].append({'name': plugin_name, 'message': "plugin has no last result"}) else: last_status = plugin['lastResult']['status'] if last_status in [ERROR, WARN, OK]: try: results[last_status].append({'name': plugin_name, 'message': plugin['lastResult']['messages'][last_status.lower()][0]}) except (KeyError, IndexError, TypeError): if last_status == OK: results[last_status].append( {'name': plugin_name, 'message': "smoke test %s succeeded at %s" % (plugin['name'], plugin['lastResult']['lastRun'])}) else: results[last_status].append({'name': plugin_name, 'message': parse_issue(plugin)}) else: results[UNKNOWN].append({'name': plugin_name, 'message': "unknown status %s at %s" % (plugin['lastResult']['status'], plugin['lastResult']['lastRun'])}) for status, exit_method in status_methods_pairs: if results[status]: if len(plugins.values()[0]['plugins']) == 1: # if only one plugin has been executed, do not print summary exit_method(results[status][0]['message']) else: summary = ', '.join(["%s: %s" % (s, len(results[s])) for s, _ in status_methods_pairs if results[s]]) messages = ['\n'.join(["%s - %s - %s" % (s, item['name'], item['message']) for item in list]) for s, list in results.iteritems() if list] exit_method("%s\n%s" % (summary, '\n'.join(messages)))