import time import threading from prometheus_client import start_http_server from prometheus_client.core import CounterMetricFamily, GaugeMetricFamily, REGISTRY from wsgiref.simple_server import make_server from backupvms import dig_instances from leakedclusters import find_leaked_clusters from pendingclusters import process_infra_clusters from longliveclusters import find_more_than_eight_hours_clusters leaked_clusters = [] leaked_c59xlarge_vms = [] pending_clusters = [] long_lived_clusters = [] def fecth_leaked_clusters(): global leaked_clusters while True: leaked_clusters = find_leaked_clusters() time.sleep(60) def fecth_leaked_c59xlarge_vms(): global leaked_c59xlarge_vms while True: leaked_c59xlarge_vms = dig_instances() time.sleep(60) def find_pending_clusters(): global pending_clusters while True: pending_clusters = process_infra_clusters() time.sleep(60) def find_long_lived_clusters(): global long_lived_clusters while True: long_lived_clusters = find_more_than_eight_hours_clusters() time.sleep(60) class LeakedClusterCollector(object): def collect(self): counter = CounterMetricFamily( 'leaked_clusters', 'Leaked Clusters', labels=['environment', 'cluster_id']) for cluster in leaked_clusters: counter.add_metric( [ cluster['environment'], cluster['cluster_id'] ], 1.0) yield counter class LeakedC59xlargeVmsCollector(object): def collect(self): counter = CounterMetricFamily('leaked_c59xlarge_vm', 'Leaked Clusters', labels=['region', 'cluster_id', 'tenant', 'component']) for vm in leaked_c59xlarge_vms: counter.add_metric( [vm['region'] , str(vm['cluster_id']), str(vm['tenant']), str(vm['component']) ], 1) yield counter class PendingClusterCollector(object): def collect(self): counter = CounterMetricFamily('pending_delete_cluster', 'Pending Delete Clusters', labels=['name', 'cluster_id']) for cluster in pending_clusters: counter.add_metric( [ cluster['name'], cluster['cluster_id'], ], 1.0) yield counter class LongLiveClusterCollector(object): def collect(self): counter = CounterMetricFamily( 'long_lived_cluster', 'Long Lived Clusters', labels= [ 'env', 'tenantName', 'tenantEmail', "id", 'created_at', 'name', 'tenant_id', 'creator' ] ) for cluster in long_lived_clusters: counter.add_metric( [ cluster['env'], cluster['tenantName'], cluster['tenantEmail'], cluster['id'], cluster['created_at'], cluster['name'], cluster['tenant_id'], cluster['creator'] ], 1.0 ) yield counter REGISTRY.register( LeakedClusterCollector() ) REGISTRY.register( LeakedC59xlargeVmsCollector() ) REGISTRY.register( PendingClusterCollector() ) REGISTRY.register( LongLiveClusterCollector() ) t1 = threading.Thread(target=fecth_leaked_clusters) t2 = threading.Thread(target=fecth_leaked_c59xlarge_vms) t3 = threading.Thread(target=find_pending_clusters) t4 = threading.Thread(target=find_long_lived_clusters) t1.start() t2.start() t3.start() t4.start() start_http_server(8000) while True: time.sleep(30)