55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
"""
|
|
Bazowa klasa dla modułów monitorowania logów
|
|
"""
|
|
|
|
import logging
|
|
import time
|
|
import threading
|
|
|
|
|
|
class LogModule:
|
|
"""Bazowa klasa dla modułów monitorowania"""
|
|
|
|
def __init__(self, config, daemon):
|
|
"""
|
|
Args:
|
|
config: ConfigParser object z konfiguracją
|
|
daemon: Referencja do głównego demona
|
|
"""
|
|
self.config = config
|
|
self.daemon = daemon
|
|
self.logger = logging.getLogger(self.__class__.__name__)
|
|
self.running = False
|
|
self.thread = None
|
|
|
|
def start(self):
|
|
"""Uruchamia moduł w osobnym wątku"""
|
|
if self.running:
|
|
self.logger.warning("Module already running")
|
|
return
|
|
|
|
self.running = True
|
|
self.thread = threading.Thread(target=self._run, daemon=True)
|
|
self.thread.start()
|
|
self.logger.info(f"{self.__class__.__name__} started")
|
|
|
|
def stop(self):
|
|
"""Zatrzymuje moduł"""
|
|
self.running = False
|
|
if self.thread and self.thread.is_alive():
|
|
self.thread.join(timeout=5)
|
|
self.logger.info(f"{self.__class__.__name__} stopped")
|
|
|
|
def _run(self):
|
|
"""Główna pętla modułu - do nadpisania w klasach potomnych"""
|
|
raise NotImplementedError("Subclasses must implement _run()")
|
|
|
|
def process_line(self, line):
|
|
"""
|
|
Przetwarza pojedynczą linię logu
|
|
|
|
Args:
|
|
line: Linia tekstu z logu
|
|
"""
|
|
raise NotImplementedError("Subclasses must implement process_line()")
|