FIX: Решение проблемы отправки сообщения в Telegram (#31)
### Решает 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 <simasuh@gmail.com> Co-authored-by: dr-wh0 <79003667309@yandex.ru> Co-committed-by: dr-wh0 <79003667309@yandex.ru>
This commit is contained in:
parent
bca0037807
commit
abb6b7f06d
|
@ -507,6 +507,7 @@ int my_log()
|
||||||
std::string rotated_log_name; // Новое имя файла при ротации
|
std::string rotated_log_name; // Новое имя файла при ротации
|
||||||
int stat_result; // Результат проверки stat
|
int stat_result; // Результат проверки stat
|
||||||
std::chrono::milliseconds ms; // Миллисекунды
|
std::chrono::milliseconds ms; // Миллисекунды
|
||||||
|
std::ostringstream oss;
|
||||||
|
|
||||||
const size_t max_log_size = 10485760; // Лимит размера лога (10MB)
|
const size_t max_log_size = 10485760; // Лимит размера лога (10MB)
|
||||||
|
|
||||||
|
@ -524,9 +525,16 @@ int my_log()
|
||||||
now.time_since_epoch()) % 1000;
|
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()) {
|
if(log_file.empty()) {
|
||||||
printf("end my_log\n"); // debug
|
printf("end my_log\n"); // debug
|
||||||
|
msg = "ОШИБКА ЗАПИСИ В ЛОГ: Путь к лог-файлу не найден!\n\nЛОГ:\n" + log_msg;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -536,13 +544,12 @@ int my_log()
|
||||||
// Проверка успешности открытия файла
|
// Проверка успешности открытия файла
|
||||||
if(!log_stream.is_open()) {
|
if(!log_stream.is_open()) {
|
||||||
printf("end my_log\n"); // debug
|
printf("end my_log\n"); // debug
|
||||||
|
msg = "ОШИБКА ЗАПИСИ В ЛОГ: Не удалось открыть лог-файл!\n\nЛОГ:\n" + log_msg;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запись сообщения в лог
|
// Запись сообщения в лог
|
||||||
log_stream << log_msg << " | Stopping DosAtk [" << std::put_time(&now_tm, "%Y-%m-%d %H:%M:%S")
|
log_stream << log_msg;
|
||||||
<< "." << std::setfill('0') << std::setw(3) << ms.count() << "]"
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
// Проверка размер файла и выполняем ротацию
|
// Проверка размер файла и выполняем ротацию
|
||||||
if(stat_result == 0 && file_stat.st_size > max_log_size) {
|
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) {
|
if(rename(log_file.c_str(), rotated_log_name.c_str()) != 0) {
|
||||||
printf("end my_log\n"); // debug
|
printf("end my_log\n"); // debug
|
||||||
|
msg = "ОШИБКА ЗАПИСИ В ЛОГ: Ошибка при ротации лога - не удалось преименовать файл!\n\nЛОГ:\n" + log_msg;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,6 +566,7 @@ int my_log()
|
||||||
log_stream.open(log_file, std::ios::app);
|
log_stream.open(log_file, std::ios::app);
|
||||||
if(!log_stream.is_open()) {
|
if(!log_stream.is_open()) {
|
||||||
printf("end my_log\n"); // debug
|
printf("end my_log\n"); // debug
|
||||||
|
msg = "ОШИБКА ЗАПИСИ В ЛОГ: Ошибка при ротации лога - не удалось открыть новый файл!\n\nЛОГ:\n" + log_msg;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue