#!/usr/bin/env python # # Plugin to monitor status of Floating IPs in Nova # # To monitor a floating ips, link floating_ips to this file. # E.g. # ln -s /usr/share/munin/plugins/nova_floating_ips /etc/munin/plugins/ # # Needs following minimal configuration in plugin-conf.d/nova: # [nova_*] # user nova # # Magic markers #%# capabilities=autoconf #%# family=auto import sys try: from nova import context from nova import db from nova import flags from nova import utils except ImportError: successful_import = False else: successful_import = True states = ['total', 'allocated', 'associated'] def print_config(): global states print 'graph_title Nova Floating IPs' print 'graph_vlabel IPs' print 'graph_args --base 1000 --lower-limit 0' print 'graph_category cloud' print 'graph_scale no' print 'graph_info This graph shows the number of Floating IPs in Nova and their status' for state in states: print '%s.label %s' % (state, state) print '%s.draw LINE2' % state print '%s.info %s IPs' % (state, state) def get_status(): status = {} for k in states: status[k] = 0 ctxt = context.get_admin_context() floating_ips = db.floating_ip_get_all(ctxt) for floating_ip in floating_ips: status['total'] += 1 if floating_ip['fixed_ip_id']: status['associated'] += 1 if floating_ip['project_id']: status['allocated'] += 1 return status def print_values(): status = get_status() for (state, value) in status.iteritems(): print "%s.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)' sys.exit(0) else: print 'yes' elif successful_import: utils.default_flagfile() flags.FLAGS(sys.argv) print_values()