From 9c8b7e48426c5e403e72a6dbfa6891bdfd98cccf Mon Sep 17 00:00:00 2001 From: Timz99 Date: Wed, 25 Apr 2018 17:23:36 +0200 Subject: [PATCH] Added foundation Not ready for use! - Added translation - Added fields to GUI - Updated install script - Added last_offline - Display last_error ToDo: - Collect Raw output - Collect Error raw output - Save output to database --- src/includes/psmconfig.inc.php | 2 +- src/lang/en_US.lang.php | 5 + .../Controller/AbstractServerController.php | 10 +- .../Server/Controller/ServerController.php | 6 +- src/psm/Util/Install/Installer.php | 15 ++ src/psm/Util/Server/Updater/StatusUpdater.php | 3 +- .../module/server/server/view.tpl.html | 20 +++ static/css/style.css | 3 + static/js/scripts.js | 142 ++++++++++-------- 9 files changed, 143 insertions(+), 63 deletions(-) diff --git a/src/includes/psmconfig.inc.php b/src/includes/psmconfig.inc.php index af687a6f..de474bf3 100644 --- a/src/includes/psmconfig.inc.php +++ b/src/includes/psmconfig.inc.php @@ -29,7 +29,7 @@ /** * Current PSM version */ -define('PSM_VERSION', '3.2.2'); +define('PSM_VERSION', '3.3.0'); /** * URL to check for updates. Will not be checked if turned off on config page. diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 68844d61..878a194b 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -49,6 +49,7 @@ $sm_lang = array( 'ok' => 'OK', 'cancel' => 'Cancel', 'activate' => 'Activate', + 'advanced' => 'Advanced', // 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', @@ -158,6 +159,10 @@ $sm_lang = array( 'header_value_description' => 'Header value. Regular expressions are allowed.', 'last_check' => 'Last check', 'last_online' => 'Last online', + 'last_offline' => 'Last offline', + 'last_raw' => 'Last positive raw output', + 'last_error' => 'Last error', + 'last_error_raw' => 'Last error raw output', 'monitoring' => 'Monitoring', 'no_monitoring' => 'No monitoring', 'email' => 'Email', diff --git a/src/psm/Module/Server/Controller/AbstractServerController.php b/src/psm/Module/Server/Controller/AbstractServerController.php index 8aa0020c..b7f0dae0 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.php @@ -71,6 +71,7 @@ abstract class AbstractServerController extends AbstractController { `s`.`rtime`, `s`.`last_check`, `s`.`last_online`, + `s`.`last_offline`, `s`.`active`, `s`.`email`, `s`.`sms`, @@ -80,7 +81,10 @@ abstract class AbstractServerController extends AbstractController { `s`.`warning_threshold_counter`, `s`.`timeout`, `s`.`website_username`, - `s`.`website_password` + `s`.`website_password`, + `s`.`last_offline`, + `s`.`last_error_raw`, + `s`.`last_raw` FROM `".PSM_DB_PREFIX."servers` AS `s` {$sql_join} {$sql_where} @@ -102,6 +106,7 @@ abstract class AbstractServerController extends AbstractController { protected function formatServer($server) { $server['rtime'] = round((float) $server['rtime'], 4); $server['last_online'] = psm_timespan($server['last_online']); + $server['last_offline'] = psm_timespan($server['last_offline']); $server['last_check'] = psm_timespan($server['last_check']); $server['active'] = psm_get_lang('system', $server['active']); $server['email'] = psm_get_lang('system', $server['email']); @@ -117,6 +122,9 @@ abstract class AbstractServerController extends AbstractController { $server['type'] = psm_get_lang('servers', 'type_' . $server['type']); $server['timeout'] = ($server['timeout'] > 0) ? $server['timeout'] : PSM_CURL_TIMEOUT; + $server['last_error_raw'] = htmlentities($server['last_error_raw']); + $server['last_raw'] = htmlentities($server['last_raw']); + $url_actions = array('delete', 'edit', 'view'); foreach($url_actions as $action) { $server['url_' . $action] = psm_build_url(array( diff --git a/src/psm/Module/Server/Controller/ServerController.php b/src/psm/Module/Server/Controller/ServerController.php index 4d665295..f5c4d597 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -477,6 +477,10 @@ class ServerController extends AbstractServerController { 'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_rtime' => psm_get_lang('servers', 'latency'), 'label_last_online' => psm_get_lang('servers', 'last_online'), + 'label_last_offline' => psm_get_lang('servers', 'last_offline'), + 'label_last_raw' => psm_get_lang('servers', 'last_raw'), + 'label_last_error' => psm_get_lang('servers', 'last_error'), + 'label_last_error_raw' => psm_get_lang('servers', 'last_error_raw'), 'label_monitoring' => psm_get_lang('servers', 'monitoring'), 'label_email' => psm_get_lang('servers', 'email'), 'label_send_email' => psm_get_lang('servers', 'send_email'), @@ -495,6 +499,7 @@ class ServerController extends AbstractServerController { 'label_yes' => psm_get_lang('system', 'yes'), 'label_no' => psm_get_lang('system', 'no'), 'label_add_new' => psm_get_lang('system', 'add_new'), + 'label_advanced' => psm_get_lang('system', 'advanced'), ); } @@ -516,4 +521,3 @@ class ServerController extends AbstractServerController { return $result; } } - diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 691fe31a..8f4e810e 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -307,6 +307,9 @@ class Installer { if(version_compare($version_from, '3.2.2', '<')) { $this->upgrade322(); } + if(version_compare($version_from, '3.3.0', '<')) { + $this->upgrade330(); + } psm_update_conf('version', $version_to); } @@ -515,4 +518,16 @@ class Installer { ('telegram_api_token', '');"; $this->execSQL($queries); } + + /** + * Upgrade for v3.3.0 release + */ + protected function upgrade330() { + $queries = array(); + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` + ADD COLUMN VARCHAR(255) `last_offline` AFTER `last_online`, + ADD COLUMN VARCHAR(255) `last_error_raw` AFTER `website_password`, + ADD COLUMN VARCHAR(255) `last_raw` AFTER `last_error_raw`;"; + $this->execSQL($queries); + } } diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index e336f2e2..0a83bcfd 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.php @@ -118,8 +118,9 @@ class StatusUpdater { $save['last_online'] = date('Y-m-d H:i:s'); $save['warning_threshold_counter'] = 0; } else { - // server is offline, increase the error counter + // server is offline, increase the error counter and set last offline $save['warning_threshold_counter'] = $this->server['warning_threshold_counter'] + 1; + $save['last_offline'] = date('Y-m-d H:i:s'); if($save['warning_threshold_counter'] < $this->server['warning_threshold']) { // the server is offline but the error threshold has not been met yet. diff --git a/src/templates/default/module/server/server/view.tpl.html b/src/templates/default/module/server/server/view.tpl.html index a9423f7e..6b02234e 100644 --- a/src/templates/default/module/server/server/view.tpl.html +++ b/src/templates/default/module/server/server/view.tpl.html @@ -89,6 +89,26 @@ {% endif %} + + {{ label_advanced }}  +   + + + {{ label_last_offline }}: + {{ last_offline }} + + + {{ label_last_error }}: + {{ error }} + + + {{ label_last_error_raw }}: + {{ last_error_raw }} + + + {{ label_last_raw }}: + {{ last_raw }} + {% if has_admin_actions %}   diff --git a/static/css/style.css b/static/css/style.css index ece2d6fb..89f618b6 100755 --- a/static/css/style.css +++ b/static/css/style.css @@ -676,3 +676,6 @@ legend{ .icon-telegram { background-position: -96px -168px; } +.icon-expand-arrow { + background-position: -312px -120px; +} diff --git a/static/js/scripts.js b/static/js/scripts.js index 46669303..a9aed005 100755 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -1,24 +1,24 @@ $().ready(function() { - $('.show-modal').click(function (e) { + $(".show-modal").click(function (e) { var $this = $(this); - if ($this.is('a')) { + if ($this.is("a")) { e.preventDefault(); } - var $modal_id = $this.attr('data-modal-id') || 'main'; - var $modal = $('#' + $modal_id + 'Modal'); + var $modal_id = $this.attr("data-modal-id") || "main"; + var $modal = $("#" + $modal_id + "Modal"); if($modal.length) { - $modal.find('.modalOKButton').data('modal-origin', $this); + $modal.find(".modalOKButton").data("modal-origin", $this); - var param = $this.attr('data-modal-param'); + var param = $this.attr("data-modal-param"); if(param) { - var ary = param.split(','); + var ary = param.split(","); for (var index = 0; index < ary.length && index < 9; ++index) { var value = ary[index]; - $($modal).find('span.modalP' + (index+1)).text(value); + $($modal).find("span.modalP" + (index+1)).text(value); } } scroll(0, 0); - $modal.modal('show'); + $modal.modal("show"); } else { // Just in case we forgot the dialog box var conf = confirm("Are you sure?"); @@ -29,18 +29,19 @@ $().ready(function() { return false; }); - $('.modalOKButton').click(function(e) { + $(".modalOKButton").click(function(e) { var $this = $(this); - var $origin = $this.data('modal-origin'); - if ($origin.is('a')) { - window.location = $origin.attr('href'); + var $origin = $this.data("modal-origin"); + if ($origin.is("a")) { + window.location = $origin.attr("href"); } else { - $origin.next('input[type=hidden]').attr('value', 1); - $origin.closest('form').submit(); + $origin.next("input[type=hidden]").attr("value", 1); + $origin.closest("form").submit(); } return false; }); - $('select.multiselect').multiselect({ + + $("select.multiselect").multiselect({ includeSelectAllOption: true, maxHeight: 400, enableCaseInsensitiveFiltering: true @@ -51,71 +52,94 @@ $().ready(function() { // popularPorts // initial - $('.portGroup').hide(); - var portInput = $('#port').val(); + $(".portGroup").hide(); + var portInput = $("#port").val(); - if (portInput != '') { - var findPopularPorts = $('#popularPorts').find('option[value=' + portInput + ']'); + if (portInput !== "") { + var findPopularPorts = $("#popularPorts").find('option[value=" + portInput + "]'); if(findPopularPorts.length) { $(findPopularPorts).attr("selected", "selected"); } else { - $('#popularPorts').find('option[value=custom]').attr("selected", "selected"); - $('.portGroup').slideDown(); + $("#popularPorts").find('option[value=custom]').attr("selected", "selected"); + $(".portGroup").slideDown(); } } - $('#popularPorts').change(function () { - changePopularPorts($(this).val(), false, $('#type').val()); + $("#popularPorts").change(function () { + changePopularPorts($(this).val(), false, $("#type").val()); }); // server type - $('.types').hide(); - changeTypeSwitch($('#type').val()); + $(".types").hide(); + changeTypeSwitch($("#type").val()); - $('#type').change(function () { - changeTypeSwitch($('#type').val()); - changePopularPorts($('#popularPorts').val(), true, $('#type').val()); + $("#type").change(function () { + changeTypeSwitch($("#type").val()); + changePopularPorts($("#popularPorts").val(), true, $("#type").val()); }); + + // advanced information + $(".advanced").hide(); + var advancedopen = 0; + $("#advanced").click( + function() { + advancedSwitch((advancedopen += 1) % 2); + }); }); -function changeTypeSwitch(typeInput) { - switch (typeInput) { - case 'service': - $('.types').slideUp(); - $('.typeService').slideDown(); +function advancedSwitch(statusInput) { + switch (statusInput) { + case 0: + $(".advanced").slideUp(); break; - case 'website': - $('.types').slideUp(); - $('.typeWebsite').slideDown(); + case 1: + $(".advanced").slideDown(); break; default: - $('.types').hide(); + $(".advanced").hide(); + } +} + +function changeTypeSwitch(typeInput) { + switch (typeInput) { + case "service": + $(".types").slideUp(); + $(".typeService").slideDown(); + break; + + case "website": + $(".types").slideUp(); + $(".typeWebsite").slideDown(); + break; + + default: + $(".types").hide(); } } function changePopularPorts(popularPorts, changeType, typeInput) { if (changeType === true) { - if (typeInput == 'service') { - if (popularPorts == 'custom') { - $('.portGroup').slideDown(); + if (typeInput == "service") { + if (popularPorts == "custom") { + $(".portGroup").slideDown(); } else { - $('.portGroup').hide(); + $(".portGroup").hide(); } } } else { - if (popularPorts == 'custom') { - $('.portGroup').slideDown(); + if (popularPorts == "custom") { + $(".portGroup").slideDown(); } else { - $('#port').val(popularPorts); - $('.portGroup').slideUp(); + $("#port").val(popularPorts); + $(".portGroup").slideUp(); } } } function psm_xhr(mod, params, method, on_complete, options) { - method = (typeof method == 'undefined') ? 'GET' : method; + method = (typeof method == "undefined") ? "GET" : method; var xhr_options = { data: params, @@ -127,29 +151,29 @@ function psm_xhr(mod, params, method, on_complete, options) { }; $.extend(xhr_options, options); - var result = $.ajax('index.php?xhr=1&mod=' + mod, xhr_options); + var result = $.ajax("index.php?xhr=1&mod=" + mod, xhr_options); return result; } function psm_saveLayout(layout) { var params = { - action: 'saveLayout', + action: "saveLayout", csrf: $("input[name=saveLayout_csrf]").val(), layout: layout }; - psm_xhr('server_status', params, 'POST'); + psm_xhr("server_status", params, "POST"); } function psm_tooltips() { $('input[data-toggle="tooltip"]').tooltip({ - 'trigger':'hover', - 'placement': 'right', - 'container': 'body' + "trigger":"hover", + "placement": "right", + "container": "body" }); $('i[data-toggle="tooltip"]').tooltip({ - 'trigger':'hover', - 'placement': 'bottom' + "trigger":"hover", + "placement": "bottom" }); } @@ -172,16 +196,16 @@ function rtrim(str) { } function psm_flash_message(message) { - var flashmessage = $('#flashmessage'); + var flashmessage = $("#flashmessage"); if(flashmessage.length){ - if(typeof message != 'undefined') { + if(typeof message != "undefined") { flashmessage.html(message); } var t = flashmessage.html(); var c = trim(t); - var t = c.replace(' ', ''); + var t = c.replace(" ", ""); if(t){ flashmessage.slideDown(); } } -} \ No newline at end of file +}