Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
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'))