mirror of
https://github.com/jcwimer/openstack-exporter
synced 2026-03-24 17:44:42 +00:00
61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
import os
|
|
import time
|
|
import openstack
|
|
import datetime
|
|
import traceback
|
|
import prometheus_client as prom
|
|
|
|
api_metrics = prom.Gauge('openstack_api_response_milliseconds', 'Time for openstack api to execute in milliseconds.', ['api_name','cloud_name'])
|
|
api_status = prom.Gauge('openstack_api_status', 'API current status. 1 = up 0 = down.',['api_name','cloud_name'])
|
|
|
|
def generate_nova_metrics(connection,cloud_name):
|
|
try:
|
|
start_time = datetime.datetime.now()
|
|
for server in connection.compute.servers():
|
|
name = server.name
|
|
break
|
|
end_time = datetime.datetime.now()
|
|
time_took = end_time - start_time
|
|
milliseconds_took = time_took.microseconds / 1000
|
|
print(f'Nova took {milliseconds_took} milliseconds')
|
|
api_metrics.labels('nova',cloud_name).set(milliseconds_took)
|
|
api_status.labels('nova',cloud_name).set(1)
|
|
except:
|
|
print(traceback.print_exc())
|
|
print("Nova api is down.")
|
|
api_status.labels('nova',cloud_name).set(0)
|
|
|
|
def generate_neutron_metrics(connection,cloud_name):
|
|
try:
|
|
project = connection.current_project
|
|
start_time = datetime.datetime.now()
|
|
for network in connection.network.networks(project_id=project.id):
|
|
name = network.name
|
|
break
|
|
end_time = datetime.datetime.now()
|
|
time_took = end_time - start_time
|
|
milliseconds_took = time_took.microseconds / 1000
|
|
print(f'Neutron took {milliseconds_took} milliseconds')
|
|
api_metrics.labels('neutron',cloud_name).set(milliseconds_took)
|
|
api_status.labels('neutron',cloud_name).set(1)
|
|
except:
|
|
print(traceback.print_exc())
|
|
print("Neutron api is down.")
|
|
api_status.labels('neutron',cloud_name).set(0)
|
|
|
|
def generate_cinder_metrics(connection,cloud_name):
|
|
try:
|
|
start_time = datetime.datetime.now()
|
|
for volume in connection.volume.volumes():
|
|
name = volume.name
|
|
break
|
|
end_time = datetime.datetime.now()
|
|
time_took = end_time - start_time
|
|
milliseconds_took = time_took.microseconds / 1000
|
|
print(f'Cinder took {milliseconds_took} milliseconds')
|
|
api_metrics.labels('cinder',cloud_name).set(milliseconds_took)
|
|
api_status.labels('cinder',cloud_name).set(1)
|
|
except:
|
|
print(traceback.print_exc())
|
|
print("Cinder api is down.")
|
|
api_status.labels('cinder').set(0) |