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 []
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
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 ""
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
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
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
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): 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 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
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
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
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
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
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 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 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 ""
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)
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)
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)