From abb6b7f06d36bc236b20a48493bfa02f0bcac31c Mon Sep 17 00:00:00 2001 From: dr-wh0 <79003667309@yandex.ru> Date: Sun, 11 May 2025 16:16:31 +0300 Subject: [PATCH] =?UTF-8?q?FIX:=20=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC=D1=8B=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20Telegram?= =?UTF-8?q?=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Решает issue #27 Теперь в Telegram отправляется сообщение при ошибке записи в лог, пример сообщения: ``` ОШИБКА ЗАПИСИ В ЛОГ: Не удалось открыть лог-файл! ЛОГ: [2025-05-11 13:13:25.481] Starting DosAtk | Type: TCP SYN flood | Failed to create tcp syn raw-socket | Stopping DosAtk [2025-05-11 13:13:25.481] ``` Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/31 Reviewed-by: serafim Co-authored-by: dr-wh0 <79003667309@yandex.ru> Co-committed-by: dr-wh0 <79003667309@yandex.ru> --- src/DosAtk.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index 801bb75..f0b8040 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -507,6 +507,7 @@ int my_log() std::string rotated_log_name; // Новое имя файла при ротации int stat_result; // Результат проверки stat std::chrono::milliseconds ms; // Миллисекунды + std::ostringstream oss; const size_t max_log_size = 10485760; // Лимит размера лога (10MB) @@ -524,9 +525,16 @@ int my_log() now.time_since_epoch()) % 1000; // === Основная логика === + + oss << " | Stopping DosAtk [" << std::put_time(&now_tm, "%Y-%m-%d %H:%M:%S") + << "." << std::setfill('0') << std::setw(3) << ms.count() << "]" + << std::endl; + log_msg += oss.str(); + // Если путь к лог-файлу не указан if(log_file.empty()) { printf("end my_log\n"); // debug + msg = "ОШИБКА ЗАПИСИ В ЛОГ: Путь к лог-файлу не найден!\n\nЛОГ:\n" + log_msg; return 1; } @@ -536,13 +544,12 @@ int my_log() // Проверка успешности открытия файла if(!log_stream.is_open()) { printf("end my_log\n"); // debug + msg = "ОШИБКА ЗАПИСИ В ЛОГ: Не удалось открыть лог-файл!\n\nЛОГ:\n" + log_msg; return 1; } // Запись сообщения в лог - log_stream << log_msg << " | Stopping DosAtk [" << std::put_time(&now_tm, "%Y-%m-%d %H:%M:%S") - << "." << std::setfill('0') << std::setw(3) << ms.count() << "]" - << std::endl; + log_stream << log_msg; // Проверка размер файла и выполняем ротацию if(stat_result == 0 && file_stat.st_size > max_log_size) { @@ -551,6 +558,7 @@ int my_log() // Переименование файла if(rename(log_file.c_str(), rotated_log_name.c_str()) != 0) { printf("end my_log\n"); // debug + msg = "ОШИБКА ЗАПИСИ В ЛОГ: Ошибка при ротации лога - не удалось преименовать файл!\n\nЛОГ:\n" + log_msg; return 1; } @@ -558,6 +566,7 @@ int my_log() log_stream.open(log_file, std::ios::app); if(!log_stream.is_open()) { printf("end my_log\n"); // debug + msg = "ОШИБКА ЗАПИСИ В ЛОГ: Ошибка при ротации лога - не удалось открыть новый файл!\n\nЛОГ:\n" + log_msg; return 1; } }