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()")
 | 
