From: fomichev Date: Wed, 30 Oct 2024 15:02:44 +0000 (+0300) Subject: Добавление отправки логов и з других источников X-Git-Tag: 1.6~21^2~4 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=696589ad361bfac1df317ee2fa2695a9cf97901f;p=erp24_rep%2Fyii-erp24%2F.git Добавление отправки логов и з других источников --- diff --git a/erp24/actions/log/CollectAction.php b/erp24/actions/log/CollectAction.php index dbdf20a4..b87a6e27 100755 --- a/erp24/actions/log/CollectAction.php +++ b/erp24/actions/log/CollectAction.php @@ -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() ?? '', + date('Y-m-d H:i:s', $log->log_time), + $log->ip, + $log->user_agent, + $log->file ?? '', + $log->line ?? '', + $log->col ?? '', + $log->message, + $log->context ?? '' + ); + + // Отправляем сообщение об ошибке в Telegram через TelegramService + TelegramService::sendErrorToTelegramMessage($errorMessage); + } } } diff --git a/erp24/services/InfoLogService.php b/erp24/services/InfoLogService.php index 591f74a4..6aaae416 100644 --- a/erp24/services/InfoLogService.php +++ b/erp24/services/InfoLogService.php @@ -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 ?? '', + $line ?? '', + $messageText, + $context ?? '' + ); + + // Отправляем сообщение в Telegram + TelegramService::sendErrorToTelegramMessage($telegramMessage); } } diff --git a/erp24/services/LogService.php b/erp24/services/LogService.php index 06baca0c..efee9ec7 100644 --- a/erp24/services/LogService.php +++ b/erp24/services/LogService.php @@ -61,6 +61,24 @@ class LogService $apiErrorLog->payload = $jsonString; $apiErrorLog->ip = Yii::$app->request->remoteIP ?? ''; $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 ?? ''; diff --git a/erp24/services/TelegramService.php b/erp24/services/TelegramService.php index 84eedf5b..c75dc0c5 100644 --- a/erp24/services/TelegramService.php +++ b/erp24/services/TelegramService.php @@ -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