@@ -188,7 +188,7 @@ def collect(self):
188
188
189
189
metrics = self ._create_metric_containers ()
190
190
191
- logging .info (f "Start collecting metrics from { vsphere_host } " )
191
+ logging .info ("Start collecting metrics from {vsphere_host}" . format ( vsphere_host = vsphere_host ) )
192
192
193
193
self ._labels = {}
194
194
@@ -212,9 +212,9 @@ def collect(self):
212
212
213
213
yield parallelize (* tasks )
214
214
215
- yield self ._vmware_disconnect
215
+ yield self ._vmware_disconnect ()
216
216
217
- logging .info (f "Finished collecting metrics from { vsphere_host } " )
217
+ logging .info ("Finished collecting metrics from {vsphere_host}" . format ( vsphere_host = vsphere_host ) )
218
218
219
219
return list (metrics .values ()) # noqa: F705
220
220
@@ -243,7 +243,7 @@ def connection(self):
243
243
return vmware_connect
244
244
245
245
except vmodl .MethodFault as error :
246
- logging .error (f "Caught vmodl fault: { error . msg } " )
246
+ logging .error ("Caught vmodl fault: {error}" . format ( error = error . msg ) )
247
247
return None
248
248
249
249
@run_once_property
@@ -290,7 +290,8 @@ def datastore_inventory(self):
290
290
vim .Datastore ,
291
291
properties
292
292
)
293
- logging .info (f"Fetched vim.Datastore inventory ({ datetime .datetime .utcnow () - start } )" )
293
+ fetch_time = datetime .datetime .utcnow () - start
294
+ logging .info ("Fetched vim.Datastore inventory ({fetch_time})" .format (fetch_time = fetch_time ))
294
295
return datastores
295
296
296
297
@run_once_property
@@ -316,7 +317,8 @@ def host_system_inventory(self):
316
317
vim .HostSystem ,
317
318
properties ,
318
319
)
319
- logging .info (f"Fetched vim.HostSystem inventory ({ datetime .datetime .utcnow () - start } )" )
320
+ fetch_time = datetime .datetime .utcnow () - start
321
+ logging .info ("Fetched vim.HostSystem inventory ({fetch_time})" .format (fetch_time = fetch_time ))
320
322
return host_systems
321
323
322
324
@run_once_property
@@ -353,7 +355,8 @@ def vm_inventory(self):
353
355
vim .VirtualMachine ,
354
356
properties ,
355
357
)
356
- logging .info (f"Fetched vim.VirtualMachine inventory ({ datetime .datetime .utcnow () - start } )" )
358
+ fetch_time = datetime .datetime .utcnow () - start
359
+ logging .info ("Fetched vim.VirtualMachine inventory ({fetch_time})" .format (fetch_time = fetch_time ))
357
360
return virtual_machines
358
361
359
362
@run_once_property
@@ -373,21 +376,21 @@ def datastore_labels(self):
373
376
def _collect (node , level = 1 , dc = None , storagePod = "" ):
374
377
inventory = {}
375
378
if isinstance (node , vim .Folder ) and not isinstance (node , vim .StoragePod ):
376
- logging .debug (f "[Folder ] { ( '-' * level ).ljust (7 )} { node . name } " )
379
+ logging .debug ("[Folder ] {level} {name}" . format ( name = node . name , level = ( '-' * level ).ljust (7 )) )
377
380
for child in node .childEntity :
378
- inventory .update (_collect (child , level + 1 , dc ))
381
+ inventory .update (_collect (child , level + 1 , dc ))
379
382
elif isinstance (node , vim .Datacenter ):
380
- logging .debug (f "[Datacenter] { ( '-' * level ).ljust (7 )} { node . name } " )
381
- inventory .update (_collect (node .datastoreFolder , level + 1 , node .name ))
383
+ logging .debug ("[Datacenter] {level} {name}" . format ( name = node . name , level = ( '-' * level ).ljust (7 )) )
384
+ inventory .update (_collect (node .datastoreFolder , level + 1 , node .name ))
382
385
elif isinstance (node , vim .Folder ) and isinstance (node , vim .StoragePod ):
383
- logging .debug (f "[StoragePod] { ( '-' * level ).ljust (7 )} { node . name } " )
386
+ logging .debug ("[StoragePod] {level} {name}" . format ( name = node . name , level = ( '-' * level ).ljust (7 )) )
384
387
for child in node .childEntity :
385
- inventory .update (_collect (child , level + 1 , dc , node .name ))
388
+ inventory .update (_collect (child , level + 1 , dc , node .name ))
386
389
elif isinstance (node , vim .Datastore ):
387
- logging .debug (f "[Datastore ] { ( '-' * level ).ljust (7 )} { node . name } " )
390
+ logging .debug ("[Datastore ] {level} {name}" . format ( name = node . name , level = ( '-' * level ).ljust (7 )) )
388
391
inventory [node .name ] = [node .name , dc , storagePod ]
389
392
else :
390
- logging .debug (f "[? ] { ( '-' * level ).ljust (7 )} { node } " )
393
+ logging .debug ("[? ] {level} {node}" . format ( node = node , level = ( '-' * level ).ljust (7 )) )
391
394
return inventory
392
395
393
396
labels = {}
@@ -404,25 +407,25 @@ def host_labels(self):
404
407
def _collect (node , level = 1 , dc = None , folder = None ):
405
408
inventory = {}
406
409
if isinstance (node , vim .Folder ) and not isinstance (node , vim .StoragePod ):
407
- logging .debug (f "[Folder ] { ( '-' * level ).ljust (7 )} { node .name } " )
410
+ logging .debug ("[Folder ] {level} {name}" . format ( level = ( '-' * level ).ljust (7 ), name = node .name ) )
408
411
for child in node .childEntity :
409
- inventory .update (_collect (child , level + 1 , dc ))
412
+ inventory .update (_collect (child , level + 1 , dc ))
410
413
elif isinstance (node , vim .Datacenter ):
411
- logging .debug (f "[Datacenter] { ( '-' * level ).ljust (7 )} { node .name } " )
412
- inventory .update (_collect (node .hostFolder , level + 1 , node .name ))
414
+ logging .debug ("[Datacenter] {level} {name}" . format ( level = ( '-' * level ).ljust (7 ), name = node .name ) )
415
+ inventory .update (_collect (node .hostFolder , level + 1 , node .name ))
413
416
elif isinstance (node , vim .ComputeResource ):
414
- logging .debug (f "[ComputeRes] { ( '-' * level ).ljust (7 )} { node .name } " )
417
+ logging .debug ("[ComputeRes] {level} {name}" . format ( level = ( '-' * level ).ljust (7 ), name = node .name ) )
415
418
for host in node .host :
416
- inventory .update (_collect (host , level + 1 , dc , node ))
419
+ inventory .update (_collect (host , level + 1 , dc , node ))
417
420
elif isinstance (node , vim .HostSystem ):
418
- logging .debug (f "[HostSystem] { ( '-' * level ).ljust (7 )} { node .name } " )
421
+ logging .debug ("[HostSystem] {level} {name}" . format ( level = ( '-' * level ).ljust (7 ), name = node .name ) )
419
422
inventory [node ._moId ] = [
420
423
node .summary .config .name .rstrip ('.' ),
421
424
dc ,
422
425
folder .name if isinstance (folder , vim .ClusterComputeResource ) else ''
423
426
]
424
427
else :
425
- logging .debug (f "[? ] { ( '-' * level ).ljust (7 )} { node } " )
428
+ logging .debug ("[? ] {level} {node}" . format ( level = ( '-' * level ).ljust (7 ), node = node ) )
426
429
return inventory
427
430
428
431
labels = {}
@@ -505,7 +508,11 @@ def _vmware_get_datastores(self, ds_metrics):
505
508
name = datastore ['name' ]
506
509
labels = datastore_labels [name ]
507
510
except KeyError as e :
508
- logging .info (f"Key error, unable to register datastore { e } , datastores are { datastore_labels } " )
511
+ logging .info (
512
+ "Key error, unable to register datastore {error}, datastores are {datastore_labels}" .format (
513
+ error = e , datastore_labels = datastore_labels
514
+ )
515
+ )
509
516
continue
510
517
511
518
ds_capacity = float (datastore .get ('summary.capacity' , 0 ))
@@ -522,8 +529,8 @@ def _vmware_get_datastores(self, ds_metrics):
522
529
ds_metrics ['vmware_datastore_vms' ].add_metric (labels , len (datastore .get ('vm' , [])))
523
530
524
531
ds_metrics ['vmware_datastore_maintenance_mode' ].add_metric (
525
- labels + [datastore .get ('summary.maintenanceMode' , 'unknown' )],
526
- 1
532
+ labels + [datastore .get ('summary.maintenanceMode' , 'unknown' )],
533
+ 1
527
534
)
528
535
529
536
ds_metrics ['vmware_datastore_type' ].add_metric (
@@ -689,7 +696,11 @@ def _vmware_get_hosts(self, host_metrics):
689
696
try :
690
697
labels = host_labels [host_id ]
691
698
except KeyError as e :
692
- logging .info (f"Key error, unable to register host { e } , host labels are { host_labels } " )
699
+ logging .info (
700
+ "Key error, unable to register host {error}, host labels are {host_labels}" .format (
701
+ error = e , host_labels = host_labels
702
+ )
703
+ )
693
704
continue
694
705
695
706
# Power state
@@ -893,6 +904,35 @@ def render_GET(self, request):
893
904
return 'Server is UP' .encode ()
894
905
895
906
907
+ class IndexResource (Resource ):
908
+ isLeaf = False
909
+
910
+ def getChild (self , name , request ):
911
+ if name == b'' :
912
+ return self
913
+ return Resource .getChild (self , name , request )
914
+
915
+ def render_GET (self , request ):
916
+ output = """<html>
917
+ <head><title>VMware Exporter</title></head>
918
+ <body>
919
+ <h1>VMware Exporter</h1>
920
+ <p><a href="/metrics">Metrics</a></p>
921
+ </body>
922
+ </html>"""
923
+ request .setHeader ("Content-Type" , "text/html; charset=UTF-8" )
924
+ request .setResponseCode (200 )
925
+ return output .encode ()
926
+
927
+
928
+ def registerEndpoints (args ):
929
+ root = Resource ()
930
+ root .putChild (b'' , IndexResource ())
931
+ root .putChild (b'metrics' , VMWareMetricsResource (args ))
932
+ root .putChild (b'healthz' , HealthzResource ())
933
+ return root
934
+
935
+
896
936
def main (argv = None ):
897
937
""" start up twisted reactor """
898
938
parser = argparse .ArgumentParser (description = 'VMWare metrics exporter for Prometheus' )
@@ -907,18 +947,13 @@ def main(argv=None):
907
947
908
948
numeric_level = getattr (logging , args .loglevel .upper (), None )
909
949
if not isinstance (numeric_level , int ):
910
- raise ValueError (f "Invalid log level: { args .loglevel } " )
950
+ raise ValueError ("Invalid log level: {level}" . format ( level = args .loglevel ) )
911
951
logging .basicConfig (level = numeric_level , format = '%(asctime)s %(levelname)s:%(message)s' )
912
952
913
953
reactor .suggestThreadPoolSize (25 )
914
954
915
- # Start up the server to expose the metrics.
916
- root = Resource ()
917
- root .putChild (b'metrics' , VMWareMetricsResource (args ))
918
- root .putChild (b'healthz' , HealthzResource ())
919
-
920
- factory = Site (root )
921
- logging .info (f"Starting web server on port { args .port } " )
955
+ factory = Site (registerEndpoints (args ))
956
+ logging .info ("Starting web server on port {port}" .format (port = args .port ))
922
957
endpoint = endpoints .TCP4ServerEndpoint (reactor , args .port )
923
958
endpoint .listen (factory )
924
959
reactor .run ()
0 commit comments