]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавление отправки логов и з других источников
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 30 Oct 2024 15:02:44 +0000 (18:02 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 30 Oct 2024 15:02:44 +0000 (18:02 +0300)
erp24/actions/log/CollectAction.php
erp24/services/InfoLogService.php
erp24/services/LogService.php
erp24/services/TelegramService.php

index dbdf20a4bb71a4eef8dd616bcad62be939d00ef1..b87a6e2719a16754539efaaf754daacf454c8fe5 100755 (executable)
@@ -5,6 +5,7 @@ namespace yii_app\actions\log;
 
 use yii\base\Action;
 use yii_app\records\ErrorLog;
+use yii_app\services\TelegramService;
 
 /**
  * График сотрудников
@@ -26,7 +27,33 @@ class CollectAction extends Action
             'message'=> $this->controller->request->post('message', ''),
             'context'=> $this->controller->request->post('context', null),
         ]);
-        $log->save();
+        // Сохраняем лог в базе данных
+        if ($log->save()) {
+            // Формируем сообщение для отправки в Telegram с использованием MarkdownV2
+            $errorMessage = sprintf(
+                "*JavaScript Error Detected*\n\n" .
+                "*URL:*\n```%s```\n\n" .
+                "*Created At:*\n```%s```\n\n" .
+                "*IP:*\n```%s```\n\n" .
+                "*User Agent:*\n```%s```\n\n" .
+                "*File:* `%s`\n" .
+                "*Line:* `%s`, *Column:* `%s`\n" .
+                "*Message:*\n```%s```\n\n" .
+                "*Context:*\n```%s```",
+                $this->controller->request->getReferrer() ?? '<no referrer>',
+                date('Y-m-d H:i:s', $log->log_time),
+                $log->ip,
+                $log->user_agent,
+                $log->file ?? '<no file>',
+                $log->line ?? '<no line>',
+                $log->col ?? '<no col>',
+                $log->message,
+                $log->context ?? '<no context>'
+            );
+
+            // Отправляем сообщение об ошибке в Telegram через TelegramService
+            TelegramService::sendErrorToTelegramMessage($errorMessage);
+        }
     }
 
 }
index 591f74a49d9367095ff9d047393b8f5db8f2fab7..6aaae416f812860f536abd0b132710cdb99da195 100644 (file)
@@ -22,9 +22,23 @@ class InfoLogService
             ->setMessage($messageText)
             ->setLogTime()
             ->setCreatedAt();
-        $validate = $infoLog->validate();
-        if ($validate) {
-            $infoLog->save();
+        // Валидация и сохранение лога в базе данных
+        if ($infoLog->validate() && $infoLog->save()) {
+            // Форматируем сообщение для отправки в Telegram
+            $telegramMessage = sprintf(
+                "*Info Log Detected*\n\n" .
+                "*File:* `%s`\n" .
+                "*Line:* `%s`\n" .
+                "*Message:*\n```%s```\n\n" .
+                "*Context:*\n```%s```",
+                $file ?? '<no file>',
+                $line ?? '<no line>',
+                $messageText,
+                $context ?? '<no context>'
+            );
+
+            // Отправляем сообщение в Telegram
+            TelegramService::sendErrorToTelegramMessage($telegramMessage);
         }
     }
 
index 06baca0c713a8b1343199befe061cb5736c035ba..efee9ec749e82c0ad45f35bb8a2fda9c5128c780 100644 (file)
@@ -61,6 +61,24 @@ class LogService
             $apiErrorLog->payload = $jsonString;
             $apiErrorLog->ip = Yii::$app->request->remoteIP ?? '<no ip>';
             $apiErrorLog->save();
+
+            // Форматируем сообщение об ошибке для Telegram с использованием MarkdownV2
+            $errorMessage = sprintf(
+                "*API Error Detected*\n\n" .
+                "*URL:*\n```%s```\n\n" .
+                "*Created At:*\n```%s```\n\n" .
+                "*IP:*\n```%s```\n\n" .
+                "*Payload:*\n```json\n%s```",
+                $apiErrorLog->url,
+                $apiErrorLog->created_at,
+                $apiErrorLog->ip,
+                $jsonString
+            );
+
+            // Отправляем сообщение об ошибке в Telegram
+            TelegramService::sendErrorToTelegramMessage($errorMessage);
+
+
         } else {
             $h->actualed_at = date('Y-m-d H:i:s');
             $h->ip = Yii::$app->request->remoteIP ?? '<no ip>';
index 84eedf5b8e56c4aff5f9b7240105cf4d66e01760..c75dc0c5d80f11a0926f1edd1f72013929772b5f 100644 (file)
@@ -2,7 +2,15 @@
 
 namespace yii_app\services;
 
+use GuzzleHttp\Client;
+use Yii;
+
 class TelegramService {
+
+
+    const TELEGRAM_API_URL = "8063257458:AAGnMf4cxwJWlYLF1wS_arn4PrOaLs9ERQQ";
+
+    const CHAT_CHANNEL_ID ="-1001861631125";
     public static function sendMessage($admin_id, $message, $reply_markup = null) {
         $url = "https://api2.bazacvetov24.ru/telegram/send-message?admin_id=$admin_id&message=$message";
         if ($reply_markup) {
@@ -11,4 +19,26 @@ class TelegramService {
         $client = new \GuzzleHttp\Client();
         return $client->request('GET', $url);
     }
+
+public static function sendErrorToTelegramMessage($message)
+{
+    $botToken = self::TELEGRAM_API_URL;
+    $chatId = self::CHAT_CHANNEL_ID;
+    $apiURL = "https://api.telegram.org/bot{$botToken}/sendMessage";
+
+    $client = new Client();
+    try {
+        $client->post($apiURL, [
+            'json' => [
+                'chat_id' => $chatId,
+                'text' => $message,
+                'parse_mode' => 'MarkdownV2'
+            ],
+        ]);
+    } catch (\Exception $e) {
+        Yii::error("Ошибка отправки сообщения в Telegram: " . $e->getMessage(), 'telegram');
+    }
+}
+
+
 }
\ No newline at end of file