77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
import time
|
|
import numpy as np
|
|
from influx import InfluxDBWrapper, NamedTuple, RegExp
|
|
|
|
DAY = 24 * 3600
|
|
|
|
token = "zqDbTcMv9UizfdTj15Fx_6vBetkM5mXN56EE9CiDaFsh7O2FFWZ2X4VwAAmdyqZr3HbpIr5ixRju07-oQmxpXw=="
|
|
|
|
db = InfluxDBWrapper('http://pc16392:8086', token, 'linse', 'curve-test')
|
|
|
|
print("""
|
|
qry([start], [stop], [interval=...,] [last=True,] [columns=[...],] [<tag>=<value>, ] ...)
|
|
crv([start], [stop], [mod.par], ['float'], [interval=...,] [add_prev=False,] [add_end=True,] [<tag>=<value>, ] ...)
|
|
""")
|
|
|
|
offset = (time.time() // 3600) * 3600
|
|
result = {}
|
|
|
|
|
|
def prt():
|
|
for i, (key, curve) in enumerate(result.items()):
|
|
if i > 5:
|
|
print('--- ...')
|
|
break
|
|
print('---', key, list(curve[0]._idx_by_name))
|
|
n = len(curve)
|
|
if n > 7:
|
|
curves = [curve[:3], None, curve[-3:]]
|
|
else:
|
|
curves = [curve]
|
|
for crv in curves:
|
|
if crv is None:
|
|
print('...')
|
|
else:
|
|
for row in crv:
|
|
print(round(row[0] - offset, db.timedig), row[1:])
|
|
|
|
|
|
def qry(*args, **kwds):
|
|
global result
|
|
result = db.query(*args, **kwds)
|
|
prt()
|
|
|
|
|
|
def crv(*args, **kwds):
|
|
global result
|
|
result = db.curves(*args, **kwds)
|
|
prt()
|
|
|
|
|
|
def sry():
|
|
global result
|
|
res = db.query(-DAY * 365, interval=DAY, _field='float',
|
|
device=None, stream=None, _measurement=None)
|
|
result = {} # dict (device, stream) of list of [start, end, set of params]
|
|
for key, table in res.items():
|
|
assert table.key_names == ('device', 'stream', '_measurement')
|
|
device, stream, param = key
|
|
for row in table:
|
|
start = row[0] - 3600
|
|
result.setdefault((start, device, stream), set()).add(param)
|
|
prev_data = {}
|
|
summary = []
|
|
for (start, device, stream), pset in sorted(result.items()):
|
|
prev = prev_data.get((device, stream))
|
|
if prev is None or start > prev[1]:
|
|
if prev:
|
|
print('PREV', device, stream, start - prev[1])
|
|
prev_data[device, stream] = prev = [start, start + 3600, pset]
|
|
summary.append([start, device, stream, prev])
|
|
else:
|
|
prev[1] = start + 3600
|
|
prev[2].update(pset)
|
|
for start, device, stream, (_, end, pset) in sorted(summary):
|
|
st = time.strftime('%Y-%m-%d %H:%M', time.localtime(start))
|
|
print(st, (end - start) / 3600., device, stream, len(pset))
|