enable statuscake

pull/352/head
easylo 2016-09-07 08:22:49 +02:00 committed by Laurent RICHARD
parent 77c152e235
commit 807f07eb46
8 changed files with 361 additions and 314 deletions

View File

@ -15,7 +15,8 @@
"php-pushover/php-pushover": "dev-master",
"twig/twig": "1.*",
"paragonie/random_compat" : "1.1.6",
"indigophp/hash-compat" : "1.1.0"
"indigophp/hash-compat" : "1.1.0",
"php-statuscake/php-statuscake": "0.2"
},
"autoload": {
"files": [

34
composer.lock generated
View File

@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "8f27400edd82e99aa35998a3e01fc23e",
"content-hash": "3d1c36ee7e11634bc149bfc9a250e4ae",
"hash": "ee6fcd5efd7619a347226c9ea90caf32",
"content-hash": "96a691d2bd6f2b93d99df6599cd6c24e",
"packages": [
{
"name": "indigophp/hash-compat",
@ -174,6 +174,36 @@
},
"time": "2014-07-30 13:55:53"
},
{
"name": "php-statuscake/php-statuscake",
"version": "0.2",
"source": {
"type": "git",
"url": "https://github.com/easylo/php-statuscake.git",
"reference": "567e734404b77178527c510623431df7753bdb5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/easylo/php-statuscake/zipball/567e734404b77178527c510623431df7753bdb5e",
"reference": "567e734404b77178527c510623431df7753bdb5e",
"shasum": ""
},
"type": "library",
"autoload": {
"files": [
"Statuscake.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"authors": [
{
"name": "Laurent RICHARD",
"email": "easylo@gmail.com"
}
],
"description": "PHP class for the statuscake.com project",
"time": "2016-09-06 22:55:34"
},
{
"name": "phpmailer/phpmailer",
"version": "v5.2.6",

View File

@ -482,7 +482,7 @@ function psm_build_mail($from_name = null, $from_email = null) {
/**
* Prepare a new StatusCake util.
*
* @return \Pushover
* @return \Statuscake
*/
function psm_build_statuscake() {
$statuscake = new \StatusCake();

View File

@ -66,6 +66,7 @@ class ConfigController extends AbstractController {
'sms_gateway_password',
'sms_from',
'pushover_api_token',
'statuscake_account_token',
);
private $default_tab = 'general';

View File

@ -75,6 +75,8 @@ abstract class AbstractServerController extends AbstractController {
`s`.`email`,
`s`.`sms`,
`s`.`pushover`,
`s`.`statuscake`,
`s`.`statuscake_test_id`,
`s`.`warning_threshold`,
`s`.`warning_threshold_counter`,
`s`.`timeout`,

View File

@ -208,10 +208,12 @@ class ServerController extends AbstractServerController {
'edit_email_selected_' . $edit_server['email'] => 'selected="selected"',
'edit_sms_selected_' . $edit_server['sms'] => 'selected="selected"',
'edit_pushover_selected_' . $edit_server['pushover'] => 'selected="selected"',
'edit_statuscake_selected_' . $edit_server['statuscake'] => 'selected="selected"',
'edit_value_statuscake_test_id' => $edit_server['statuscake_test_id'],
));
}
$notifications = array('email', 'sms', 'pushover');
$notifications = array('email', 'sms', 'pushover','statuscake');
foreach($notifications as $notification) {
if(psm_get_conf($notification . '_status') == 0) {
$tpl_data['warning_' . $notification] = true;
@ -272,6 +274,8 @@ class ServerController extends AbstractServerController {
'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no',
'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no',
'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no',
'statuscake' => in_array($_POST['statuscake'], array('yes', 'no')) ? $_POST['statuscake'] : 'no',
'statuscake_test_id' => trim(strip_tags(psm_POST('statuscake_test_id', ''))),
);
// make sure websites start with http://
if($clean['type'] == 'website' && substr($clean['ip'], 0, 4) != 'http') {

View File

@ -129,41 +129,42 @@ class Installer {
$queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `pattern`, `status`, `error`, `rtime`, `last_online`, `last_check`, `active`, `email`, `sms`, `pushover`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', '', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', '', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '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'),
('proxy', '0'),
('proxy_url', ''),
('proxy_user', ''),
('proxy_password', ''),
('email_status', '1'),
('email_from_email', 'monitor@example.org'),
('email_from_name', 'Server Monitor'),
('email_smtp', ''),
('email_smtp_host', ''),
('email_smtp_port', ''),
('email_smtp_security', ''),
('email_smtp_username', ''),
('email_smtp_password', ''),
('sms_status', '0'),
('sms_gateway', 'mollie'),
('sms_gateway_username', 'username'),
('sms_gateway_password', 'password'),
('sms_from', '1234567890'),
('pushover_status', '0'),
('pushover_api_token', ''),
('password_encrypt_key', '" . sha1(microtime()) . "'),
('alert_type', 'status'),
('log_status', '1'),
('log_email', '1'),
('log_sms', '1'),
('log_pushover', '1'),
('log_retention_period', '365'),
('version', '" . PSM_VERSION . "'),
('version_update_check', '" . PSM_VERSION . "'),
('auto_refresh_servers', '0'),
('show_update', '1'),
('last_update_check', '0'),
('cron_running', '0'),
('cron_running_time', '0');";
('language', 'en_US'),
('proxy', '0'),
('proxy_url', ''),
('proxy_user', ''),
('proxy_password', ''),
('email_status', '1'),
('email_from_email', 'monitor@example.org'),
('email_from_name', 'Server Monitor'),
('email_smtp', ''),
('email_smtp_host', ''),
('email_smtp_port', ''),
('email_smtp_security', ''),
('email_smtp_username', ''),
('email_smtp_password', ''),
('sms_status', '0'),
('sms_gateway', 'mollie'),
('sms_gateway_username', 'username'),
('sms_gateway_password', 'password'),
('sms_from', '1234567890'),
('pushover_status', '0'),
('pushover_api_token', ''),
('statuscake_account_token', ''),
('password_encrypt_key', '" . sha1(microtime()) . "'),
('alert_type', 'status'),
('log_status', '1'),
('log_email', '1'),
('log_sms', '1'),
('log_pushover', '1'),
('log_retention_period', '365'),
('version', '" . PSM_VERSION . "'),
('version_update_check', '" . PSM_VERSION . "'),
('auto_refresh_servers', '0'),
('show_update', '1'),
('last_update_check', '0'),
('cron_running', '0'),
('cron_running_time', '0');";
$this->execSQL($queries);
}
@ -173,109 +174,111 @@ class Installer {
protected function installTables() {
$tables = array(
PSM_DB_PREFIX . 'config' => "CREATE TABLE `" . PSM_DB_PREFIX . "config` (
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'users' => "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "users` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) NOT NULL COMMENT 'user''s name, unique',
`password` varchar(255) NOT NULL COMMENT 'user''s password in salted and hashed format',
`password_reset_hash` char(40) DEFAULT NULL COMMENT 'user''s password reset code',
`password_reset_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the password reset request',
`rememberme_token` varchar(64) DEFAULT NULL COMMENT 'user''s remember-me cookie token',
`level` tinyint(2) unsigned NOT NULL DEFAULT '20',
`name` varchar(255) NOT NULL,
`mobile` varchar(15) NOT NULL,
`pushover_key` varchar(255) NOT NULL,
`pushover_device` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `unique_username` (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) NOT NULL COMMENT 'user''s name, unique',
`password` varchar(255) NOT NULL COMMENT 'user''s password in salted and hashed format',
`password_reset_hash` char(40) DEFAULT NULL COMMENT 'user''s password reset code',
`password_reset_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the password reset request',
`rememberme_token` varchar(64) DEFAULT NULL COMMENT 'user''s remember-me cookie token',
`level` tinyint(2) unsigned NOT NULL DEFAULT '20',
`name` varchar(255) NOT NULL,
`mobile` varchar(15) NOT NULL,
`pushover_key` varchar(255) NOT NULL,
`pushover_device` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `unique_username` (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'users_preferences' => "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "users_preferences` (
`user_id` int(11) unsigned NOT NULL,
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`, `key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
`user_id` int(11) unsigned NOT NULL,
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`, `key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'users_servers' => "CREATE TABLE `" . PSM_DB_PREFIX . "users_servers` (
`user_id` INT( 11 ) UNSIGNED NOT NULL ,
`server_id` INT( 11 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `user_id` , `server_id` )
) ENGINE = MYISAM ;",
`user_id` INT( 11 ) UNSIGNED NOT NULL ,
`server_id` INT( 11 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `user_id` , `server_id` )
) ENGINE = MYISAM ;",
PSM_DB_PREFIX . 'log' => "CREATE TABLE `" . PSM_DB_PREFIX . "log` (
`log_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`type` enum('status','email','sms','pushover') NOT NULL,
`message` varchar(255) NOT NULL,
`datetime` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`log_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'log_users' => "CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
`log_id` int(11) UNSIGNED NOT NULL ,
`user_id` int(11) UNSIGNED NOT NULL ,
PRIMARY KEY (`log_id`, `user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
`log_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`type` enum('status','email','sms','pushover') NOT NULL,
`message` varchar(255) NOT NULL,
`datetime` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`log_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'log_users' => "CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
`log_id` int(11) UNSIGNED NOT NULL ,
`user_id` int(11) UNSIGNED NOT NULL ,
PRIMARY KEY (`log_id`, `user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'servers' => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` (
`server_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(500) NOT NULL,
`port` int(5) unsigned NOT NULL,
`label` varchar(255) NOT NULL,
`type` enum('ping','service','website') NOT NULL default 'service',
`pattern` varchar(255) NOT NULL,
`header_name` varchar(255) NOT NULL default '',
`header_value` varchar(255) NOT NULL default '',
`status` enum('on','off') NOT NULL default 'on',
`error` varchar(255) NULL,
`rtime` FLOAT(9, 7) NULL,
`last_online` datetime 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',
`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;",
`server_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(500) NOT NULL,
`port` int(5) unsigned NOT NULL,
`label` varchar(255) NOT NULL,
`type` enum('ping','service','website') NOT NULL default 'service',
`pattern` varchar(255) NOT NULL,
`header_name` varchar(255) NOT NULL default '',
`header_value` varchar(255) NOT NULL default '',
`status` enum('on','off') NOT NULL default 'on',
`error` varchar(255) NULL,
`rtime` FLOAT(9, 7) NULL,
`last_online` datetime 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',
`statuscake` enum('yes','no') NOT NULL default 'yes',
`statuscake_test_id` varchar(50) NULL,
`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;",
PSM_DB_PREFIX . 'servers_uptime' => "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "servers_uptime` (
`servers_uptime_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` datetime NOT NULL,
`status` tinyint(1) unsigned NOT NULL,
`latency` float(9,7) DEFAULT NULL,
PRIMARY KEY (`servers_uptime_id`),
KEY `server_id` (`server_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
`servers_uptime_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` datetime NOT NULL,
`status` tinyint(1) unsigned NOT NULL,
`latency` float(9,7) DEFAULT NULL,
PRIMARY KEY (`servers_uptime_id`),
KEY `server_id` (`server_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'servers_history' => "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "servers_history` (
`servers_history_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` date NOT NULL,
`latency_min` float(9,7) NOT NULL,
`latency_avg` float(9,7) NOT NULL,
`latency_max` float(9,7) NOT NULL,
`checks_total` int(11) unsigned NOT NULL,
`checks_failed` int(11) unsigned NOT NULL,
PRIMARY KEY (`servers_history_id`),
UNIQUE KEY `server_id_date` (`server_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
);
`servers_history_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` date NOT NULL,
`latency_min` float(9,7) NOT NULL,
`latency_avg` float(9,7) NOT NULL,
`latency_max` float(9,7) NOT NULL,
`checks_total` int(11) unsigned NOT NULL,
`checks_failed` int(11) unsigned NOT NULL,
PRIMARY KEY (`servers_history_id`),
UNIQUE KEY `server_id_date` (`server_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
);
foreach($tables as $name => $sql) {
$if_table_exists = $this->db->query("SHOW TABLES LIKE '{$name}'");
foreach($tables as $name => $sql) {
$if_table_exists = $this->db->query("SHOW TABLES LIKE '{$name}'");
if(!empty($if_table_exists)) {
$this->log('Table ' . $name . ' already exists in your database!');
} else {
$this->execSQL($sql);
$this->log('Table ' . $name . ' added.');
}
}
if(!empty($if_table_exists)) {
$this->log('Table ' . $name . ' already exists in your database!');
} else {
$this->execSQL($sql);
$this->log('Table ' . $name . ' added.');
}
}
}
/**
* Populate the tables and perform upgrades if necessary
@ -352,44 +355,44 @@ class Installer {
$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`
ADD `user_name` varchar(64) COLLATE utf8_general_ci NOT NULL COMMENT 'user\'s name, unique' AFTER `user_id`,
ADD `password` varchar(255) COLLATE utf8_general_ci NOT NULL COMMENT 'user\'s password in salted and hashed format' AFTER `user_name`,
ADD `password_reset_hash` char(40) COLLATE utf8_general_ci DEFAULT NULL COMMENT 'user\'s password reset code' AFTER `password`,
ADD `password_reset_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the password reset request' AFTER `password_reset_hash`,
ADD `rememberme_token` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT 'user\'s remember-me cookie token' AFTER `password_reset_timestamp`,
ADD `level` TINYINT( 2 ) UNSIGNED NOT NULL DEFAULT '20' AFTER `rememberme_token`;";
ADD `user_name` varchar(64) COLLATE utf8_general_ci NOT NULL COMMENT 'user\'s name, unique' AFTER `user_id`,
ADD `password` varchar(255) COLLATE utf8_general_ci NOT NULL COMMENT 'user\'s password in salted and hashed format' AFTER `user_name`,
ADD `password_reset_hash` char(40) COLLATE utf8_general_ci DEFAULT NULL COMMENT 'user\'s password reset code' AFTER `password`,
ADD `password_reset_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the password reset request' AFTER `password_reset_hash`,
ADD `rememberme_token` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT 'user\'s remember-me cookie token' AFTER `password_reset_timestamp`,
ADD `level` TINYINT( 2 ) UNSIGNED NOT NULL DEFAULT '20' AFTER `rememberme_token`;";
// make sure all current users are admins (previously we didnt have non-admins):
$queries[] = "UPDATE `" . PSM_DB_PREFIX . "users` SET `user_name`=`email`, `level`=10;";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users` ADD UNIQUE `unique_username` ( `user_name` );";
$queries[] = "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "servers_uptime` (
`servers_uptime_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` datetime NOT NULL,
`status` tinyint(1) unsigned NOT NULL,
`latency` float(9,7) DEFAULT NULL,
PRIMARY KEY (`servers_uptime_id`),
KEY `server_id` (`server_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
`servers_uptime_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` datetime NOT NULL,
`status` tinyint(1) unsigned NOT NULL,
`latency` float(9,7) DEFAULT NULL,
PRIMARY KEY (`servers_uptime_id`),
KEY `server_id` (`server_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$queries[] = "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "servers_history` (
`servers_history_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` date NOT NULL,
`latency_min` float(9,7) NOT NULL,
`latency_avg` float(9,7) NOT NULL,
`latency_max` float(9,7) NOT NULL,
`checks_total` int(11) unsigned NOT NULL,
`checks_failed` int(11) unsigned NOT NULL,
PRIMARY KEY (`servers_history_id`),
UNIQUE KEY `server_id_date` (`server_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
`servers_history_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(11) unsigned NOT NULL,
`date` date NOT NULL,
`latency_min` float(9,7) NOT NULL,
`latency_avg` float(9,7) NOT NULL,
`latency_max` float(9,7) NOT NULL,
`checks_total` int(11) unsigned NOT NULL,
`checks_failed` int(11) unsigned NOT NULL,
PRIMARY KEY (`servers_history_id`),
UNIQUE KEY `server_id_date` (`server_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$queries[] = "CREATE TABLE `" . PSM_DB_PREFIX . "users_servers` (
`user_id` INT( 11 ) UNSIGNED NOT NULL ,
`server_id` INT( 11 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `user_id` , `server_id` )
) ENGINE = MYISAM ;";
`user_id` INT( 11 ) UNSIGNED NOT NULL ,
`server_id` INT( 11 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `user_id` , `server_id` )
) ENGINE = MYISAM ;";
$this->execSQL($queries);
// from 3.0 all user-server relations are in a separate table
@ -408,7 +411,7 @@ class Installer {
$this->db->save(PSM_DB_PREFIX . 'users_servers', array(
'user_id' => $user['user_id'],
'server_id' => $id,
));
));
}
}
$this->execSQL("ALTER TABLE `".PSM_DB_PREFIX."users` DROP `server_id`;");
@ -433,11 +436,11 @@ class Installer {
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `timeout` smallint(1) unsigned NULL DEFAULT NULL;";
$queries[] = "CREATE TABLE IF NOT EXISTS `" . PSM_DB_PREFIX . "users_preferences` (
`user_id` int(11) unsigned NOT NULL,
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`, `key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
`user_id` int(11) unsigned NOT NULL,
`key` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`, `key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$this->execSQL($queries);
}
@ -452,36 +455,36 @@ class Installer {
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `ip` `ip` VARCHAR(500) NOT NULL;";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `website_username` varchar(255) NULL, ADD `website_password` varchar(255) NULL AFTER `website_username`;";
$queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE
('proxy', '0'),
('proxy_url', ''),
('proxy_user', ''),
('proxy_password', '');";
('proxy', '0'),
('proxy_url', ''),
('proxy_user', ''),
('proxy_password', '');";
$this->execSQL($queries);
// Create log_users table
$this->execSQL("CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
`log_id` int(11) UNSIGNED NOT NULL ,
`user_id` int(11) UNSIGNED NOT NULL ,
PRIMARY KEY (`log_id`, `user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
$this->execSQL("CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
`log_id` int(11) UNSIGNED NOT NULL ,
`user_id` int(11) UNSIGNED NOT NULL ,
PRIMARY KEY (`log_id`, `user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
// Migrate the data
$logs = $this->db->select(PSM_DB_PREFIX . 'log', null, array('log_id', 'user_id'));
foreach ($logs as $log) {
$logs = $this->db->select(PSM_DB_PREFIX . 'log', null, array('log_id', 'user_id'));
foreach ($logs as $log) {
// Validation
if (empty($log['user_id']) || trim($log['user_id']) == '') {
continue;
}
if (empty($log['user_id']) || trim($log['user_id']) == '') {
continue;
}
// Insert into new table
foreach (explode(',', $log['user_id']) as $user_id) {
psm_add_log_user($log['log_id'], $user_id);
}
}
foreach (explode(',', $log['user_id']) as $user_id) {
psm_add_log_user($log['log_id'], $user_id);
}
}
// Drop old user_id('s) column
$this->execSQL("ALTER TABLE `" . PSM_DB_PREFIX . "log` DROP COLUMN `user_id`;");
$this->execSQL("ALTER TABLE `" . PSM_DB_PREFIX . "log` DROP COLUMN `user_id`;");
}
/**
@ -489,7 +492,13 @@ class Installer {
*/
protected function upgrade321() {
$queries = array();
psm_update_conf('statuscake_account_token', '');
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `statuscake` enum('yes','no') NOT NULL default 'yes', ADD `statuscake_test_id` varchar(50) NULL AFTER `pushover`;";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD COLUMN `header_name` VARCHAR(255) AFTER `pattern`, ADD COLUMN `header_value` VARCHAR(255) AFTER `header_name`";
$this->execSQL($queries);
}
}

View File

@ -66,12 +66,6 @@ class StatusNotifier {
*/
protected $send_statuscake_account_id = null;
/**
* Test for sending StatusCake Notification
* @var string send_statuscake_test_id
*/
protected $send_statuscake_test_id = null;
/**
* Save log records?
* @var boolean $save_log
@ -108,8 +102,7 @@ class StatusNotifier {
$this->send_emails = psm_get_conf('email_status');
$this->send_sms = psm_get_conf('sms_status');
$this->send_pushover = psm_get_conf('pushover_status');
$this->send_statuscake_account_id = psm_get_conf('statuscake_account_id');
$this->send_statuscake_test_id = psm_get_conf('statuscake_test_id');
$this->send_statuscake_account_token = psm_get_conf('statuscake_account_token');
$this->save_logs = psm_get_conf('log_status');
}
@ -122,6 +115,7 @@ class StatusNotifier {
* @return boolean
*/
public function notify($server_id, $status_old, $status_new) {
if(!$this->send_emails && !$this->send_sms && !$this->save_logs) {
// seems like we have nothing to do. skip the rest
return false;
@ -134,9 +128,9 @@ class StatusNotifier {
// get server info from db
$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',
));
), array(
'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'rtime', 'header_name', 'header_value', 'error', 'active', 'email', 'sms', 'pushover', 'statuscake','statuscake_test_id',
));
if(empty($this->server)) {
return false;
}
@ -146,71 +140,74 @@ class StatusNotifier {
// check which type of alert the user wants
switch(psm_get_conf('alert_type')) {
case 'always':
if($status_new == false) {
if($status_new == false) {
// server is offline. we are in error state.
$notify = true;
}
break;
$notify = true;
}
break;
case 'offline':
// only send a notification if the server goes down for the first time!
if($status_new == false && $status_old == true) {
$notify = true;
}
break;
if($status_new == false && $status_old == true) {
$notify = true;
}
break;
case 'status':
if($status_new != $status_old) {
if($status_new != $status_old) {
// status has been changed!
$notify = true;
}
break;
}
if(!$notify) {
return false;
}
// first add to log (we use the same text as the SMS message because its short..)
if($this->save_logs) {
psm_add_log(
$this->server_id,
'status',
psm_parse_msg($status_new, 'sms', $this->server)
);
}
$users = $this->getUsers($this->server_id);
if(empty($users)) {
return $notify;
}
// check if email is enabled for this server
if($this->send_emails && $this->server['email'] == 'yes') {
// send email
$this->notifyByEmail($users);
}
// check if sms is enabled for this server
if($this->send_sms && $this->server['sms'] == 'yes') {
// yay lets wake those nerds up!
$this->notifyByTxtMsg($users);
}
// check if pushover is enabled for this server
if($this->send_pushover && $this->server['pushover'] == 'yes') {
// yay lets wake those nerds up!
$this->notifyByPushover($users);
$notify = true;
}
break;
}
// check if statuscake is enabled for this server
if( !is_null($this->send_statuscake_account_id) && !is_null($this->send_statuscake_test_id) && $this->server['send_statuscake'] == 'yes') {
if( !is_null($this->send_statuscake_account_token) && !empty($this->send_statuscake_account_token)
&& $this->server['statuscake'] == 'yes'
&& !is_null($this->server['statuscake_test_id']) && !empty($this->server['statuscake_test_id'])
) {
// yay lets wake those nerds up!
$this->notifyByStatusCake($users, $this->send_statuscake_test_id);
}
$this->notifyByStatusCake($users, $this->server['statuscake_test_id']);
}
if(!$notify) {
return false;
}
// first add to log (we use the same text as the SMS message because its short..)
if($this->save_logs) {
psm_add_log(
$this->server_id,
'status',
psm_parse_msg($status_new, 'sms', $this->server)
);
}
$users = $this->getUsers($this->server_id);
if(empty($users)) {
return $notify;
}
// check if email is enabled for this server
if($this->send_emails && $this->server['email'] == 'yes') {
// send email
$this->notifyByEmail($users);
}
// check if sms is enabled for this server
if($this->send_sms && $this->server['sms'] == 'yes') {
// yay lets wake those nerds up!
$this->notifyByTxtMsg($users);
}
// check if pushover is enabled for this server
if($this->send_pushover && $this->server['pushover'] == 'yes') {
// yay lets wake those nerds up!
$this->notifyByPushover($users);
}
return $notify;
}
/**
* This functions performs the email notifications
*
@ -227,33 +224,36 @@ class StatusNotifier {
$mail->Body = utf8_decode($body);
$mail->AltBody = str_replace('<br/>', "\n", $body);
if(psm_get_conf('log_email')) {
$log_id = psm_add_log($this->server_id, 'email', $body);
}
// go through empl
foreach ($users as $user) {
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
// we sent a seperate email to every single user.
$mail->AddAddress($user['email'], $user['name']);
$mail->Send();
$mail->ClearAddresses();
}
}
protected function notifyByStatusCake($users, $send_statuscake_test_id) {
$statuscake = psm_build_statuscake();
$statuscake->setTestId($send_statuscake_test_id)
// Log
if(psm_get_conf('log_pushover')) {
$log_id = psm_add_log($this->server_id, 'statuscake', $message);
if(psm_get_conf('log_email')) {
$log_id = psm_add_log($this->server_id, 'email', $body);
}
// go through empl
foreach ($users as $user) {
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
// we sent a seperate email to every single user.
$mail->AddAddress($user['email'], $user['name']);
$mail->Send();
$mail->ClearAddresses();
}
}
protected function notifyByStatusCake($users, $statuscake_test_id) {
$statuscake = psm_build_statuscake();
$statuscake->setTestId($statuscake_test_id);
$statuscake->setTime(11);
$statuscake->setStatusCode(200);
// Log
//if(psm_get_conf('log_statuscake')) {
// $log_id = psm_add_log($this->server_id, 'statuscake', $message);
//}
$statuscake->send();
}
/**
@ -264,51 +264,51 @@ class StatusNotifier {
*/
protected function notifyByPushover($users) {
// Remove users that have no pushover_key
foreach($users as $k => $user) {
if (trim($user['pushover_key']) == '') {
unset($users[$k]);
}
}
foreach($users as $k => $user) {
if (trim($user['pushover_key']) == '') {
unset($users[$k]);
}
}
// Validation
if (empty($users)) {
return;
}
if (empty($users)) {
return;
}
// Pushover
$message = psm_parse_msg($this->status_new, 'pushover_message', $this->server);
$pushover = psm_build_pushover();
if($this->status_new === true) {
$pushover->setPriority(0);
} else {
$pushover->setPriority(2);
$message = psm_parse_msg($this->status_new, 'pushover_message', $this->server);
$pushover = psm_build_pushover();
if($this->status_new === true) {
$pushover->setPriority(0);
} else {
$pushover->setPriority(2);
$pushover->setRetry(300); //Used with Priority = 2; Pushover will resend the notification every 60 seconds until the user accepts.
$pushover->setExpire(3600); //Used with Priority = 2; Pushover will resend the notification every 60 seconds for 3600 seconds. After that point, it stops sending notifications.
}
$pushover->setTitle(psm_parse_msg($this->status_new, 'pushover_title', $this->server));
$pushover->setMessage(str_replace('<br/>', "\n", $message));
$pushover->setUrl(psm_build_url());
$pushover->setUrlTitle(psm_get_lang('system', 'title'));
$pushover->setTitle(psm_parse_msg($this->status_new, 'pushover_title', $this->server));
$pushover->setMessage(str_replace('<br/>', "\n", $message));
$pushover->setUrl(psm_build_url());
$pushover->setUrlTitle(psm_get_lang('system', 'title'));
// Log
if(psm_get_conf('log_pushover')) {
$log_id = psm_add_log($this->server_id, 'pushover', $message);
}
$log_id = psm_add_log($this->server_id, 'pushover', $message);
}
foreach($users as $user) {
foreach($users as $user) {
// Log
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
// Set recipient + send
$pushover->setUser($user['pushover_key']);
if($user['pushover_device'] != '') {
$pushover->setDevice($user['pushover_device']);
}
$pushover->send();
$pushover->setUser($user['pushover_key']);
if($user['pushover_device'] != '') {
$pushover->setDevice($user['pushover_device']);
}
$pushover->send();
}
}
}
/**
* This functions performs the text message notifications
@ -322,19 +322,19 @@ class StatusNotifier {
return false;
}
$message = psm_parse_msg($this->status_new, 'sms', $this->server);
$message = psm_parse_msg($this->status_new, 'sms', $this->server);
// Log
if(psm_get_conf('log_sms')) {
$log_id = psm_add_log($this->server_id, 'sms', $message);
if(psm_get_conf('log_sms')) {
$log_id = psm_add_log($this->server_id, 'sms', $message);
}
// add all users to the recipients list
foreach ($users as $user) {
// Log
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
if(!empty($log_id)) {
psm_add_log_user($log_id, $user['user_id']);
}
$sms->addRecipients($user['mobile']);
}
@ -356,10 +356,10 @@ class StatusNotifier {
SELECT `u`.`user_id`, `u`.`name`,`u`.`email`, `u`.`mobile`, `u`.`pushover_key`, `u`.`pushover_device`
FROM `".PSM_DB_PREFIX."users` AS `u`
JOIN `".PSM_DB_PREFIX."users_servers` AS `us` ON (
`us`.`user_id`=`u`.`user_id`
AND `us`.`server_id` = {$server_id}
`us`.`user_id`=`u`.`user_id`
AND `us`.`server_id` = {$server_id}
)
");
");
return $users;
}
}