Skip to content

Commit 67a66df

Browse files
authored
Merge pull request #173 from Helene/format_response
Internal improvements
2 parents 9f3fd0f + 6e4e069 commit 67a66df

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

source/collector.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ def parse_tags(self, filtersMap):
5353
ident = [key.parent]
5454
ident.extend(key.identifier)
5555
logger.trace(MSG['ReceivAttrValues'].format(
56-
'Single ts identifiers', ', '.join(ident)))
56+
'Single ts identifiers', '|'.join(ident)))
5757
found = False
5858
for filtersDict in filtersMap:
5959
if set(filtersDict.values()) == set(ident):
60-
logger.trace(MSG['ReceivAttrValues'].format(
61-
'filtersKeys', ', '.join(filtersDict.keys())))
60+
# logger.trace(MSG['ReceivAttrValues'].format(
61+
# 'filtersKeys', ', '.join(filtersDict.keys())))
6262
if len(self.columnInfo.keys) == 1:
6363
self.tags = filtersDict
6464
else:
@@ -72,12 +72,11 @@ def parse_tags(self, filtersMap):
7272
local_cache.union(ident)
7373
updated_size = len(local_cache)
7474
if updated_size > cache_size:
75-
logger.trace(MSG['NewKeyDetected'].format(ident))
76-
local_cache.append(ident)
75+
logger.trace(MSG['NewKeyDetected'].format('|'.join(ident)))
7776
md = MetadataHandler()
7877
Thread(name='AdHocMetaDataUpdate', target=md.update).start()
7978
else:
80-
logger.trace(MSG['NewKeyAlreadyReported'].format(ident))
79+
logger.trace(MSG['NewKeyAlreadyReported'].format('|'.join(ident)))
8180

8281
for _key, _values in tagsDict.items():
8382
if len(_values) > 1:
@@ -426,7 +425,6 @@ def validate_query_filters(self):
426425
400, MSG['AttrNotValid'].format('filter'))
427426

428427
def validate_group_tags(self):
429-
430428
# check groupBy settings
431429
if self.request.grouptags:
432430
filter_keys = set()

source/opentsdb.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,16 @@ def TOPO(self):
5151

5252
def format_response(self, data: dict, jreq: dict) -> List[dict]:
5353
respList = []
54-
for name, metric in data.items():
54+
metrics = set(data.values())
55+
for metric in metrics:
5556
for st in metric.timeseries:
56-
res = SingleTimeSeriesResponse(jreq.get('inputQuery'), st.dps,
57+
res = SingleTimeSeriesResponse(jreq.get('inputQuery'),
5758
jreq.get('showQuery'),
5859
jreq.get('globalAnnotations'),
5960
st.tags, st.aggregatedTags)
60-
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
61-
self.logger.trace(f'OpenTSDB queryResponse: {str(res.__dict__)}')
62-
respList.append(res.__dict__)
61+
# self.logger.trace(f'OpenTSDB queryResponse for :
62+
# {data.keys()[0]} with {len(st.dps)} datapoints')
63+
respList.append(res.to_dict(st.dps))
6364
return respList
6465

6566
def query(self, jreq: dict) -> List[dict]:
@@ -101,9 +102,9 @@ def query(self, jreq: dict) -> List[dict]:
101102
self.logger.trace('Finished custom thread %r.' % collector.thread.name)
102103

103104
coll_resp = self.format_response(collector.metrics, request_data)
104-
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
105+
# cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
105106
resp.extend(coll_resp)
106-
107+
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
107108
return resp
108109

109110
def build_collector(self, jreq: dict) -> SensorCollector:
@@ -371,16 +372,25 @@ def parse_result_tags(self, identifiersMap):
371372
self.results.append(d)
372373

373374

374-
class SingleTimeSeriesResponse():
375+
class SingleTimeSeriesResponse(object):
375376

376-
def __init__(self, inputQuery, dps, showQuery=False,
377+
def __init__(self, inputQuery, showQuery=False,
377378
globalAnnotations=False, tags: dict = None,
378379
aggrTags: list = None):
379380
self.metric = inputQuery.get('metric')
380-
self.dps = dps
381+
self.dps = defaultdict()
381382
if showQuery:
382383
self.query = inputQuery
383384
if globalAnnotations:
384385
self.globalAnnotations = []
385386
self.tags = tags or defaultdict(list)
386387
self.aggregatedTags = aggrTags or []
388+
389+
def to_dict(self, dps: dict = None):
390+
''' Converts the SingleTimeSeriesResponse object to dict. '''
391+
res = self.__dict__
392+
# Since a single Timeseries might have a huge number of datapoints (dps),
393+
# first convert object to dict and then fetch the dict of dps to it
394+
if dps:
395+
res['dps'] = dps
396+
return res

0 commit comments

Comments
 (0)