Skip to content

Commit 2ebb875

Browse files
committed
add params support
Signed-off-by: hwassman <[email protected]>
1 parent 6ed391f commit 2ebb875

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

source/prometheus.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def format_response(self, data) -> [str]:
7575
return resp
7676

7777
@execution_time()
78-
def metrics(self, export_sensors: Optional[list] = None):
78+
def metrics(self, export_sensors: Optional[list] = None, filters: Optional[dict] = None):
7979
export_sensors = export_sensors or []
8080
resp = []
8181

@@ -84,18 +84,18 @@ def metrics(self, export_sensors: Optional[list] = None):
8484
respList = self.format_response(collector.cached_metrics)
8585
resp.extend(respList)
8686
elif len(export_sensors) > 0:
87-
resp = self._metrics(export_sensors)
87+
resp = self._metrics(export_sensors, filters)
8888
else:
8989
resp = self._metrics(self.static_sensors_list)
9090

9191
return resp
9292

93-
def _metrics(self, export_sensors: list):
93+
def _metrics(self, export_sensors: list, filters: Optional[dict] = None):
9494
resp = []
9595
collectors = []
9696

9797
for sensor in export_sensors:
98-
collector = self.build_collector(sensor)
98+
collector = self.build_collector(sensor, filters)
9999
collectors.append(collector)
100100

101101
for collector in collectors:
@@ -121,27 +121,30 @@ def initialize_cache_collectors(self):
121121
name=thread_name).subscribe()
122122

123123
@cond_execution_time(enabled=analytics.inspect)
124-
def build_collector(self, sensor) -> SensorCollector:
124+
def build_collector(self, sensor: str, filters: Optional[dict] = None) -> SensorCollector:
125125

126126
period = self.md.getSensorPeriod(sensor)
127127
if period < 1:
128128
self.logger.error(MSG['SensorDisabled'].format(sensor))
129129
raise cherrypy.HTTPError(400, MSG['SensorDisabled'].format(sensor))
130130

131-
attrs = {}
131+
attrs = {'sensor': sensor, 'period': period}
132132

133-
if self.raw_data:
134-
attrs = {'sensor': sensor, 'period': period,
135-
'nsamples': period, 'rawData': True}
136-
elif "counter" in self.TOPO.getSensorMetricTypes(sensor).values():
137-
attrs = {'sensor': sensor, 'period': period,
138-
'nsamples': period, 'rawData': True}
133+
if self.raw_data or "counter" in self.TOPO.getSensorMetricTypes(sensor).values():
134+
attrs.update({'nsamples': period, 'rawData': True})
139135
self.logger.debug(MSG['SensorForceRawData'].format(sensor))
140136
else:
141-
attrs = {'sensor': sensor, 'period': period,
142-
'nsamples': 1}
137+
attrs.update({'nsamples': 1})
138+
if filters:
139+
for key, value in filters.items():
140+
if isinstance(value, list):
141+
filters[key] = "|".join(value)
142+
self.logger.debug(f"Collector filters: {filters}")
143+
attrs['filters'] = filters
144+
143145
request = QueryPolicy(**attrs)
144146
collector = SensorCollector(sensor, period, self.logger, request)
147+
collector.validate_query_filters()
145148

146149
# self.logger.trace(f'request instance {str(request.__dict__)}')
147150
# self.logger.trace(f'Created Collector instance {str(collector.__dict__)}')
@@ -154,6 +157,7 @@ def GET(self, **params):
154157
resp = []
155158

156159
self.logger.trace(f"Request headers:{str(cherrypy.request.headers)}")
160+
self.logger.info(f"Request params:{str(params)}")
157161
conn = cherrypy.request.headers.get('Host').split(':')
158162
if len(conn) == 2 and int(conn[1]) != int(self.port):
159163
self.logger.error(MSG['EndpointNotSupportedForPort'].
@@ -163,7 +167,7 @@ def GET(self, **params):
163167
if self.endpoints and self.endpoints.get(cherrypy.request.script_name,
164168
None):
165169
sensor = self.endpoints[cherrypy.request.script_name]
166-
resp = self.metrics([sensor])
170+
resp = self.metrics([sensor], params)
167171
cherrypy.response.headers['Content-Type'] = 'text/plain'
168172
resString = '\n'.join(resp) + '\n'
169173
return resString

0 commit comments

Comments
 (0)