as_dbserver_check: сигнализация для упавшего сервера БД
Иногда сервер баз данных у провайдера "ложится", и это может быть серьезным ударом по бизнесу
компании (интернет-магазины, онлайн-страхование и прочие WEB-приложения без БД жить не могут).
Чем скорее вы или ваш админ узнаете об этом, тем скорее можно начать устранять проблему.
Назначение предлагаемого класса - выявлять "умершие" сервера БД и немедленно сообщать об этом
по эл.почте администратору сайта и, при необходимости, службе поддержки вашего хостинг-провайдера.
При этом в письмо для тех-поддержки можно включить дополнительный текст, например с Вашими данными
клиента (номер договора с провайдером, ИД клиента и т.д. - обычно админы провайдера требуют эти данные
перед началом разговора с клиентом).
Настроив регулярный вызов скрипта (например, каждые 10 минут),
вы получите мини-сигнализацию, которая сработает при пропадании указанных DBMS-сервисов.
Когда сервер БД вернется в рабочее состояние, вы также получите уведомление типа "Я снова в строю".
Поддерживаемые БД:
- MySQL
- mSQL
- PostgreSQL
- Oracle (Oracle oci extension должно быть активировано)
- Microsoft SQL (MS SQL extension должно быть активировано)
- DB2
- Любая другая DBMS, для которой вы можете предоставить PHP-функцию подключения
Модуль тестировался и используется с базами MySQL. Остальные типы БД не проверены, поэтому просьба при обнаружении проблем сообщить
автору.
Дополнительная функция : если у вас есть работающий механизм отправки SMS-ок, он также может быть использован для
отправки дублирующих сообщений на ваш мобильник, для этого просто регистрируется имя PHP функции, осуществляющей отправку SMS.
Установка на сайте
- Скопировать файл as_dbserver_check.php в одну из папок сайта,
- отредактировать checkdb.php или написать свой скрипт, введя адреса своих БД-серверов, адреса email и прочие параметры .
- настроить планировщик (CRON и т.п.) на регулярный вызов этого скрипта.
Пример кода
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)