[update] html writer creates hourly figures of all stations
This commit is contained in:
parent
18dac062ef
commit
c723a32274
@ -12,6 +12,7 @@ verbosity: 0
|
||||
reread_parameters: True # reread parameters file (change parameters on runtime, not for itself/GUI refresh/datapath)
|
||||
track_changes: True # tracks all changes since GUI startup by text highlighting (GUI only)
|
||||
dt_thresh: [300, 1800] # threshold (s) for timing delay colourisation (yellow/red)
|
||||
html_figures: True # Create html figure directory and links
|
||||
|
||||
POWBOX:
|
||||
pb_ok: 1 # Voltage for PowBox OK
|
||||
|
@ -17,4 +17,4 @@ export MKL_NUM_THREADS=1
|
||||
export NUMEXPR_NUM_THREADS=1
|
||||
export OMP_NUM_THREADS=1
|
||||
|
||||
python survBot.py -html '/home/marcel/public_html/survBot_out.html'
|
||||
python survBot.py -html '/home/marcel/public_html/'
|
||||
|
44
survBot.py
44
survBot.py
@ -12,6 +12,7 @@ import argparse
|
||||
import time
|
||||
from datetime import timedelta
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
from obspy import read, UTCDateTime, Stream
|
||||
from obspy.clients.filesystem.sds import Client
|
||||
@ -55,6 +56,7 @@ class SurveillanceBot(object):
|
||||
self.parameter_path = parameter_path
|
||||
self.update_parameters()
|
||||
self.starttime = UTCDateTime()
|
||||
self.plot_hour = self.starttime.hour
|
||||
self.outpath_html = outpath_html
|
||||
self.filenames = []
|
||||
self.filenames_read = []
|
||||
@ -220,16 +222,20 @@ class SurveillanceBot(object):
|
||||
:param refresh_period: Update every x seconds
|
||||
:return:
|
||||
'''
|
||||
first_exec = True
|
||||
status = 'ok'
|
||||
while status == 'ok' and self.refresh_period > 0:
|
||||
status = self.execute_qc()
|
||||
if self.outpath_html:
|
||||
self.write_html_table()
|
||||
if self.parameters.get('html_figures'):
|
||||
self.write_html_figures(check_plot_time=not(first_exec))
|
||||
else:
|
||||
self.print_analysis()
|
||||
time.sleep(self.refresh_period)
|
||||
if not self.outpath_html:
|
||||
self.clear_prints()
|
||||
first_exec = False
|
||||
|
||||
def console_print(self, itemlist, str_len=21, sep='|', seplen=3):
|
||||
assert len(sep) <= seplen, f'Make sure seperator has less than {seplen} characters'
|
||||
@ -240,8 +246,41 @@ class SurveillanceBot(object):
|
||||
string += item.center(str_len) + sr
|
||||
self.print(string, flush=False)
|
||||
|
||||
def check_plot_hour(self):
|
||||
''' Check if new hour started '''
|
||||
current_hour = UTCDateTime().hour
|
||||
if not current_hour > self.plot_hour:
|
||||
return False
|
||||
if current_hour == 23:
|
||||
self.plot_hour = 0
|
||||
else:
|
||||
self.plot_hour += 1
|
||||
return True
|
||||
|
||||
def get_fig_path_abs(self, st_id):
|
||||
return pjoin(self.outpath_html, self.get_fig_path_rel(st_id))
|
||||
|
||||
def get_fig_path_rel(self, st_id):
|
||||
return os.path.join('figures', f'{st_id.rstrip(".")}.png')
|
||||
|
||||
def write_html_figures(self, check_plot_time=True):
|
||||
""" Write figures for html, right now hardcoded hourly """
|
||||
if check_plot_time and not self.check_plot_hour():
|
||||
return
|
||||
|
||||
for st_id in self.station_list:
|
||||
fig = plt.figure(figsize=(16, 9))
|
||||
fnout = self.get_fig_path_abs(st_id)
|
||||
st = self.data.get(st_id)
|
||||
if st:
|
||||
st.plot(fig=fig, show=False, draw=False, block=False, equal_scale=False, method='full')
|
||||
ax = fig.axes[0]
|
||||
ax.set_title(f'Hourly refreshed plot at (UTC) {UTCDateTime.now().strftime("%Y-%m-%d %H:%M:%S")}')
|
||||
fig.savefig(fnout, dpi=150., bbox_inches='tight')
|
||||
plt.close(fig)
|
||||
|
||||
def write_html_table(self, default_color='#e6e6e6'):
|
||||
fnout = self.outpath_html
|
||||
fnout = pjoin(self.outpath_html, 'survBot_out.html')
|
||||
if not fnout:
|
||||
return
|
||||
try:
|
||||
@ -259,7 +298,8 @@ class SurveillanceBot(object):
|
||||
|
||||
# Write all cells
|
||||
for st_id in self.station_list:
|
||||
col_items = [dict(text=st_id.rstrip('.'), color=default_color)]
|
||||
fig_name = self.get_fig_path_rel(st_id)
|
||||
col_items = [dict(text=st_id.rstrip('.'), color=default_color, image_src=fig_name)]
|
||||
for check_key in self.keys:
|
||||
status_dict, detailed_dict = self.analysis_results.get(st_id)
|
||||
status = status_dict.get(check_key)
|
||||
|
@ -42,7 +42,10 @@ def write_html_row(fobj, items, html_key='td'):
|
||||
color = item.get('color')
|
||||
# check for black background of headers (shouldnt happen anymore)
|
||||
color = '#e6e6e6' if color == '#000000' else color
|
||||
fobj.write(2 * default_space + f'<{html_key} bgcolor="{color}" title="{tooltip}">' + text + f'</{html_key}>\n')
|
||||
image_src = item.get('image_src')
|
||||
image_str = f'<a href="{image_src}">' if image_src else ''
|
||||
fobj.write(2 * default_space + f'<{html_key} bgcolor="{color}" title="{tooltip}"> {image_str}'
|
||||
+ text + f'</{html_key}>\n')
|
||||
fobj.write(default_space + '</tr>\n')
|
||||
|
||||
def get_print_title_str(parameters):
|
||||
|
Loading…
Reference in New Issue
Block a user