diff --git a/.htaccess b/.htaccess
index 5a928f6d..1014e510 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1 +1,20 @@
Options -Indexes
+
+
+
+ ExpiresActive on
+ ExpiresDefault "access plus 1 month"
+
+
+
+
+AddOutputFilterByType DEFLATE text/plain
+AddOutputFilterByType DEFLATE text/html
+AddOutputFilterByType DEFLATE text/xml
+AddOutputFilterByType DEFLATE text/css
+AddOutputFilterByType DEFLATE application/xml
+AddOutputFilterByType DEFLATE application/xhtml+xml
+AddOutputFilterByType DEFLATE application/rss+xml
+AddOutputFilterByType DEFLATE application/javascript
+AddOutputFilterByType DEFLATE application/x-javascript
+
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 2ff1ddc6..0c0069f7 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -21,7 +21,7 @@ v3.2.0 not yet released
* #181: Added blank index files to prevent directory listing.
* #237: Adding CSRF protection.
* #287: Default language - English
-* #286: Add popular ports drop dowwn
+* #286: Add popular ports drop down
* #269: Added Slovenian language
* #96: Authentication for website checks
diff --git a/README.rst b/README.rst
index 942cb0c3..e76cdaab 100755
--- a/README.rst
+++ b/README.rst
@@ -75,6 +75,7 @@ Requirements
* PHP 5.3.7+
* PHP cURL package
* PHP PDO mysql driver
+* PHP-XML
Install
@@ -116,3 +117,8 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PHP Server Monitor. If not, see http://www.gnu.org/licenses/.
+
+Docker
+-------
+
+PHPServerMonitor is now available on Docker : https://github.com/phpservermon/docker-phpservermonitor
diff --git a/composer.json b/composer.json
index b307dc44..a1e5c180 100755
--- a/composer.json
+++ b/composer.json
@@ -3,10 +3,7 @@
"description": "PHP Server Monitor",
"homepage": "http://www.phpservermonitor.org",
"repositories": [
- {
- "type": "vcs",
- "url": "https://github.com/phpservermon/php-pushover"
- }
+
],
"require": {
"php": ">=5.3.7",
diff --git a/config.php.sample b/config.php.sample
index 667afe2e..a90981a3 100755
--- a/config.php.sample
+++ b/config.php.sample
@@ -4,4 +4,5 @@ define('PSM_DB_USER', 'db_user');
define('PSM_DB_PASS', 'db_pass');
define('PSM_DB_NAME', 'db_name');
define('PSM_DB_HOST', 'localhost');
-
+define('PSM_DB_PORT', '3306');
+define('PSM_BASE_URL', '');
diff --git a/cron/status.cron.php b/cron/status.cron.php
index 0905d8da..9e533a1a 100644
--- a/cron/status.cron.php
+++ b/cron/status.cron.php
@@ -29,7 +29,12 @@
require_once __DIR__ . '/../src/bootstrap.php';
if(!psm_is_cli()) {
- die('This script can only be run from the command line.');
+ // check if it's an allowed host
+ $allow = PSM_CRON_ALLOW;
+ if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) {
+ header('HTTP/1.0 404 Not Found');
+ die('
404 Not FoundNot Found
The requested URL /cron/status.cron.php was not found on this server.
');
+ }
}
$cron_timeout = PSM_CRON_TIMEOUT;
diff --git a/docs/install.rst b/docs/install.rst
index f8e0efa2..627704fb 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -27,6 +27,7 @@ To change these values correctly, only update the second parameter of the functi
define('PSM_DB_NAME', 'db_name');
define('PSM_DB_USER', 'db_user');
define('PSM_DB_PASS', 'db_user_password');
+ define('PSM_DB_PORT', '3306');
For example: to change your username you should ONLY change the 'db\_user' part.
Do NOT remove the quotes around your username as that will result in an error.
diff --git a/puphpet/files/exec-once/psminstall.sh b/puphpet/files/exec-once/psminstall.sh
index 2ebd8b54..b115800f 100644
--- a/puphpet/files/exec-once/psminstall.sh
+++ b/puphpet/files/exec-once/psminstall.sh
@@ -6,8 +6,9 @@ define('PSM_DB_USER', 'psm'); \
define('PSM_DB_PASS', 'psm'); \
define('PSM_DB_NAME', 'psm'); \
define('PSM_DB_HOST', 'localhost'); \
+define('PSM_DB_PORT', '3306'); \
?>" > /var/www/default/psm/config.php
echo "" > /var/www/default/index.php
\ No newline at end of file
+?>" > /var/www/default/index.php
diff --git a/src/config/services.xml b/src/config/services.xml
index 5d3fbd1b..43446dcd 100644
--- a/src/config/services.xml
+++ b/src/config/services.xml
@@ -18,6 +18,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
%path.src%templates
PSM_DB_HOST
+ PSM_DB_PORT
PSM_DB_USER
PSM_DB_PASS
PSM_DB_NAME
@@ -38,6 +39,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
%db.user%
%db.pass%
%db.name%
+ %db.port%
diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php
index ec725f67..02a84d22 100755
--- a/src/includes/functions.inc.php
+++ b/src/includes/functions.inc.php
@@ -335,6 +335,16 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
curl_setopt($ch, CURLOPT_URL, $href);
+ $proxy_url = psm_get_conf('proxy_url','');
+ if (psm_get_conf('proxy','0') === '1') {
+ curl_setopt($ch, CURLOPT_PROXY, $proxy_url);
+ $proxy_user = psm_get_conf('proxy_user','');
+ $proxy_password = psm_get_conf('proxy_password','');
+ if (!empty($proxy_user) && !empty($proxy_password)) {
+ curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_user . ':' . $proxy_password);
+ }
+ }
+
if($add_agent) {
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; phpservermon/'.PSM_VERSION.'; +http://www.phpservermonitor.org)');
}
@@ -531,7 +541,11 @@ function psm_build_sms() {
break;
case 'octopush':
$sms = new \psm\Txtmsg\Octopush();
- break; }
+ break;
+ case 'smsgw':
+ $sms = new \psm\Txtmsg\Smsgw();
+ break;
+ }
// copy login information from the config file
if($sms) {
diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php
index fd8aee95..885d6199 100644
--- a/src/lang/de_DE.lang.php
+++ b/src/lang/de_DE.lang.php
@@ -125,6 +125,7 @@ $sm_lang = array(
'type' => 'Typ',
'type_website' => 'Webseite',
'type_service' => 'Service',
+ 'type_ping' => 'Ping',
'pattern' => 'Suchstring/-muster',
'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',
diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php
index 07c1d5d1..8c3eb986 100755
--- a/src/lang/en_US.lang.php
+++ b/src/lang/en_US.lang.php
@@ -135,6 +135,7 @@ $sm_lang = array(
'type' => 'Type',
'type_website' => 'Website',
'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.',
'last_check' => 'Last check',
@@ -188,6 +189,10 @@ $sm_lang = array(
'show_update' => 'Check for updates?',
'password_encrypt_key' => 'The encryption key password',
'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to websites. If the key will change the stored password is invalid!',
+ 'proxy' => 'Enable proxy',
+ 'proxy_url' => 'Proxy URL',
+ 'proxy_user' => 'Proxy username',
+ 'proxy_password' => 'Proxy password',
'email_status' => 'Allow sending email',
'email_from_email' => 'Email from address',
'email_from_name' => 'Email from name',
@@ -214,6 +219,7 @@ $sm_lang = array(
'sms_gateway_freemobilesms' => 'FreeMobileSMS',
'sms_gateway_clicksend' => 'ClickSend',
'sms_gateway_nexmo' => 'Nexmo',
+ 'sms_gateway_smsgw' => 'SMSgw',
'sms_gateway_username' => 'Gateway username',
'sms_gateway_password' => 'Gateway password',
'sms_from' => 'Sender\'s phone number',
@@ -234,6 +240,8 @@ $sm_lang = array(
'alert_type_status' => 'Status change',
'alert_type_offline' => 'Offline',
'alert_type_always' => 'Always',
+ 'alert_proxy' => 'Even if enabled, proxy is never used for services',
+ 'alert_proxy_url' => 'Format: Host:Port',
'log_status' => 'Log status',
'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the Notification settings are passed.',
'log_email' => 'Log emails sent by the script',
@@ -248,6 +256,7 @@ $sm_lang = array(
'settings_pushover' => 'Pushover settings',
'settings_notification' => 'Notification settings',
'settings_log' => 'Log settings',
+ 'settings_proxy' => 'Proxy settings',
'auto_refresh' => 'Auto-refresh',
'auto_refresh_servers' =>
'Auto-refresh servers page.
'.
diff --git a/src/lang/fr_FR.lang.php b/src/lang/fr_FR.lang.php
index 6c7edbdf..b540de9e 100644
--- a/src/lang/fr_FR.lang.php
+++ b/src/lang/fr_FR.lang.php
@@ -282,7 +282,7 @@ $sm_lang = array(
'title_forgot' => 'Mot de passe oublié ?',
'title_reset' => 'Réinitialisation du mot de passe',
'submit' => 'Envoyer',
- 'remember_me' => 'Se vouvenir de moi',
+ 'remember_me' => 'Se souvenir de moi',
'login' => 'Connexion',
'logout' => 'Déconnexion',
'username' => 'Nom',
diff --git a/src/psm/Module/Config/Controller/ConfigController.php b/src/psm/Module/Config/Controller/ConfigController.php
index d058de63..2fcaad1f 100644
--- a/src/psm/Module/Config/Controller/ConfigController.php
+++ b/src/psm/Module/Config/Controller/ConfigController.php
@@ -36,6 +36,7 @@ class ConfigController extends AbstractController {
* @var array $checkboxes
*/
protected $checkboxes = array(
+ 'proxy',
'email_status',
'email_smtp',
'sms_status',
@@ -52,6 +53,9 @@ class ConfigController extends AbstractController {
* @var array $fields
*/
protected $fields = array(
+ 'proxy_url',
+ 'proxy_user',
+ 'proxy_password',
'email_from_name',
'email_from_email',
'email_smtp_host',
@@ -293,11 +297,16 @@ class ConfigController extends AbstractController {
'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
'label_settings_notification' => psm_get_lang('config', 'settings_notification'),
'label_settings_log' => psm_get_lang('config', 'settings_log'),
+ 'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'),
'label_general' => psm_get_lang('config', 'general'),
'label_language' => psm_get_lang('config', 'language'),
'label_show_update' => psm_get_lang('config', 'show_update'),
'label_password_encrypt_key' => psm_get_lang('config', 'password_encrypt_key'),
'label_password_encrypt_key_note' => psm_get_lang('config', 'password_encrypt_key_note'),
+ 'label_proxy' => psm_get_lang('config', 'proxy'),
+ 'label_proxy_url' => psm_get_lang('config', 'proxy_url'),
+ 'label_proxy_user' => psm_get_lang('config', 'proxy_user'),
+ 'label_proxy_password' => psm_get_lang('config', 'proxy_password'),
'label_email_status' => psm_get_lang('config', 'email_status'),
'label_email_from_email' => psm_get_lang('config', 'email_from_email'),
'label_email_from_name' => psm_get_lang('config', 'email_from_name'),
@@ -321,6 +330,7 @@ class ConfigController extends AbstractController {
'label_sms_gateway_freevoipdeal' => psm_get_lang('config', 'sms_gateway_freevoipdeal'),
'label_sms_gateway_smsglobal' => psm_get_lang('config', 'sms_gateway_smsglobal'),
'label_sms_gateway_nexmo' => psm_get_lang('config', 'sms_gateway_nexmo'),
+ 'label_sms_gateway_smsgw' => psm_get_lang('config', 'sms_gateway_smsgw'),
'label_sms_gateway_octopush' => psm_get_lang('config', 'sms_gateway_octopush'),
'label_sms_gateway_freemobilesms' => psm_get_lang('config', 'sms_gateway_freemobilesms'),
'label_sms_gateway_clicksend' => psm_get_lang('config', 'sms_gateway_clicksend'),
@@ -346,6 +356,8 @@ class ConfigController extends AbstractController {
'label_log_email' => psm_get_lang('config', 'log_email'),
'label_log_sms' => psm_get_lang('config', 'log_sms'),
'label_log_pushover' => psm_get_lang('config', 'log_pushover'),
+ 'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'),
+ 'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'),
'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'),
'label_auto_refresh_servers' => psm_get_lang('config', 'auto_refresh_servers'),
'label_seconds' => psm_get_lang('config', 'seconds'),
@@ -356,4 +368,4 @@ class ConfigController extends AbstractController {
'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'),
);
}
-}
+}
\ No newline at end of file
diff --git a/src/psm/Module/Install/Controller/InstallController.php b/src/psm/Module/Install/Controller/InstallController.php
index dad31b14..d948370e 100644
--- a/src/psm/Module/Install/Controller/InstallController.php
+++ b/src/psm/Module/Install/Controller/InstallController.php
@@ -120,11 +120,13 @@ class InstallController extends AbstractController {
}
$config = array(
- 'host' => 'localhost',
- 'name' => '',
- 'user' => '',
- 'pass' => '',
- 'prefix' => 'psm_',
+ 'db_host' => 'localhost',
+ 'db_port' => '3306',
+ 'db_name' => '',
+ 'db_user' => '',
+ 'db_pass' => '',
+ 'db_prefix' => 'psm_',
+ 'base_url' => '',
);
$changed = false;
@@ -140,10 +142,11 @@ class InstallController extends AbstractController {
if($changed) {
// test db connection
$this->db = new \psm\Service\Database(
- $config['host'],
- $config['user'],
- $config['pass'],
- $config['name']
+ $config['db_host'],
+ $config['db_port'],
+ $config['db_user'],
+ $config['db_pass'],
+ $config['db_name']
);
if($this->db->status()) {
@@ -275,11 +278,11 @@ class InstallController extends AbstractController {
* @param array $db_vars prefix,user,pass,name,host
* @return boolean|string TRUE on success, string with config otherwise
*/
- protected function writeConfigFile($db_vars) {
+ protected function writeConfigFile($array_config) {
$config = " $value) {
- $line = "define('PSM_DB_{key}', '{value}');".PHP_EOL;
+ foreach($array_config as $key => $value) {
+ $line = "define('PSM_{key}', '{value}');".PHP_EOL;
$line = str_replace(
array('{key}', '{value}'),
array(strtoupper($key), $value),
@@ -307,8 +310,9 @@ class InstallController extends AbstractController {
'pass' => '',
'name' => '',
'host' => '',
+ 'port' => '3306'
);
- $pattern = "/define\('SM_DB_{key}', '(.*?)'/u";
+ $pattern = "/define\('SM_{key}', '(.*?)'/u";
foreach($vars as $key => $value) {
$pattern_key = str_replace('{key}', strtoupper($key), $pattern);
diff --git a/src/psm/Module/Server/Controller/ServerController.php b/src/psm/Module/Server/Controller/ServerController.php
index c2c61db2..748f5434 100644
--- a/src/psm/Module/Server/Controller/ServerController.php
+++ b/src/psm/Module/Server/Controller/ServerController.php
@@ -286,6 +286,8 @@ class ServerController extends AbstractServerController {
$clean["port"] = 443;
} elseif ($tmp["scheme"] === "http") {
$clean["port"] = 80;
+ } elseif ($tmp["scheme"] === "rdp") {
+ $clean["port"] = 3389;
}
}
@@ -458,6 +460,7 @@ class ServerController extends AbstractServerController {
'label_type' => psm_get_lang('servers', 'type'),
'label_website' => psm_get_lang('servers', 'type_website'),
'label_service' => psm_get_lang('servers', 'type_service'),
+ '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_last_check' => psm_get_lang('servers', 'last_check'),
diff --git a/src/psm/Module/Server/Controller/StatusController.php b/src/psm/Module/Server/Controller/StatusController.php
index 5afde541..600e9be1 100644
--- a/src/psm/Module/Server/Controller/StatusController.php
+++ b/src/psm/Module/Server/Controller/StatusController.php
@@ -37,6 +37,7 @@ class StatusController extends AbstractServerController {
function __construct(Database $db, \Twig_Environment $twig) {
parent::__construct($db, $twig);
+ $this->setCSRFKey('status');
$this->setActions(array('index', 'saveLayout'), 'index');
}
diff --git a/src/psm/Service/Database.php b/src/psm/Service/Database.php
index c5296170..15cbf101 100644
--- a/src/psm/Service/Database.php
+++ b/src/psm/Service/Database.php
@@ -35,6 +35,12 @@ class Database {
*/
protected $db_host;
+ /**
+ * DB port
+ * @var string $db_port
+ */
+ protected $db_port = 3306;
+
/**
* DB name
* @var string $db_name
@@ -81,9 +87,10 @@ class Database {
* @param string $pass
* @param string $db
*/
- function __construct($host = null, $user = null, $pass = null, $db = null) {
+ function __construct($host = null, $user = null, $pass = null, $db = null, $port = null) {
if($host != null && $user != null && $pass !== null && $db != null) {
$this->db_host = $host;
+ $this->db_port = (!empty($port)) ? $port : 3306;
$this->db_name = $db;
$this->db_user = $user;
$this->db_pass = $pass;
@@ -498,7 +505,7 @@ class Database {
// Initizale connection
try {
$this->pdo = new \PDO(
- 'mysql:host='.$this->db_host.';dbname='.$this->db_name.';charset=utf8',
+ 'mysql:host='.$this->db_host.';port='.$this->db_port.';dbname='.$this->db_name.';charset=utf8',
$this->db_user,
$this->db_pass
);
diff --git a/src/psm/Txtmsg/Mollie.php b/src/psm/Txtmsg/Mollie.php
index 7c173777..1824c802 100644
--- a/src/psm/Txtmsg/Mollie.php
+++ b/src/psm/Txtmsg/Mollie.php
@@ -61,7 +61,7 @@ class Mollie extends Core {
public function sendSMS($message) {
$recipients = implode(',', $this->recipients);
- $result = $this->_auth_https_post('www.mollie.nl', '/xml/sms/',
+ $result = $this->_auth_https_post('api.messagebird.com', '/xml/sms/',
'gateway='.urlencode($this->gateway).
'&username='.urlencode($this->username).
'&password='.urlencode($this->password).
@@ -97,4 +97,4 @@ class Mollie extends Core {
}
return $buf;
}
-}
\ No newline at end of file
+}
diff --git a/src/psm/Txtmsg/Smsgw.php b/src/psm/Txtmsg/Smsgw.php
new file mode 100644
index 00000000..5fafb937
--- /dev/null
+++ b/src/psm/Txtmsg/Smsgw.php
@@ -0,0 +1,61 @@
+.
+ *
+ * @package phpservermon
+ * @author Daif Alotaibi
+ * @copyright Copyright (c) 2008-2015 Pepijn Over
+ * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
+ * @version Release: @package_version@
+ * @link http://www.phpservermonitor.org/
+ **/
+
+namespace psm\Txtmsg;
+
+class Smsgw extends Core {
+
+ /**
+ * Send a text message to one or more recipients
+ *
+ * @param string $message
+ * @return boolean
+ */
+
+ public function sendSMS($message) {
+ $url = 'http://api.smsgw.net/SendBulkSMS';
+ $post = array(
+ 'strUserName' => $this->username,
+ 'strPassword' => $this->password,
+ 'strTagName' => $this->originator,
+ 'strRecepientNumbers' => implode(';', $this->recipients),
+ 'strMessage' => $message,
+ );
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
+ curl_setopt($ch, CURLOPT_HEADER, FALSE);
+ curl_setopt($ch, CURLOPT_POST, TRUE);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
+ $data = curl_exec($ch);
+ if($data == '1') {
+ $this->success = true;
+ }
+ return $this->success;
+ }
+
+}
diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php
index 6c3ee490..eacbb410 100644
--- a/src/psm/Util/Install/Installer.php
+++ b/src/psm/Util/Install/Installer.php
@@ -130,6 +130,10 @@ class Installer {
$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'),
@@ -218,7 +222,7 @@ class Installer {
`ip` varchar(500) NOT NULL,
`port` int(5) unsigned NOT NULL,
`label` varchar(255) NOT NULL,
- `type` enum('service','website') NOT NULL default 'service',
+ `type` enum('ping','service','website') NOT NULL default 'service',
`pattern` varchar(255) NOT NULL,
`status` enum('on','off') NOT NULL default 'on',
`error` varchar(255) NULL,
@@ -442,6 +446,11 @@ class Installer {
psm_update_conf('password_encrypt_key', sha1(microtime()));
$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', '');";
$this->execSQL($queries);
diff --git a/src/psm/Util/Server/ServerValidator.php b/src/psm/Util/Server/ServerValidator.php
index 8b23d14f..4c97333f 100644
--- a/src/psm/Util/Server/ServerValidator.php
+++ b/src/psm/Util/Server/ServerValidator.php
@@ -101,6 +101,11 @@ class ServerValidator {
throw new \InvalidArgumentException('server_ip_bad_service');
}
break;
+ case 'ping':
+ if(!filter_var($value, FILTER_VALIDATE_IP)) {
+ throw new \InvalidArgumentException('server_ip_bad_service');
+ }
+ break;
}
return true;
@@ -113,7 +118,7 @@ class ServerValidator {
* @throws \InvalidArgumentException
*/
public function type($type) {
- if(!in_array($type, array('service', 'website'))) {
+ if(!in_array($type, array('ping', 'service', 'website'))) {
throw new \InvalidArgumentException('server_type_invalid');
}
return true;
diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php
index 84b147e1..ad787b2f 100644
--- a/src/psm/Util/Server/Updater/StatusUpdater.php
+++ b/src/psm/Util/Server/Updater/StatusUpdater.php
@@ -90,6 +90,9 @@ class StatusUpdater {
}
switch($this->server['type']) {
+ case 'ping':
+ $this->status_new = $this->updatePing($max_runs);
+ break;
case 'service':
$this->status_new = $this->updateService($max_runs);
break;
@@ -134,6 +137,41 @@ class StatusUpdater {
}
+ /**
+ * Check the current servers ping status - Code from http://stackoverflow.com/a/20467492
+ * @param int $max_runs
+ * @param int $run
+ * @return boolean
+ */
+ protected function updatePing($max_runs, $run = 1) {
+ $errno = 0;
+ // save response time
+ $starttime = microtime(true);
+ // set ping payload
+ $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
+
+ $fp = @fsockopen ($this->server['ip'], $this->server['port'], $errno, $this->error, 10);
+ $socket = socket_create(AF_INET, SOCK_RAW, 1);
+ socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 10, 'usec' => 0));
+ socket_connect($socket, $this->server['ip'], null);
+
+ socket_send($socket, $package, strLen($package), 0);
+ if (socket_read($socket, 255)) {
+ $this->rtime = microtime(true) - $starttime;
+ $status = true;
+ } else {
+ $status = false;
+ }
+ socket_close($socket);
+
+ // check if server is available and rerun if asked.
+ if(!$status && $run < $max_runs) {
+ return $this->updatePing($max_runs, $run + 1);
+ }
+
+ return $status;
+ }
+
/**
* Check the current server as a service
* @param int $max_runs
diff --git a/src/templates/default/main/body.tpl.html b/src/templates/default/main/body.tpl.html
index fa7d252a..4ce7dc56 100644
--- a/src/templates/default/main/body.tpl.html
+++ b/src/templates/default/main/body.tpl.html
@@ -6,7 +6,7 @@
{{ title }}
-
+
diff --git a/src/templates/default/module/config/config.tpl.html b/src/templates/default/module/config/config.tpl.html
index 103c52a8..076890d8 100644
--- a/src/templates/default/module/config/config.tpl.html
+++ b/src/templates/default/module/config/config.tpl.html
@@ -69,6 +69,32 @@
{{ label_log_retention_days }}
+
+
+
+
+
{{ label_alert_proxy|raw }}
+
+
+
+
+
+
+
{{ label_alert_proxy_url|raw }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -173,6 +199,7 @@
+
diff --git a/src/templates/default/module/install/config_new.tpl.html b/src/templates/default/module/install/config_new.tpl.html
index 64fe07ab..200d45c3 100644
--- a/src/templates/default/module/install/config_new.tpl.html
+++ b/src/templates/default/module/install/config_new.tpl.html
@@ -10,35 +10,48 @@
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/src/templates/default/module/server/server/update.tpl.html b/src/templates/default/module/server/server/update.tpl.html
index 2378d21e..4f26e357 100644
--- a/src/templates/default/module/server/server/update.tpl.html
+++ b/src/templates/default/module/server/server/update.tpl.html
@@ -20,6 +20,7 @@
@@ -47,6 +48,7 @@
+
diff --git a/src/templates/default/module/server/status/index.tpl.html b/src/templates/default/module/server/status/index.tpl.html
index 77fe4c89..c66cde78 100644
--- a/src/templates/default/module/server/status/index.tpl.html
+++ b/src/templates/default/module/server/status/index.tpl.html
@@ -1,4 +1,5 @@
+
{% for server in servers_offline %}
diff --git a/static/js/scripts.js b/static/js/scripts.js
index fb29cb63..46669303 100755
--- a/static/js/scripts.js
+++ b/static/js/scripts.js
@@ -135,6 +135,7 @@ function psm_xhr(mod, params, method, on_complete, options) {
function psm_saveLayout(layout) {
var params = {
action: 'saveLayout',
+ csrf: $("input[name=saveLayout_csrf]").val(),
layout: layout
};
psm_xhr('server_status', params, 'POST');