<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><title>as_dbserver_check: ñèãíàëèçàöèÿ äëÿ óïàâøåãî ñåðâåðà ÁÄ
</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<style type="text/css">
<!--
body { font-family:verdana,arial,helvetica;font-size:12px; }
pre { font-family: verdana,arial; font-size:11px; color:#0000FF;
background-color: #EFEFF0; border: 1px solid #D0D0F0; padding:6px;
}
td { font-family:arial,helvetica;font-size:12px;}
tr.odd { background-color: #F0F0F8; color:#000000; }
tr.even { background-color: #E0E0F0; color:#000000; }
h4 { background-color: #E0E0F0; color:#000000;
text-align: left; }
h5 { background-color: #E0E0F0; color:#000000;
text-align: left; font-size:11px; padding-left:8px;}
-->
</style>
</head>
<body>
<!-- DOC BEGIN -->
<h3>as_dbserver_check: ñèãíàëèçàöèÿ äëÿ óïàâøåãî ñåðâåðà ÁÄ</h3>
Èíîãäà ñåðâåð áàç äàííûõ ó ïðîâàéäåðà "ëîæèòñÿ", è ýòî ìîæåò áûòü ñåðüåçíûì óäàðîì ïî áèçíåñó
êîìïàíèè (èíòåðíåò-ìàãàçèíû, îíëàéí-ñòðàõîâàíèå è ïðî÷èå WEB-ïðèëîæåíèÿ áåç ÁÄ æèòü íå ìîãóò).
×åì ñêîðåå âû èëè âàø àäìèí óçíàåòå îá ýòîì, òåì ñêîðåå ìîæíî íà÷àòü óñòðàíÿòü ïðîáëåìó.
<br /><br />Íàçíà÷åíèå ïðåäëàãàåìîãî êëàññà - âûÿâëÿòü "óìåðøèå" ñåðâåðà ÁÄ è íåìåäëåííî ñîîáùàòü îá ýòîì
ïî ýë.ïî÷òå àäìèíèñòðàòîðó ñàéòà è, ïðè íåîáõîäèìîñòè, ñëóæáå ïîääåðæêè âàøåãî õîñòèíã-ïðîâàéäåðà.
Ïðè ýòîì â ïèñüìî äëÿ òåõ-ïîääåðæêè ìîæíî âêëþ÷èòü äîïîëíèòåëüíûé òåêñò, íàïðèìåð ñ Âàøèìè äàííûìè
êëèåíòà (íîìåð äîãîâîðà ñ ïðîâàéäåðîì, ÈÄ êëèåíòà è ò.ä. - îáû÷íî àäìèíû ïðîâàéäåðà òðåáóþò ýòè äàííûå
ïåðåä íà÷àëîì ðàçãîâîðà ñ êëèåíòîì).
<br /><br />
Íàñòðîèâ ðåãóëÿðíûé âûçîâ ñêðèïòà (íàïðèìåð, êàæäûå 10 ìèíóò),
âû ïîëó÷èòå ìèíè-ñèãíàëèçàöèþ, êîòîðàÿ ñðàáîòàåò ïðè ïðîïàäàíèè óêàçàííûõ DBMS-ñåðâèñîâ.
<br /><br />
Êîãäà ñåðâåð ÁÄ âåðíåòñÿ â ðàáî÷åå ñîñòîÿíèå, âû òàêæå ïîëó÷èòå óâåäîìëåíèå òèïà "ß ñíîâà â ñòðîþ".
<br />Ïîääåðæèâàåìûå ÁÄ:
<ul>
<li>MySQL</li>
<li>mSQL</li>
<li>PostgreSQL</li>
<li>Oracle (Oracle oci extension äîëæíî áûòü àêòèâèðîâàíî)</li>
<li>Microsoft SQL (MS SQL extension äîëæíî áûòü àêòèâèðîâàíî)</li>
<li>DB2</li>
<li>Ëþáàÿ äðóãàÿ DBMS, äëÿ êîòîðîé âû ìîæåòå ïðåäîñòàâèòü PHP-ôóíêöèþ ïîäêëþ÷åíèÿ</li>
</ul>
Ìîäóëü òåñòèðîâàëñÿ è èñïîëüçóåòñÿ ñ áàçàìè MySQL. Îñòàëüíûå òèïû ÁÄ íå ïðîâåðåíû, ïîýòîìó ïðîñüáà ïðè îáíàðóæåíèè ïðîáëåì ñîîáùèòü
àâòîðó.
<br /><br />
Äîïîëíèòåëüíàÿ ôóíêöèÿ : åñëè ó âàñ åñòü ðàáîòàþùèé ìåõàíèçì îòïðàâêè SMS-îê, îí òàêæå ìîæåò áûòü èñïîëüçîâàí äëÿ
îòïðàâêè äóáëèðóþùèõ ñîîáùåíèé íà âàã ìîáèëüíèê, äëÿ ýòîãî ïðîñòî ðåãèñòðèðóåòñÿ èìÿ PHP ôóíêöèè, îñóùåñòâëÿþùåé îòïðàâêó SMS.
<h4>Óñòàíîâêà íà ñàéòå</h4>
<ul>
<li>Ñêîïèðîâàòü ôàéë <b>as_dbserver_check.php</b> â îäíó èç ïàïîê ñàéòà,</li>
<li>îòðåäàêòèðîâàòü <b>checkdb.php</b> èëè íàïèñàòü ñâîé ñêðèïò, ââåäÿ àäðåñà ñâîèõ ÁÄ-ñåðâåðîâ, àäðåñà email è ïðî÷èå ïàðàìåòðû .
</li>
<li>íàñòðîèòü ïëàíèðîâùèê (CRON è ò.ï.) íà ðåãóëÿðíûé âûçîâ ýòîãî ñêðèïòà.
</li>
</ul>
<h4>Ïðèìåð êîäà</h4>
<pre>require_once('as_dbserver_check.php');
$checker = new CDbChecker('My tiny site','','My client ID is 7777, agreement 10101/2009');
$checker->SetEmails('hide@address.com','hide@address.com');
$checker->AddServer(DBTYPE_MYSQL,'localhost','username','password');
$checker->CheckDbState();
</pre>
<h4>Èñïîëüçîâàíèå êëàññà CDbChecker</h4>
Ìîäóëü ñîäåðæèò åäèíñòâåííûé êëàññ - CDbChecker.
Âñÿ ðàáîòà ïî ïðîâåðêå ñîñòîÿíèÿ ñåðâåðîâ âûïîëíÿåòñÿ â ìåòîäå CheckDbState(), ïîýòîìó âñå ïàðàìåòðû äîëæíû áûòü óñòàíîâëåíû äî åãî
ñòàðòà, âûçîâîì ñîîòâåòñòâóþùèõ ôóíêöèé.
<br />Ñïèñîê ìåòîäîâ êëàññà.
<br /><br />
<b>CDbChecker($title='', $homefolder='', $isptext='')</b> - êîíñòðóêòîð êëàññà.
<br /><br /><b>$title</b> ìîæåò ñîäåðæàòü ëþáîé "çàãîëîâî÷íûé" òåêñò. Âêëþ÷àåòñÿ â òåñò îòïðàâëÿåìîãî ñîîáùåíèÿ è ïîçâîëÿåò ïîíÿòü,
ñ êàêîãî ðåñóðñà/ñàéòà (îò êàêîãî ïðîâàéäåðà) ïðèøåë ñèãíàë.
<br /><br /><b>$homefolder</b> - "ðàáî÷àÿ" ïàïêà íà ñåðâåðå, â êîòîðîé ñîçäàþòñÿ ôàéëû-"ôëàæêè".
Ýòè ôàéëû ñîçäàþòñÿ ÷òîáû çàïîìíèòü ðåçóëüòàò ïðåäûäóùåé ïðîâåðêè è íå ðàññûëàòü ïîâòîðíûõ ñîîáùåíèé â ñëó÷àå ïðîäîëæèòåëüíîãî
"ëåæàíèÿ" ñåðâåðà. Êîãäà ñåðâåð âåðíåòñÿ â ðàáî÷åå ñîñòîÿíèå, ñîîòâåòñòâóþùèé ôàéë-ôëàã óäàëÿåòñÿ, à âàøåìó àäìèíó
ïîñûëàåòñÿ îäíîêðàòíîå ñîîáùåíèå "ÿ ñíîâà â ñòðîþ".
<br />Çíà÷åíèå ïî óìîë÷àíèþ - òåêóùàÿ ïàïêà, './'
<br /><br /><b>$isptext</b> äîïîëíèòåëüíûé òåêñò, êîòîðûé âñòàâëÿåòñÿ â ñîîáùåíèå òåõ-ïîääåðæêå ïðîâàéäåðà
è ñëóæèò äëÿ ïåðåäà÷è âàøèõ ó÷åòíûõ äàííûõ êëèåíòà.
<br /><br /><b>SetEmails($adminemail,$ispemail='', $emailcset='')</b> ðåãèñòðèðóåò äâà àäðåñà email:
âåá-àäìèíèñòðàòîðà â âàøåé êîìïàíèè (îòâåòñòâåííîãî çà ðàáîòó ñàéòà) è àäðåñ òåõ-ïîääåðæêè âàøåãî õîñòèíã-ïðîâàéäåðà.
Ïóñòàÿ ñòðîêà â ëþáîì àäðåñå îòêëþ÷àåò ñîîòâåòñòâóþùóþ îòïðàâêó.
Ñîîáùåíèÿ î "ïàäåíèè" ñåðâåðîâ ïîñûëàþòñÿ íà îáà àäðåñà, à ñîîáùåíèå î âîññòàíîâëåíèè ðàáîòû - òîëüêî âàøåìó âåá-àäìèíó.
<br /><br />
<b>AddServer($dbtype,$address,$login='',$passwd='',$connfunc=false,$downtime='')</b> - ìåòîä ðåãèñòðèðóåò ñåðâåð ÁÄ
äëÿ ïðîâåðêè.
<br /><br /><b>$dbtype</b> îäèí èç íîìåðîâ òèïîâ ÁÄ. Äëÿ åãî çàäàíèÿ ìîæíî èñïîëüçîâàòü êîíñòàíòû DBTYPE_MYSQL,DBTYPE_MSQL,DBTYPE_POSTGRESQL,DBTYPE_ORACLE,DBTYPE_MSSQL,DBTYPE_DB2,
èëè ýòî ìîæåò áûòü ëþáîå äðóãîå çíà÷åíèå äëÿ íåèçâåñòíîãî òèïà ÁÄ.
<br /><br /><b>$address</b> ñòðîêà ñ àäðåñîì ñåðâåðà (äëÿ êàæäîé ÁÄ ìîæåò èìåòü ðàçíûé ñìûñë). Äëÿ MySQL ýòî ìîæåò áûòü ñòðîêà âèäà
"host:port".
<br />Äëÿ PostgreSQL ýòîò ïàðàìåòð ìîæåò ñîäåðæàòü ïîëíóþ ñòðîêó âñåõ çíà÷åíèé: "host=localhost port=5432 dbname=mary" (íîâûé ôîðìàò pg_connect format)-
â ýòîì ñëó÷àå ïðî÷èå ïàðàìåòðû - <b>$login</b> è <b>$password</b> - íå íóæíû.  ïðîòèâíîì ñëó÷àå ñòðîêà êîííåêòà áóäåò ñîñòàâëåíà
èç ïåðåäàííûõ àäðåñà, ëîãèíà è ïàðîëÿ.
<br />Åñëè Âàø postgreSQL ñåðâåð èìååò íåñòàíäàðòíûé ïîðò, èëè äðóãîé ïàðàìåòð, èñïîëüçóéòå ïîëíóþ ñòðîêó â <b>$address</b>.
<br /><br /><b>$connfunc</b> íåîáÿçàòåëüíîå èìÿ PHP ôóíêöèè, âûïîëíÿþùåé ñîåäèíåíèå ñ ñåðâåðîì - èñïîëüçóåòñÿ äëÿ "íåèçâåñòíûõ" òèïîâ ÁÄ.
Ôóíêöèÿ <b>$connfunc</b> äîëæíà âîçâðàùàòü íåïóñòîå çíà÷åíèå, åñëè ñîåäèíåíèå áûëî óñòàíîâëåíî, è ïóñòîå (0,false) ïðè îøèáêå ïîäêëþ÷åíèÿ.
<br /><br /><b>$downtime</b> ìîæíî èñïîëüçîâàòü, ÷òîáû óêàçàòü âðåìÿ "ñåðâèñíîãî" îñòàíîâà áàçû (íàïðèìåð, äëÿ íî÷íûõ ðåãëàìåíòíûõ ðàáîò ó ïðîâàéäåðà).
Äîïóñòèì, ñ 2-õ äî 4-õ ÷àñîâ íî÷è âàø ïðîâàäåð ìîæåò îñòàíàâëèâàòü ÁÄ äëÿ ðåçåðâíîãî êîïèðîâàíèÿ è äð.ðàáîò.
È ïîïûòêè ïðîâåðèòü ñîñòîÿíèå áàçû íà ýòî âðåìÿ ëó÷øå áû ïðåêðàòèòü.
<br />
 ýòîì ñëó÷àå â ïàðàìåòðå <b>$downtime</b> ïåðåäàåòñÿ ñòðîêà â ôîðìàòå "hh:mm-hh:mm", ñîäåðæàùàÿ âðåìÿ ñòàðòà è îêîí÷àíèÿ
ñåðâèñíîãî ïåðèîäà (hh-÷àñû, mm-ìèíóòû, ïî 2 ñèìâîëà).
<br />Â íàøåì ïðèìåðå ñòðîêà äîëæíà ñîäåðæàòü "02:00-04:00".
<br />Åñòåñòâåííî, ýòà "ïàóçà â ðàáîòå" ìîæåò áûòü íàñòðîåíà â ñàìîì ïëàíèðîâùèêå. Íî â ýòîì ñëó÷àå áóäåò ïðèîñòàíîâëåíà
ðàáîòà âñåãî ñêðèïòà, âìåñòî ïîäõîäà "ñâîå âðåìÿ ó êàæäîãî ÁÄ-ñåðâåðà".
<br /><br /><b>SetSMSEngine($smsfunc='')</b> ðåãèñòðèóåò èìÿ ôóíêöèè äëÿ îòïðàâêè SMS-ñîîáùåíèé.
Íà ñàìîì äåëå, ýòî ìîæåò áûòü ëþáàÿ âàøà ôóíêöèÿ (íàïðèìåð, çàíåñåíèå íà ãëàâíóþ ñòðàíèöó âàøåãî ñàéòà html-êîäà ñ ïðåäóïðåæäåíèåì î
íåðàáîòàþùåì ñåðâåðå ÁÄ). Ôóíêöèÿ âûçûâàåòñÿ ïðè êàæäîì îáíàðóæåííîì èçìåíåíèè ñîñòîÿíèÿ ÁÄ-ñåðâåðîâ (óïàë,ïîäíÿëñÿ).
Îíà äîëæíà ïðèíèìàòü ïåðâûì ïàðàìåòðîì òåêñò, ïðåäíàçíà÷åííûé äëÿ îòïðàâêè.
<br /><br /><b>Îáðàòèòå âíèìàíèå</b>: CDbChecker íè÷åãî íå çíàåò î ôîðìàòàõ SMS ñîîáùåíèé, ïîääåðæèâàåìûõ character set-àõ, èëè
îãðàíè÷åíèÿõ íà äëèíó ñîîáùåíèÿ. Îí ïðîñòî âûçûâàåò âàøó ôóíêöèþ !
<br /><br /><b>CheckDbState()</b> îñíîâíîé ìåòîä, âûïîëíÿþùèé ïðîâåðêó ñîñòîÿíèÿ ñåðâåðîâ ÁÄ.
Ïî î÷åðåäè ïðîâåðÿþòñÿ âñå çàðåãèñòðèðîâàííÿå ñåðâåðà,
è åñëè êàêèå-òî èç íèõ èçìåíèëè ñîñòîÿíèå, ôîðìèðóþòñÿ è ðàññûëàþòñÿ ñîîòâåòñòâóþùèå ñîîáùåíèÿ.
"Server is Down alarms" and all "Server is UP" are gathered in two independent text block, so two independent messages can be called:
one about servers that get down, and another one if some servers get up.
Åñëè çàäàíà ôóíêöèÿ îòïðàâêè SMS, îíà âûçûâàåòñÿ ïîñëå ðàññûëêè email-ñîîáùåíèé.
<br />Ìåòîä âîçâðàùàåò èñòèíó åñëè âñå ñåðâåðà íàõîäÿòñÿ â ðàáî÷åì ñîñòîÿíèè, è ëîæü (false), åñëè õîòÿ áû îäèí èç íèõ "óïàë".
<br /><br /><div style="text-align:right">Ðàñïðîñòðàíÿåòñÿ ïî ëèöåíèçèè: BSD License</div>
<h4>Èñòîðèÿ âåðñèé</h4>
<h5>1.00.001 (18.06.2009)</h5>
<ul>
<li>Ïåðâàÿ ïóáëèêàöèÿ</li>
</ul>
<!-- DOC END -->
<br />
<hr>
<div align=center><font size=-2>Copyright © Alexander Selifonov, <a href="http://www.selifan.ru">www.selifan.ru</a>
</font></div>
</body></html>