Esempio n. 1
0
def getAdminData(self, **params):
    """
    Deliver admin content of module events (ajax)

    :return: rendered template as string or json dict
    """
    if request.args.get(
            'action') == 'getparams':  # event handler parameter sub form
        event = events.getEvents(name=request.args.get('event'))
        if request.args.get('handler') != '':
            handler = [
                hdl for hdl in event.getHandlerList()
                if hdl[0] == request.args.get('handler')
            ][0]  # defined
        else:
            return "- error, no handler given -"

        if request.args.get('id') != 'None':
            eventhandler = Eventhandler.getEventhandlers(
                request.args.get('id'))  # db
        else:
            eventhandler = Eventhandler(request.args.get('event'), '', '',
                                        '')  # db

        # previous parameters
        inparameters = eventhandler.getInParameters()
        return render_template('admin.events_data.html',
                               handler=handler,
                               eventhandler=eventhandler,
                               inparameters=inparameters)

    return ""
Esempio n. 2
0
 def getHandlers(self, handlerid=0):  # returns defined handlers (db) for event
     from emonitor.modules.events.eventhandler import Eventhandler
     if handlerid != 0:
         if Eventhandler:
             return Eventhandler.getEventhandlers(id=handlerid)
     else:
         if Eventhandler:
             return Eventhandler.getEventhandlers(event=self.name)
     return []
Esempio n. 3
0
 def getHandlers(self,
                 handlerid=0):  # returns defined handlers (db) for event
     from emonitor.modules.events.eventhandler import Eventhandler
     if handlerid != 0:
         if Eventhandler:
             return Eventhandler.getEventhandlers(id=handlerid)
     else:
         if Eventhandler:
             return Eventhandler.getEventhandlers(event=self.name)
     return []
Esempio n. 4
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for scripts class, adds own processing time

        :param eventname: *emonitor.modules.scripts.script.Script*
        :param kwargs: *time*
        :return: kwargs
        """
        stime = time.time()
        hdl = [
            hdl
            for hdl in Eventhandler.getEventhandlers(event=eventname)
            if hdl.handler == "emonitor.modules.scripts.script.Script"
        ]

        scriptname = ""
        if len(hdl) == 1:
            if "in.scriptname" in hdl[0].getParameterList("in"):
                scriptname = hdl[0].getParameterValue("in.scriptname")

        for m in Monitor.getMonitors():
            for l in m.getLayouts():
                if l.trigger == eventname:  # find client id for defined event
                    if "mode" in kwargs.keys() and kwargs["mode"] != "test":
                        monitorserver.sendMessage(str(m.id), "execute|%s" % scriptname)  # execute script on client

        if "time" not in kwargs[0]:
            kwargs["time"] = []
        kwargs["time"].append(u'scripts: script "{}" done in {} sec.'.format(scriptname, time.time() - stime))
        return kwargs
Esempio n. 5
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for OCR textmod module

        :param eventname: *file_added*
        :param kwargs: *time*, *incomepath*, *filename*
        :return: add *text* to kwargs
        """
        hdl = [
            hdl for hdl in Eventhandler.getEventhandlers(event=eventname)
            if hdl.handler == 'emonitor.modules.textmod.ocr.Ocr'
        ][0]
        in_params = [v[1] for v in hdl.getParameterValues('in')
                     ]  # required parameters for method
        if sorted(in_params) != sorted(
                list(set(in_params) & set(kwargs.keys()))):
            if 'time' not in kwargs.keys():
                kwargs['time'] = []
            kwargs['time'].append(
                u'replace: missing parameters for replace, nothing done.')
        else:
            p, t1 = Ocr.convertFileType(kwargs['incomepath'],
                                        kwargs['filename'])
            text, t2 = Ocr.convertText(kwargs['incomepath'],
                                       kwargs['filename'], p)
            if 'time' not in kwargs.keys():
                kwargs['time'] = []
            kwargs['time'].append(
                u'ocr: text conversion and recognition done in {} sec.'.format(
                    t1 + t2))
            kwargs['text'] = text
        return kwargs
Esempio n. 6
0
    def handleEvent(eventname, **kwargs):
        hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.communication.Communication'][0]
        if hdl:
            from emonitor.extensions import communication
            params = {}
            for p in hdl.getParameterValues('in'):
                params[p[0].split('.')[-1]] = p[1]
            if params["sendertype"] == 'telegram':
                for group, members in Settings.getYaml('telegramsettings').__dict__['groups'].items():
                    if group == params['group']:
                        from telegram import InlineKeyboardMarkup, InlineKeyboardButton
                        args = {'id': int(kwargs.get('alarmid')), 'style': params['style'], 'addressees': members[:-1], 'keyboard': InlineKeyboardMarkup, 'button': InlineKeyboardButton}
                        attrs = Alarm.getExportData('telegram', **args)
                        for member in members[:-1]:
                            if params['id'] == 'alarmid':  # send alarm details with location
                                try:
                                    if params.get('style') in ['text', 'details']:
                                        communication.telegram.sendMessage(member, attrs['details'], reply_markup=attrs['reply'])
                                    elif params.get('style') == 'venue':
                                        communication.telegram.sendVenue(member, attrs['text'], lat=attrs['lat'], lng=attrs['lng'], address=attrs['address'], reply_markup=attrs['reply'])
                                except:
                                    print "error handleEvent"
                                return kwargs

            elif params["sendertype"] == 'mailer':
                # TODO: implement mail notification
                pass

        return kwargs
def processFile(incomepath, filename):
    """
    run processing in test mode
    """
    params = dict(incomepath=incomepath, filename=filename, mode='test')
    handlers = events.getEvents('file_added').getHandlerList()
    dbhandlers = Eventhandler.getEventhandlers(event='file_added')
    for handler in dbhandlers:  # db
        for hdl in handlers:
            if handler.handler == hdl[0]:
                #p = hdl[1]('file_added', params)
                params.update(hdl[1]('file_added', **params))
                res = []
                for p in handler.getParameterList():
                    try:
                        res.append(u'{}:{}'.format(p, params[p.split('.')[1]]))
                    except:
                        try:
                            if p.split(u'.')[1] in params.keys():
                                res = [u'{}:{}'.format(p, params[p.split('.')[1]])]
                            else:
                                res = [u'error: key not found - {}'.format(p.split('.')[1])]
                                params['error'] = u'error: key not found - {}'.format(p.split('.')[1])
                        except:
                            import traceback
                            print traceback.format_exc()
                if u'error' in params.keys():
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1], error=params['error'])
                else:
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1])
    signal.send('alarm', 'testupload_start', result='done')
    return params
Esempio n. 8
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for scripts class, adds own processing time

        :param eventname: *emonitor.modules.scripts.script.Script*
        :param kwargs: *time*
        :return: kwargs
        """
        stime = time.time()
        hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.modules.scripts.script.Script']

        scriptname = ""
        if len(hdl) == 1:
            if "in.scriptname" in hdl[0].getParameterList('in'):
                scriptname = hdl[0].getParameterValue("in.scriptname")

        for m in Monitor.getMonitors():
            for l in m.getLayouts():
                if l.trigger == eventname:  # find client id for defined event
                    if 'mode' in kwargs.keys() and kwargs['mode'] != 'test':
                        monitorserver.sendMessage(str(m.id), 'execute|%s' % scriptname)  # execute script on client
                    else:
                        logger.info('script started TESTMODE: %s' % scriptname)

        if 'time' not in kwargs.keys():
            kwargs['time'] = []
        kwargs['time'].append(u'scripts: script "{}" done in {} sec.'.format(scriptname, time.time() - stime))
        return kwargs
Esempio n. 9
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
Esempio n. 10
0
    def handleEvent(eventname, **kwargs):
        hdl = [
            hdl for hdl in Eventhandler.getEventhandlers(event=eventname)
            if hdl.handler == 'emonitor.communication.Communication'
        ][0]
        if hdl:
            from emonitor.extensions import communication
            params = {}
            for p in hdl.getParameterValues('in'):
                params[p[0].split('.')[-1]] = p[1]
            if params["sendertype"] == 'telegram':
                for group, members in Settings.getYaml(
                        'telegramsettings').__dict__['groups'].items():
                    if group == params['group']:
                        from telegram import InlineKeyboardMarkup, InlineKeyboardButton
                        args = {
                            'id': int(kwargs.get('alarmid')),
                            'style': params['style'],
                            'addressees': members[:-1],
                            'keyboard': InlineKeyboardMarkup,
                            'button': InlineKeyboardButton
                        }
                        attrs = Alarm.getExportData('telegram', **args)
                        for member in members[:-1]:
                            if params[
                                    'id'] == 'alarmid':  # send alarm details with location
                                try:
                                    if params.get('style') in [
                                            'text', 'details'
                                    ]:
                                        communication.telegram.sendMessage(
                                            member,
                                            attrs['details'],
                                            reply_markup=attrs['reply'])
                                    elif params.get('style') == 'venue':
                                        communication.telegram.sendVenue(
                                            member,
                                            attrs['text'],
                                            lat=attrs['lat'],
                                            lng=attrs['lng'],
                                            address=attrs['address'],
                                            reply_markup=attrs['reply'])
                                except:
                                    print "error handleEvent"
                                return kwargs

            elif params["sendertype"] == 'mailer':
                # TODO: implement mail notification
                pass

        return kwargs
def getAdminData(self, **params):
    """
    Deliver admin content of module events (ajax)

    :return: rendered template as string or json dict
    """
    if request.args.get('action') == 'getparams':  # event handler parameter sub form
        event = events.getEvents(name=request.args.get('event'))
        if request.args.get('handler') != '':
            handler = [hdl for hdl in event.getHandlerList() if hdl[0] == request.args.get('handler')][0]  # defined
        else:
            return "- error, no handler given -"

        if request.args.get('id') != 'None':
            eventhandler = Eventhandler.getEventhandlers(request.args.get('id'))  # db
        else:
            eventhandler = Eventhandler(request.args.get('event'), '', '', '')  # db
            
        # previous parameters
        inparameters = eventhandler.getInParameters()
        return render_template('admin.events_data.html', handler=handler, eventhandler=eventhandler, inparameters=inparameters)

    return ""
Esempio n. 12
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for printer class, adds own processing time

        :param eventname: *emonitor.modules.printers.printers.Printers*
        :param kwargs: *mode*=*test*, *time*,
        :return: kwargs
        """
        stime = time.time()
        _printer = None
        hdl = [
            hdl for hdl in Eventhandler.getEventhandlers(event=eventname)
            if hdl.handler == 'emonitor.modules.printers.printers.Printers'
        ][0]
        if hdl:
            for p in hdl.getParameterValues('in'):
                if p[0] == 'in.printerid':
                    _printer = Printers.getPrinters(p[1])
                    break

        state = ""
        if _printer:
            try:
                if kwargs['mode'] != 'test':
                    if '{}id'.format(_printer.module[:-1]) in kwargs.keys(
                    ):  # add object and id if given
                        kwargs['id'] = kwargs['{}id'.format(
                            _printer.module[:-1])]
                        for key, cls in db.Model._decl_class_registry.iteritems(
                        ):
                            if key.lower() == _printer.module[:-1]:
                                kwargs['object'] = cls
                                break
                    _printer.doPrint(**dict(kwargs))
                else:
                    state = "(testmode)"
            except KeyError:
                state = "with errors"
        else:
            state = "with error 'no printer found'"

        if 'time' not in kwargs.keys():
            kwargs['time'] = []
        kwargs['time'].append(u"printer: print done {} in {} sec.".format(
            state,
            time.time() - stime))

        return kwargs
Esempio n. 13
0
def processFile(incomepath, filename):
    """
    run processing in test mode
    """
    params = dict(incomepath=incomepath, filename=filename, mode='test')
    handlers = events.getEvents('file_added').getHandlerList()
    dbhandlers = Eventhandler.getEventhandlers(event='file_added')
    from emonitor.extensions import db
    db.session.rollback()
    for handler in dbhandlers:  # db
        for hdl in handlers:
            if handler.handler == hdl[0]:
                res = []
                try:
                    params.update(hdl[1]('file_added', **params))
                except:
                    params.update({'error': u'<b>error in handler {}:</b><br/> <em>{}</em><br>'.format(hdl[0], traceback.format_exc().splitlines())})

                for p in handler.getParameterList():
                    try:
                        res.append(u'{}:\n{}'.format(p, params[p.split('.')[1]].strip()))
                    except:
                        try:
                            if p.split(u'.')[1] in params.keys():
                                res = [u'{}:\n{}\n'.format(p, params[p.split('.')[1]].strip())]
                            else:
                                with babel.app.test_request_context('/') as ctx:
                                    ctx.push()
                                    res = [u'<b style="color:red">{}</b><br>'.format(babel.gettext('alarm.testcontext.parametererror').format(p))]
                                    params['error'] = babel.gettext('alarm.handler.missing.parameter').format(p, babel.gettext(handler.handler))
                                    ctx.pop()
                        except:
                            signal.send('alarm', 'testupload_start', result='done')
                res = "\n".join(res)
                if u'error' in params.keys():
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1], error=params['error'])
                else:
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1])
    signal.send('alarm', 'testupload_start', result='done')
    return params
Esempio n. 14
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for printer class, adds own processing time

        :param eventname: *emonitor.modules.printers.printers.Printers*
        :param kwargs: *mode*=*test*, *time*,
        :return: kwargs
        """
        stime = time.time()
        _printer = None
        hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.modules.printers.printers.Printers'][0]
        if hdl:
            for p in hdl.getParameterValues('in'):
                if p[0] == 'in.printerid':
                    _printer = Printers.getPrinters(p[1])
                    break

        state = ""
        if _printer:
            try:
                if kwargs['mode'] != 'test':
                    if '{}id'.format(_printer.module[:-1]) in kwargs.keys():  # add object and id if given
                        kwargs['id'] = kwargs['{}id'.format(_printer.module[:-1])]
                        for key, cls in db.Model._decl_class_registry.iteritems():
                            if key.lower() == _printer.module[:-1]:
                                kwargs['object'] = cls
                                break
                    _printer.doPrint(**dict(kwargs))
                else:
                    state = "(testmode)"
            except KeyError:
                state = "with errors"
        else:
            state = "with error 'no printer found'"

        if 'time' not in kwargs.keys():
            kwargs['time'] = []
        kwargs['time'].append(u"printer: print done {} in {} sec.".format(state, time.time() - stime))

        return kwargs
Esempio n. 15
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for OCR textmod module

        :param eventname: *file_added*
        :param kwargs: *time*, *incomepath*, *filename*
        :return: add *text* to kwargs
        """
        hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.modules.textmod.ocr.Ocr'][0]
        in_params = [v[1] for v in hdl.getParameterValues('in')]  # required parameters for method
        if sorted(in_params) != sorted(list(set(in_params) & set(kwargs.keys()))):
            if 'time' not in kwargs.keys():
                kwargs['time'] = []
            kwargs['time'].append(u'replace: missing parameters for replace, nothing done.')
        else:
            p, t1 = Ocr.convertFileType(kwargs['incomepath'], kwargs['filename'])
            text, t2 = Ocr.convertText(kwargs['incomepath'], kwargs['filename'], p)
            if 'time' not in kwargs.keys():
                kwargs['time'] = []
            kwargs['time'].append(u'ocr: text conversion and recognition done in {} sec.'.format(t1 + t2))
            kwargs['text'] = text
        return kwargs
Esempio n. 16
0
    def handleEvent(eventname, **kwargs):
        """
        Event handler for replacements

        :param eventname: *file_added*
        :param kwargs: *time*, *text*
        :return: kwargs
        """
        hdl = [hdl for hdl in Eventhandler.getEventhandlers(event=eventname) if hdl.handler == 'emonitor.modules.textmod.ocr.Ocr'][0]
        in_params = [v[1] for v in hdl.getParameterValues('in')]  # required parameters for method

        if sorted(in_params) != sorted(list(set(in_params) & set(kwargs.keys()))):
            if 'time' not in kwargs:
                kwargs['time'] = []
            kwargs['time'].append(u'replace: missing parameters for replace, nothing done.')
            return kwargs
        else:
            stime = time.time()
            text = u''

            for l in kwargs['text'].split("\n"):
                if "__" in l or l.strip() == "" or "===" in l or l.strip() == "":  # leave empty and lines
                    continue
                text = u'{}{}\n'.format(text, l)

            for r in Replace.getReplacements():
                try:
                    text = re.sub(r.text, r.replace, text)
                except:
                    pass

            kwargs['text'] = text
            t = time.time() - stime
            
        if 'time' not in kwargs.keys():
            kwargs['time'] = []
        kwargs['time'].append(u'replace: replace done in {} sec.'.format(t))
        
        return kwargs
Esempio n. 17
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
Esempio n. 18
0
def processFile(incomepath, filename):
    """
    run processing in test mode
    """
    params = dict(incomepath=incomepath, filename=filename, mode='test')
    handlers = events.getEvents('file_added').getHandlerList()
    dbhandlers = Eventhandler.getEventhandlers(event='file_added')
    from emonitor.extensions import db
    db.session.rollback()
    for handler in dbhandlers:  # db
        for hdl in handlers:
            if handler.handler == hdl[0]:
                res = []
                try:
                    params.update(hdl[1]('file_added', **params))
                except:
                    params.update({'error': u'<b>error in handler {}:</b><br/> <em>{}</em><br>'.format(hdl[0], traceback.format_exc().splitlines())})

                for p in handler.getParameterList():
                    try:
                        res.append(u'{}:{}'.format(p, params[p.split('.')[1]]))
                    except:
                        try:
                            if p.split(u'.')[1] in params.keys():
                                res = [u'{}:{}'.format(p, params[p.split('.')[1]])]
                            else:
                                res = [u'<b>error: key not found:</b> <em>{}</em><br>'.format(p.split('.')[1])]
                                if not params.get('error'):
                                    params['error'] = ""
                                params['error'] += u'<b>error: key not found</b> <em>{}</em><br>'.format(p.split('.')[1])
                        except:
                            signal.send('alarm', 'testupload_start', result='done')
                if u'error' in params.keys():
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1], error=params['error'])
                else:
                    signal.send('alarm', 'testupload_start', result=res, handler=handler.handler.split('.')[-1], protocol=params['time'][-1])
    signal.send('alarm', 'testupload_start', result='done')
    return params
def getAdminContent(self, **params):
    """
    Deliver admin content of module events

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')
    
    if len(module) > 1:
        pass
        
    else:
        if request.method == 'POST':
            if request.form.get('action').startswith('edithandler_'):  # edit handler
                handler = Eventhandler.getEventhandlers(id=int(request.form.get('action').split('_')[-1]))  # handler defined in db
                handlers = events.getEvents(name=handler.event).getHandlerList()  # all possible handlers for given event
                params.update({'handler': handler, 'handlers': handlers})
                return render_template('admin.events_actions.html', **params)

            elif request.form.get('action').startswith('createhandler_'):  # add handler
                handler = Eventhandler(request.form.get('action').replace('createhandler_', ''), '', '', '')
                handlers = events.getEvents(name=handler.event).getHandlerList()  # all possible handlers for given event
                params.update({'handler': handler, 'handlers': handlers})
                return render_template('admin.events_actions.html', **params)

            elif request.form.get('action') == 'updateeventhandler':  # save handler
                if request.form.get('handler_id') != 'None':  # update
                    hdl = Eventhandler.getEventhandlers(id=request.form.get('handler_id'))
                    hdl.position = request.form.get('edit_position')
                
                else:  # add
                    existing = Eventhandler.getEventhandlers(event=request.form.get('edit_event'))
                    hdl = Eventhandler(request.form.get('edit_event'), '', '', '')
                    db.session.add(hdl)
                    hdl.position = len(existing) + 1
                    
                hdl.handler = request.form.get('edit_handler')
                hdl.parameters = ''
                for k in request.form.keys():
                    if k.startswith('check.in'):  # in parameters
                        if request.form.get(k) == "alternative":  # use alternative text field
                            hdl.parameters += '%s=%s\r\n' % (k[6:], request.form.get('in.' + k[9:]))
                        else:
                            hdl.parameters += '%s=%s\r\n' % (k[6:], request.form.get(k))  # use checkbox

                    elif k.startswith('check.out'):  # out parameters
                        if request.form.get(k) == "alternative":  # use alternative text field
                            hdl.parameters += '%s=%s\r\n' % (k[6:], request.form.get('out.' + k[10:]))
                        else:
                            hdl.parameters += '%s=%s\r\n' % (k[6:], request.form.get(k))  # use checkbox
                db.session.commit()

            elif request.form.get('action').startswith('deletehandler_'):  # delete handler
                handler = Eventhandler.getEventhandlers(id=int(request.form.get('action').split('_')[-1]))
                db.session.delete(handler)
                db.session.commit()
                
            elif request.form.get('action') == 'updateorder':  # update order of handlers/event
                for item in [i for i in request.form if i.startswith('position_')]:
                    ids = request.form.getlist(item)
                    for _id in ids:
                        hdl = Eventhandler.getEventhandlers(id=int(_id))
                        hdl.position = ids.index(_id) + 1
                db.session.commit()
        params.update({'events': events.getEvents(), 'definitions': len(Eventhandler.getEventhandlers())})
        return render_template('admin.events.html', **params)
Esempio n. 20
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module events

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) > 1:
        pass

    else:
        if request.method == 'POST':
            if request.form.get('action').startswith(
                    'edithandler_'):  # edit handler
                handler = Eventhandler.getEventhandlers(
                    id=int(request.form.get('action').split('_')
                           [-1]))  # handler defined in db
                handlers = events.getEvents(name=handler.event).getHandlerList(
                )  # all possible handlers for given event
                params.update({'handler': handler, 'handlers': handlers})
                return render_template('admin.events_actions.html', **params)

            elif request.form.get('action').startswith(
                    'createhandler_'):  # add handler
                handler = Eventhandler(
                    request.form.get('action').replace('createhandler_', ''),
                    '', '', '')
                handlers = events.getEvents(name=handler.event).getHandlerList(
                )  # all possible handlers for given event
                params.update({'handler': handler, 'handlers': handlers})
                return render_template('admin.events_actions.html', **params)

            elif request.form.get(
                    'action') == 'updateeventhandler':  # save handler
                if request.form.get('handler_id') != 'None':  # update
                    hdl = Eventhandler.getEventhandlers(
                        id=request.form.get('handler_id'))
                    hdl.position = request.form.get('edit_position')

                else:  # add
                    existing = Eventhandler.getEventhandlers(
                        event=request.form.get('edit_event'))
                    hdl = Eventhandler(request.form.get('edit_event'), '', '',
                                       '')
                    db.session.add(hdl)
                    hdl.position = len(existing) + 1

                hdl.handler = request.form.get('edit_handler')
                hdl.parameters = ''
                for k in request.form.keys():
                    if k.startswith('check.in'):  # in parameters
                        if request.form.get(
                                k
                        ) == "alternative":  # use alternative text field
                            hdl.parameters += '%s=%s\r\n' % (
                                k[6:], request.form.get('in.' + k[9:]))
                        else:
                            hdl.parameters += '%s=%s\r\n' % (
                                k[6:], request.form.get(k))  # use checkbox

                    elif k.startswith('check.out'):  # out parameters
                        if request.form.get(
                                k
                        ) == "alternative":  # use alternative text field
                            hdl.parameters += '%s=%s\r\n' % (
                                k[6:], request.form.get('out.' + k[10:]))
                        else:
                            hdl.parameters += '%s=%s\r\n' % (
                                k[6:], request.form.get(k))  # use checkbox
                db.session.commit()

            elif request.form.get('action').startswith(
                    'deletehandler_'):  # delete handler
                handler = Eventhandler.getEventhandlers(
                    id=int(request.form.get('action').split('_')[-1]))
                db.session.delete(handler)
                db.session.commit()

            elif request.form.get(
                    'action'
            ) == 'updateorder':  # update order of handlers/event
                for item in [
                        i for i in request.form if i.startswith('position_')
                ]:
                    ids = request.form.getlist(item)
                    for _id in ids:
                        hdl = Eventhandler.getEventhandlers(id=int(_id))
                        hdl.position = ids.index(_id) + 1
                db.session.commit()
        params.update({
            'events': events.getEvents(),
            'definitions': len(Eventhandler.getEventhandlers())
        })
        return render_template('admin.events.html', **params)
Esempio n. 21
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module alarms

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) > 1:
        if module[1] == 'types':
            impl = []  # load implementations of faxchecker
            for f in [f for f in os.listdir('%s/emonitor/modules/alarms/inc/' % current_app.config.get('PROJECT_ROOT')) if f.endswith('.py')]:
                if not f.startswith('__'):
                    cls = imp.load_source('emonitor.modules.alarms.inc', 'emonitor/modules/alarms/inc/%s' % f)
                    if isinstance(getattr(cls, cls.__all__[0])(), AlarmFaxChecker):
                        impl.append((f, getattr(cls, cls.__all__[0])(), AlarmType.getAlarmTypeByClassname(f)))

            if request.method == 'POST':
                if request.form.get('action') == 'createtype':  # add type
                    params.update({'alarmtype': AlarmType('', ''), 'interpreter': impl})
                    return render_template('admin.alarms.type_actions.html', **params)

                elif request.form.get('action').startswith('deleteinterpreter_'):  # delete checker
                    for cls in impl:
                        if cls[0] == request.form.get('action')[18:]:
                            if os.path.exists('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])):
                                os.remove('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0]))
                            if os.path.exists('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])):
                                os.remove('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0]))
                            impl.remove(cls)

                elif request.form.get('action').startswith('editalarmtype_'):  # edit type
                    params.update({'alarmtype': AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])), 'interpreter': impl})
                    return render_template('admin.alarms.type_actions.html', **params)

                elif request.form.get('action').startswith('deletetype_'):  # delete type
                    atype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1]))
                    for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]:
                        # delete event handlers and monitor layout
                        for eh in Eventhandler.getEventhandlers(event=e.name):
                            for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all():
                                if ';' in ml.trigger:
                                    _tr = ml.trigger.split(';')
                                    del _tr[_tr.index(e.name)]
                                    ml.trigger = ";".join(_tr)
                                else:
                                    db.session.remove(ml)
                            db.session.delete(eh)
                        # delete event
                        del events.events[events.events.index(e)]
                    db.session.delete(atype)
                    db.session.commit()

                elif request.form.get('action') == 'updatetype':  # update type
                    if request.form.get('type_id') == 'None':  # add type
                        atype = AlarmType('', '')
                        db.session.add(atype)
                        events.addEvent('alarm_added.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[])
                        events.addEvent('alarm_changestate.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[])
                    else:  # update type
                        atype = AlarmType.getAlarmTypes(id=int(request.form.get('type_id')))
                        for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]:
                            # update event handler and monitor layout
                            newname = '{}.{}'.format(e.name.split('.')[0], request.form.get('edit_name'))
                            for eh in Eventhandler.getEventhandlers(event=e.name):
                                for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all():
                                    ml.trigger = ml.trigger.replace(e.name, newname)
                                eh.event = newname
                            # update event
                            e.name = newname

                    atype.name = request.form.get('edit_name')
                    atype.keywords = request.form.get('edit_keywords')
                    atype.interpreter = request.form.get('edit_interpreter')
                    atype.attributes = dict(zip(request.form.getlist('attribute_name'), request.form.getlist('attribute_value')))
                    atype.translations = dict(zip(request.form.getlist('alarmtypevariables'), request.form.getlist('alarmtypetranslation')))
                    db.session.commit()

                    if request.form.get('type_id') == 'None':  # add predefined keywords and sections
                        # add pre-defined sections
                        for checker in [i for i in impl if i[0] == request.form.get('edit_interpreter')]:
                            if request.form.get('edit_keywords') == "":
                                atype.keywords = "\n".join(checker[1].getDefaultConfig()['keywords'])
                            sections = checker[1].getDefaultConfig()['sections']
                            i = 1
                            for key in sections:
                                db.session.add(AlarmSection(atype.id, key, sections[key][0], 1, sections[key][1], i))
                                i += 1
                        db.session.commit()

                elif request.form.get('action').startswith('createsection_'):  # add section
                    alarmtype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1]))
                    params.update({'alarmtype': alarmtype, 'section': AlarmSection(alarmtype.id, '', '', 0, '', 0), 'functions': alarmtype.interpreterclass().getEvalMethods()})
                    return render_template('admin.alarms.sections_actions.html', **params)

                elif request.form.get('action') == 'updatesection':  # save section
                    db.session.rollback()
                    if request.form.get('section_id') == 'None':  # add
                        section = AlarmSection(request.form.get('edit_tid'), '', '', '', '', '')
                        section.orderpos = 1 + len(AlarmSection.getSections())
                        db.session.add(section)

                    else:  # update
                        section = AlarmSection.getSections(id=int(request.form.get('section_id')))
                        section.orderpos = request.form.get('edit_orderpos')

                    section.tid = request.form.get('edit_tid')
                    section.name = request.form.get('edit_name')
                    section.key = request.form.get('edit_key')
                    section.method = request.form.get('edit_method')
                    section.active = request.form.get('edit_active')
                    alarmtype = AlarmType.getAlarmTypes(request.form.get('edit_tid'))
                    if alarmtype.interpreterclass().configtype == 'generic':
                        attrs = {'start': request.form.get('edit_start'), 'end': request.form.get('edit_end')}
                        if 'edit_multiline' in request.form.keys():
                            attrs['multiline'] = 'True'
                        section.attributes = attrs
                    db.session.commit()

                elif request.form.get('action') == 'updateorder':
                    for item in [i for i in request.form if i.startswith('position_')]:
                        ids = request.form.getlist(item)
                        for _id in ids:
                            AlarmSection.getSections(id=_id).orderpos = ids.index(_id) + 1
                    db.session.commit()

                elif request.form.get('action').startswith('editalarmsection_'):  # edit section
                    section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1]))
                    params.update({'section': section, 'functions': section.alarmtype.interpreterclass().getEvalMethods(), 'alarmtype': AlarmType.getAlarmTypes(section.tid)})
                    return render_template('admin.alarms.sections_actions.html', **params)

                elif request.form.get('action').startswith('deletealarmsection_'):  # delete section
                    section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1]))
                    db.session.delete(section)
                    db.session.commit()

            params.update({'alarmtypes': AlarmType.getAlarmTypes(), 'interpreters': impl})
            return render_template('admin.alarms.type.html', **params)

        elif module[1] == 'report':

            if request.method == 'POST':
                if request.form.get('action') == 'createreport':  # add report
                    params.update({'report': AlarmReport('', '', '', 1, []), 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes()})
                    return render_template('admin.alarms.report_action.html', **params)

                elif request.form.get('action') == 'updatereport':
                    if request.form.get('report_id') == 'None':  # add new report
                        report = AlarmReport('', '', '', '')
                        db.session.add(report)
                    else:
                        report = AlarmReport.getReports(request.form.get('report_id'))

                    report.name = request.form.get('edit_name')
                    if not request.form.get('template').startswith(current_app.config.get('PATH_DATA')):  # internal template
                        report._reporttype = 'internal'
                        report.filename = request.form.get('template').replace("{}/emonitor/modules/alarms/templates/".format(current_app.config.get('PROJECT_ROOT')).replace('\\', '/'), "")
                    else:
                        report._reporttype = 'external'
                        report.filename = request.form.get('template').replace("{}".format(current_app.config.get('PATH_DATA')), "")
                        report.fields = json.loads(request.form.get('fielddefinition'))
                    report.departments = request.form.getlist('edit_department')
                    db.session.commit()

                elif request.form.get('action').startswith('editreport_'):  # edit report
                    report = AlarmReport.getReports(request.form.get('action').split('_')[-1])
                    params.update({'report': report, 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes(), 'alarmfields': AlarmField.getAlarmFields()})
                    return render_template('admin.alarms.report_action.html', **params)

                elif request.form.get('action').startswith('deletereport_'):  # delete report
                    report = AlarmReport.getReports(request.form.get('action').split('_')[-1])
                    if AlarmReport.query.filter(AlarmReport.filename == report.filename).count() == 1 and os.path.exists(report.filename):
                        os.remove(report.filename)
                    db.session.delete(report)
                    db.session.commit()

            params.update({'reports': AlarmReport.getReports(), 'departments': Department.getDepartments()})
            return render_template('admin.alarms.report.html', **params)

        elif module[1] == 'config':
            if request.method == 'POST':
                if request.form.get('action') == 'alarmcarsprio':
                    for k in Alarm.ALARMSTATES.keys():
                        if 'used_cars{}'.format(k) in request.form.keys():
                            Settings.set('alarms.spc_cars.{}'.format(k), request.form.get('used_cars{}'.format(k)))
                    db.session.commit()

                elif request.form.get('action') == 'alarmsettings':
                    Settings.set('alarms.autoclose', request.form.get('settings.autoclose'))
                    for aalarm in [a for a in Alarm.getAlarms() if a.state == 1]:  # only active alarms
                        aalarm.updateSchedules(reference=1)  # use alarmtime as refernce

                elif request.form.get('action') == 'archivesettings':
                    Settings.set('alarms.autoarchive', request.form.get('settings.autoarchive'))
                    for aalarm in [a for a in Alarm.getAlarms() if a.state == 2]:  # only closed alarms
                        aalarm.updateSchedules(reference=1)  # use alarmtime as refernce

                elif request.form.get('action').startswith('save_'):
                    if request.form.get('fieldid') == 'None':
                        field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[1], dept=request.form.get('action').split('_')[2])
                        db.session.add(field)
                    else:
                        field = AlarmField.getAlarmFields(id=request.form.get('fieldid'))
                    field.saveConfigForm(request)
                    db.session.commit()

                elif request.form.get('action').startswith('field_delete_'):  # delete definition of field
                    db.session.delete(AlarmField.getAlarmFields(id=request.form.get('action').split('_')[-1]))
                    db.session.commit()

                elif request.form.get('action').startswith('field_add_'):  # add field for department
                    field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[-2], dept=request.form.get('action').split('_')[-1])
                    field.name = babel.gettext(field.name)
                    db.session.add(field)
                    db.session.commit()

            fields = {}
            for dept in Department.getDepartments():
                fields[dept.id] = AlarmField.getAlarmFieldsForDepartment(dept.id)
            params.update({'cars': Car.getCars(), 'alarmstates': Alarm.ALARMSTATES, 'settings': Settings, 'departments': Department.getDepartments(), 'fields': fields})
            return render_template('admin.alarms.config.html', **params)

        elif module[1] == 'test':
            params.update({'uploadfileformat': filter(None, sum([Settings.get('ocr.inputformat', []), Settings.get('ocr.inputtextformat', [])], []))})
            return render_template('admin.alarms.test.html', **params)

    else:
        params.update({'alarms': dict(Alarm.getAlarmCount()), 'alarmstates': Alarm.ALARMSTATES, 'help': self.hasHelp('admin')})
        return render_template('admin.alarms.html', **params)