From edd11f926aeaba28081cfa6294467b0e208ba8ba Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 24 Oct 2012 15:57:34 -0700 Subject: [PATCH] Report devstack node statistics. Change-Id: I0c7292a7ff1e575bf87e8b03ea16e6eebcadaf19 --- devstack-vm-delete.py | 1 + devstack-vm-inprogress.py | 1 + devstack-vm-launch.py | 1 + devstack-vm-reap.py | 1 + utils.py | 42 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+) diff --git a/devstack-vm-delete.py b/devstack-vm-delete.py index 4e1080bb..2fa07c4d 100755 --- a/devstack-vm-delete.py +++ b/devstack-vm-delete.py @@ -36,6 +36,7 @@ def main(): if machine.state != vmdatabase.HOLD: machine.state = vmdatabase.DELETE + utils.update_stats(machine.base_image.provider) if __name__ == '__main__': main() diff --git a/devstack-vm-inprogress.py b/devstack-vm-inprogress.py index cde7b468..4796a093 100755 --- a/devstack-vm-inprogress.py +++ b/devstack-vm-inprogress.py @@ -59,6 +59,7 @@ def main(): config = LABEL_RE.sub('', config) jenkins.reconfig_node(machine.jenkins_name, config) + utils.update_stats(machine.base_image.provider) if __name__ == '__main__': main() diff --git a/devstack-vm-launch.py b/devstack-vm-launch.py index 1465d456..d45c1984 100755 --- a/devstack-vm-launch.py +++ b/devstack-vm-launch.py @@ -195,6 +195,7 @@ def main(): error = True while True: + utils.update_stats(provider) building_machines = provider.building_machines if not building_machines: print "No more machines are building, finished." diff --git a/devstack-vm-reap.py b/devstack-vm-reap.py index e9baba40..5ffa3239 100755 --- a/devstack-vm-reap.py +++ b/devstack-vm-reap.py @@ -161,6 +161,7 @@ def main(): print 'Known machines (end):' db.print_state() + utils.update_stats(provider) if error: sys.exit(1) diff --git a/utils.py b/utils.py index 01d32447..b469503e 100644 --- a/utils.py +++ b/utils.py @@ -27,7 +27,9 @@ import traceback import paramiko import socket from sshclient import SSHClient +import statsd +import vmdatabase def iterate_timeout(max_seconds, purpose): start = time.time() @@ -180,3 +182,43 @@ def delete_server(server): print "Deleting server", server.id server.delete() + +def update_stats(provider): + state_names = { + vmdatabase.BUILDING: 'building', + vmdatabase.READY: 'ready', + vmdatabase.USED: 'used', + vmdatabase.ERROR: 'error', + vmdatabase.HOLD: 'hold', + vmdatabase.DELETE: 'delete', + } + + stats = statsd.StatsClient() + + for base_image in provider.base_images: + states = { + vmdatabase.BUILDING: 0, + vmdatabase.READY: 0, + vmdatabase.USED: 0, + vmdatabase.ERROR: 0, + vmdatabase.HOLD: 0, + vmdatabase.DELETE: 0, + } + for machine in base_image.machines: + if machine.state not in states: + continue + states[machine.state] += 1 + for state_id, count in states.items(): + key = 'devstack.pool.%s.%s.%s' % ( + provider.name, + base_image.name, + state_names[state_id]) + stats.gauge(key, count) + + key = 'devstack.pool.%s.%s.min_ready' % ( + provider.name, + base_image.name) + stats.gauge(key, base_image.min_ready) + + key = 'devstack.pool.%s.max_servers' % provider.name + stats.gauge(key, provider.max_servers)