BOSWatch/includes/doubleFilter.py

75 lines
2.3 KiB
Python
Raw Normal View History

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
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, msg)
#
doubleList = []
def checkID(typ, id, msg=""):
"""
check if id was called in the last x sec and n entries
2015-07-02 09:02:49 +02:00
@requires: Configuration has to be set in the config.ini
2015-07-02 09:02:49 +02:00
@return: True if check was OK
@return: False if double was found
"""
global doubleList
2015-07-02 09:02:49 +02:00
timestamp = int(time.time()) # Get Timestamp
2015-07-29 18:43:25 +02:00
logging.debug("checkID: %s (%s)", id, msg)
for i in range(len(doubleList)):
(xID, xTimestamp, xMsg) = doubleList[i]
# given ID found?
# return False if the first entry in double_ignore_time is found, we will not check for younger ones...
if id == xID and timestamp < xTimestamp + globals.config.getint("BOSWatch", "doubleFilter_ignore_time"):
2015-07-29 18:43:25 +02:00
logging.debug("-- previous id %s is within doubleFilter_ignore_time (%ss)", xID, globals.config.getint("BOSWatch", "doubleFilter_ignore_time"))
2015-07-02 09:02:49 +02:00
# if wanted, we have to check the msg additional
if "POC" in typ and globals.config.getint("BOSWatch", "doubleFilter_check_msg"):
2015-07-29 18:43:25 +02:00
logging.debug("-- compare msg:")
logging.debug("---- current msg: (%s)", msg.strip())
logging.debug("---- previous msg: (%s)", xMsg)
# if msg is a substring of xMsg we found a double
2015-07-29 18:43:25 +02:00
if msg.strip() in xMsg:
logging.info("%s double alarm (id+msg): %s within %s second(s)", typ, xID, timestamp-xTimestamp)
return False
else:
logging.info("%s double alarm (id): %s within %s second(s)", typ, xID, timestamp-xTimestamp)
return False
return True
2015-07-02 09:02:49 +02:00
def newEntry(id, msg = ""):
"""
new entry in double alarm list
2015-07-02 09:02:49 +02:00
@return: nothing
"""
global doubleList
2015-07-02 09:02:49 +02:00
timestamp = int(time.time()) # Get Timestamp
doubleList.append((id, timestamp, msg.strip()))
2015-07-02 09:02:49 +02:00
logging.debug("Added %s to doubleList", id)
2015-07-02 09:02:49 +02:00
# now check if list has more than n entries:
if len(doubleList) > globals.config.getint("BOSWatch", "doubleFilter_ignore_entries"):
# we have to kill the oldest one
doubleList.pop(0)