do always sort
This commit is contained in:
26
influx.py
26
influx.py
@ -292,7 +292,7 @@ class InfluxDBWrapper:
|
||||
print(msg)
|
||||
|
||||
reader = self._client.query_api().query_csv(msg)
|
||||
sort = False
|
||||
print('CSV')
|
||||
converters = None
|
||||
group = None
|
||||
column_names = None
|
||||
@ -303,6 +303,7 @@ class InfluxDBWrapper:
|
||||
for row in reader:
|
||||
if not row:
|
||||
continue
|
||||
print(row)
|
||||
if row[0]:
|
||||
if row[0] == '#datatype':
|
||||
converters = {i: CONVERTER.get(d) for i, d in enumerate(row) if i > 2}
|
||||
@ -311,6 +312,7 @@ class InfluxDBWrapper:
|
||||
group = row
|
||||
continue
|
||||
if column_names is None:
|
||||
print('COL', row)
|
||||
column_names = row
|
||||
keys = {}
|
||||
for col, (name, grp) in enumerate(zip(column_names, group)):
|
||||
@ -319,8 +321,6 @@ class InfluxDBWrapper:
|
||||
# if name in keynames or (columns is None and name not in dropcols):
|
||||
if name in keynames or columns is None:
|
||||
keys[col] = converters.pop(col)
|
||||
else:
|
||||
sort = True
|
||||
valuecls = NamedTuple([row[i] for i in converters])
|
||||
keycls = NamedTuple([row[i] for i in keys])
|
||||
continue
|
||||
@ -328,23 +328,22 @@ class InfluxDBWrapper:
|
||||
# new table, new key
|
||||
table = row[2]
|
||||
key = keycls(f(row[i]) for i, f in keys.items())
|
||||
print('new table', table, key)
|
||||
if result.get(key) is None:
|
||||
result[key] = []
|
||||
elif not sort:
|
||||
# this should not happen
|
||||
sort = True
|
||||
|
||||
result[key].append(valuecls(f(row[i]) for i, f in converters.items()))
|
||||
if last:
|
||||
print('LAST')
|
||||
for key, table in result.items():
|
||||
result[key], = table
|
||||
elif sort:
|
||||
else:
|
||||
for table in result.values():
|
||||
table.sort()
|
||||
return result
|
||||
|
||||
def curves(self, start=None, stop=None, measurement=None, field='float', interval=None,
|
||||
add_prev=3600, add_end=False, **tags):
|
||||
def curves(self, start=None, stop=None, measurement=('*.value', '*.target'), field='float',
|
||||
interval=None, add_prev=3600, add_end=True, **tags):
|
||||
"""get curves
|
||||
|
||||
:param start: start time (default: one month ago)
|
||||
@ -359,14 +358,15 @@ class InfluxDBWrapper:
|
||||
where <tuple of keys> and <row> are NamedTuple
|
||||
<row> is (<timestamp>, <value>)
|
||||
|
||||
when field='float' (the default), the returned values are either a floats or None
|
||||
when _field='float' (the default), the returned values are either a floats or None
|
||||
"""
|
||||
for key, val in zip(('_measurement', '_field'), (measurement, field)):
|
||||
tags.setdefault(key, val)
|
||||
tags.setdefault('_measurement', measurement)
|
||||
tags.setdefault('_field', field)
|
||||
start, stop = abs_range(start, stop)
|
||||
rstart, rstop = round_range(start, stop, interval)
|
||||
if rstart < rstop:
|
||||
result = self.query(rstart, rstop, interval, columns=[], **tags)
|
||||
result = self.query(rstart, rstop, interval, columns=None, **tags)
|
||||
# result = self.query(rstart, rstop, interval, columns=['stream', 'device'], **tags)
|
||||
else:
|
||||
result = {}
|
||||
if add_prev:
|
||||
|
Reference in New Issue
Block a user