Вебмастера и разработчики часто сталкиваются с необходимостью мониторинга доступности сайтов или сервисов. В этой статье мы разберём, как с помощью WordPress и встроенного планировщика задач WP Cron создать простой пинг-монитор для проверки доступности вашего сайта или внешних ресурсов. Это решение поможет вовремя обнаруживать проблемы с доступностью и получать уведомления.
Что такое пинг-монитор и зачем он нужен в WordPress
Пинг-монитор — это инструмент, который периодически проверяет ответ сервера по определённому URL. Если сайт перестаёт отвечать или возвращает ошибку, мониторинг фиксирует это и может уведомить администратора.
Для WordPress полезно иметь такой мониторинг, чтобы оперативно реагировать на возможные сбои. Особенно если вы управляете клиентскими сайтами или сервисами, где важно быстрое восстановление работы.
Рассмотрим, как создать собственный простой пинг-монитор с помощью собственного плагина, используя WP Cron и HTTP API WordPress.
Создание пинг-монитора: основные шаги и функции
Для пинг-монитора нам необходимы:
- Планировщик заданий, который будет регулярно запускать проверку — WP Cron.
- Функция для отправки HTTP-запроса и проверки ответа — wp_remote_get().
- Логирование и уведомления при ошибках — например, отправка email.
Начнём с создания плагина с минимальной структурой и добавим необходимые функции.
Регистрация cron-задания для регулярного пинга
В файле плагина (например, wpdetect-ping-monitor.php) добавим код для регистрации собственного события WP Cron, которое будет запускаться, к примеру, каждые 10 минут.
register_activation_hook(__FILE__, 'wpdetect_activate_ping_monitor');
register_deactivation_hook(__FILE__, 'wpdetect_deactivate_ping_monitor');
function wpdetect_activate_ping_monitor() {
if (!wp_next_scheduled('wpdetect_ping_check_event')) {
wp_schedule_event(time(), 'ten_minutes', 'wpdetect_ping_check_event');
}
}
function wpdetect_deactivate_ping_monitor() {
wp_clear_scheduled_hook('wpdetect_ping_check_event');
}
add_filter('cron_schedules', 'wpdetect_add_ten_minutes_schedule');
function wpdetect_add_ten_minutes_schedule($schedules) {
$schedules['ten_minutes'] = [
'interval' => 600, // 600 секунд = 10 минут
'display' => __('Каждые 10 минут')
];
return $schedules;
}Этот код добавляет новое расписание для WP Cron и регистрирует запуск события wpdetect_ping_check_event каждые 10 минут.
Функция проверки доступности сайта
Теперь создадим функцию, которая будет выполнять HTTP-запрос и проверять ответ. Она должна логировать ошибки и уведомлять администратора по email.
add_action('wpdetect_ping_check_event', 'wpdetect_ping_check_function');
function wpdetect_ping_check_function() {
$url = home_url(); // Можно заменить на любой URL для мониторинга
$response = wp_remote_get($url, [
'timeout' => 10,
]);
if (is_wp_error($response)) {
$error_message = $response->get_error_message();
wpdetect_send_alert_email("Пинг-сервер не доступен: $error_message");
wpdetect_log_ping_status(false, $error_message);
return;
}
$status_code = wp_remote_retrieve_response_code($response);
if ($status_code !== 200) {
wpdetect_send_alert_email("Пинг-сервер вернул статус: $status_code");
wpdetect_log_ping_status(false, "Статус: $status_code");
return;
}
wpdetect_log_ping_status(true, "Статус: $status_code");
}Логирование и отправка уведомлений
Для удобства создадим две вспомогательные функции: одна будет логировать результат в отдельную таблицу или файл, другая — отправлять email.
Пример простой функции отправки email:
function wpdetect_send_alert_email($message) {
$admin_email = get_option('admin_email');
$subject = 'WPDetect: проблема с пингом сайта';
wp_mail($admin_email, $subject, $message);
}Для логирования можно использовать опцию в базе данных или файл. Для простоты используем запись в файл wp-content/wpdetect-ping-log.txt:
function wpdetect_log_ping_status($success, $message) {
$log_file = WP_CONTENT_DIR . '/wpdetect-ping-log.txt';
$date = date('Y-m-d H:i:s');
$status = $success ? 'Успешно' : 'Ошибка';
$log_entry = "[$date] $status: $message\n";
file_put_contents($log_file, $log_entry, FILE_APPEND);
}Расширение пинг-монитора: проверка нескольких URL и кастомизация
Мониторинг нескольких адресов
Часто полезно проверять не только сам сайт, но и внешние сервисы, API и т.п. Для этого можно расширить функцию, добавив массив URL для проверки:
function wpdetect_ping_check_function() {
$urls = [
home_url(),
'https://api.wpdetect.ru',
'https://example.com/health'
];
foreach ($urls as $url) {
$response = wp_remote_get($url, ['timeout' => 10]);
if (is_wp_error($response)) {
wpdetect_send_alert_email("Пинг $url не доступен: " . $response->get_error_message());
wpdetect_log_ping_status(false, "$url - ошибка: " . $response->get_error_message());
continue;
}
$status_code = wp_remote_retrieve_response_code($response);
if ($status_code !== 200) {
wpdetect_send_alert_email("Пинг $url вернул статус: $status_code");
wpdetect_log_ping_status(false, "$url - статус: $status_code");
continue;
}
wpdetect_log_ping_status(true, "$url - статус: $status_code");
}
}Настройка интервала пинга через админку
Чтобы сделать плагин удобнее, можно добавить страницу настроек, где пользователь сможет менять интервал проверки и список URL.
Для этого реализуйте страницу в админ-панели с формой, сохраняйте данные в опции и используйте эти опции в функции пинга.
Это позволит гибко контролировать мониторинг без правки кода.
Заключение по созданию пинг-монитора в WordPress
WP Cron и HTTP API позволяют достаточно просто создать собственный пинг-монитор в WordPress, который будет проверять доступность сайтов и сервисов с нужным интервалом. Такой инструмент полезен для отслеживания состояния проектов и быстрого реагирования на сбои.
Приведённые примеры можно расширять, добавлять интеграцию с Slack, Telegram, создавать более сложные отчёты и интерфейсы. Главное — понимать базовые принципы работы с WP Cron и HTTP API, чтобы создавать надёжные и эффективные решения.