170 похожих чатов

Понимаю, что это пишется в ЧатГПТ за минуту всё, но

вдруг кому-то целую минуту сэкономлю) Или на мысль натолкну. Недавно сервак внезапно стал 502 отдавать по всем сайтам. А я узнал об этом спустя 30 минут, так получилось.

Вот и набросал код, который висит на кроне, который опрашивает Х сайтов раз в 5 минут. Повесил на сайты специально разной конфигурации: эво, рево, битрикс, вп, опенкарт, без админки вообще. И в телеграм группу с C-lvl моими падает сообщение, если что-то идёт не так.
Сейчас донастраиваю бота, чтобы можно было через условный /reboot по api перезагрузить сервер.


<?php

// Конфигурация Telegram API
$botToken = '';
$chatId = '';

// Список сайтов для проверки
$urls = [
'https://site1.ru',
'https://site2.ru',
'https://site3.ru'
];

// Функция для проверки доступности сайта
function isSiteAvailable($url) {
// Проверка правильности URL
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}

// Инициализация cURL
$curlInit = curl_init($url);

// Установка параметров запроса
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10); // Максимальное время ожидания подключения (в секундах)
curl_setopt($curlInit, CURLOPT_HEADER, true); // Получение заголовка ответа
curl_setopt($curlInit, CURLOPT_NOBODY, true); // Исключение тела ответа
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true); // Возвращение результата в виде строки
curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, true); // Следование за редиректами

// Выполнение запроса
$response = curl_exec($curlInit);

// Получение HTTP-кода ответа
$httpCode = curl_getinfo($curlInit, CURLINFO_HTTP_CODE);

// Закрытие cURL-сессии
curl_close($curlInit);

// Логирование кода ответа (для отладки)
error_log("HTTP-код ответа для $url: $httpCode");

// Считаем сайт доступным только если код ответа в диапазоне 200-299
return ($httpCode >= 200 && $httpCode < 300);
}

// Переменные для хранения доступных и недоступных сайтов
$unavailableSites = [];
$availableSites = [];

// Проверка доступности каждого сайта и заполнение списков
foreach ($urls as $url) {
if (isSiteAvailable($url)) {
$availableSites[] = $url; // Сайт доступен
} else {
$unavailableSites[] = $url; // Сайт недоступен
}
}

// Обработка состояний доступности сайтов
if (count($unavailableSites) === count($urls)) {
// Если все сайты недоступны, отправляем соответствующее сообщение в Telegram
$message = "Все сайты недоступны. Пожалуйста, проверьте их состояние.";
sendMessageToTelegram($botToken, $chatId, $message);
echo "Все сайты недоступны. Отправлено уведомление в Telegram.";
} elseif (count($availableSites) === count($urls)) {
// Если все сайты доступны, ничего не делаем
echo "Все сайты доступны. Уведомления не отправляются.";
} else {
// Если только некоторые сайты недоступны, отправляем список недоступных сайтов
$unavailableSitesList = implode(", ", $unavailableSites);
$message = "Эти сайты недоступны: $unavailableSitesList.";
sendMessageToTelegram($botToken, $chatId, $message);
echo "Некоторые сайты недоступны. Отправлено уведомление в Telegram.";
}

// Функция для отправки сообщения в Telegram
function sendMessageToTelegram($botToken, $chatId, $message) {
$url = "https://api.telegram.org/bot$botToken/sendMessage";
$data = [
'chat_id' => $chatId,
'text' => $message,
];

$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
],
];

$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

}
?>

11 ответов

23 просмотра

Советую ознакомиться: templatesEdit3

Стикер

Andrey-Ivanov Автор вопроса

не понял)

Забикс? он умеет sh дергать при инцидентах. А в sh уже в тг сообщение или письмо, всё что угодно

Alexander Andreev
Забикс? он умеет sh дергать при инцидентах. А в sh...

угуу... я вот писал выше - что для серьезного кол-ва проектов уже надо забикс поднимать

Alexander Andreev
Забикс? он умеет sh дергать при инцидентах. А в sh...

вот я тоже зачем писать свой велик если есть готовых систем куча большая с более гибким мониторингом, хотя свой велик ближе к жопе телу и приятно иметь ловкую самодельную систему

Можно в вк утащить? Или лучше в Быстрые решения на сайт сообщества, я "оттуда" опубликую)

Andrey Ivanov
куда угодно)

Опубликуйте, пожалуйста, на сайте сообщества. Будет прям ооочень хорошо

хуета какая-то

Pathologic
хуета какая-то

кот добрый. пришел всем говна за шиворот накидал

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта