From 62633f69377e6456d7c69493c5184915516381e7 Mon Sep 17 00:00:00 2001 From: Matthew Pattman Date: Fri, 27 Feb 2015 13:44:13 +0000 Subject: [PATCH 1/2] Fix for Textmarketer and adds a new entry in the servers db table for the last time it was offline (last_offline) to allow the duration of the outage to be included in the notification, also exposed last_online and last_offline so that they can also be used in the notifications should the user wish. --- src/includes/functions.inc.php | 19 ++++++ src/lang/bg_BG.lang.php | 13 ++++ src/lang/cs_CZ.lang.php | 13 ++++ src/lang/da_DK.lang.php | 13 ++++ src/lang/de_DE.lang.php | 13 ++++ src/lang/en_US.lang.php | 19 +++++- src/lang/es_ES.lang.php | 13 ++++ src/lang/fr_FR.lang.php | 13 ++++ src/lang/it_IT.lang.php | 13 ++++ src/lang/ko_KR.lang.php | 13 ++++ src/lang/nl_NL.lang.php | 13 ++++ src/lang/pl_PL.lang.php | 13 ++++ src/lang/pt_BR.lang.php | 13 ++++ src/lang/ru_RU.lang.php | 13 ++++ src/lang/sv_SE.lang.php | 13 ++++ src/lang/tr_TR.lang.php | 13 ++++ src/lang/zh_CN.lang.php | 13 ++++ .../AbstractServerController.class.php | 11 +++- .../Controller/ServerController.class.php | 1 + .../Controller/StatusController.class.php | 6 ++ src/psm/Txtmsg/Textmarketer.php | 59 ------------------- src/psm/Util/Install/Installer.class.php | 11 ++++ .../Server/Updater/StatusNotifier.class.php | 2 +- .../Server/Updater/StatusUpdater.class.php | 11 +++- .../module/server/server/list.tpl.html | 3 + .../module/server/server/view.tpl.html | 4 ++ .../module/server/status/index.tpl.html | 5 ++ 27 files changed, 281 insertions(+), 65 deletions(-) delete mode 100644 src/psm/Txtmsg/Textmarketer.php diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 9430770d..3cb1b64c 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -236,6 +236,25 @@ function psm_log_uptime($server_id, $status, $latency) { ); } +/** + * Converts an interval into a string + * + * @param DateInterval $interval + * @return string + */ + function psm_format_interval(DateInterval $interval) { + $result = ""; + + if ($interval->y) { $result .= $interval->format("%y ") . ( ($interval->y == 1) ? psm_get_lang('system', 'year') : psm_get_lang('system', 'years') ) . " "; } + if ($interval->m) { $result .= $interval->format("%m ") . ( ($interval->m == 1) ? psm_get_lang('system', 'month') : psm_get_lang('system', 'months') ) . " "; } + if ($interval->d) { $result .= $interval->format("%d ") . ( ($interval->d == 1) ? psm_get_lang('system', 'day') : psm_get_lang('system', 'days') ) . " "; } + if ($interval->h) { $result .= $interval->format("%h ") . ( ($interval->h == 1) ? psm_get_lang('system', 'hour') : psm_get_lang('system', 'hours') ) . " "; } + if ($interval->i) { $result .= $interval->format("%i ") . ( ($interval->i == 1) ? psm_get_lang('system', 'minute') : psm_get_lang('system', 'minutes') ) . " "; } + if ($interval->s) { $result .= $interval->format("%s ") . ( ($interval->s == 1) ? psm_get_lang('system', 'second') : psm_get_lang('system', 'seconds') ) . " "; } + + return $result; +} + /** * Parses a string from the language file with the correct variables replaced in the message * diff --git a/src/lang/bg_BG.lang.php b/src/lang/bg_BG.lang.php index e847efb9..244e9b1b 100644 --- a/src/lang/bg_BG.lang.php +++ b/src/lang/bg_BG.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'преди минута', 'seconds_ago' => 'преди %d секунди', 'a_second_ago' => 'преди секунда', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Настройки', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Ако този текст не е намерен в интернет страницата (когато имате добавен сайт), той ще бъде маркиран като Офлайн. Регулярните изрази са разрешени.', 'last_check' => 'Последна проверка', 'last_online' => 'Последно на линия', + 'last_offline' => 'Last offline', 'monitoring' => 'Мониторинг', 'no_monitoring' => 'Не се наблюдава', 'email' => 'Имейл', diff --git a/src/lang/cs_CZ.lang.php b/src/lang/cs_CZ.lang.php index 96ff7434..50f029b4 100644 --- a/src/lang/cs_CZ.lang.php +++ b/src/lang/cs_CZ.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'cca před minutou', 'seconds_ago' => 'před %d vteřinami', 'a_second_ago' => 'před chvílí', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Konfigurace', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Pokud vzorek nebude na webu nalezen, bude server označen jako offline. Regulární výrazy jsou povoleny.', 'last_check' => 'Poslední kontrola', 'last_online' => 'Naposledy online', + 'last_offline' => 'Naposledy offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'Žádné monitorované služby', 'email' => 'Email', diff --git a/src/lang/da_DK.lang.php b/src/lang/da_DK.lang.php index 941397f5..c9b880cf 100644 --- a/src/lang/da_DK.lang.php +++ b/src/lang/da_DK.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'omkring et minut siden', 'seconds_ago' => '%d sekunder siden', 'a_second_ago' => 'et sekund siden', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Indstillinger', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Hvis dette mønster ikke findes på hjemmesiden, vil serveren blive markeret offline. Regulære udtryk er tilladt.', 'last_check' => 'Sidst kontrolleret', 'last_online' => 'Sidst online', + 'last_offline' => 'Sidst offline', 'monitoring' => 'Overvågning', 'no_monitoring' => 'Ingen overvågning', 'email' => 'Email', diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php index dabf5216..e9c91a39 100644 --- a/src/lang/de_DE.lang.php +++ b/src/lang/de_DE.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'vor über einer Minute', 'seconds_ago' => 'vor %d Sekunden', 'a_second_ago' => 'vor über einer Sekunde', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Einstellungen', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline markiert. Reguläre Ausdrücke sind erlaubt.', 'last_check' => 'Letzter Check', 'last_online' => 'Zuletzt online', + 'last_offline' => 'Zuletzt offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'Monitoring inaktiv', 'email' => 'E-Mail', diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 2c244966..ea9b12a0 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'about a minute ago', 'seconds_ago' => '%d seconds ago', 'a_second_ago' => 'a second ago', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Config', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.', 'last_check' => 'Last check', 'last_online' => 'Last online', + 'last_offline' => 'Last offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'No monitoring', 'email' => 'Email', @@ -264,11 +277,11 @@ $sm_lang = array( 'off_email_body' => "Failed to connect to the following server:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Error: %ERROR%
Date: %DATE%", 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'off_pushover_message' => "Failed to connect to the following server:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Error: %ERROR%
Date: %DATE%", - 'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%', + 'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING', - 'on_email_body' => "Server '%LABEL%' is running again:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%", + 'on_email_body' => "Server '%LABEL%' is running again, it was down for %LAST_OFFLINE_DURATION%:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%", 'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', - 'on_pushover_message' => 'Server \'%LABEL%\' is running again:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', + 'on_pushover_message' => 'Server \'%LABEL%\' is running again, it was down for %LAST_OFFLINE_DURATION%:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', ), 'login' => array( 'welcome_usermenu' => 'Welcome, %user_name%', diff --git a/src/lang/es_ES.lang.php b/src/lang/es_ES.lang.php index a7b873d1..84675893 100644 --- a/src/lang/es_ES.lang.php +++ b/src/lang/es_ES.lang.php @@ -59,6 +59,18 @@ $sm_lang = array( 'a_minute_ago' => 'Hace aproximadamente un minuto', 'seconds_ago' => 'Hace %d segundos', 'a_second_ago' => 'Hace aproximadamente un segundo', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Configurar', @@ -128,6 +140,7 @@ $sm_lang = array( 'pattern_description' => 'Si este patrón no se encuentra en el sitio web, el servidor estará marcada sin conexión. Se permiten expresiones regulares.', 'last_check' => 'Ultima verificación', 'last_online' => 'Última vez en línea', + 'last_offline' => 'Last offline', 'monitoring' => 'Monitoreo', 'no_monitoring' => 'Sin monitoreo', 'email' => 'Email', diff --git a/src/lang/fr_FR.lang.php b/src/lang/fr_FR.lang.php index 604b2f23..b9ec5c69 100644 --- a/src/lang/fr_FR.lang.php +++ b/src/lang/fr_FR.lang.php @@ -59,6 +59,18 @@ $sm_lang = array( 'a_minute_ago' => 'Il y a une minute', 'seconds_ago' => 'Il y a %d secondes', 'a_second_ago' => 'Il y a une seconde', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Configuration', @@ -128,6 +140,7 @@ $sm_lang = array( 'pattern_description' => 'Si ce texte n\'est par retrouvé sur le site web, le serveur est marqué hors-service. Les expressions réguliaires sont autorisées.', 'last_check' => 'Dernière vérification', 'last_online' => 'Dernière fois OK', + 'last_offline' => 'Last offline', 'monitoring' => 'Surveillé', 'no_monitoring' => 'Non surveillé', 'email' => 'Email', diff --git a/src/lang/it_IT.lang.php b/src/lang/it_IT.lang.php index 3e08505a..fce5395e 100644 --- a/src/lang/it_IT.lang.php +++ b/src/lang/it_IT.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'about a minute ago', 'seconds_ago' => '%d seconds ago', 'a_second_ago' => 'a second ago', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Configurazione', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.', 'last_check' => 'Ultimo Controllo', 'last_online' => 'Ultima volta Online', + 'last_offline' => 'Ultima volta offline', 'monitoring' => 'Sotto Controllo', 'no_monitoring' => 'No monitoring', 'email' => 'Email', diff --git a/src/lang/ko_KR.lang.php b/src/lang/ko_KR.lang.php index 74a373b2..6a1f61bf 100644 --- a/src/lang/ko_KR.lang.php +++ b/src/lang/ko_KR.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'about a minute ago', 'seconds_ago' => '%d seconds ago', 'a_second_ago' => 'a second ago', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => '설정', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.', 'last_check' => '최근체크', 'last_online' => '최근접속', + 'last_offline' => 'Last offline', 'monitoring' => '확인중', 'no_monitoring' => 'No monitoring', 'email' => '메일 전송', diff --git a/src/lang/nl_NL.lang.php b/src/lang/nl_NL.lang.php index f56fd1ab..e181d58f 100644 --- a/src/lang/nl_NL.lang.php +++ b/src/lang/nl_NL.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'een minuut geleden', 'seconds_ago' => '%d seconden geleden', 'a_second_ago' => 'een seconde geleden', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Configuratie', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.', 'last_check' => 'Laatst gecontroleerd', 'last_online' => 'Laatst online', + 'last_offline' => 'Laatst offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'No monitoring', 'email' => 'Email', diff --git a/src/lang/pl_PL.lang.php b/src/lang/pl_PL.lang.php index 7109b3e2..b692bdfc 100644 --- a/src/lang/pl_PL.lang.php +++ b/src/lang/pl_PL.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'minutę temu', 'seconds_ago' => '%d sekund temu', 'a_second_ago' => 'sekundę temu', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Konfiguracja', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Jeśli wzorzec nie zostanie odnaleziony, status zostanie ustawiony na offline. Wyrażenia regularne są dozwolone.', 'last_check' => 'Ostatnie sprawdzenie', 'last_online' => 'Ostatnio online', + 'last_offline' => 'Ostatnio offline', 'monitoring' => 'Monitorowany', 'no_monitoring' => 'Brak monitoringu', 'email' => 'Email', diff --git a/src/lang/pt_BR.lang.php b/src/lang/pt_BR.lang.php index dce2bc86..051fbf29 100644 --- a/src/lang/pt_BR.lang.php +++ b/src/lang/pt_BR.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'cerca de um minuto atrás', 'seconds_ago' => '%d segundos atrás', 'a_second_ago' => 'um segundo atrás', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Configuração', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Se esse padrão não for encontrado no site, o servidor será marcado offline. As expressões regulares são permitidas.', 'last_check' => 'Última verificação', 'last_online' => 'Última vez online', + 'last_offline' => 'Última vez offline', 'monitoring' => 'Monitoramento', 'no_monitoring' => 'Sem monitoring', 'email' => 'Email', diff --git a/src/lang/ru_RU.lang.php b/src/lang/ru_RU.lang.php index e2bf256c..3b07aa33 100644 --- a/src/lang/ru_RU.lang.php +++ b/src/lang/ru_RU.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'минуту назад', 'seconds_ago' => '%d секунд назад', 'a_second_ago' => 'секунду назад', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Параметры', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Если текст по шаблону не найден на сайте, сервер будет помечен как Оффлайн. Регулярные выражения допустимы.', 'last_check' => 'Последняя проверка', 'last_online' => 'Был онлайн', + 'last_offline' => 'Last offline', 'monitoring' => 'Мониторинг', 'no_monitoring' => 'Нет мониторинга', 'email' => 'E-mail', diff --git a/src/lang/sv_SE.lang.php b/src/lang/sv_SE.lang.php index de2f3d0a..668ef368 100644 --- a/src/lang/sv_SE.lang.php +++ b/src/lang/sv_SE.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'ungefär en minut sen', 'seconds_ago' => '%d sekunder sedan', 'a_second_ago' => 'en sekund sedan', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Inställningar', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Om detta mönster inte hittas i svaret kommer servern att markeras offline. "Regular expressions" är tillåtna.', 'last_check' => 'Senaste kontroll', 'last_online' => 'Senast online', + 'last_offline' => 'Senast offline', 'monitoring' => 'Övervakas', 'no_monitoring' => 'Övervakas inte', 'email' => 'Email', diff --git a/src/lang/tr_TR.lang.php b/src/lang/tr_TR.lang.php index c8bee7ce..ec164cd3 100644 --- a/src/lang/tr_TR.lang.php +++ b/src/lang/tr_TR.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => 'yaklaşık bir dakika önce', 'seconds_ago' => '%d saniye önce', 'a_second_ago' => 'bir saniye önce', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => 'Ayarlar', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => 'Bu pattern web sitenizde bulunamaz ise, sunucu offline olarak işaretlenecek. Regular expression\'a izin verilmiştir.', 'last_check' => 'Son kontrol', 'last_online' => 'Son çevrimiçi zamanı', + 'last_offline' => 'Last offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'No monitoring', 'email' => 'E-posta', diff --git a/src/lang/zh_CN.lang.php b/src/lang/zh_CN.lang.php index 6099046c..b65af747 100644 --- a/src/lang/zh_CN.lang.php +++ b/src/lang/zh_CN.lang.php @@ -58,6 +58,18 @@ $sm_lang = array( 'a_minute_ago' => '1分钟前', 'seconds_ago' => '%d 秒前', 'a_second_ago' => '刚刚', + 'year' => 'year', + 'years' => 'years', + 'month' => 'month', + 'months' => 'months', + 'day' => 'day', + 'days' => 'days', + 'hour' => 'hour', + 'hours' => 'hours', + 'minute' => 'minute', + 'minutes' => 'minutes', + 'second' => 'second', + 'seconds' => 'seconds', ), 'menu' => array( 'config' => '设置', @@ -127,6 +139,7 @@ $sm_lang = array( 'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线. 支持正则表达式.', 'last_check' => '最后检查', 'last_online' => '最后在线', + 'last_offline' => 'Last offline', 'monitoring' => '监控中', 'no_monitoring' => 'No monitoring', 'email' => '邮件', diff --git a/src/psm/Module/Server/Controller/AbstractServerController.class.php b/src/psm/Module/Server/Controller/AbstractServerController.class.php index f009feaf..75c3d762 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.class.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.class.php @@ -75,7 +75,9 @@ abstract class AbstractServerController extends AbstractController { `s`.`pushover`, `s`.`warning_threshold`, `s`.`warning_threshold_counter`, - `s`.`timeout` + `s`.`timeout`, + `s`.`last_offline`, + `s`.`last_offline_duration` FROM `".PSM_DB_PREFIX."servers` AS `s` {$sql_join} {$sql_where} @@ -97,6 +99,13 @@ abstract class AbstractServerController extends AbstractController { protected function formatServer($server) { $server['rtime'] = round((float) $server['rtime'], 4); $server['last_online'] = psm_timespan($server['last_online']); + $server['last_offline'] = psm_timespan($server['last_offline']); + if ($server['last_offline'] != psm_get_lang('system', 'never')) { + $server['last_offline_duration'] = "(".$server['last_offline_duration'].")"; + } + else { + $server['last_offline_duration'] = ""; + } $server['last_check'] = psm_timespan($server['last_check']); $server['active'] = psm_get_lang('system', $server['active']); $server['email'] = psm_get_lang('system', $server['email']); diff --git a/src/psm/Module/Server/Controller/ServerController.class.php b/src/psm/Module/Server/Controller/ServerController.class.php index bd3bae09..282c884b 100644 --- a/src/psm/Module/Server/Controller/ServerController.class.php +++ b/src/psm/Module/Server/Controller/ServerController.class.php @@ -399,6 +399,7 @@ class ServerController extends AbstractServerController { 'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_rtime' => psm_get_lang('servers', 'latency'), 'label_last_online' => psm_get_lang('servers', 'last_online'), + 'label_last_offline' => psm_get_lang('servers', 'last_offline'), 'label_monitoring' => psm_get_lang('servers', 'monitoring'), 'label_email' => psm_get_lang('servers', 'email'), 'label_send_email' => psm_get_lang('servers', 'send_email'), diff --git a/src/psm/Module/Server/Controller/StatusController.class.php b/src/psm/Module/Server/Controller/StatusController.class.php index 42385d4c..a5c56bb2 100644 --- a/src/psm/Module/Server/Controller/StatusController.class.php +++ b/src/psm/Module/Server/Controller/StatusController.class.php @@ -54,6 +54,7 @@ class StatusController extends AbstractServerController { $layout_data = array( 'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_last_online' => psm_get_lang('servers', 'last_online'), + 'label_last_offline' => psm_get_lang('servers', 'last_offline'), 'label_rtime' => psm_get_lang('servers', 'latency'), 'block_layout_active' => ($layout == 0) ? 'active' : '', 'list_layout_active' => ($layout != 0) ? 'active' : '', @@ -74,6 +75,11 @@ class StatusController extends AbstractServerController { } $server['last_checked_nice'] = psm_timespan($server['last_check']); $server['last_online_nice'] = psm_timespan($server['last_online']); + $server['last_offline_nice'] = psm_timespan($server['last_offline']); + $server['last_offline_duration_nice'] = ""; + if ($server['last_offline_nice'] != psm_get_lang('system', 'never')) { + $server['last_offline_duration_nice'] = "(".$server['last_offline_duration'].")"; + } $server['url_view'] = psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server['server_id'], 'back_to' => 'server_status')); if ($server['status'] == "off") { diff --git a/src/psm/Txtmsg/Textmarketer.php b/src/psm/Txtmsg/Textmarketer.php deleted file mode 100644 index 55892449..00000000 --- a/src/psm/Txtmsg/Textmarketer.php +++ /dev/null @@ -1,59 +0,0 @@ -. - * - * @package phpservermon - * @author Perri Vardy-Mason - * @copyright Copyright (c) 2008-2015 Pepijn Over - * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 - * @version Release: @package_version@ - * @link http://www.phpservermonitor.org/ - * @since phpservermon 2.1 - **/ - -namespace psm\Txtmsg; - -class Textmarketer extends Core { - // ========================================================================= - // [ Fields ] - // ========================================================================= - public $gateway = 1; - public $resultcode = null; - public $resultmessage = null; - public $success = false; - public $successcount = 0; - - public function sendSMS($message) { - - $textmarketer_url = "https://api.textmarketer.co.uk/gateway/"; - $textmarketer_data = urlencode( $message ); - $textmarketer_origin = urlencode( 'SERVERALERT' ); - - - foreach( $this->recipients as $phone ){ - - $URL = $textmarketer_url."?username=" . $this->username . "&password=" . $this->password . "&to=" . $phone . "&message=" . $textmarketer_data . "&orig=" . $textmarketer_origin; - - $result = file_get_contents( $URL ); - - } - - return $result; - } - -} diff --git a/src/psm/Util/Install/Installer.class.php b/src/psm/Util/Install/Installer.class.php index 68b7fa2b..aba5bcc0 100644 --- a/src/psm/Util/Install/Installer.class.php +++ b/src/psm/Util/Install/Installer.class.php @@ -227,6 +227,8 @@ class Installer { `warning_threshold` mediumint(1) unsigned NOT NULL DEFAULT '1', `warning_threshold_counter` mediumint(1) unsigned NOT NULL DEFAULT '0', `timeout` smallint(1) unsigned NULL DEFAULT NULL, + `last_offline` datetime NULL, + `last_offline_duration` varchar(255) NULL, PRIMARY KEY (`server_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", PSM_DB_PREFIX . 'servers_uptime' => "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "servers_uptime` ( @@ -302,6 +304,8 @@ class Installer { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_online` `last_online` DATETIME NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_check` `last_check` DATETIME NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `pattern` VARCHAR( 255 ) NOT NULL AFTER `type`;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline_duration` varchar(255) NULL;"; $this->execSQL($queries); } @@ -333,6 +337,8 @@ class Installer { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `server_id` `server_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `warning_threshold` MEDIUMINT( 1 ) UNSIGNED NOT NULL DEFAULT '1';"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `warning_threshold_counter` MEDIUMINT( 1 ) UNSIGNED NOT NULL DEFAULT '0';"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline_duration` varchar(255) NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users` CHANGE `user_id` `user_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users` @@ -412,6 +418,8 @@ class Installer { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "log` CHANGE `type` `type` ENUM( 'status', 'email', 'sms', 'pushover' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `timeout` smallint(1) unsigned NULL DEFAULT NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline_duration` varchar(255) NULL;"; $queries[] = "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "users_preferences` ( `user_id` int(11) unsigned NOT NULL, @@ -428,6 +436,9 @@ class Installer { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `ip` `ip` VARCHAR(500) NOT NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `last_offline_duration` varchar(255) NULL;"; + $this->execSQL($queries); } } diff --git a/src/psm/Util/Server/Updater/StatusNotifier.class.php b/src/psm/Util/Server/Updater/StatusNotifier.class.php index 1b54a862..13ecde8b 100644 --- a/src/psm/Util/Server/Updater/StatusNotifier.class.php +++ b/src/psm/Util/Server/Updater/StatusNotifier.class.php @@ -121,7 +121,7 @@ class StatusNotifier { $this->server = $this->db->selectRow(PSM_DB_PREFIX . 'servers', array( 'server_id' => $server_id, ), array( - 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'error', 'active', 'email', 'sms', 'pushover', + 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'error', 'active', 'email', 'sms', 'pushover', 'last_online', 'last_offline', 'last_offline_duration', )); if(empty($this->server)) { return false; diff --git a/src/psm/Util/Server/Updater/StatusUpdater.class.php b/src/psm/Util/Server/Updater/StatusUpdater.class.php index 1c8a1642..662ad337 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.class.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.class.php @@ -82,7 +82,7 @@ class StatusUpdater { $this->server = $this->db->selectRow(PSM_DB_PREFIX . 'servers', array( 'server_id' => $server_id, ), array( - 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'active', 'warning_threshold', 'warning_threshold_counter', 'timeout', + 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'active', 'warning_threshold', 'warning_threshold_counter', 'timeout', 'last_offline', )); if(empty($this->server)) { return false; @@ -113,6 +113,12 @@ class StatusUpdater { $save['status'] = 'on'; $save['last_online'] = date('Y-m-d H:i:s'); $save['warning_threshold_counter'] = 0; + if ($this->server['status'] == 'off') { + $online_date = new \DateTime($save['last_online']); + $offline_date = new \DateTime($this->server['last_offline']); + $difference = $online_date->diff($offline_date); + $save['last_offline_duration'] = trim(psm_format_interval($difference)); + } } else { // server is offline, increase the error counter $save['warning_threshold_counter'] = $this->server['warning_threshold_counter'] + 1; @@ -124,6 +130,9 @@ class StatusUpdater { $this->status_new = true; } else { $save['status'] = 'off'; + if ($this->server['status'] == 'on') { + $save['last_offline'] = $save['last_check']; + } } } diff --git a/src/templates/default/module/server/server/list.tpl.html b/src/templates/default/module/server/server/list.tpl.html index 08e64db3..75a32c05 100644 --- a/src/templates/default/module/server/server/list.tpl.html +++ b/src/templates/default/module/server/server/list.tpl.html @@ -8,6 +8,7 @@ {{ label_type }} {{ label_rtime }} {{ label_last_online }} + {{ label_last_offline }} {{ label_monitoring }} {{ label_action }} @@ -23,6 +24,7 @@
{{ server.type }}
{{ server.rtime }} s
{{ server.last_online }}
+
{{ server.last_offline }} {{ server.last_offline_duration }}
@@ -58,6 +60,7 @@
{{ label_rtime }}:  
{{ server.rtime }} s
{{ label_last_online }}:  
{{ server.last_online }}
+
{{ label_last_offline }}:  
{{ server.last_offline }} {{ server.last_offline_duration }}
diff --git a/src/templates/default/module/server/server/view.tpl.html b/src/templates/default/module/server/server/view.tpl.html index 8b95c7f5..113fe598 100644 --- a/src/templates/default/module/server/server/view.tpl.html +++ b/src/templates/default/module/server/server/view.tpl.html @@ -49,6 +49,10 @@ {{ label_last_online }}: {{ last_online }} + + {{ label_last_offline }}: + {{ last_offline }} {{ last_offline_duration }} + {{ label_rtime }}: {{ rtime }} s diff --git a/src/templates/default/module/server/status/index.tpl.html b/src/templates/default/module/server/status/index.tpl.html index 4f579206..92c249a1 100644 --- a/src/templates/default/module/server/status/index.tpl.html +++ b/src/templates/default/module/server/status/index.tpl.html @@ -15,6 +15,7 @@

{{ server.label }}

{{ label_last_online }}: {{ server.last_online_nice }}

+

{{ label_last_offline }}: {{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}

{{ label_rtime }}: {{ server.rtime }}s

@@ -32,11 +33,13 @@
{{ label_last_online }}:  
{{ server.last_online_nice }}
{{ label_last_check }}:  
{{ server.last_checked_nice }}
+
 
 
{{ label_last_online }}: {{ server.last_online_nice }} {{ label_last_check }}: {{ server.last_checked_nice }} + {% endfor %} {% for server in servers_online %} @@ -45,11 +48,13 @@
{{ label_last_online }}:  
{{ server.last_online_nice }}
+
{{ label_last_offline }}:  
{{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}
{{ label_rtime }}:  
{{ server.rtime }}
{{ label_last_online }}: {{ server.last_online_nice }} + {{ label_last_offline }}: {{ server.last_offline_nice }} {{ server.last_offline_duration_nice }} {{ label_rtime }}: {{ server.rtime }}s {% endfor %} From ede1f60804eac50fb5b427bf5c8b1bbe7f0d9fbc Mon Sep 17 00:00:00 2001 From: Matthew Pattman Date: Fri, 27 Feb 2015 13:45:40 +0000 Subject: [PATCH 2/2] Fix for Textmarketer and adds a new entry in the servers db table for the last time it was offline (last_offline) to allow the duration of the outage to be included in the notification, also exposed last_online and last_offline so that they can also be used in the notifications should the user wish. --- src/psm/Txtmsg/Textmarketer.class.php | 77 +++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/psm/Txtmsg/Textmarketer.class.php diff --git a/src/psm/Txtmsg/Textmarketer.class.php b/src/psm/Txtmsg/Textmarketer.class.php new file mode 100644 index 00000000..2fe6d9b6 --- /dev/null +++ b/src/psm/Txtmsg/Textmarketer.class.php @@ -0,0 +1,77 @@ +. + * + * @package phpservermon + * @author Perri Vardy-Mason + * @copyright Copyright (c) 2008-2015 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 2.1 + **/ + +namespace psm\Txtmsg; + +class Textmarketer extends Core { + // ========================================================================= + // [ Fields ] + // ========================================================================= + public $gateway = 1; + public $resultcode = null; + public $resultmessage = null; + public $success = false; + public $successcount = 0; + + /** + * Send the SMS message + * @param string $message + * @return boolean (true = message was sent successfully, false = there was a problem sending the message) + */ + public function sendSMS($message) { + $recipients = join(',', $this->recipients); + + if(count($recipients) == 0) { + return false; + } + + $containsLetter = preg_match('/[a-zA-Z]/', $this->originator); + $containsSpecial = preg_match('/[^a-zA-Z\d]/', $this->originator); + + if ($containsLetter || $containsSpecial) { // 11 Alphanumeric, 16 for just numbers + $from = urlencode(substr($this->originator, 0, 11)); + } + else { + $from = urlencode(substr($this->originator, 0, 16)); + } + + $url = "https://api.textmarketer.co.uk/gateway/" . + "?username=" . $this->username . + "&password=" . $this->password . + "&to=" . rawurlencode($recipients) . + "&message=" . urlencode( $message ) . + "&orig=" . $from; + $result = file_get_contents( $url ); + $isOk = strpos($result, 'SUCCESS') !== false; + if(!$isOk) { + $result = trim(str_replace("\n", " ", str_replace("\r", " ", $result))); + error_log("SMS API Error: '".$result."'", E_USER_NOTICE); + } + return $isOk; + } +}