add pattern_online check

allow pattern to specify website online/offline
pull/579/head
Danial Nickford 2018-05-23 11:30:18 +12:00
parent 5bc7c1e4ea
commit 1dbbc8cd57
6 changed files with 32 additions and 6 deletions

View File

@ -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.',

View File

@ -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`,

View File

@ -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'),

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -65,6 +65,12 @@
<input type="text" id="pattern" name="pattern" value="{{ edit_value_pattern }}" maxlength="255" data-toggle="tooltip" title="{{ label_pattern_description }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="pattern_online">{{ label_pattern_online }}</label>
<div class="controls">
<input class="input-mini" type="checkbox" id="pattern_online" name="pattern_online" {{ edit_value_pattern_online ? 'checked="checked"' : '' }} maxlength="5" data-toggle="tooltip" title="{{ label_pattern_online_description }}" />
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="header_name">{{ label_header }}</label>
<div class="controls">