Skip to content

Commit cb05da2

Browse files
committed
opentsdb_arrays_true
Signed-off-by: hwassman <[email protected]>
1 parent f527cee commit cb05da2

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

source/collector.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def _get_sensor_labels(self):
205205

206206
@classattributes(dict(metricsaggr=None, filters=None, grouptags=None,
207207
start='', end='', nsamples=0, duration=0,
208-
dsBucketSize=0, dsOp='', rawData=False),
208+
dsBucketSize=0, dsOp='', rawData=False, dpsArrays=False),
209209
['sensor', 'period'])
210210
class QueryPolicy(object):
211211

@@ -372,10 +372,16 @@ def _collect(self):
372372
list(self.request.metricsaggr.keys())[0]))
373373
rows = res.downsampleResults(self.dsInterval, self.request.dsOp)
374374

375-
columnValues = defaultdict(dict)
376-
for row in rows:
377-
for value, columnInfo in zip(row.values, res.columnInfos):
378-
columnValues[columnInfo][row.tstamp] = value
375+
if self.request.dpsArrays:
376+
columnValues = defaultdict(list)
377+
for row in rows:
378+
for value, columnInfo in zip(row.values, res.columnInfos):
379+
columnValues[columnInfo].append([row.tstamp, value])
380+
else:
381+
columnValues = defaultdict(dict)
382+
for row in rows:
383+
for value, columnInfo in zip(row.values, res.columnInfos):
384+
columnValues[columnInfo][row.tstamp] = value
379385

380386
for columnInfo, dps in columnValues.items():
381387
ts = TimeSeries(columnInfo, dps, self.filtersMap, self.labels)

source/opentsdb.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
from collections import defaultdict
2828
from collector import SensorCollector, QueryPolicy
2929
from utils import getTimeMultiplier, execution_time, cond_execution_time
30-
from typing import List
30+
from typing import List, TypeVar
31+
32+
T = TypeVar('T', dict, list)
3133

3234

3335
class OpenTsdbApi(object):
@@ -158,6 +160,9 @@ def build_collector(self, jreq: dict) -> SensorCollector:
158160
args['filters'] = filters
159161
args['grouptags'] = grouptags
160162

163+
if 'arrays' in jreq:
164+
args['dpsArrays'] = jreq['arrays']
165+
161166
args['rawData'] = q.get('explicitTags', False)
162167

163168
args['sensor'] = sensor
@@ -379,7 +384,7 @@ def GET(self, **params):
379384
@cherrypy.config(**{'tools.json_in.force': False})
380385
@cherrypy.tools.json_in() # @UndefinedVariable
381386
@cherrypy.tools.json_out() # @UndefinedVariable
382-
def POST(self):
387+
def POST(self,**params):
383388
''' Process POST. tools.json_in.force is set to False for
384389
compatability between versions of grafana < 3 and version 3.'''
385390

@@ -399,6 +404,9 @@ def POST(self):
399404
self.logger.error(MSG['QueryError'].format('empty'))
400405
raise cherrypy.HTTPError(400, ERR[400])
401406

407+
if params and params.get('arrays') == 'true':
408+
jreq['arrays'] = True
409+
402410
return self.query(jreq)
403411

404412
def OPTIONS(self):
@@ -446,7 +454,7 @@ def __init__(self, inputQuery, showQuery=False,
446454
self.tags = tags or defaultdict(list)
447455
self.aggregatedTags = aggrTags or []
448456

449-
def to_dict(self, dps: dict = None):
457+
def to_dict(self, dps: T = None):
450458
''' Converts the SingleTimeSeriesResponse object to dict. '''
451459
res = self.__dict__
452460
# Since a single Timeseries might have a huge number of datapoints (dps),

0 commit comments

Comments
 (0)