Merge branch 'develop' into develop

pull/355/head
Valentin Deville 2017-01-18 17:51:47 +01:00 committed by GitHub
commit 8c2a0be485
31 changed files with 702 additions and 101 deletions

View File

@ -1 +1,20 @@
Options -Indexes
<IfModule mod_expires.c>
<FilesMatch "\.(js|jpg|jpeg|gif|png|css)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</FilesMatch>
</IfModule>
<IfModule mod_deflate.c>
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
</IfModule>

View File

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

View File

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

View File

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

View File

@ -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('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /cron/status.cron.php was not found on this server.</p></body></html>');
}
}
$cron_timeout = PSM_CRON_TIMEOUT;

View File

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

View File

@ -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 "<?php \
header('Location: /psm/index.php'); \
?>" > /var/www/default/index.php
?>" > /var/www/default/index.php

View File

@ -18,6 +18,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
<parameter key="path.templates">%path.src%templates</parameter>
<parameter key="db.host" type="constant">PSM_DB_HOST</parameter>
<parameter key="db.port" type="constant">PSM_DB_PORT</parameter>
<parameter key="db.user" type="constant">PSM_DB_USER</parameter>
<parameter key="db.pass" type="constant">PSM_DB_PASS</parameter>
<parameter key="db.name" type="constant">PSM_DB_NAME</parameter>
@ -38,6 +39,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
<argument>%db.user%</argument>
<argument>%db.pass%</argument>
<argument>%db.name%</argument>
<argument>%db.port%</argument>
</service>
<service id="event" class="Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher">

View File

@ -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)');
}
@ -542,7 +552,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) {

View File

@ -54,7 +54,7 @@ $sm_lang = array(
'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Včera v %k:%M',
'other_day_format' => '%A v %k:%M',
'never' => 'Never',
'never' => 'Nikdy',
'hours_ago' => 'před %d hodinami',
'an_hour_ago' => 'cca před hodinou',
'minutes_ago' => 'před %d minutami',
@ -177,7 +177,7 @@ $sm_lang = array(
'warning_notifications_disabled_pushover' => 'Pushover upozornění jsou vypnuta.',
'error_server_no_match' => 'Server nenalezen.',
'error_server_label_bad_length' => 'Popisek musí obsahovat 1 až 255 znaků.',
'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 ař 255 znaků.',
'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 až 255 znaků.',
'error_server_ip_bad_service' => 'IP adresa není platná.',
'error_server_ip_bad_website' => 'URL webu není platná.',
'error_server_type_invalid' => 'Zvolený typ serveru není platný',
@ -209,14 +209,16 @@ $sm_lang = array(
'sms_gateway_clickatell' => 'Clickatell',
'sms_gateway_textmarketer' => 'Textmarketer',
'sms_gateway_smsglobal' => 'SMSGlobal',
'sms_gateway_nexmo' => 'Nexmo',
'sms_gateway_octopush' => 'Octopush',
'sms_gateway_smsit' => 'Smsit',
'sms_gateway_freevoipdeal' => 'FreeVoipDeal',
'sms_gateway_freemobilesms' => 'FreeMobileSMS',
'sms_gateway_clicksend' => 'ClickSend',
'sms_gateway_nexmo' => 'Nexmo',
'sms_gateway_username' => 'Uživatelské jméno brány',
'sms_gateway_password' => 'Heslo brány',
'sms_from' => 'Telefonní číslo odesilatele',
'pushover_status' => 'Povolit zsílání Pushover zpráv',
'pushover_status' => 'Povolit zasílání Pushover zpráv',
'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění. Více na <a href="https://pushover.net/">webu Pushover</a>',
'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace',
'pushover_api_token' => 'Pushover App API Token',
@ -225,7 +227,7 @@ $sm_lang = array(
'alert_type_description' => '<b>Změna stavu:</b> '.
'Obdržíte upozornění při změně stavu, tedy:online -> offline nebo offline -> online.<br/>'.
'<br /><b>Offline:</b> '.
'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00.<br/>'.
'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte upozornění pouze v 01:00. <br/>'.
'<br><b>Vždy:</b> '.
'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.',
'alert_type_status' => 'Změna stavu',
@ -277,7 +279,7 @@ $sm_lang = array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline',
'off_email_body' => 'Nebylo možné spojit se se serverem:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Datum: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\'je offline',
'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'off_pushover_message' => 'Nebylo možné spojit se se serverem:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Datum: %DATE%',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%',
'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online',

View File

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

View File

@ -141,6 +141,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',
@ -196,6 +197,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',
@ -222,6 +227,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',
@ -246,6 +252,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' => '<b>Format:</b> 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',
@ -263,6 +271,7 @@ $sm_lang = array(
'settings_pushbullet' => 'Pushbullet settings',
'settings_notification' => 'Notification settings',
'settings_log' => 'Log settings',
'settings_proxy' => 'Proxy settings',
'auto_refresh' => 'Auto-refresh',
'auto_refresh_servers' =>
'Auto-refresh servers page.<br/>'.

318
src/lang/sk_SK.lang.php Normal file
View File

@ -0,0 +1,318 @@
<?php
/**
* PHP Server Monitor
* Monitor your servers and websites.
*
* This file is part of PHP Server Monitor.
* PHP Server Monitor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PHP Server Monitor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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/>.
*
* @package phpservermon
* @author Peter Misura <bzurko@gmail.com>
* @copyright Copyright (c) 2008-2015 Pepijn Over <pep@peplab.net>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@
* @link http://www.phpservermonitor.org/
**/
$sm_lang = array(
'name' => 'Slovensky - Slovak',
'locale' => array('sk_SK.UTF-8', 'sk_SK', 'slovak', 'slovak'),
'locale_tag' => 'sk',
'locale_dir' => 'ltr',
'system' => array(
'title' => 'Server Monitor',
'install' => 'Inštalácia',
'action' => 'Akcia',
'save' => 'Uložiť',
'edit' => 'Upraviť',
'delete' => 'Zmazať',
'date' => 'Dátum',
'message' => 'Správa',
'yes' => 'Áno',
'no' => 'Nie',
'insert' => 'Vložiť',
'add_new' => 'Pridať',
'update_available' => 'Nová verzia - ({version}) je dostupná na <a href="http://www.phpservermonitor.org" target="_blank">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Späť na začiatok',
'go_back' => 'Späť',
'ok' => 'OK',
'cancel' => 'Zrušiť',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Včera v %k:%M',
'other_day_format' => '%A v %k:%M',
'never' => 'Nikdy',
'hours_ago' => 'pred %d hodinami',
'an_hour_ago' => 'cca pred hodinou',
'minutes_ago' => 'pred %d minútami',
'a_minute_ago' => 'cca pred minútou',
'seconds_ago' => 'pred %d sekundami',
'a_second_ago' => 'pred chvíľou',
),
'menu' => array(
'config' => 'Konfigurácia',
'server' => 'Servery',
'server_log' => 'Log',
'server_status' => 'Stav',
'server_update' => 'Aktualizácia',
'user' => 'Užívateľ',
'help' => 'Nápoveda',
),
'users' => array(
'user' => 'Užívateľ',
'name' => 'Meno',
'user_name' => 'Užívateľské meno',
'password' => 'Heslo',
'password_repeat' => 'Rovnaké heslo (pre kontrolu)',
'password_leave_blank' => 'Nevyplňujte ak nechcete zmeniť.',
'level' => 'Oprávnenie',
'level_10' => 'Administrátor',
'level_20' => 'Užívateľ',
'level_description' => '<b>Administrátor</b> má plný prístup: môže spravovať servery, užívateľov a upraviť globálnu konfiguráciu.<br/><b>Uživatel</b> má práva len na čítanie a spustiť aktualizáciu serverov, ktoré má priradené.',
'mobile' => 'Mobil',
'email' => 'E-mail',
'pushover' => 'Pushover',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</a>',
'pushover_key' => 'Pushover Token',
'pushover_device' => 'Pushover Zariadenie',
'pushover_device_description' => 'Název zariadenia, na ktoré má byť správa odoslaná. Ponechajte prázdne pre odoslanie na všetky zariadenia.',
'delete_title' => 'Zmazať užívateľa',
'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?',
'deleted' => 'Užívateľ zmazaný.',
'updated' => 'Užívateľ aktualizovaný.',
'inserted' => 'Užívateľ pridaný.',
'profile' => 'Profil',
'profile_updated' => 'Váš užívateľský profil bol upravený.',
'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.',
'error_user_name_invalid' => 'Užívateľské meno môže obsahovať iba písmena (a-z, A-Z), čísla (0-9) a podtržítka (_).',
'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.',
'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .',
'error_user_email_invalid' => 'E-mailová adresa je neplatná',
'error_user_level_invalid' => 'Zadané oprávnenie je neplatné.',
'error_user_no_match' => 'Užívateľ nebol najdený.',
'error_user_password_invalid' => 'Zadané heslo je neplatné.',
'error_user_password_no_match' => 'Zadaná heslá sa nezhodujú.',
),
'log' => array(
'title' => 'Záznamy logu',
'type' => 'Typ',
'status' => 'Stav',
'email' => 'E-mail',
'sms' => 'SMS',
'pushover' => 'Pushover',
'no_logs' => 'Žiadne záznamy',
),
'servers' => array(
'server' => 'Server',
'status' => 'Stav',
'label' => 'Popis',
'domain' => 'Doména/IP',
'timeout' => 'Časový limit',
'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.',
'authentication_settings' => 'Nastavenie autentizacie (voliteľný)',
'website_username' => 'Užívateľské meno',
'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)',
'website_password' => 'Heslo',
'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.',
'fieldset_monitoring' => 'Monitoring',
'fieldset_permissions' => 'Oprávnenie',
'port' => 'Port',
'custom_port' => 'Užívateľský Port',
'popular_ports' => 'Populárne Porty',
'please_select' => 'Prosím vyberte',
'type' => 'Typ',
'type_website' => 'Web',
'type_service' => 'Služba',
'pattern' => 'Vyhledat reťazec/vzor',
'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline. Regulárne výrazy sú povolené.',
'last_check' => 'Posledná kontrola',
'last_online' => 'Naposledy online',
'monitoring' => 'Monitoring',
'no_monitoring' => 'Žiadne monitorované služby',
'email' => 'E-mail',
'send_email' => 'Odoslať e-mail',
'sms' => 'SMS',
'send_sms' => 'Odoslať SMS',
'pushover' => 'Pushover',
'users' => 'Užívatelia',
'delete_title' => 'Zmazať server',
'delete_message' => 'Naozaj si prajete zmazať \'%1\'?',
'deleted' => 'Server zmazaný.',
'updated' => 'Server aktualizovaný.',
'inserted' => 'Server pridaný.',
'latency' => 'Latencia',
'latency_max' => 'Latencia (maximum)',
'latency_min' => 'Latencia (minimum)',
'latency_avg' => 'Latencia (priemer)',
'uptime' => 'Uptime',
'year' => 'Rok',
'month' => 'Mesiac',
'week' => 'Týždeň',
'day' => 'Deň',
'hour' => 'Hodina',
'warning_threshold' => 'Stropná hranica varovania',
'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.',
'chart_last_week' => 'Minulý týždeň',
'chart_history' => 'História',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html
'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS upozornenia sú vypnuté.',
'warning_notifications_disabled_email' => 'E-mailové upozornenia sú vypnuté.',
'warning_notifications_disabled_pushover' => 'Pushover upozornenia sú vypnuté.',
'error_server_no_match' => 'Server nenájdený.',
'error_server_label_bad_length' => 'Popisok musí obsahovať 1 až 255 znakov.',
'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovať 1 až 255 znakov.',
'error_server_ip_bad_service' => 'IP adresa nie je platná.',
'error_server_ip_bad_website' => 'URL webu nie je platná.',
'error_server_type_invalid' => 'Zvolený typ serveru nie je platný',
'error_server_warning_threshold_invalid' => 'Hranica varovania musí byť číslo väčšie ako 0.',
),
'config' => array(
'general' => 'Všeobecné',
'language' => 'Jazyk',
'show_update' => 'Kontrolovať aktualizácie?',
'password_encrypt_key' => 'Šifrovací kľúč pre heslá',
'password_encrypt_key_note' => 'Týmto klúčom sa šifrujú heslá, ktoré sa ukladajú na serveroch pre prístup na webové stránky. Ak kľúč zmeníte, budú uložené heslá neplatné!',
'email_status' => 'Povoliť odosielanie e-mailu',
'email_from_email' => 'E-mailová adresa odosielateľa',
'email_from_name' => 'Jméno odosielateľa',
'email_smtp' => 'Zapnúť SMTP',
'email_smtp_host' => 'SMTP adresa',
'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP zabezpečenie',
'email_smtp_security_none' => 'žiadne',
'email_smtp_username' => 'SMTP užívateľské meno',
'email_smtp_password' => 'SMTP heslo',
'email_smtp_noauth' => 'Nechajte prázdne pre použitie SMTP bez hesla',
'sms_status' => 'Povoliť odosielanie textových správ',
'sms_gateway' => 'Brána použitá pro odosielanie správ',
'sms_gateway_mosms' => 'Mosms',
'sms_gateway_mollie' => 'Mollie',
'sms_gateway_spryng' => 'Spryng',
'sms_gateway_inetworx' => 'Inetworx',
'sms_gateway_clickatell' => 'Clickatell',
'sms_gateway_textmarketer' => 'Textmarketer',
'sms_gateway_smsglobal' => 'SMSGlobal',
'sms_gateway_octopush' => 'Octopush',
'sms_gateway_smsit' => 'Smsit',
'sms_gateway_freevoipdeal' => 'FreeVoipDeal',
'sms_gateway_freemobilesms' => 'FreeMobileSMS',
'sms_gateway_clicksend' => 'ClickSend',
'sms_gateway_nexmo' => 'Nexmo',
'sms_gateway_username' => 'Užívateľské meno brány',
'sms_gateway_password' => 'Heslo brány',
'sms_from' => 'Telefónne číslo odosielateľa',
'pushover_status' => 'Povoliť zasielanie Pushover správ',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</a>',
'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie',
'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte <a href="%1$s" target="_blank">registrovať</a> a získať API Token.',
'alert_type' => 'Zvoľte kedy si prajete byť upozornení.',
'alert_type_description' => '<b>Zmena stavu:</b> '.
'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.<br/>'.
'<br /><b>Offline:</b> '.
'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '.
'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '.
'tak obdržíte upozornenie iba o 01:00.<br/>'.
'<br><b>Vždy:</b> '.
'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.',
'alert_type_status' => 'Zmena stavu',
'alert_type_offline' => 'Offline',
'alert_type_always' => 'Vždy',
'log_status' => 'Log',
'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky upozornenia.',
'log_email' => 'Logovať odoslané e-maily',
'log_sms' => 'Logovať odoslané textové správy',
'log_pushover' => 'Logovať odoslané Pushover správy',
'updated' => 'Nastavenie bolo aktualizované.',
'tab_email' => 'E-mail',
'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover',
'settings_email' => 'Nastavenie e-mailov',
'settings_sms' => 'Nastavenie textových správ',
'settings_pushover' => 'Nastavenie Pushover',
'settings_notification' => 'Nastavenie upozornení',
'settings_log' => 'Nastavenie logu',
'auto_refresh' => 'Automaticky obnoviť',
'auto_refresh_servers' =>
'Automaticky obnoviť stránku Servery.<br/>'.
'<span class="small">'.
'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'.
'</span>',
'seconds' => 'sekúnd',
'test' => 'Test',
'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.',
'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.',
'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v užívateľskom profile.',
'send' => 'Odoslať',
'test_subject' => 'Test',
'test_message' => 'Testovacia správa',
'email_sent' => 'E-mail odoslaný',
'email_error' => 'Chyba pri odosielaní e-mailu',
'sms_sent' => 'SMS odoslaná',
'sms_error' => 'Chyba pri odosielaní SMS',
'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné telefónne číslo.',
'pushover_sent' => 'Pushover upozornenie odoslané.',
'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s',
'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol nájdený žiaden API token.',
'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je definovaný Pushover key.',
'log_retention_period' => 'Rotácia logu',
'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.',
'log_retention_days' => 'dní',
),
// for newlines in the email messages use <br/>
'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline',
'off_email_body' => 'Nebolo možné spojiť sa so serverom:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Dátum: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Dátum: %DATE%',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%',
'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online',
'on_email_body' => "Server '%LABEL%' je opäť online<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dátum: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' je online',
'on_pushover_message' => 'Server \'%LABEL%\' je znovu online:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dátum: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'Vitajte, %user_name%',
'title_sign_in' => 'Prosím prihláste sa',
'title_forgot' => 'Zabudnuté heslo?',
'title_reset' => 'Obnova hesla',
'submit' => 'Odoslať',
'remember_me' => 'Zapamätať údaje',
'login' => 'Prihlásiť',
'logout' => 'Odhlásiť',
'username' => 'Užívateľské meno',
'password' => 'Heslo',
'password_repeat' => 'Opakujte heslo',
'password_forgot' => 'Zabudnuté heslo?',
'password_reset' => 'Obnoviť heslo',
'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor',
'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu hodinu.<br/><br/>%link%',
'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.',
'error_login_incorrect' => 'Prihlásenie nebolo úspešné.',
'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.',
'error_reset_invalid_link' => 'Odkaz je neplatný.',
'success_password_forgot' => 'Na vašu e-mailovú adresu bol zaslaný e-mail s informáciami pre obnovu hesla.',
'success_password_reset' => 'Vaše heslo bolo úspešne obnovené. Prosím prihláste sa.',
),
'error' => array(
'401_unauthorized' => 'Nedostatočné oprávnenia',
'401_unauthorized_description' => 'Nemáte oprávnenie zobraziť túto stránku.',
),
);

View File

@ -40,8 +40,8 @@ $sm_lang = array(
'date' => '日期',
'message' => '消息',
'yes' => '是',
'no' => '否o',
'insert' => '插入',
'no' => '否',
'insert' => '新增',
'add_new' => '添加',
'update_available' => '发现新版本({version}) <a href="http://www.phpservermonitor.org" target="_blank">http://www.phpservermonitor.org</a>.',
'back_to_top' => '返回顶部',
@ -84,13 +84,13 @@ $sm_lang = array(
'mobile' => '手机',
'email' => '邮件',
'pushover' => 'Pushover',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank">Pushover 官网</a>.',
'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
'delete_title' => 'Delete User',
'delete_message' => 'Are you sure you want to delete user \'%1\'?',
'deleted' => 'User deleted.',
'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.',
'delete_title' => '删除用户',
'delete_message' => '确认删除用户 \'%1\'?',
'deleted' => '用户已删除.',
'updated' => '用户已更新.',
'inserted' => '用户已添加.',
'profile' => '个人资料',
@ -112,16 +112,26 @@ $sm_lang = array(
'email' => '邮件',
'sms' => '短信',
'pushover' => 'Pushover',
'no_logs' => 'No logs',
'no_logs' => '没有日志',
),
'servers' => array(
'server' => '服务器',
'status' => '状态',
'label' => '标签',
'domain' => '域名/IP',
'timeout' => 'Timeout',
'timeout_description' => 'Number of seconds to wait for the server to respond.',
'timeout' => '超时时间',
'timeout_description' => '等待服务器响应的时间.',
'authentication_settings' => '访问权限设置 (可选)',
'website_username' => '用户名',
'website_username_description' => '网站分配的用户名.',
'website_password' => '密码',
'website_password_description' => '网站分配的密码,密码将会加密存放',
'fieldset_monitoring' => '通知',
'fieldset_permissions' => '权限',
'port' => '端口',
'custom_port' => '指定端口',
'popular_ports' => '默认端口',
'please_select' => '请选择',
'type' => '类型',
'type_website' => '网站',
'type_service' => '服务',
@ -130,16 +140,16 @@ $sm_lang = array(
'last_check' => '最后检查',
'last_online' => '最后在线',
'monitoring' => '监控中',
'no_monitoring' => 'No monitoring',
'no_monitoring' => '未监控',
'email' => '邮件',
'send_email' => '发送邮件',
'sms' => '短信',
'send_sms' => '发送短信',
'pushover' => 'Pushover',
'users' => 'Users',
'delete_title' => 'Delete Server',
'delete_message' => 'Are you sure you want to delete server \'%1\'?',
'deleted' => 'Server deleted.',
'users' => '用户',
'delete_title' => '删除服务器',
'delete_message' => '确认删除服务器 \'%1\'?',
'deleted' => '服务器已删除.',
'updated' => '服务器已更新.',
'inserted' => '服务器已添加.',
'latency' => '延迟',
@ -161,16 +171,16 @@ $sm_lang = array(
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS notifications are disabled.',
'warning_notifications_disabled_email' => 'Email notifications are disabled.',
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
'error_server_no_match' => 'Server not found.',
'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.',
'error_server_ip_bad_length' => 'The domain / IP must be between 1 and 255 characters.',
'error_server_ip_bad_service' => 'The IP address is not valid.',
'error_server_ip_bad_website' => 'The website URL is not valid.',
'error_server_type_invalid' => 'The selected server type is invalid.',
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
'warning_notifications_disabled_sms' => 'SMS 通知不可用.',
'warning_notifications_disabled_email' => 'Email 通知不可用.',
'warning_notifications_disabled_pushover' => 'Pushover 通知不可用.',
'error_server_no_match' => '服务器不存在.',
'error_server_label_bad_length' => '标签 长度要求 1 ~ 255 字符.',
'error_server_ip_bad_length' => 'domain / IP 长度要求 1 ~ 255 字符.',
'error_server_ip_bad_service' => '非法 IP.',
'error_server_ip_bad_website' => '非法 URL.',
'error_server_type_invalid' => '非法选项.',
'error_server_warning_threshold_invalid' => '报警阈值为大于 0 的数字.',
),
'config' => array(
'general' => '通用',
@ -182,8 +192,8 @@ $sm_lang = array(
'email_smtp' => '使用SMTP发送',
'email_smtp_host' => 'SMTP主机',
'email_smtp_port' => 'SMTP端口',
'email_smtp_security' => 'SMTP security',
'email_smtp_security_none' => 'None',
'email_smtp_security' => 'SMTP 设置',
'email_smtp_security_none' => '',
'email_smtp_username' => 'SMTP用户名',
'email_smtp_password' => 'SMTP密码',
'email_smtp_noauth' => '留空为无验证',
@ -194,7 +204,7 @@ $sm_lang = array(
'sms_gateway_spryng' => 'Spryng',
'sms_gateway_inetworx' => 'Inetworx',
'sms_gateway_clickatell' => 'Clickatell',
'sms_gateway_textmarketer' => 'Textmarketer',
'sms_gateway_textmarketer' => 'Textmarketer',
'sms_gateway_smsglobal' => 'SMSGlobal',
'sms_gateway_octopush' => 'Octopush',
'sms_gateway_smsit' => 'Smsit',
@ -203,11 +213,11 @@ $sm_lang = array(
'sms_gateway_username' => 'SMS网关用户名',
'sms_gateway_password' => 'SMS网关密码',
'sms_from' => '发信人电话号',
'pushover_status' => 'Allow sending Pushover messages',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.',
'pushover_clone_app' => 'Click here to create your Pushover app',
'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank">register an App</a> at their website and enter the App API Token here.',
'pushover_status' => '允许 Pushover 通知',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank">Pushover 官网</a>.',
'pushover_clone_app' => '点此创建 Pushover App',
'pushover_api_token' => 'Pushover API Token',
'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank">注册Pushover</a> 并获取 Api Token.',
'alert_type' => '如果想要收到提醒请选中此项.',
'alert_type_description' => '<b>状态变化:</b> '.
'服务器 online -> offline 或 offline -> online 的状态变化将会收到提醒.<br/>'.
@ -224,17 +234,18 @@ $sm_lang = array(
'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.',
'log_email' => '记录脚本所发邮件?',
'log_sms' => '记录脚本所发短信SMS?',
'log_pushover' => 'Log pushover messages sent by the script',
'log_pushover' => '记录脚本所发pushover消息?',
'updated' => '设置已更新.',
'tab_email' => '邮件发送设置',
'tab_sms' => '短信发送设置',
'tab_pushover' => 'Pushover',
'settings_email' => '邮件发送设置',
'settings_sms' => '短信发送设置',
'settings_pushover' => 'Pushover settings',
'settings_pushover' => 'Pushover 设置',
'settings_notification' => '提醒设置',
'settings_log' => '日志设置',
'auto_refresh' => 'Auto-refresh',
'auto_refresh' => '自动刷新',
'password_encrypt_key' => '加密密钥',
'auto_refresh_servers' =>
'自动刷新服务器页.<br/>'.
'<span class="small">'.
@ -242,24 +253,24 @@ $sm_lang = array(
'</span>',
'seconds' => 'seconds',
'test' => 'Test',
'test_email' => 'An email will be sent to the address specified in your user profile.',
'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.',
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user profile.',
'send' => 'Send',
'test_subject' => 'Test',
'test_message' => 'Test message',
'email_sent' => 'Email sent',
'email_error' => 'Error in email sending',
'sms_sent' => 'Sms sent',
'sms_error' => 'Error in sms sending',
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
'pushover_sent' => 'Pushover notification sent',
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s',
'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global configuration.',
'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
'log_retention_period' => 'Log retention period',
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.',
'log_retention_days' => 'days',
'test_email' => '将发送一封邮件到您账户设置的邮件地址.',
'test_sms' => '将发送一封短信到您账户设置的手机号码.',
'test_pushover' => '将发送一条 Pushover 通知到您账户设置的 key/device 设备上.',
'send' => '发送',
'test_subject' => '测试',
'test_message' => '测试信息',
'email_sent' => '发送Email',
'email_error' => 'Error 发送出错',
'sms_sent' => '发送Sms',
'sms_error' => '短信发送出错',
'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.',
'pushover_sent' => '发送Pushover通知',
'pushover_error' => 'Pushover通知发送出错: %s',
'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global configuration.',
'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.',
'log_retention_period' => '日志保留时长',
'log_retention_period_description' => '日志存档保留时间0为禁用日志清理',
'log_retention_days' => '',
),
// for newlines in the email messages use <br/>
'notifications' => array(
@ -298,7 +309,7 @@ $sm_lang = array(
'success_password_reset' => '密码重设成功.请登录.',
),
'error' => array(
'401_unauthorized' => 'Unauthorized',
'401_unauthorized_description' => 'You do not have the privileges to view this page.',
'401_unauthorized' => '未授权的请求',
'401_unauthorized_description' => '未授权的请求.',
),
);

View File

@ -36,6 +36,7 @@ class ConfigController extends AbstractController {
* @var array $checkboxes
*/
protected $checkboxes = array(
'proxy',
'email_status',
'email_smtp',
'sms_status',
@ -54,6 +55,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',
@ -298,11 +302,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'),
@ -326,6 +335,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'),
@ -354,6 +364,8 @@ class ConfigController extends AbstractController {
'label_log_sms' => psm_get_lang('config', 'log_sms'),
'label_log_pushover' => psm_get_lang('config', 'log_pushover'),
'label_log_pushbullet' => 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'),
@ -364,4 +376,4 @@ class ConfigController extends AbstractController {
'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'),
);
}
}
}

View File

@ -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 = "<?php".PHP_EOL;
foreach($db_vars as $key => $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);

View File

@ -280,6 +280,20 @@ class ServerController extends AbstractServerController {
// validate the lot
$server_validator = new \psm\Util\Server\ServerValidator($this->db);
// format port from http/s url
if($clean['type'] == 'website' && empty($clean['port'])) {
$tmp = parse_url($clean["ip"]);
if(isset($tmp["port"])) {
$clean["port"] = $tmp["port"];
} elseif ($tmp["scheme"] === "https") {
$clean["port"] = 443;
} elseif ($tmp["scheme"] === "http") {
$clean["port"] = 80;
} elseif ($tmp["scheme"] === "rdp") {
$clean["port"] = 3389;
}
}
try {
if($this->server_id > 0) {
$server_validator->serverId($this->server_id);
@ -449,6 +463,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'),

View File

@ -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');
}
@ -91,6 +92,13 @@ class StatusController extends AbstractServerController {
$this->twig->addGlobal('auto_refresh', true);
$this->twig->addGlobal('auto_refresh_seconds', $auto_refresh_seconds);
}
if($this->isXHR() || isset($_SERVER["HTTP_X_REQUESTED_WITH"])) {
$this->xhr = true;
//disable auto refresh in ajax return html
$layout_data["auto_refresh"] = 0;
}
return $this->twig->render('module/server/status/index.tpl.html', $layout_data);
}

View File

@ -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 = $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
);

View File

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

61
src/psm/Txtmsg/Smsgw.php Normal file
View File

@ -0,0 +1,61 @@
<?php
/**
* PHP Server Monitor
* Monitor your servers and websites.
*
* This file is part of PHP Server Monitor.
* PHP Server Monitor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PHP Server Monitor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* 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/>.
*
* @package phpservermon
* @author Daif Alotaibi <daif@daif.net>
* @copyright Copyright (c) 2008-2015 Pepijn Over <pep@peplab.net>
* @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;
}
}

View File

@ -46,6 +46,7 @@ class Spryng extends Core {
public function sendSMS($message) {
$recipients = implode(',', $this->recipients);
$message = urlencode($message);
$result = $this->_auth_https_post('http://www.spryng.nl', '/SyncTextService',
'?OPERATION=send' .

View File

@ -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,
@ -445,6 +449,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);

View File

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

View File

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

View File

@ -6,14 +6,11 @@
<title>{{ title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<meta name="robots" content="noindex" />
<meta name="theme-color" content="#424242">
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<link rel="icon" type="image/png" href="favicon.png" />
<link rel="apple-touch-icon" href="favicon.png" />
{% if auto_refresh %}
<meta http-equiv="refresh" content="{{ auto_refresh_seconds }}" />
{% endif %}
<!-- Le styles -->
<link href="static/plugin/twitter-bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="static/plugin/twitter-bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">

View File

@ -70,6 +70,32 @@
<input type="text" class="input-mini" id="log_retention_period" name="log_retention_period" value="{{ log_retention_period }}" data-toggle="tooltip" title="{{ label_log_retention_period_description }}" />&nbsp;{{ label_log_retention_days }}
</div>
</div>
<legend>{{ label_settings_proxy }}</legend>
<div class="control-group">
<div class="controls">
<label class="checkbox" for="proxy"><input type="checkbox" id="proxy" name="proxy[]" {{ proxy_checked|raw }} />{{ label_proxy }}</label>
<p class="help-block">{{ label_alert_proxy|raw }}</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="proxy_url">{{ label_proxy_url }}</label>
<div class="controls">
<input type="text" id="proxy_url" name="proxy_url" value="{{ proxy_url }}" maxlength="100" placeholder="{{ label_proxy_url }}" />
<p class="help-block">{{ label_alert_proxy_url|raw }}</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="proxy_user">{{ label_proxy_user }}</label>
<div class="controls">
<input type="text" id="proxy_user" name="proxy_user" value="{{ proxy_user }}" maxlength="100" placeholder="{{ label_proxy_user }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="proxy_password">{{ label_proxy_password }}</label>
<div class="controls">
<input type="password" id="proxy_password" name="proxy_password" value="{{ proxy_password }}" maxlength="100" placeholder="{{ label_proxy_password }}" />
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="general_submit">{{ label_save }}</button>
</div>
@ -174,6 +200,7 @@
<option value="octopush" {{ sms_selected_octopush|raw }}>{{ label_sms_gateway_octopush }}</option>
<option value="freemobilesms" {{ sms_selected_freemobilesms|raw }}>{{ label_sms_gateway_freemobilesms }}</option>
<option value="clicksend" {{ sms_selected_clicksend|raw }}>{{ label_sms_gateway_clicksend }}</option>
<option value="smsgw" {{ sms_selected_smsgw|raw }}>{{ label_sms_gateway_smsgw }}</option>
</select>
</div>
</div>

View File

@ -10,35 +10,48 @@
<div class="span6">
<form id="psm_config" class="form-horizontal" action="install.php?action=config" method="post">
{{ macro.csrf_input() }}
<p>Please enter the application url:</p>
<div class="control-group">
<label class="control-label" for="base_url">Application base url</label>
<div class="controls">
<input type="text" id="base_url" name="base_url" value="{{ base_url }}" />
</div>
</div>
<p>Please enter your database info:</p>
<div class="control-group">
<label class="control-label" for="host">Database host</label>
<div class="controls">
<input type="text" id="host" name="host" value="{{ host }}" />
<input type="text" id="host" name="db_host" value="{{ db_host }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="host">Database port</label>
<div class="controls">
<input type="text" id="port" name="port" value="{{ port }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="name">Database name</label>
<div class="controls">
<input type="text" id="name" name="name" value="{{ name }}" placeholder="db name" />
<input type="text" id="name" name="db_name" value="{{ db_name }}" placeholder="db name" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="user">Database user</label>
<div class="controls">
<input type="text" id="user" name="user" value="{{ user }}" placeholder="db user" />
<input type="text" id="user" name="db_user" value="{{ db_user }}" placeholder="db user" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="pass">Database password</label>
<div class="controls">
<input type="password" id="pass" name="pass" value="{{ pass }}" placeholder="db password" />
<input type="password" id="pass" name="db_pass" value="{{ db_pass }}" placeholder="db password" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="prefix">Table prefix</label>
<div class="controls">
<input type="text" id="prefix" name="prefix" value="{{ prefix }}" />
<input type="text" id="prefix" name="db_prefix" value="{{ db_prefix }}" />
</div>
</div>
<div class="control-group">
@ -60,4 +73,4 @@
</div>
{% endif %}
</div>
{% endblock %}
{% endblock %}

View File

@ -20,6 +20,7 @@
<div class="controls">
<select id="type" name="type">
<option value="">{{ label_please_select }}</option>
<option value="ping" {{ edit_type_selected_ping|raw }}>{{ label_ping }}</option>
<option value="service" {{ edit_type_selected_service|raw }}>{{ label_service }}</option>
<option value="website" {{ edit_type_selected_website|raw }}>{{ label_website }}</option>
</select>
@ -47,6 +48,7 @@
<option value="115">SFTP (115)</option>
<option value="43">WHOIS (43)</option>
<option value="53">BIND (53)</option>
<option value="3389">RDP (3389)</option>
</optgroup>
</select>
</div>

View File

@ -1,4 +1,5 @@
<div class="tab-content">
<input type="hidden" name="saveLayout_csrf" value="{{ csrf_token(csrf_key|default('')) }}" />
<div id="flow-layout" class="tab-pane {{ block_layout_active }}">
<div class="entity-container">
{% for server in servers_offline %}
@ -57,4 +58,17 @@
</table>
</div>
</div>
</div>
</div>
{% if auto_refresh %}
<script>
setInterval(function(){
$.ajax({
url:"?",
success: function(html, status){
$("#page-container").html(html);
}
});
}, {{ auto_refresh_seconds }} * 1000);
</script>
{% endif %}

View File

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