2015-05-22 21:32:37 +02:00
#!/usr/bin/python
2015-07-13 10:19:45 +02:00
# -*- coding: UTF-8 -*-
2015-05-22 21:32:37 +02:00
2015-05-27 07:48:24 +02:00
"""
2015-06-14 20:21:21 +02:00
Handler for the filter and plugins at an alarm
2015-05-27 07:48:24 +02:00
@author : Bastian Schroll
2015-06-14 20:21:21 +02:00
@author : Jens Herrmann
2015-05-27 07:48:24 +02:00
@requires : none
"""
import logging # Global logger
2015-07-31 19:09:27 +02:00
import time # timestamp
2015-05-22 21:32:37 +02:00
2016-10-03 11:56:27 +02:00
from includes import globalVars # Global variables
2019-04-25 21:35:21 +02:00
from copy import deepcopy # copy objects to avoid issues if the objects will be changed by the plugin's during runtime and during asynch/threaded processing
2015-05-22 21:32:37 +02:00
2015-07-30 18:55:36 +02:00
##
#
# decide to run AlarmHandler sync or async
#
def processAlarmHandler ( typ , freq , data ) :
"""
Function to decide if the alarm process will call sync
@type typ : string ( FMS | ZVEI | POC )
@param typ : Typ of the dataset
@type freq : string
@param freq : frequency of the SDR Stick
2016-10-02 12:38:47 +02:00
@type data : map of data ( structure see readme . md in plugin folder )
2015-07-30 18:55:36 +02:00
@param data : Contains the parameter
@requires : active plugins in pluginList
@requires : Configuration has to be set in the config . ini
@return : nothing
@exception : Exception if starting a Thread failed
"""
2016-10-03 12:02:18 +02:00
if globalVars . config . getboolean ( " BOSWatch " , " processAlarmAsync " ) == True :
2015-07-30 18:55:36 +02:00
logging . debug ( " starting processAlarm async " )
try :
2015-07-31 19:09:27 +02:00
from threading import Thread
2019-04-25 21:35:21 +02:00
Thread ( target = processAlarm , args = ( typ , freq , deepcopy ( data ) ) ) . start ( )
2015-07-30 18:55:36 +02:00
except :
logging . error ( " Error in starting alarm processing async " )
logging . debug ( " Error in starting alarm processing async " , exc_info = True )
else :
2019-03-14 12:02:00 +01:00
processAlarm ( typ , freq , data )
2016-10-02 21:28:04 +02:00
2015-07-30 18:55:36 +02:00
2015-06-14 20:21:21 +02:00
##
#
# main function for central filtering and calling the plugins
#
2015-07-30 18:55:36 +02:00
def processAlarm ( typ , freq , data ) :
2015-05-27 07:48:24 +02:00
"""
2015-06-14 20:21:21 +02:00
Function to process filters and plugins at Alarm
2015-05-27 07:48:24 +02:00
@type typ : string ( FMS | ZVEI | POC )
@param typ : Typ of the dataset
@type freq : string
@param freq : frequency of the SDR Stick
2016-10-02 12:38:47 +02:00
@type data : map of data ( structure see readme . md in plugin folder )
2015-05-27 07:48:24 +02:00
@param data : Contains the parameter
2015-06-14 20:21:21 +02:00
@requires : active plugins in pluginList
2015-07-02 09:02:49 +02:00
2015-05-27 07:48:24 +02:00
@return : nothing
2015-06-23 22:50:33 +02:00
@exception : Exception if Alarm processing itself failed
2015-05-27 07:48:24 +02:00
"""
2015-05-26 11:41:05 +02:00
try :
logging . debug ( " [ ALARM ] " )
2015-07-31 19:09:27 +02:00
# timestamp, to make sure, that all plugins use the same time
data [ ' timestamp ' ] = int ( time . time ( ) )
2015-06-14 20:21:21 +02:00
# Go to all plugins in pluginList
2016-10-03 12:02:18 +02:00
for pluginName , plugin in globalVars . pluginList . items ( ) :
2015-06-14 20:21:21 +02:00
# if enabled use RegEx-filter
2016-10-03 12:02:18 +02:00
if globalVars . config . getint ( " BOSWatch " , " useRegExFilter " ) :
2016-10-03 11:50:18 +02:00
from includes import regexFilter
2019-04-25 21:35:21 +02:00
if regexFilter . checkFilters ( typ , data , pluginName , freq ) :
2015-05-26 11:41:05 +02:00
logging . debug ( " call Plugin: %s " , pluginName )
2015-06-23 18:37:32 +02:00
try :
2019-04-25 21:35:21 +02:00
plugin . run ( typ , freq , deepcopy ( data ) )
2015-06-23 18:37:32 +02:00
logging . debug ( " return from: %s " , pluginName )
except :
# call next plugin, if one has thrown an exception
pass
2015-06-14 20:21:21 +02:00
else : # RegEX filter off - call plugin directly
2015-05-24 21:24:26 +02:00
logging . debug ( " call Plugin: %s " , pluginName )
2015-06-23 18:37:32 +02:00
try :
2019-04-25 21:35:21 +02:00
plugin . run ( typ , freq , deepcopy ( data ) )
2015-06-23 18:37:32 +02:00
logging . debug ( " return from: %s " , pluginName )
except :
# call next plugin, if one has thrown an exception
pass
2015-05-26 11:41:05 +02:00
logging . debug ( " [END ALARM] " )
except :
2015-07-30 18:55:36 +02:00
logging . error ( " Error in alarm processing " )
logging . debug ( " Error in alarm processing " , exc_info = True )