diff --git a/includes/doubleFilter.py b/includes/doubleFilter.py new file mode 100644 index 0000000..321dd6f --- /dev/null +++ b/includes/doubleFilter.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +# -*- coding: cp1252 -*- + +""" +doubleFilter is the central function to filter out double alarms. +You can set the number of historical entries the filter will check +and the time ignoring the id in case of a double alarm + +@author: Jens Herrmann + +@requires: Configuration has to be set in the config.ini +""" + +import logging # Global logger +import time # timestamp for doublealarm + +from includes import globals # Global variables + +# +# ListStructure [0..n] = (ID, TimeStamp) +# + +def checkID(typ, id): + """ + check if id was called in the last x sec and n entries + + @requires: Configuration has to be set in the config.ini + + @return: True if check was OK + @return: False if double was found + """ + timestamp = int(time.time()) # Get Timestamp + + for i in range(len(globals.doubleList)): + (xID, xTimestamp) = globals.doubleList[i] + # given ID found? + # return False if the first entry in double_ignore_time is found, we will not check for younger one... + if id == xID and timestamp < xTimestamp + globals.config.getint("BOSWatch", "double_ignore_time"): + logging.info("%s double alarm: %s within %s second(s)", typ, xID, timestamp-xTimestamp) + return False + return True + + +def newEntry(id): + """ + new entry in double alarm + + @return: nothing + """ + timestamp = int(time.time()) # Get Timestamp + globals.doubleList.append((id, timestamp)) + + # now check if list has more than n entries: + if len(globals.doubleList) > 10: + # we have to kill the oldest one + globals.doubleList.pop(0) \ No newline at end of file