Sh3ll
OdayForums


Server : Apache
System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64
User : tradze ( 1001)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /lib/fm-agent/library/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/fm-agent/library/anomaly.py
from agent_util import total_seconds
from datetime import datetime, timedelta
import logging
import sys


class Anomaly(object):
    def __init__(self, acceptable_duration, schedules_number_of_checks):
        self.log = logging.getLogger(self.__class__.__name__)
        self.log.info("New anomaly detected")

        now = datetime.now()
        self.time_first_detected = now
        self.time_last_detected = now
        self.acceptable_duration = timedelta(seconds=acceptable_duration)
        self.reported_as_exceeded_duration = False
        self.reported_as_cleared = False
        self.schedules_number_of_checks = schedules_number_of_checks

    def __repr__(self):
        return "<%s, %s first detected: %s, last detected: %s, duration: %s>" % (
            self.__class__.__name__,
            self.reported_as_exceeded_duration and "PUSHED" or "WAITING",
            self.time_first_detected,
            self.time_last_detected,
            self.acceptable_duration,
        )

    # The logging library interferes with cPickle, so we must remove the logger
    # instance then reset it when we serialize/unserialize.
    def __getstate__(self):
        state = dict(self.__dict__)
        del state["log"]
        return state

    def __setstate__(self, state):
        self.__dict__.update(state)
        self.log = logging.getLogger(self.__class__.__name__)

    def exceeds_duration(self):
        time_since_first_detection = datetime.now() - self.time_first_detected
        self.log.debug(
            "Anomaly began %s and has lasted %s seconds",
            self.time_first_detected,
            total_seconds(time_since_first_detection),
        )

        return time_since_first_detection >= self.acceptable_duration

    def has_cleared(self, current_check_number):
        time_since_last_detection = datetime.now() - self.time_last_detected
        self.log.debug(
            "Anomaly was last detected at %s, %s seconds ago",
            self.time_last_detected,
            total_seconds(time_since_last_detection),
        )

        return (
            time_since_last_detection > self.acceptable_duration
            and self.schedules_number_of_checks < current_check_number
        )

ZeroDay Forums Mini