def handleEvent(eventname, **kwargs): from emonitor.extensions import scheduler if eventname == "client_income": return kwargs params = dict() try: hdl = [ hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.monitorserver.MonitorServer' ][0] for p in [ v[1] for v in hdl.getParameterValues('in') if v[1] != '' ]: # required parameters for method if p in kwargs: params[p] = kwargs[p] except: hdl = [] logger.error('handleEvent: {}'.format(traceback.format_exc())) if kwargs['mode'] != 'test': for monitorlayout in MonitorLayout.getLayouts(): try: if monitorlayout.trigger == eventname: for p in hdl.getParameterValues('in'): if p[0] == 'in.condition' and p[ 1] == '!activealarm': if Alarm.getActiveAlarms().count() == 0: MonitorServer.changeLayout( monitorlayout.monitor.clientid, monitorlayout.id, **params) scheduler.deleteJobForEvent('changeLayout') MonitorServer.changeLayout( monitorlayout.monitor.clientid, monitorlayout.id, **params) if monitorlayout.nextid != 0: scheduler.add_job( MonitorServer.changeLayout, next_run_time=datetime.datetime.fromtimestamp( time.time() + monitorlayout.maxtime), args=[ monitorlayout.monitor.clientid, monitorlayout.nextid, params ]) except: pass finally: pass if 'time' not in kwargs.keys(): kwargs['time'] = [] kwargs['time'].append('monitorserver: message sent') return kwargs
def handleEvent(eventname, **kwargs): from emonitor.extensions import scheduler if eventname == "client_income": return kwargs params = dict() try: hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.monitorserver.MonitorServer'][0] for p in [v[1] for v in hdl.getParameterValues('in') if v[1] != '']: # required parameters for method if p in kwargs: params[p] = kwargs[p] except: hdl = [] logger.error('handleEvent: {}'.format(traceback.format_exc())) if kwargs['mode'] != 'test': for monitorlayout in MonitorLayout.getLayouts(): try: if monitorlayout.trigger == eventname: for p in hdl.getParameterValues('in'): if p[0] == 'in.condition' and p[1] == '!activealarm': if Alarm.getActiveAlarms().count() == 0: MonitorServer.changeLayout(monitorlayout.monitor.clientid, monitorlayout.id, **params) scheduler.deleteJobForEvent('changeLayout') MonitorServer.changeLayout(monitorlayout.monitor.clientid, monitorlayout.id, **params) if monitorlayout.nextid != 0: scheduler.add_job(MonitorServer.changeLayout, next_run_time=datetime.datetime.fromtimestamp(time.time() + monitorlayout.maxtime), args=[monitorlayout.monitor.clientid, monitorlayout.nextid, params]) except: pass finally: pass if 'time' not in kwargs.keys(): kwargs['time'] = [] kwargs['time'].append('monitorserver: message sent') return kwargs
def monitorContent(clientid=0): """ Create monitor area under url */monitor* :return: rendered template */emonitor/monitor/templates/monitor.html* """ alarmid = None footer = 0 count = [] pos = 0 if 'alarmid' in request.args: # eval active alarms or defined id alarmid = int(request.args.get('alarmid')) if len(Alarm.getActiveAlarms()) > 0: count = Alarm.getActiveAlarms() elif len(Alarm.getActiveAlarms()) > 0: alarmid = Alarm.getActiveAlarms()[0].id count = Alarm.getActiveAlarms() alarm = Alarm.getAlarms(id=alarmid) defmonitor = Monitor.getMonitors(clientid=int(clientid)) try: layout = defmonitor.currentlayout except AttributeError: return render_template('monitor-test.html') if 'layoutid' in request.args: # eval current layout layout = defmonitor.layout(int(request.args.get('layoutid'))) else: try: layout = defmonitor.getLayouts(triggername='default')[0] except: pass if len(count) > 0: # eval layout for current and next alarm footer = 1 nextalarm = currentalarm = count[0] for c in count: if c.id == alarmid: pos = count.index(c) + 1 currentalarm = count[(pos - 1) % len(count)] nextalarm = count[pos % len(count)] for j in [job for job in scheduler.get_jobs(name='changeLayout') if "'alarmid', %s" % c.id in str(job.args)]: scheduler.remove_job(j.id) # layout changes for given alarm for l in defmonitor.getLayouts(triggername='alarm_added'): for tr in l.trigger.split(';'): # support more than one trigger for layout if ('.' in tr and len(count) >= 1 and tr.split('.')[-1] == currentalarm.get('alarmtype')) or ('.' not in tr and currentalarm.get('alarmtype', '') == ""): layout = l break if len(count) > 1: for l in defmonitor.getLayouts(triggername='alarm_added'): for tr in l.trigger.split(';'): # support more than one trigger for layout if ('.' in tr and tr.split('.')[-1] == nextalarm.get('alarmtype')) or ('.' not in tr and nextalarm.get('alarmtype', '') == ""): if int(l.mintime) != 0: #scheduler.add_job(monitorserver.changeLayout, next_run_time=datetime.datetime.fromtimestamp(time.time() + float(l.mintime)), args=[defmonitor.clientid, l.id, [('alarmid', nextalarm.id), ('monitorid', defmonitor.id)]]) scheduler.add_job(monitorserver.changeLayout, next_run_time=datetime.datetime.fromtimestamp(time.time() + float(l.mintime)), args=[defmonitor.clientid, l.id], kwargs=dict(alarmid=nextalarm.id)) # TODO # render content for monitor content = '<div id="content">%s</div>' % layout.htmllayout for w in re.findall('\[\[\s?(.+?)\s?\]\]', content): for widgets in current_app.blueprints['widget'].modules: for widget in widgets.getMonitorWidgets(): if widget.getName() == w: params = widget.addParameters(alarmid=alarmid, alarm=alarm, clientid=clientid, layout=layout) if params and 'footer' in params and params['footer'] == 1: footer = 1 content = content.replace(u'[[%s]]' % w, widget.getHTML(request)) return render_template('monitor.html', content=content, clientid=clientid, theme=layout.theme, activecount=len(count), footer=footer, position=pos, app_name=current_app.config.get('PROJECT'), app_version=current_app.config.get('APP_VERSION'))