From: fomichev Date: Sat, 2 Nov 2024 08:01:29 +0000 (+0300) Subject: Перенос метода в TelegramService X-Git-Tag: 1.6~21^2~1 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=327783a3b904a68ff6fa8e4790959e41bd5861db;p=erp24_rep%2Fyii-erp24%2F.git Перенос метода в TelegramService --- diff --git a/erp24/actions/log/CollectAction.php b/erp24/actions/log/CollectAction.php index 5cd86e99..8abe084f 100755 --- a/erp24/actions/log/CollectAction.php +++ b/erp24/actions/log/CollectAction.php @@ -27,52 +27,52 @@ class CollectAction extends Action 'message'=> $this->controller->request->post('message', ''), 'context'=> $this->controller->request->post('context', null), ]); - // Сохраняем лог в базе данных + if ($log->save()) { - // Проверка на наличие аналогичных записей перед отправкой в Telegram + if (!self::shouldSendToTelegram($log)) { - return; // Пропускаем отправку, если уже есть записи за текущую дату + return; } // Формируем сообщение для отправки в Telegram с использованием MarkdownV2 $errorMessage = "⚠️*Ошибка JavaScript Обнаружена*⚠️\n\n"; -// Добавляем строки в сообщение только если параметры присутствуют + if ($url = $this->controller->request->getReferrer()) { - $errorMessage .= "*URL:*\n```" . self::escapeMarkdown($url) . "```\n\n"; + $errorMessage .= "*URL:*\n```" . TelegramService::escapeMarkdownLog($url) . "```\n\n"; } if ($createdAt = date('Y-m-d H:i:s', $log->log_time)) { - $errorMessage .= "*Created At:*\n```" . self::escapeMarkdown($createdAt) . "```\n\n"; + $errorMessage .= "*Created At:*\n```" . TelegramService::escapeMarkdownLog($createdAt) . "```\n\n"; } if ($ip = $log->ip) { - $errorMessage .= "*IP:*\n```" . self::escapeMarkdown($ip) . "```\n\n"; + $errorMessage .= "*IP:*\n```" . TelegramService::escapeMarkdownLog($ip) . "```\n\n"; } if ($userAgent = $log->user_agent) { - $errorMessage .= "*User Agent:*\n```" . self::escapeMarkdown($userAgent) . "```\n\n"; + $errorMessage .= "*User Agent:*\n```" . TelegramService::escapeMarkdownLog($userAgent) . "```\n\n"; } if ($file = $log->file) { - $errorMessage .= "*File:*\n```" . self::escapeMarkdown($file) . "```\n\n"; + $errorMessage .= "*File:*\n```" . TelegramService::escapeMarkdownLog($file) . "```\n\n"; } if ($line = $log->line) { - $errorMessage .= "*Line:*\n```" . self::escapeMarkdown($line) . "```\n\n"; + $errorMessage .= "*Line:*\n```" . TelegramService::escapeMarkdownLog($line) . "```\n\n"; } if ($col = $log->col) { - $errorMessage .= "*Column:*\n```" . self::escapeMarkdown($col) . "```\n\n"; + $errorMessage .= "*Column:*\n```" . TelegramService::escapeMarkdownLog($col) . "```\n\n"; } if ($message = $log->message) { - $errorMessage .= "*Message:*\n```" . self::escapeMarkdown($message) . "```\n\n"; + $errorMessage .= "*Message:*\n```" . TelegramService::escapeMarkdownLog($message) . "```\n\n"; } if ($context = $log->context) { - $errorMessage .= "*Context:*\n```" . self::escapeMarkdown($context) . "```\n\n"; + $errorMessage .= "*Context:*\n```" . TelegramService::escapeMarkdownLog($context) . "```\n\n"; } @@ -87,9 +87,9 @@ class CollectAction extends Action // Метод для проверки наличия аналогичных записей в ErrorLog за текущую дату private static function shouldSendToTelegram($log) { - $startOfDay = strtotime('today'); // Метка времени для начала текущего дня + $startOfDay = strtotime('today'); + - // Запрос в таблицу ErrorLog для поиска аналогичных записей $count = ErrorLog::find() ->where([ 'ip' => $log->ip, @@ -106,16 +106,9 @@ class CollectAction extends Action ->andWhere(['>=', 'log_time', $startOfDay]) // Фильтр по началу текущего дня ->count(); - return $count <= 1; // Отправляем только если нет более одной записи + return $count <= 1; } - private static function escapeMarkdown($text) - { - $specialChars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; - foreach ($specialChars as $char) { - $text = str_replace($char, '\\' . $char, $text); - } - return $text; - } + } diff --git a/erp24/config/params.php b/erp24/config/params.php index 37770594..7dfdb4ea 100644 --- a/erp24/config/params.php +++ b/erp24/config/params.php @@ -5,7 +5,7 @@ return [ //'TELEGRAM_API_URL' => "https://api.telegram.org/bot6189425433:AAFQ91OYiMiyj2jgIgmx3O2yTBl4enywySM/", 'TELEGRAM_API_URL' => "https://api.telegram.org/bot8063257458:AAGnMf4cxwJWlYLF1wS_arn4PrOaLs9ERQQ/", //'TELEGRAM_WEBHOOK_URL' => "https://api2.bazacvetov24.ru/telegram/webhook", - 'TELEGRAM_WEBHOOK_URL' => "https://api2.dev.erp-flowers.ru/telegram/webhook", + 'TELEGRAM_WEBHOOK_URL' => YII_DEBUG ? "https://api2.dev.erp-flowers.ru/telegram/webhook" : "https://api2.erp.erp-flowers.ru/telegram/webhook", 'CAMERAS' => [ ['Login' => 'mochage-8r-136', 'Password' => 'fjtq8z3u'], ['Login' => 'kuznzx-am-136', 'Password' => '8e4ma237'], diff --git a/erp24/log/TelegramTarget.php b/erp24/log/TelegramTarget.php index ebe4efb2..b0e1818f 100644 --- a/erp24/log/TelegramTarget.php +++ b/erp24/log/TelegramTarget.php @@ -61,31 +61,31 @@ class TelegramTarget extends \yii\log\Target // Если ошибка уже была за текущую дату if ($date === $currentDate && $count >= 1) { - return false; // Не отправляем + return false; } - // Увеличиваем счётчик и обновляем дату + $count++; $line = implode('|', [$currentDate, $count, $hash, $errorText]); break; } } - // Если ошибка новая, добавляем её в список + if (!$errorExists) { $errorLines[] = implode('|', [$currentDate, 1, $currentErrorHash, $currentError]); } - // Сохраняем обновлённый список ошибок + file_put_contents($filePath, implode(PHP_EOL, $errorLines) . PHP_EOL); - return true; // Ошибка не найдена или обновлена, можно отправлять + return true; } -// Метод для нормализации текста ошибки + private function normalizeText($text) { - // Приводим текст к единому формату: нижний регистр, удаление лишних пробелов + $text = strtolower($text); $text = preg_replace('/\s+/', ' ', $text); return trim($text); @@ -108,7 +108,7 @@ class TelegramTarget extends \yii\log\Target // Проверка наличия подобных сообщений if (!$this->shouldSendMessage($errorText)) { - return; // Пропускаем отправку, если ошибка уже зарегистрирована + return; } // Формирование уровня и основного сообщения diff --git a/erp24/services/InfoLogService.php b/erp24/services/InfoLogService.php index 6b9795df..5f041373 100644 --- a/erp24/services/InfoLogService.php +++ b/erp24/services/InfoLogService.php @@ -29,29 +29,29 @@ class InfoLogService // Валидация и сохранение лога в базе данных if ($infoLog->validate() && $infoLog->save()) { - // Проверяем, нужно ли отправлять сообщение в Telegram + if (!self::shouldSendToTelegram($file, $line, $messageText, $context)) { - return; // Пропускаем отправку, если уже есть записи за текущую дату + return; } - // Формируем сообщение для отправки в Telegram + $telegramMessage = "⚠️*Сообщение из InfoLog*⚠️\n\n"; - // Добавляем строки в сообщение только если параметры присутствуют + if ($file) { - $telegramMessage .= "*File:*\n```" . self::escapeMarkdown($file) . "```\n\n"; + $telegramMessage .= "*File:*\n```" . TelegramService::escapeMarkdownLog($file) . "```\n\n"; } if ($line) { - $telegramMessage .= "*Line:*\n```" . self::escapeMarkdown($line) . "```\n\n"; + $telegramMessage .= "*Line:*\n```" . TelegramService::escapeMarkdownLog($line) . "```\n\n"; } if ($messageText) { - $telegramMessage .= "*Сообщение:*\n```log" . self::escapeMarkdown($messageText) . "```\n\n"; + $telegramMessage .= "*Сообщение:*\n```log" . TelegramService::escapeMarkdownLog($messageText) . "```\n\n"; } if ($context) { - $telegramMessage .= "*Context:*\n```log" . self::escapeMarkdown($context) . "```\n\n"; + $telegramMessage .= "*Context:*\n```log" . TelegramService::escapeMarkdownLog($context) . "```\n\n"; } @@ -62,15 +62,7 @@ class InfoLogService } - // Метод для экранирования символов MarkdownV2 - private static function escapeMarkdown($text) - { - $specialChars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; - foreach ($specialChars as $char) { - $text = str_replace($char, '\\' . $char, $text); - } - return $text; - } + // Метод для проверки, существуют ли подобные записи в InfoLog за текущую дату @@ -78,7 +70,7 @@ class InfoLogService { $currentDate = date('Y-m-d'); - // Выполняем запрос, чтобы найти записи с такими же значениями за текущую дату + $count = InfoLog::find() ->where([ 'file' => $file, @@ -89,7 +81,7 @@ class InfoLogService ->andWhere(['>=', 'created_at', new Expression("DATE('$currentDate')")]) ->count(); - return $count <= 1; // Возвращаем true, только если нет более одной записи + return $count <= 1; } } \ No newline at end of file diff --git a/erp24/services/LogService.php b/erp24/services/LogService.php index f4c75019..b8baebc1 100644 --- a/erp24/services/LogService.php +++ b/erp24/services/LogService.php @@ -62,9 +62,9 @@ class LogService $apiErrorLog->ip = Yii::$app->request->remoteIP ?? ''; $apiErrorLog->save(); - // Проверка на наличие аналогичной записи перед созданием новой и отправкой в Telegram + if (!self::shouldSendToTelegram($hash_input, $jsonString)) { - return; // Пропускаем отправку, если уже есть аналогичная запись за текущую дату + return; } @@ -73,7 +73,7 @@ class LogService // Добавляем строки только если параметры присутствуют if ($url = $apiErrorLog->url) { - $errorMessage .= "*URL:*\n```" . self::escapeMarkdown($url) . "```\n\n"; + $errorMessage .= "*URL:*\n```" . TelegramService::escapeMarkdownLog($url) . "```\n\n"; } if ($createdAt = $apiErrorLog->created_at) { @@ -81,7 +81,7 @@ class LogService } if ($ip = $apiErrorLog->ip) { - $errorMessage .= "*IP:*\n```" . self::escapeMarkdown($ip) . "```\n\n"; + $errorMessage .= "*IP:*\n```" . TelegramService::escapeMarkdownLog($ip) . "```\n\n"; } if ($jsonString) { @@ -102,21 +102,12 @@ class LogService } -// Метод для экранирования символов MarkdownV2 - private static function escapeMarkdown($text) - { - $specialChars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; - foreach ($specialChars as $char) { - $text = str_replace($char, '\\' . $char, $text); - } - return $text; - } // Метод для проверки наличия аналогичных записей в ApiErrorLog за текущую дату private static function shouldSendToTelegram($hash_input, $jsonString) { - $startOfDay = strtotime('today'); // Метка времени для начала текущего дня + $startOfDay = strtotime('today'); // Запрос в таблицу ApiErrorLog для поиска аналогичных записей за текущую дату $count = ApiErrorLog::find() @@ -129,7 +120,7 @@ class LogService ->andWhere(['>=', 'created_at', date('Y-m-d H:i:s', $startOfDay)]) // Фильтр по началу текущего дня ->count(); - return $count <= 1; // Отправляем только если нет более одной записи + return $count <= 1; } diff --git a/erp24/services/TelegramService.php b/erp24/services/TelegramService.php index 2f905573..e44af0cb 100644 --- a/erp24/services/TelegramService.php +++ b/erp24/services/TelegramService.php @@ -42,10 +42,10 @@ public static function sendErrorToTelegramMessage($message,$disableNotification) } - // Метод для экранирования символов MarkdownV2 + // Метод для экранирования символов MarkdownV2 для файла public static function escapeMarkdown($text) { - // Экранирование символов, зарезервированных в MarkdownV2 + $specialChars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; foreach ($specialChars as $char) { @@ -57,5 +57,15 @@ public static function sendErrorToTelegramMessage($message,$disableNotification) return $text; } + // Метод для экранирования символов MarkdownV2 для логов из БД + public static function escapeMarkdownLog($text) + { + $specialChars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; + foreach ($specialChars as $char) { + $text = str_replace($char, '\\' . $char, $text); + } + return $text; + } + } \ No newline at end of file