Report devstack node statistics.

Change-Id: I0c7292a7ff1e575bf87e8b03ea16e6eebcadaf19
This commit is contained in:
James E. Blair 2012-10-24 15:57:34 -07:00
parent ccddb61792
commit edd11f926a
5 changed files with 46 additions and 0 deletions

View File

@ -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()

View File

@ -59,6 +59,7 @@ def main():
config = LABEL_RE.sub('<label>devstack-used</label>', config)
jenkins.reconfig_node(machine.jenkins_name, config)
utils.update_stats(machine.base_image.provider)
if __name__ == '__main__':
main()

View File

@ -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."

View File

@ -161,6 +161,7 @@ def main():
print 'Known machines (end):'
db.print_state()
utils.update_stats(provider)
if error:
sys.exit(1)

View File

@ -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)