Первый запуск
This commit is contained in:
116
LogProcessingWorker.py
Normal file
116
LogProcessingWorker.py
Normal file
@@ -0,0 +1,116 @@
|
||||
import os
|
||||
|
||||
from Infrostructure.ProtocolCoder.MessageEncoder import MessageEncoder
|
||||
from Infrostructure.RabbitMQ.RabbitMQMessenger import RabbitMQMessenger
|
||||
from Processor.StreamingLogCluster import StreamingLogCluster
|
||||
|
||||
|
||||
class LogProcessingWorker:
|
||||
def __init__(self,
|
||||
model_path: str,
|
||||
db_path: str,
|
||||
input_queue: str = 'logs_input',
|
||||
output_queue: str = 'logs_output',
|
||||
output_debug_queue: str = 'logs_debug_output',):
|
||||
|
||||
if os.path.exists(db_path):
|
||||
os.remove(db_path)
|
||||
|
||||
self.output_queue = output_queue
|
||||
self.output_debug_queue = output_debug_queue
|
||||
|
||||
print("--- ЗАПУСК основоного алгоритма ---")
|
||||
self.clusterer = StreamingLogCluster(model_path, db_path=db_path)
|
||||
|
||||
print("--- ЗАПУСК системы кодирования ---")
|
||||
self.encoder = MessageEncoder()
|
||||
|
||||
print("--- ЗАПУСК системы приёма/отправки сообщений ---")
|
||||
self.messenger = RabbitMQMessenger()
|
||||
|
||||
print("--- ЗАПУСК системы чтения сообщений ---")
|
||||
self.messenger.start_listening(
|
||||
queue_name=input_queue,
|
||||
callback_function=self._process_log_callback
|
||||
)
|
||||
|
||||
def _process_log_callback(self, log_text: str):
|
||||
try:
|
||||
log_text = log_text.strip()
|
||||
if not log_text:
|
||||
return
|
||||
|
||||
print(f" [>] Обработка: {log_text[:50]}...")
|
||||
|
||||
# А. Кластеризация
|
||||
# process() возвращает dict, который полностью готов к JSON
|
||||
analysis_result = self.clusterer.process(log_text)
|
||||
|
||||
me = MessageEncoder()
|
||||
|
||||
data = me.encode_protocol(analysis_result['template_id'],
|
||||
[(i['uid'], i['value']) for i in analysis_result['variables']]
|
||||
)
|
||||
|
||||
# Г. Отправка результата в Output очередь
|
||||
# Messenger сам переподключится, если связь мигнула
|
||||
self.messenger.send_binary_message(self.output_queue, data )
|
||||
self.messenger.send_message(self.output_debug_queue, str(analysis_result))
|
||||
|
||||
except Exception as e:
|
||||
print(f" [!] Ошибка внутри логики обработки: {e}")
|
||||
|
||||
|
||||
def local_test():
|
||||
MODEL_PATH = './Resources/model'
|
||||
DB_FILE = "logs.db"
|
||||
TEST_FILE = "./Resources/test/container-qfdpbp.log"
|
||||
|
||||
if os.path.exists(DB_FILE):
|
||||
os.remove(DB_FILE)
|
||||
|
||||
print("--- ЗАПУСК основоного алгоритма ---")
|
||||
clusterer = StreamingLogCluster(MODEL_PATH, db_path=DB_FILE)
|
||||
|
||||
print("--- ЗАПУСК системы кодирования ---")
|
||||
encoder = MessageEncoder()
|
||||
|
||||
me = MessageEncoder()
|
||||
|
||||
new_len = 0
|
||||
|
||||
dict = {}
|
||||
|
||||
with open(TEST_FILE, 'r', errors='ignore') as f:
|
||||
while True:
|
||||
log_text = f.readline()
|
||||
|
||||
if log_text == "":
|
||||
break
|
||||
analysis_result = clusterer.process(log_text)
|
||||
|
||||
data = me.encode_protocol(analysis_result['template_id'],
|
||||
[(i['uid'], i['value']) for i in analysis_result['variables']]
|
||||
)
|
||||
new_len += len(data)
|
||||
|
||||
if analysis_result['template_id'] in dict:
|
||||
dict[analysis_result['template_id']] +=1
|
||||
else:
|
||||
dict[analysis_result['template_id']] = 1
|
||||
print(f"[{len(data)}]->({analysis_result['template_id']})",data)
|
||||
|
||||
print(new_len / 1024)
|
||||
print(dict,sep="\n")
|
||||
|
||||
if __name__ == '__main__':
|
||||
local_test()
|
||||
# MODEL_PATH = './Resources/model'
|
||||
# DB_FILE = "logs.db"
|
||||
# INPUT_QUEUE = "input"
|
||||
# OUTPUT_QUEUE = "output"
|
||||
# OUTPUT_DEBUG_QUEUE = "debug_output"
|
||||
#
|
||||
# processor = LogProcessingWorker(MODEL_PATH, DB_FILE, INPUT_QUEUE, OUTPUT_QUEUE, OUTPUT_DEBUG_QUEUE)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user