add select_experiment
This commit is contained in:
82
webserver.py
82
webserver.py
@ -88,7 +88,6 @@ def get_update(path=None):
|
||||
logging.info('CLOSED %s', client.id)
|
||||
print('CLOSE client')
|
||||
instrument.remove(client)
|
||||
pass
|
||||
except Exception as e:
|
||||
logging.info('error')
|
||||
logging.error('%s', traceback.format_exc())
|
||||
@ -211,21 +210,21 @@ def replace_by_empty(file):
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def main():
|
||||
def default():
|
||||
return general_file('SEAWebClient.html')
|
||||
|
||||
|
||||
@app.route('/select')
|
||||
def default():
|
||||
@app.route('/select_instrument')
|
||||
def select_instrument():
|
||||
out = ['''<html><body><table>
|
||||
<style>
|
||||
th {
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
<tr><th>Instrument</th><th colspan=99>Devices</th></tr>''']
|
||||
<tr><th>instrument</th><th colspan=99>devices</th></tr>''']
|
||||
result = {}
|
||||
for stream, tags in instrument.get_stream_tags().items():
|
||||
for stream, tags in instrument.get_streams().items():
|
||||
ins = tags.get('instrument', '0')
|
||||
result.setdefault(ins, []).append((stream, tags.get('device')))
|
||||
bare_streams = result.pop('0', [])
|
||||
@ -235,7 +234,76 @@ th {
|
||||
out.append('</tr>')
|
||||
for stream, device in bare_streams:
|
||||
out.append(f'<tr><td><a href="/?srv={stream}">{stream}</a></td><td>{device}</td><tr>')
|
||||
out.extend(['</table></body?</html>', ''])
|
||||
out.extend(['</table></body></html>', ''])
|
||||
return '\n'.join(out)
|
||||
|
||||
|
||||
@app.route('/select_experiment')
|
||||
def select_experiment():
|
||||
out = ['''<html><body>
|
||||
<style>
|
||||
th {
|
||||
text-align: left;
|
||||
background-color: #cccccc;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
</style><table>
|
||||
''']
|
||||
showtitle = 0
|
||||
ONEMONTH = 30 * 24 * 3600
|
||||
|
||||
def title(text):
|
||||
out.append(f'<tr><td colspan=2><b>{text}</b></td></tr>')
|
||||
|
||||
# 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 instrument.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))
|
||||
args = ['='.join(key)]
|
||||
if end > now:
|
||||
if begdate == today:
|
||||
daterange = f'since {time.strftime("%H:%M", time.localtime(beg))}'
|
||||
else:
|
||||
daterange = f'since {begdate}'
|
||||
if showtitle == 0:
|
||||
title('currently running')
|
||||
showtitle = 1
|
||||
else:
|
||||
daterange = begdate if begdate == enddate else f'{begdate}...{enddate}'
|
||||
if end > now - ONEMONTH:
|
||||
if showtitle == 1:
|
||||
title('older than 30 days')
|
||||
showtitle = 2
|
||||
|
||||
print('A', args)
|
||||
out.append(f'<tr><th><a href="/?{"&".join(args)}">{key[1]} / {" ".join(devices)}</a></th>')
|
||||
out.append(f'<td>{daterange}</td></tr>')
|
||||
if timerange:
|
||||
out.append(f'<h3><a href="/select_experiment?time=all">earlier dates</a></h3><br>')
|
||||
out.extend(['</table></body></html>', ''])
|
||||
except Exception as e:
|
||||
logging.error('%s', traceback.format_exc())
|
||||
circularlog.log()
|
||||
out = [f"ERROR {e!r}"]
|
||||
|
||||
return '\n'.join(out)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user