''']
ONEMONTH = 30 * 24 * 3600
out.append('
direct link to instruments:
')
out.extend([f'{ins.upper()} \n'
for ins, port in instruments.items()])
if server.db.has_local:
out.append('')
class prev: # just a namesapce
title = None
legend = None
def change_title(text):
if text == prev.title:
return False
if prev.legend:
out.append(f'{prev.legend}
')
prev.legend = None
prev.title = text
out.append(f' {text}: |
')
return True
# TODO: sort this by (instrument / device) and list dates
# period format: Ymd..Ymd, Ymd (single date), Ymd..now, HM..now
try:
now = time.time()
timerange = flask.request.values.get('time')
if timerange == 'all':
starttime, endtime = None, None
elif timerange:
timerange = timerange.split(',')
starttime, endtime = [None if timerange[i] == '0' else int(timerange[i]) for i in (0, -1)]
else:
starttime, endtime = now - ONEMONTH, now
chunk_list = []
for key, chunk_dict in server.db.get_experiments(starttime, endtime).items():
for (streams, devices), chunks in chunk_dict.items():
chunk_list.extend((r[1], r[0], key, devices) for r in chunks)
chunk_list.sort(reverse=True)
for end, beg, key, devices in chunk_list:
today, begdate, enddate = (time.strftime("%Y-%m-%d", time.localtime(t)) for t in (now, beg, end))
port = None
if key[0] == 'instrument':
ins = key[1]
port = instruments.get(ins)
left = ins.upper()
else:
left = key[1] # shown in left column
args = ['='.join(key)]
remote = None if port is None else f'http://{ins}.psi.ch:{port}'
history_only = bool(remote)
if end > now:
if begdate == today:
daterange = f'since {time.strftime("%H:%M", time.localtime(beg))}'
else:
daterange = f'since {begdate}'
change_title('currently running')
else:
args.append(f'time={beg},{end}')
history_only = True
remote = None
daterange = begdate if begdate == enddate else f'{begdate}...{enddate}'
if end > now - ONEMONTH:
change_title('recently running (history graphics only)')
else:
change_title('older than 30 days')
if history_only:
args.append('hr=1')
def link(label):
return f'{label}'
label = " ".join(devices)
if remote:
prev.legend = ' | | linse-c*: history graphics only | '
out.append(f'{ins.upper()} | '
f'{label} | {link("linse-c*")} | ')
else:
out.append(f'
{link(left)} | {label} | ')
out.append(f'{daterange} |
')
if timerange:
out.append(f'
')
out.append('
')
out.extend(['', ''])
except Exception as e:
logging.error('%s', traceback.format_exc())
circularlog.log()
out = [f"ERROR {e!r}"]
return '\n'.join(out)
@app.route('/