]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Перенос метода в TelegramService
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Sat, 2 Nov 2024 08:01:29 +0000 (11:01 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Sat, 2 Nov 2024 08:01:29 +0000 (11:01 +0300)
erp24/actions/log/CollectAction.php
erp24/config/params.php
erp24/log/TelegramTarget.php
erp24/services/InfoLogService.php
erp24/services/LogService.php
erp24/services/TelegramService.php

index 5cd86e999cd6bcf39083add455163d8037313bab..8abe084fd4a5fba7008168d08f7830cd1ca2e416 100755 (executable)
@@ -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;
-    }
+   
 
 }
index 37770594526395f37cdc7b23fa4bdadd12284dfd..7dfdb4ea32c4c38a8bad55b9a470003e8a168d86 100644 (file)
@@ -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'],
index ebe4efb28b1561fff3488d68c62683dc102b18a1..b0e1818f93376f91313ad5e81ad8bab294379482 100644 (file)
@@ -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;
         }
 
         // Формирование уровня и основного сообщения
index 6b9795df2f841e13822060f58797fe68682daf5f..5f041373e9b5833d17c722f4820db49f56ceba45 100644 (file)
@@ -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
index f4c75019e7d49c9eb61e2383a6e29fbcc5ad8a2a..b8baebc185ffd3c386c28d061bb910f37b9679ea 100644 (file)
@@ -62,9 +62,9 @@ class LogService
             $apiErrorLog->ip = Yii::$app->request->remoteIP ?? '<no ip>';
             $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;
     }
 
 
index 2f90557305ded254335526a100e1ca06f09bd783..e44af0cb3f9e5879d9e567fba820ab5e326d1582 100644 (file)
@@ -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