From 1dbbc8cd5705a6be0d638590150d4f6690a78c2c Mon Sep 17 00:00:00 2001 From: Danial Nickford Date: Wed, 23 May 2018 11:30:18 +1200 Subject: [PATCH] add pattern_online check allow pattern to specify website online/offline --- src/lang/en_US.lang.php | 4 +++- .../Controller/AbstractServerController.php | 1 + .../Module/Server/Controller/ServerController.php | 4 ++++ src/psm/Util/Install/Installer.php | 15 ++++++++++++++- src/psm/Util/Server/Updater/StatusUpdater.php | 8 ++++---- .../default/module/server/server/update.tpl.html | 6 ++++++ 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 68844d61..8d7151bf 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -152,7 +152,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 online', + 'pattern_online_description' => 'When checked 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 8aa0020c..384324ed 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 4d665295..f972c7b5 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_value_pattern_online' => $edit_server['pattern_online'], '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' => intval(psm_POST('pattern_online', 0)), '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'), diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 691fe31a..1d592b50 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', '', '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 . "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` tinyint(1) unsigned NOT NULL, `header_name` varchar(255) NOT NULL default '', `header_value` varchar(255) NOT NULL default '', `status` enum('on','off') NOT NULL default 'on', @@ -307,6 +308,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); } @@ -515,4 +519,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 `pattern_online` TINYINT( 1 ) unsigned NOT NULL AFTER `pattern`;"; + $this->execSQL($queries); + } } diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index 431b2146..74ea9af7 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' )); if(empty($this->server)) { @@ -249,10 +249,10 @@ 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 body should not contain specified pattern - $negative_search = substr($this->server['pattern'], 0, 1) === '!'; + $pattern_online = !!$this->server['pattern_online']; // Check to see if the pattern was [not] found. - if($negative_search ? preg_match("/" . substr($this->server['pattern'],1) . "/i", $curl_result) : !preg_match("/{$this->server['pattern']}/i", $curl_result)) { - $this->error = 'TEXT ERROR : Pattern ' . ($negative_search ? 'was' : 'not') . ' found.'; + if($pattern_online ? !preg_match("/{$this->server['pattern']}/i", $curl_result) : preg_match("/{$this->server['pattern']}/i", $curl_result)) { + $this->error = 'TEXT ERROR : Pattern ' . ($pattern_online ? '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..0d849cc0 100644 --- a/src/templates/default/module/server/server/update.tpl.html +++ b/src/templates/default/module/server/server/update.tpl.html @@ -65,6 +65,12 @@ +
+ +
+ +
+