diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 2670a12e..dde0f585 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -278,6 +278,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 1b4f4599..ee5b11c2 100644 --- a/src/lang/bg_BG.lang.php +++ b/src/lang/bg_BG.lang.php @@ -60,6 +60,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' => 'Настройки', @@ -132,6 +144,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 6d721b54..fd3a8fbf 100644 --- a/src/lang/cs_CZ.lang.php +++ b/src/lang/cs_CZ.lang.php @@ -61,6 +61,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', @@ -143,6 +155,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' => 'E-mail', diff --git a/src/lang/da_DK.lang.php b/src/lang/da_DK.lang.php index efa54f53..cfa62017 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', @@ -130,6 +142,7 @@ $sm_lang = array( 'pattern_description' => 'Hvis dette mønster ikke findes på hjemmesiden, vil serveren blive markeret som værende 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' => 'E-mail', diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php index 818b1876..b4094b07 100644 --- a/src/lang/de_DE.lang.php +++ b/src/lang/de_DE.lang.php @@ -60,6 +60,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', @@ -133,6 +145,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 68844d61..29c0697c 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -61,6 +61,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', @@ -158,6 +170,7 @@ $sm_lang = array( 'header_value_description' => 'Header value. Regular expressions are allowed.', 'last_check' => 'Last check', 'last_online' => 'Last online', + 'last_offline' => 'Last offline', 'monitoring' => 'Monitoring', 'no_monitoring' => 'No monitoring', 'email' => 'Email', @@ -325,12 +338,12 @@ $sm_lang = array( '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%", 'off_telegram_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_telegram_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%', + 'on_telegram_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 4e1534d3..aab8ac56 100644 --- a/src/lang/es_ES.lang.php +++ b/src/lang/es_ES.lang.php @@ -62,6 +62,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', @@ -134,6 +146,7 @@ $sm_lang = array( 'pattern_description' => 'Si este patrón no se encuentra en el sitio web, el servidor estará marcada como sin conexión. Se permiten expresiones regulares.', 'last_check' => 'Última 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 be70cf5d..ab97767c 100644 --- a/src/lang/fr_FR.lang.php +++ b/src/lang/fr_FR.lang.php @@ -61,6 +61,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', @@ -133,6 +145,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 2396b8dc..4de13b52 100644 --- a/src/lang/it_IT.lang.php +++ b/src/lang/it_IT.lang.php @@ -60,6 +60,18 @@ $sm_lang = array( 'a_minute_ago' => 'circa un minuto fa', 'seconds_ago' => '%d secondi fa', 'a_second_ago' => 'un secondo fa', + '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', @@ -132,6 +144,7 @@ $sm_lang = array( 'pattern_description' => 'Se questo pattern non è trovato nel sito web, il server verrà contrassegnato come fuori linea. Le espressioni regolari sono consentite.', 'last_check' => 'Ultimo Controllo', 'last_online' => 'Ultima volta Online', + 'last_offline' => 'Ultima volta offline', 'monitoring' => 'Monitoraggio', 'no_monitoring' => 'Non monitorato', 'email' => 'Email', diff --git a/src/lang/ko_KR.lang.php b/src/lang/ko_KR.lang.php index b04b6348..10341ef0 100644 --- a/src/lang/ko_KR.lang.php +++ b/src/lang/ko_KR.lang.php @@ -60,6 +60,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' => '설정', @@ -132,6 +144,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 fa5852fe..110e4e69 100644 --- a/src/lang/nl_NL.lang.php +++ b/src/lang/nl_NL.lang.php @@ -60,6 +60,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', @@ -132,6 +144,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' => 'Geen monitoring', 'email' => 'Email', diff --git a/src/lang/pl_PL.lang.php b/src/lang/pl_PL.lang.php index d3e8481a..853d3f3c 100644 --- a/src/lang/pl_PL.lang.php +++ b/src/lang/pl_PL.lang.php @@ -60,6 +60,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', @@ -132,6 +144,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 c52c487e..26e51f85 100644 --- a/src/lang/pt_BR.lang.php +++ b/src/lang/pt_BR.lang.php @@ -60,6 +60,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', @@ -132,6 +144,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 886efb13..4825e56e 100644 --- a/src/lang/ru_RU.lang.php +++ b/src/lang/ru_RU.lang.php @@ -60,6 +60,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' => 'Параметры', @@ -132,6 +144,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 a79e89e1..9d750e48 100644 --- a/src/lang/sv_SE.lang.php +++ b/src/lang/sv_SE.lang.php @@ -60,6 +60,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', @@ -132,6 +144,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 43ab1e99..e5e498fd 100644 --- a/src/lang/tr_TR.lang.php +++ b/src/lang/tr_TR.lang.php @@ -60,6 +60,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', @@ -132,6 +144,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 736def15..0421d8a6 100644 --- a/src/lang/zh_CN.lang.php +++ b/src/lang/zh_CN.lang.php @@ -60,6 +60,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' => '设置', @@ -142,6 +154,7 @@ $sm_lang = array( 'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线. 支持正则表达式.', 'last_check' => '最后检查', 'last_online' => '最后在线', + 'last_offline' => 'Last offline', 'monitoring' => '监控', 'no_monitoring' => '未监控', 'email' => '邮件', diff --git a/src/psm/Module/Server/Controller/AbstractServerController.php b/src/psm/Module/Server/Controller/AbstractServerController.php index 8aa0020c..d4bfe48c 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.php @@ -71,6 +71,8 @@ abstract class AbstractServerController extends AbstractController { `s`.`rtime`, `s`.`last_check`, `s`.`last_online`, + `s`.`last_offline`, + `s`.`last_offline_duration`, `s`.`active`, `s`.`email`, `s`.`sms`, @@ -102,6 +104,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.php b/src/psm/Module/Server/Controller/ServerController.php index 4d665295..6419ad1e 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -477,6 +477,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.php b/src/psm/Module/Server/Controller/StatusController.php index 2d72a154..12c3ba2f 100644 --- a/src/psm/Module/Server/Controller/StatusController.php +++ b/src/psm/Module/Server/Controller/StatusController.php @@ -55,6 +55,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' : '', @@ -75,6 +76,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/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 691fe31a..0743199c 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -234,16 +234,18 @@ class Installer { `error` varchar(255) NULL, `rtime` FLOAT(9, 7) NULL, `last_online` datetime NULL, + `last_offline` datetime NULL, + `last_offline_duration` varchar(255) NULL, `last_check` datetime NULL, `active` enum('yes','no') NOT NULL default 'yes', `email` enum('yes','no') NOT NULL default 'yes', `sms` enum('yes','no') NOT NULL default 'no', `pushover` enum('yes','no') NOT NULL default 'yes', - `telegram` enum('yes','no') NOT NULL default 'yes', - `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, - `website_username` varchar(255) DEFAULT NULL, + `telegram` enum('yes','no') NOT NULL default 'yes', + `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, + `website_username` varchar(255) DEFAULT NULL, `website_password` varchar(255) DEFAULT NULL, PRIMARY KEY (`server_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", @@ -307,6 +309,9 @@ class Installer { if(version_compare($version_from, '3.2.2', '<')) { $this->upgrade322(); } + if(version_compare($version_from, '3.3.0', '<')) { + $this->upgrade330(); + } psm_update_conf('version', $version_to); } @@ -326,6 +331,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); } @@ -357,6 +364,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` @@ -439,6 +448,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, @@ -515,4 +526,13 @@ class Installer { ('telegram_api_token', '');"; $this->execSQL($queries); } + + /** + * Upgrade for v3.3.0 release + */ + protected function upgrade330() { + $queries = array(); + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD COLUMN `last_offline` DATETIME NULL AFTER `last_online`, ADD COLUMN `last_offline_duration` varchar(255) NULL AFTER `last_offline`;"; + $this->execSQL($queries); + } } diff --git a/src/psm/Util/Server/Updater/StatusNotifier.php b/src/psm/Util/Server/Updater/StatusNotifier.php index aa5adf3d..33fe8129 100644 --- a/src/psm/Util/Server/Updater/StatusNotifier.php +++ b/src/psm/Util/Server/Updater/StatusNotifier.php @@ -128,7 +128,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', 'header_name', 'header_value', 'error', 'active', 'email', 'sms', 'pushover', 'telegram', + 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'header_name', 'header_value', 'error', 'active', 'email', 'sms', 'pushover', 'telegram', 'last_online', 'last_offline', 'last_offline_duration', )); if(empty($this->server)) { return false; diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index e336f2e2..10e2fe4e 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.php @@ -83,7 +83,7 @@ class StatusUpdater { 'server_id' => $server_id, ), array( 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'header_name', 'header_value', 'status', 'active', 'warning_threshold', - 'warning_threshold_counter', 'timeout', 'website_username', 'website_password' + 'warning_threshold_counter', 'timeout', 'website_username', 'website_password', 'last_offline' )); if(empty($this->server)) { return false; @@ -117,6 +117,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; @@ -128,6 +134,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 ed5d7ae3..9ab2ec66 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 }}
@@ -70,6 +72,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 a9423f7e..af5224ea 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 c66cde78..3d31ac69 100644 --- a/src/templates/default/module/server/status/index.tpl.html +++ b/src/templates/default/module/server/status/index.tpl.html @@ -16,6 +16,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

@@ -33,11 +34,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 %} @@ -46,11 +49,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 %}