1
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2025-07-22 02:51:03 +00:00

Plugin nova_instance_: migrate to Python3, format documentation

This commit is contained in:
Lars Kruse 2020-11-26 01:42:21 +01:00
parent d168d49ee4
commit 37d81d7a6b
2 changed files with 67 additions and 44 deletions

View file

@ -1,21 +1,42 @@
#!/usr/bin/env python #!/usr/bin/env python3
# """
# Plugin to monitor status of Floating IPs in Nova
#
# To monitor instance states, link instance_states to this file.
# E.g.
# ln -s /usr/share/munin/plugins/nova_instance_states /etc/munin/plugins/
#
# Needs following minimal configuration in plugin-conf.d/nova:
# [nova_*]
# user nova
#
# Magic markers
#%# capabilities=autoconf suggest
#%# family=auto
=head1 NAME
nova_instance_ - monitor status of Floating IPs in Nova
=head1 CONFIGURATION
To monitor instance states, link instance_states to this file.
E.g.
ln -s /usr/share/munin/plugins/nova_instance_states /etc/munin/plugins/
Needs following minimal configuration in plugin-conf.d/nova:
[nova_*]
user nova
=head1 AUTHORS
Copyright 2012 Mehdi Abaakouk <sileht@sileht.net>
=head1 MAGIC MARKERS
#%# capabilities=autoconf suggest
#%# family=auto
=cut
"""
import os
import sys import sys
try: try:
from nova import context from nova import context
from nova import db from nova import db
@ -28,7 +49,7 @@ else:
successful_import = True successful_import = True
class InstanceState(object): class InstanceState:
instance_counts = None instance_counts = None
states = None states = None
@ -45,9 +66,8 @@ class InstanceState(object):
for instance in instances: for instance in instances:
i = dict(instance) i = dict(instance)
i['instance_type'] = i['type'] = instance_types.get( i['type'] = instance_types.get(instance.instance_type_id, '(unknown')
instance.instance_type_id, i['instance_type'] = i['type']
'(unknown')
val = cls.instance_counts.get(i[metric], 0) val = cls.instance_counts.get(i[metric], 0)
cls.instance_counts[i[metric]] = val + 1 cls.instance_counts[i[metric]] = val + 1
cls.states = cls.instance_counts.keys() cls.states = cls.instance_counts.keys()
@ -62,6 +82,7 @@ class InstanceState(object):
InstanceState.init(metric) InstanceState.init(metric)
return cls.instance_counts return cls.instance_counts
def get_name(metric, code): def get_name(metric, code):
if metric == "power_state": if metric == "power_state":
return power_state.name(code) return power_state.name(code)
@ -70,36 +91,39 @@ def get_name(metric, code):
else: else:
return code return code
def print_config(metric): def print_config(metric):
states = InstanceState.get_states(metric) states = InstanceState.get_states(metric)
print 'graph_title Nova Instance %s' % metric print('graph_title Nova Instance %s' % metric)
print 'graph_vlabel instances' print('graph_vlabel instances')
print 'graph_args --base 1000 --lower-limit 0' print('graph_args --base 1000 --lower-limit 0')
print 'graph_category cloud' print('graph_category cloud')
print 'graph_scale no' print('graph_scale no')
print 'graph_info This graph shows the number of instances by %s' % metric print('graph_info This graph shows the number of instances by %s' % metric)
for state in states: for state in states:
print '%s.label %s' % (state, get_name(metric, state)) print('%s.label %s' % (state, get_name(metric, state)))
print '%s.draw LINE2' % state print('%s.draw LINE2' % state)
print '%s.info %s IPs' % (state, state) print('%s.info %s IPs' % (state, state))
def print_values(metric): def print_values(metric):
status = InstanceState.get_instance_counts(metric) status = InstanceState.get_instance_counts(metric)
for (state, value) in status.iteritems(): for (state, value) in status.items():
print '%s.value %s' % (state, value) print('%s.value %s' % (state, value))
def print_suggest(): def print_suggest():
suggest = [ "vm_state", suggest = [
"vcpus", "vm_state",
"task_state", "vcpus",
"root_gb", "task_state",
"ephemeral_gb", "root_gb",
"power_state", "ephemeral_gb",
"memory_mb", "power_state",
"instance_type_id", "memory_mb",
] "instance_type_id",
print "\n".join(suggest) ]
print(os.linesep.join(suggest))
if __name__ == '__main__': if __name__ == '__main__':
@ -115,9 +139,9 @@ if __name__ == '__main__':
print_suggest() print_suggest()
elif argv[1] == 'autoconf': elif argv[1] == 'autoconf':
if not successful_import: if not successful_import:
print 'no (failed import nova module)' print('no (failed import nova module)')
sys.exit(0)
else: else:
print 'yes' print('yes')
sys.exit(0)
elif successful_import: elif successful_import:
print_values(metric) print_values(metric)

View file

@ -270,7 +270,6 @@ plugins/nginx/nginx-cache-multi_
plugins/nginx/nginx_upstream plugins/nginx/nginx_upstream
plugins/nginx/nginx_vhost_traffic plugins/nginx/nginx_vhost_traffic
plugins/nginx/nginx_working_set plugins/nginx/nginx_working_set
plugins/nova/nova_instance_
plugins/nova/nova_instance_launched plugins/nova/nova_instance_launched
plugins/nova/nova_instance_timing plugins/nova/nova_instance_timing
plugins/nova/nova_services plugins/nova/nova_services