as_dbserver_check: сигнализация для упавшего сервера БД

Иногда сервер баз данных у провайдера "ложится", и это может быть серьезным ударом по бизнесу компании (интернет-магазины, онлайн-страхование и прочие WEB-приложения без БД жить не могут). Чем скорее вы или ваш админ узнаете об этом, тем скорее можно начать устранять проблему.

Назначение предлагаемого класса - выявлять "умершие" сервера БД и немедленно сообщать об этом по эл.почте администратору сайта и, при необходимости, службе поддержки вашего хостинг-провайдера. При этом в письмо для тех-поддержки можно включить дополнительный текст, например с Вашими данными клиента (номер договора с провайдером, ИД клиента и т.д. - обычно админы провайдера требуют эти данные перед началом разговора с клиентом).

Настроив регулярный вызов скрипта (например, каждые 10 минут), вы получите мини-сигнализацию, которая сработает при пропадании указанных DBMS-сервисов.

Когда сервер БД вернется в рабочее состояние, вы также получите уведомление типа "Я снова в строю".
Поддерживаемые БД: Модуль тестировался и используется с базами MySQL. Остальные типы БД не проверены, поэтому просьба при обнаружении проблем сообщить автору.

Дополнительная функция : если у вас есть работающий механизм отправки SMS-ок, он также может быть использован для отправки дублирующих сообщений на ваш мобильник, для этого просто регистрируется имя PHP функции, осуществляющей отправку SMS.

Установка на сайте

Пример кода

require_once('as_dbserver_check.php');

$checker = new CDbChecker('My tiny site','','My client ID is 7777, agreement 10101/2009');
$checker->SetEmails('myownmail@acme.com','support@my-isp.com');

$checker->AddServer(DBTYPE_MYSQL,'localhost','username','password');
$checker->CheckDbState();

Использование класса CDbChecker

Модуль содержит единственный класс - CDbChecker. Вся работа по проверке состояния серверов выполняется в методе CheckDbState(), поэтому все параметры должны быть установлены до его старта, вызовом соответствующих функций.
Список методов класса.

CDbChecker($title='', $homefolder='', $isptext='') - конструктор класса.

$title может содержать любой "заголовочный" текст. Включается в тест отправляемого сообщения и позволяет понять, с какого ресурса/сайта (от какого провайдера) пришел сигнал.

$homefolder - "рабочая" папка на сервере, в которой создаются файлы-"флажки". Эти файлы создаются чтобы запомнить результат предыдущей проверки и не рассылать повторных сообщений в случае продолжительного "лежания" сервера. Когда сервер вернется в рабочее состояние, соответствующий файл-флаг удаляется, а вашему админу посылается однократное сообщение "я снова в строю".
Значение по умолчанию - текущая папка, './'

$isptext дополнительный текст, который вставляется в сообщение тех-поддержке провайдера и служит для передачи ваших учетных данных клиента.

SetEmails($adminemail,$ispemail='', $emailcset='') регистрирует два адреса email: веб-администратора в вашей компании (ответственного за работу сайта) и адрес тех-поддержки вашего хостинг-провайдера. Пустая строка в любом адресе отключает соответствующую отправку. Сообщения о "падении" серверов посылаются на оба адреса, а сообщение о восстановлении работы - только вашему веб-админу.

AddServer($dbtype,$address,$login='',$passwd='',$connfunc=false,$downtime='') - метод регистрирует сервер БД для проверки.

$dbtype один из номеров типов БД. Для его задания можно использовать константы DBTYPE_MYSQL,DBTYPE_MSQL,DBTYPE_POSTGRESQL,DBTYPE_ORACLE,DBTYPE_MSSQL,DBTYPE_DB2, или это может быть любое другое значение для неизвестного типа БД.

$address строка с адресом сервера (для каждой БД может иметь разный смысл). Для MySQL это может быть строка вида "host:port".
Для PostgreSQL этот параметр может содержать полную строку всех значений: "host=localhost port=5432 dbname=mary" (новый формат pg_connect format)- в этом случае прочие параметры - $login и $password - не нужны. В противном случае строка коннекта будет составлена из переданных адреса, логина и пароля.
Если Ваш postgreSQL сервер имеет нестандартный порт, или другой параметр, используйте полную строку в $address.

$connfunc необязательное имя PHP функции, выполняющей соединение с сервером - используется для "неизвестных" типов БД. Функция $connfunc должна возвращать непустое значение, если соединение было установлено, и пустое (0,false) при ошибке подключения.

$downtime можно использовать, чтобы указать время "сервисного" останова базы (например, для ночных регламентных работ у провайдера). Допустим, с 2-х до 4-х часов ночи ваш провадер может останавливать БД для резервного копирования и др.работ. И попытки проверить состояние базы на это время лучше бы прекратить.
В этом случае в параметре $downtime передается строка в формате "hh:mm-hh:mm", содержащая время старта и окончания сервисного периода (hh-часы, mm-минуты, по 2 символа).
В нашем примере строка должна содержать "02:00-04:00".
Естественно, эта "пауза в работе" может быть настроена в самом планировщике. Но в этом случае будет приостановлена работа всего скрипта, вместо подхода "свое время у каждого БД-сервера".

SetSMSEngine($smsfunc='') регистрирует имя функции для отправки SMS-сообщений. На самом деле, это может быть любая ваша функция (например, занесение на главную страницу вашего сайта html-кода с предупреждением о неработающем сервере БД). Функция вызывается при каждом обнаруженном изменении состояния БД-серверов (упал,поднялся). Она должна принимать первым параметром текст, предназначенный для отправки.

Обратите внимание: CDbChecker ничего не знает о форматах SMS сообщений, поддерживаемых character set-ах, или ограничениях на длину сообщения. Он просто вызывает вашу функцию !

CheckDbState() основной метод, выполняющий проверку состояния серверов БД. По очереди проверяются все зарегистрированные сервера, и если какие-то из них изменили состояние, формируются и рассылаются соответствующие сообщения. Уведомления об упавшех серверах ("Server is Down") и о восстановлении работы ("Server is UP") создаются в двух отдельных текстовых блоках, и два независимых сообщения могут быть отправлены по результатам проверки: одно о всех "упавших" серверах, и одно о "поднявшихся".

Если задана функция отправки SMS, она вызывается после рассылки email-сообщений.
Метод возвращает истину если все сервера находятся в рабочем состоянии, и ложь (false), если хотя бы один из них недоступен.

Распространяется по лиценизии: BSD License

История версий

1.00.001 (18.06.2009)


Copyright © Alexander Selifonov, www.selifan.ru