Skip to content

Commit 00a871d

Browse files
authored
Merge pull request #331 from Helene/exporter_helpful_endpoints
Add helpful REST API endpoints for PrometheusExporter
2 parents 5bf6975 + a1f0ffa commit 00a871d

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

source/prometheus.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__(self, logger, mdHandler, port, raw_data=False):
3838
self.__md = mdHandler
3939
self.port = port
4040
self.raw_data = raw_data
41-
self.static_sensors_list = ['CPU', 'Memory', 'GPFSFileset']
41+
self.static_sensors_list = ['CPU', 'Memory']
4242
self.cache_strategy = False
4343
self.endpoints = {}
4444
self.caching_collectors = []
@@ -157,7 +157,7 @@ def GET(self, **params):
157157
resp = []
158158

159159
self.logger.trace(f"Request headers:{str(cherrypy.request.headers)}")
160-
self.logger.info(f"Request params:{str(params)}")
160+
self.logger.trace(f"Request params:{str(params)}")
161161
conn = cherrypy.request.headers.get('Host').split(':')
162162
if len(conn) == 2 and int(conn[1]) != int(self.port):
163163
self.logger.error(MSG['EndpointNotSupportedForPort'].
@@ -174,11 +174,40 @@ def GET(self, **params):
174174

175175
# /metrics
176176
elif '/metrics' == cherrypy.request.script_name:
177-
resp = self.metrics()
177+
# resp = self.metrics()
178+
self.logger.error(MSG['EndpointNotSupported'].
179+
format(cherrypy.request.script_name))
180+
raise cherrypy.HTTPError(400, ERR[400])
181+
182+
# /endpoints
183+
elif '/endpoints' == cherrypy.request.script_name:
184+
resp = self.endpoints.keys()
178185
cherrypy.response.headers['Content-Type'] = 'text/plain'
179186
resString = '\n'.join(resp) + '\n'
180187
return resString
181188

189+
# /labels
190+
elif '/labels' == cherrypy.request.script_name:
191+
resp = {}
192+
for k, v in self.endpoints.items():
193+
labels = self.TOPO.getSensorLabels(v)
194+
if labels:
195+
resp[k] = labels
196+
cherrypy.response.headers['Content-Type'] = 'application/json'
197+
resp = json.dumps(resp)
198+
return resp
199+
200+
# /filters
201+
elif '/filters' == cherrypy.request.script_name:
202+
resp = {}
203+
all_filters = self.TOPO.allFiltersMaps
204+
for k, v in self.endpoints.items():
205+
if v in all_filters:
206+
resp[k] = all_filters[v]
207+
cherrypy.response.headers['Content-Type'] = 'application/json'
208+
resp = json.dumps(resp)
209+
return resp
210+
182211
else:
183212
self.logger.error(MSG['EndpointNotSupported'].
184213
format(cherrypy.request.script_name))

source/zimonGrafanaIntf.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,13 +351,31 @@ def main(argv):
351351
args.get('rawCounters', False))
352352
exporter.endpoints.update(ENDPOINTS.get('prometheus',
353353
{}))
354-
# query for all metrics (PrometheusExporter)
354+
# test connection (PrometheusExporter)
355355
cherrypy.tree.mount(exporter, '/metrics',
356356
{'/':
357357
{'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
358358
}
359359
)
360360
if len(exporter.endpoints) > 0:
361+
# query for list of supported endpoints (prometheusExporter)
362+
cherrypy.tree.mount(exporter, '/endpoints',
363+
{'/':
364+
{'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
365+
}
366+
)
367+
# query for active sensors endpoint labels (prometheusExporter)
368+
cherrypy.tree.mount(exporter, '/labels',
369+
{'/':
370+
{'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
371+
}
372+
)
373+
# query for active sensors endpoint filters (prometheusExporter)
374+
cherrypy.tree.mount(exporter, '/filters',
375+
{'/':
376+
{'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
377+
}
378+
)
361379
for endpoint in exporter.endpoints.keys():
362380
cherrypy.tree.mount(exporter, endpoint,
363381
{'/':

0 commit comments

Comments
 (0)