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 ответов

6 просмотров

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

Стикер

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

не понял)

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

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

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

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

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

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

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

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

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

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

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта