do always sort

This commit is contained in:
l_samenv
2025-02-11 15:59:27 +01:00
parent ce205f47a2
commit 1712415f20
2 changed files with 13 additions and 14 deletions

View File

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

1
t.py
View File

@ -1,6 +1,5 @@
import time import time
import numpy as np import numpy as np
import pandas as pd
from influx import InfluxDBWrapper, NamedTuple, RegExp from influx import InfluxDBWrapper, NamedTuple, RegExp
DAY = 24 * 3600 DAY = 24 * 3600