2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/keystone/keystone_stats
2017-02-24 00:13:44 +01:00

107 lines
2.9 KiB
Python
Executable File

#!/usr/bin/env python
#
# Plugin to monitor status of Keystone
#
# Needs following minimal configuration in plugin-conf.d/keystone:
# [keystone_*]
# user keystone
#
# Magic markers
#%# capabilities=autoconf
#%# family=auto
import sys
import traceback
try:
from keystone.common import utils
from keystone import config
from keystone import exception
from keystone import identity
except ImportError:
successful_import = False
else:
successful_import = True
stats = ['users', 'tenants']
def print_config():
global states
print 'graph_title Keystone Stats'
print 'graph_vlabel count'
print 'graph_args --base 1000 --lower-limit 0'
print 'graph_category other'
print 'graph_scale no'
print 'graph_info This graph shows stats about keystone: ' + (', ').join(stats)
for field in stats:
print '%s_enabled.label enabled %s' % (field, field)
print '%s_enabled.draw LINE2' % field
print '%s_enabled.info %s enabled' % (field, field)
print '%s_total.label total %s' % (field, field)
print '%s_total.draw LINE2' % field
print '%s_total.info %s total' % (field, field)
def get_status():
enabled = {}
total = {}
for k in stats:
enabled[k] = 0
total[k] = 0
identity_api = identity.Manager()
for user in identity_api.list_users(None):
total['users'] += 1
if user['enabled']:
enabled['users'] += 1
# Ldap and pam driver don't support get_all_tenants()
# kvs and sql implement get_tenants() instead of get_all_tenants()
# Whoo: None of backend implements the correct function
tenants = []
for api_func in [ 'get_all_tenants', 'get_tenants']:
try:
tenants = getattr(identity_api, api_func)(None)
except exception.NotImplemented, NotImplementedError:
pass
for tenant in tenants:
total['tenants'] += 1
if tenant['enabled']:
enabled['tenants'] += 1
return {'enabled': enabled, 'total': total}
def print_values():
stats = get_status()
for state in stats.keys():
for (field, value) in stats[state].iteritems():
print "%s_%s.value %s" % (field, state, value)
def load_conf():
config.CONF(config_files=[utils.find_config('keystone.conf')])
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 keystone module)'
sys.exit(0)
try:
load_conf()
identity.Manager()
except:
print 'no (failed to connect keystone backend: %s'%traceback.format_exc()
sys.exit(0)
print 'yes'
elif successful_import:
load_conf()
print_values()