diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 5bfbc8f8..8185fd8d 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -73,6 +73,8 @@ $sm_lang = array( 'minutes' => 'minutes', 'second' => 'second', 'seconds' => 'seconds', + 'online' => 'online', + 'offline' => 'offline', ), 'menu' => array( 'config' => 'Config', @@ -164,7 +166,9 @@ $sm_lang = array( 'type_service' => 'Service', 'type_ping' => 'Ping', 'pattern' => 'Search string/pattern', - 'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.', + 'pattern_description' => 'If this pattern is not found on the website, the server will be marked online/offline. Regular expressions are allowed.', + 'pattern_online' => 'Pattern indicates website is', + 'pattern_online_description' => 'Online: If this pattern is not found on the website, the server will be marked online. Offline: If this pattern is not found on the website, the server will be marked offline.', 'header' => 'Header', 'header_name_description' => 'Header name (case-sensitive)', 'header_value_description' => 'Header value. Regular expressions are allowed.', diff --git a/src/psm/Module/Server/Controller/AbstractServerController.php b/src/psm/Module/Server/Controller/AbstractServerController.php index 87387374..cc7a95a9 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.php @@ -64,6 +64,7 @@ abstract class AbstractServerController extends AbstractController { `s`.`type`, `s`.`label`, `s`.`pattern`, + `s`.`pattern_online`, `s`.`header_name`, `s`.`header_value`, `s`.`status`, diff --git a/src/psm/Module/Server/Controller/ServerController.php b/src/psm/Module/Server/Controller/ServerController.php index 6419ad1e..c7e25b5c 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -199,6 +199,7 @@ class ServerController extends AbstractServerController { 'edit_value_timeout' => $edit_server['timeout'], 'default_value_timeout' => PSM_CURL_TIMEOUT, 'edit_value_pattern' => $edit_server['pattern'], + 'edit_pattern_selected_' . $edit_server['pattern_online'] => 'selected="selected"', 'edit_value_header_name' => $edit_server['header_name'], 'edit_value_header_value' => $edit_server['header_value'], 'edit_value_warning_threshold' => $edit_server['warning_threshold'], @@ -267,6 +268,7 @@ class ServerController extends AbstractServerController { 'port' => intval(psm_POST('port', 0)), 'type' => psm_POST('type', ''), 'pattern' => psm_POST('pattern', ''), + 'pattern_online' => in_array($_POST['pattern_online'], array('yes', 'no')) ? $_POST['pattern_online'] : 'yes', 'header_name' => psm_POST('header_name', ''), 'header_value' => psm_POST('header_value', ''), 'rtime' => psm_POST('rtime', '0.0000000'), @@ -471,6 +473,8 @@ class ServerController extends AbstractServerController { 'label_ping' => psm_get_lang('servers', 'type_ping'), 'label_pattern' => psm_get_lang('servers', 'pattern'), 'label_pattern_description' => psm_get_lang('servers', 'pattern_description'), + 'label_pattern_online' => psm_get_lang('servers', 'pattern_online'), + 'label_pattern_online_description' => psm_get_lang('servers', 'pattern_online_description'), 'label_header' => psm_get_lang('servers', 'header'), 'label_header_name_description' => psm_get_lang('servers', 'header_name_description'), 'label_header_value_description' => psm_get_lang('servers', 'header_value_description'), @@ -496,6 +500,8 @@ class ServerController extends AbstractServerController { 'label_yes' => psm_get_lang('system', 'yes'), 'label_no' => psm_get_lang('system', 'no'), 'label_add_new' => psm_get_lang('system', 'add_new'), + 'label_online' => psm_get_lang('system', 'online'), + 'label_offline' => psm_get_lang('system', 'offline'), ); } diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 869c0676..184e559a 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -126,7 +126,7 @@ class Installer { $this->log('Populating database...'); $queries = array(); - $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `pattern`, `status`, `rtime`, `active`, `email`, `sms`, `pushover`, `telegram`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', '', 'on', '0.0000000', 'yes', 'yes', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', '', 'on', '0.0000000', 'yes', 'yes', 'yes', 'yes', 'yes')"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `pattern`, `pattern_online`, `status`, `rtime`, `active`, `email`, `sms`, `pushover`, `telegram`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', '', 'yes','on', '0.0000000', 'yes', 'yes', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', '', 'yes', 'on', '0.0000000', 'yes', 'yes', 'yes', 'yes', 'yes')"; $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "users_servers` (`user_id`,`server_id`) VALUES (1, 1), (1, 2);"; $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE ('language', 'en_US'), @@ -228,6 +228,7 @@ class Installer { `label` varchar(255) NOT NULL, `type` enum('ping','service','website') NOT NULL default 'service', `pattern` varchar(255) NOT NULL, + `pattern_online` enum('yes','no') NOT NULL default 'yes', `header_name` varchar(255) NOT NULL default '', `header_value` varchar(255) NOT NULL default '', `status` enum('on','off') NOT NULL default 'on', @@ -533,6 +534,7 @@ class Installer { 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`;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `pattern_online` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `pattern`;"; $this->execSQL($queries); if(psm_get_conf('sms_gateway') == 'mollie'){ psm_update_conf('sms_gateway', 'messagebird'); diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index 10e2fe4e..320b0d6c 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.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', 'header_name', 'header_value', 'status', 'active', 'warning_threshold', + 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'pattern_online', 'header_name', 'header_value', 'status', 'active', 'warning_threshold', 'warning_threshold_counter', 'timeout', 'website_username', 'website_password', 'last_offline' )); if(empty($this->server)) { @@ -260,9 +260,12 @@ class StatusUpdater { //Okay, the HTTP status is good : 2xx or 3xx. Now we have to test the pattern if it's set up if($this->server['pattern'] != '') { - // Check to see if the pattern was found. - if(!preg_match("/{$this->server['pattern']}/i", $curl_result)) { - $this->error = 'TEXT ERROR : Pattern not found.'; + // Check to see if the body should not contain specified pattern + // Check to see if the pattern was [not] found. + if(($this->server['pattern_online'] == 'yes') == !preg_match("/{$this->server['pattern']}/i", $curl_result)){ + $this->error = "TEXT ERROR : Pattern '{$this->server['pattern']}' " . + ($this->server['pattern_online'] == 'yes' ? 'not' : 'was') . + ' found.'; $result = false; } } diff --git a/src/templates/default/module/server/server/update.tpl.html b/src/templates/default/module/server/server/update.tpl.html index b03e44c5..e4b742fe 100644 --- a/src/templates/default/module/server/server/update.tpl.html +++ b/src/templates/default/module/server/server/update.tpl.html @@ -65,6 +65,15 @@ +
+ +
+ +
+