#!/usr/bin/env python3 """ =head1 NAME nova_services - report nova service status =head1 CONFIGURATION Needs following minimal configuration in plugin-conf.d/nova: [nova_*] user nova =head1 AUTHORS Copyright 2012 Mehdi Abaakouk =head1 MAGIC MARKERS #%# capabilities=autoconf #%# family=auto =cut """ import sys try: from nova import context, db, flags, utils except ImportError: successful_import = False else: successful_import = True services = [ 'nova-compute', 'nova-volume', 'nova-scheduler', 'nova-vncproxy', 'nova-network', 'nova-cert', 'nova-console', 'nova-consoleauth', ] def print_config(): print('graph_title Nova Services') print('graph_vlabel qty') print('graph_args --base 1000 --lower-limit 0') print('graph_category cloud') print('graph_scale no') print('graph_info Nova services - alive and active') for service in services: print('%s_alive.label %s alive' % (service, service)) print('%s_alive.draw LINE2' % service) print('%s_alive.info seen in last 30 seconds' % service) print('%s_active.label %s active' % (service, service)) print('%s_active.draw LINE2' % service) print('%s_active.info alive and enabled' % service) def get_status(): global services alive = {} active = {} for k in services: alive[k] = 0 active[k] = 0 ctxt = context.get_admin_context() now = utils.utcnow() services = db.service_get_all(ctxt) for svc in services: delta = now - (svc['updated_at'] or svc['created_at']) if (delta.seconds <= 30): alive[svc['binary']] += 1 if not svc['disabled']: active[svc['binary']] += 1 return {'alive': alive, 'active': active} def print_values(): status = get_status() for (state, value) in status['alive'].items(): print("%s_alive.value %s" % (state, value)) for (state, value) in status['active'].items(): print("%s_active.value %s" % (state, value)) if __name__ == '__main__': if len(sys.argv) > 1: if sys.argv[1] == "config": print_config() elif sys.argv[1] == "autoconf": if not successful_import: print('no (failed import nova module]') else: print('yes') elif successful_import: utils.default_flagfile() flags.FLAGS(sys.argv) print_values()