Merge branch 'pandora_6.0' into '41-error-500-en-consola-falta-enterprise_hook-integria-4406-6'

# Conflicts:
#   pandora_console/godmode/agentes/module_manager_editor.php
This commit is contained in:
Enrique Camargo 2017-02-20 16:17:25 +01:00
commit e903be6255
71 changed files with 1018 additions and 836 deletions

6
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,6 @@
variables:
GIT_STRATEGY: clone
test:
script:
- docker run --rm -h pandorafms -t -v "$CI_PROJECT_DIR:/tmp/pandorafms" pandorafms/pandorafms-base /tmp/pandorafms/tests/test.sh

View File

@ -1,6 +1,6 @@
[![Build Status](https://travis-ci.org/pandorafms/pandorafms.svg?branch=develop)](https://travis-ci.org/pandorafms/pandorafms)
[![Pandora logo](http://pandorafms.com/github/logo_2.png)](http://pandorafms.org)
[![Pandora logo](http://wolf359.artica.es/public_images/logo_pandora_community.png)](http://pandorafms.org)
Pandora FMS is a monitoring software for IT infrastructure management which includes network equipment, Windows and Unix servers, virtual infrastructure and all different kind of applications. It has a large amount of features, making it a new generation software which discovers all the monitoring issues that an organization may need.
@ -33,13 +33,13 @@ Pandora FMS is a monitoring tool that not only measures if a parameter is right
* Multiuser, several levels of ACL management.
### Screenshots
![screenshot 1](http://pandorafms.com/github/agent_list.png)
![screenshot 1](http://wolf359.artica.es/public_images/captura-pantalla-pandora3.png)
<br />
<br />
![screenshot 2](http://pandorafms.com/github/captura_pantalla5.png)
![screenshot 2](http://wolf359.artica.es/public_images/pandora6.0sp3-monitor-view.png)
<br />
<br />
![screenshot 3](http://pandorafms.com/github/pandora_sla_report2.png)
![screenshot 3](http://wolf359.artica.es/public_images/pandora6.0sp3-agentview.png)
<br />
<br />
![screenshot 4](http://pandorafms.com/github/services.png)
![screenshot 4](http://wolf359.artica.es/public_images/pandora6.0sp3-sample-visual-console.png)

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 6.0SP5-170202
Version: 6.0SP5-170220
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="6.0SP5-170202"
pandora_version="6.0SP5-170220"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null

View File

@ -41,7 +41,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '6.0SP5';
use constant AGENT_BUILD => '170202';
use constant AGENT_BUILD => '170220';
# Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 6.0SP5
%define release 170202
%define release 170220
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 6.0SP5
%define release 170202
%define release 170220
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="6.0SP5"
PI_BUILD="170202"
PI_BUILD="170220"
OS_NAME=`uname -s`
FORCE=0

View File

@ -33,7 +33,7 @@ my $freemem=`cat /proc/meminfo | grep 'MemFree' | awk '{ print \$2 } '`;
my $cached=`cat /proc/meminfo | grep '^Cached:' | awk '{ print \$2 } '`;
my $cachedswap=`cat /proc/meminfo | grep '^SwapCached:' | awk '{ print \$2 }'`;
my $total_meminfo=`cat /proc/meminfo | grep 'MemTotal:' | awk '{ print \$2 }'`;
my $available=$freemem+$cached+$cachedwap;
my $available=$freemem+$cached+$cachedswap;
my $available_percent = floor(($available / $total_meminfo)*100);

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{170202}
{170220}
ViewReadme
{Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("6.0SP5(Build 170202)")
#define PANDORA_VERSION ("6.0SP5(Build 170220)")
string pandora_path;
string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(6.0SP5(Build 170202))"
VALUE "ProductVersion", "(6.0SP5(Build 170220))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 6.0SP5-170202
Version: 6.0SP5-170220
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="6.0SP5-170202"
pandora_version="6.0SP5-170220"
package_pear=0
package_pandora=1

View File

@ -1,410 +0,0 @@
<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program 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; version 2
// This program 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.
global $config;
// Login check
check_login ();
require_once("include/functions_reporting.php");
require_once("include/functions_events.php");
if (is_ajax()) {
$save_item_shorcut = (bool) get_parameter("save_item_shorcut");
$update_shortcut_state = (bool) get_parameter('update_shortcut_state');
$get_alerts_fired = (bool) get_parameter('get_alerts_fired');
$get_critical_events = (bool) get_parameter('get_critical_events');
$get_opened_incidents = (bool) get_parameter('get_opened_incidents');
if ($save_item_shorcut) {
$result = false;
$data = get_parameter("data", '');
$id_user = get_parameter('id_user', 0);
if ($config['id_user'] != $id_user) return;
$shortcut_data = db_get_value('shortcut_data', 'tusuario', 'id_user', $id_user);
if ($shortcut_data !== false) {
$serialize = $shortcut_data;
$unserialize = json_decode($serialize, true);
$unserialize['item_shorcut'][] = $data;
$shortcut_data = array();
$shortcut_data['shortcut_data'] = json_encode($unserialize);
db_process_sql_update('tusuario', $shortcut_data, array('id_user' => $id_user));
}
echo json_encode($result);
return;
}
// Update if shortcut is visible or hidden
if ($update_shortcut_state) {
$value = (int) get_parameter('value');
$result = db_process_sql_update('tusuario', array('shortcut' => $value), array('id_user' => $config['id_user']));
echo json_encode($result);
return;
}
// Get critical events (realtime update)
if ($get_alerts_fired) {
echo sc_get_alerts_fired();
return;
}
// Get critical events (realtime update)
if ($get_critical_events) {
echo sc_get_critical_events();
return;
}
// Select only opened incidents
if ($get_opened_incidents) {
echo sc_get_opened_incidents();
return;
}
return;
}
function sc_get_alerts_fired () {
global $config;
$data_reporting = reporting_get_group_stats();
return $data_reporting['monitor_alerts_fired'];
}
function sc_get_critical_events () {
global $config;
$own_info = get_user_info ($config['id_user']);
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM"))
$own_groups = array_keys(users_get_groups($config['id_user'], "IR"));
else
$own_groups = array_keys(users_get_groups($config['id_user'], "IR", false));
// Get events in the last 8 hours
$shortcut_events_update = events_get_agent (false, 28800, time(), false, false, false, false,
false, false, $own_groups, true);
if ($shortcut_events_update == false)
$shortcut_events_update = array();
$critical_events_update = 0;
foreach ($shortcut_events_update as $event_update) {
if ($event_update['criticity'] == 4 and $event_update['estado'] == 0) {
$critical_events_update++;
}
}
return $critical_events_update;
}
function sc_get_opened_incidents () {
global $config;
$own_info = get_user_info ($config['id_user']);
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM")) {
$sql = "SELECT count(*) total_incidents
FROM tincidencia
WHERE estado = 0
ORDER BY actualizacion";
$result_incidents_update = db_get_all_rows_sql ($sql);
}
else {
$own_groups = array_keys(users_get_groups($config['id_user'], "IR", false));
$sql = "SELECT count(*) total_incidents
FROM tincidencia
WHERE id_grupo IN (".implode (",",array_keys ($own_groups)).")
AND estado = 0
ORDER BY actualizacion";
if (!empty($own_groups)) {
$result_incidents_update = db_get_all_rows_sql($sql);
}
else {
$result_incidents_update = false;
}
}
if ($result_incidents_update === false)
$shortcut_incidents = 0;
else
$shortcut_incidents = $result_incidents_update[0]['total_incidents'];
return $shortcut_incidents;
}
$shortcut_state = db_get_value_filter('shortcut', 'tusuario', array('id_user' => $config['id_user']));
// If shortcut bar is disabled return to index.php
if ($shortcut_state == 0)
return;
$own_info = get_user_info ($config['id_user']);
$shortcut_html = "<div id='shortcut_container'>";
$shortcut_html .= "<div id='shortcut_button'>";
$shortcut_html .= html_print_image("images/control_play.png", true, array("title" => __("Press here to activate shortcut bar")));
$shortcut_html .= "</div>";
$shortcut_html .= "<div id='shortcut_bar'>";
$num_shortcut_items = 0;
// Alerts item
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM") || check_acl ($config['id_user'], 0, "AR")) {
$alerts_fired = sc_get_alerts_fired();
$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=120&filter=fired&filter_button=Filter'>";
$shortcut_html .= html_print_image("images/op_alerts.png", true, array("title" => __("Alerts fired"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "&nbsp;";
$shortcut_html .= "<span id='shortcut_alerts_fired' title='" . __('Alerts fired') . "'>" . $alerts_fired . "</span>";
$shortcut_html .= "</a>";
$num_shortcut_items++;
}
// Events item
if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM") || check_acl ($config['id_user'], 0, "IR")) {
$critical_events = sc_get_critical_events();
$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=eventos&sec2=operation/events/events&status=3&severity=4&event_view_hr=8&id_group=0&group_rep=1&filter_only_alert=-1'>";
$shortcut_html .= html_print_image("images/op_events.png", true, array("title" => __("Critical events"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "&nbsp;";
$shortcut_html .= "<span id='shortcut_critical_events' title='" . __('Critical events') . "'>" . $critical_events . "</span>";
$shortcut_html .= "</a>";
$num_shortcut_items++;
}
// Calculate opened incidents (id integria incidents are not enabled)
if ($config['integria_enabled'] == 0) {
$shortcut_incidents = sc_get_opened_incidents();
$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=incidencias&sec2=operation/incidents/incident&estado=0'>";
$shortcut_html .= html_print_image("images/incidents.png", true, array("title" => __("Incidents opened"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "&nbsp;";
$shortcut_html .= "<span id='shortcut_incidents_opened' title='" . __('Incidents opened') . "'>" . $shortcut_incidents . "</span>";
$shortcut_html .= "</a>";
$num_shortcut_items++;
}
if ($num_shortcut_items > 0) {
$shortcut_html .= "<span class='shortcut_item' href='javascript:;'>";
$shortcut_html .= "<span>|</span>";
$shortcut_html .= "</span>";
}
$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=reporting&sec2=operation/reporting/custom_reporting'>";
$shortcut_html .= html_print_image("images/op_reporting.png", true, array("title" => __("View reports"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "</a>";
$num_shortcut_items++;
$shortcut_html .= "<a class='shortcut_item' href='index.php?sec=workspace&sec2=operation/messages/message_list'>";
$shortcut_html .= html_print_image("images/email_mc.png", true, array("title" => __("Create new message"), "style" => "margin-bottom: 0px;"));
$shortcut_html .= "</a>";
$num_shortcut_items++;
//Quick access
// $shortcut_data = db_get_value('shortcut_data', 'tusuario', 'id_user', $config['id_user']);
// if (!empty($shortcut_data)) {
// $serialize = $shortcut_data;
// $unserialize = json_decode($serialize, true);
// $items = $unserialize['item_shorcut'];
// }
// else {
// $items = array();
// }
// $shortcut_html .= "<div id='shortcut_icons_box' style='font-size: 9pt; color:#696969; font-weight: bold; display: inline; float: right; padding-right: 20px;'>" .
// __("Shortcut: ");
// $shortcut_html .= "<ul style='display: inline; font-size: 9pt; color:#000;'>";
// foreach ($items as $item) {
// $shortcut_html .= "<li style='display: inline; padding-right: 10px;'>" . io_safe_output($item) . "</li>";
// }
// $shortcut_html .= "</ul>";
$shortcut_html .= "</div>";
$shortcut_html .= "</div>";
echo $shortcut_html;
// Login in Console and shortcut bar is disabled
// This will show and hide the shortcut value in Javascript code
if (isset($_POST['nick']) and $shortcut_state != 2) {
html_print_input_hidden("login_console", 1);
}
else {
html_print_input_hidden("login_console", 0);
}
html_print_input_hidden("shortcut_id_user", $config['id_user']);
?>
<script type='text/javascript'>
$(function() {
if (<?php echo json_encode((int) $shortcut_state); ?> < 2) {
$('#shortcut_bar').hide();
$('#shortcut_button>img')
.css('transform', 'rotate(-90deg)')
.css('-o-transform', 'rotate(-90deg)')
.css('-ms-transform', 'rotate(-90deg)')
.css('-moz-transform', 'rotate(-90deg)')
.css('-webkit-transform', 'rotate(-90deg)');
}
else {
$('#shortcut_button>img')
.css('transform', 'rotate(90deg)')
.css('-o-transform', 'rotate(90deg)')
.css('-ms-transform', 'rotate(90deg)')
.css('-moz-transform', 'rotate(90deg)')
.css('-webkit-transform', 'rotate(90deg)');
}
$('#shortcut_button').click (function () {
if ($('#shortcut_bar').is(":visible")) {
$('#shortcut_bar').slideUp();
$('#shortcut_button>img')
.css('transform', 'rotate(-90deg)')
.css('-o-transform', 'rotate(-90deg)')
.css('-ms-transform', 'rotate(-90deg)')
.css('-moz-transform', 'rotate(-90deg)')
.css('-webkit-transform', 'rotate(-90deg)');
jQuery.post (
"ajax.php",
{
"page" : "general/shortcut_bar",
"update_shortcut_state" : 1,
"value" : 1
},
function (data) {}
);
}
else {
$('#shortcut_bar').slideDown();
$('#shortcut_button>img')
.css('transform', 'rotate(90deg)')
.css('-o-transform', 'rotate(90deg)')
.css('-ms-transform', 'rotate(90deg)')
.css('-moz-transform', 'rotate(90deg)')
.css('-webkit-transform', 'rotate(90deg)');
jQuery.post (
"ajax.php",
{
"page" : "general/shortcut_bar",
"update_shortcut_state" : 1,
"value" : 2
},
function (data) {}
);
}
});
});
var id_user = $('#hidden-shortcut_id_user').val();
function shortcut_check_alerts() {
jQuery.post (
"ajax.php",
{
"page" : "general/shortcut_bar",
"get_alerts_fired": 1
},
function (data) {
$('#shortcut_alerts_fired').html(data);
}
);
}
function shortcut_check_events() {
jQuery.post (
"ajax.php",
{
"page" : "general/shortcut_bar",
"get_critical_events": 1
},
function (data) {
$('#shortcut_critical_events').html(data);
}
);
}
function shortcut_check_incidents() {
jQuery.post (
"ajax.php",
{
"page" : "general/shortcut_bar",
"get_opened_incidents": 1
},
function (data) {
$('#shortcut_incidents_opened').html(data);
}
);
}
$(document).ready (function () {
setInterval("shortcut_check_alerts()", (10 * 1000)); //10 seconds between ajax request
setInterval("shortcut_check_events()", (10 * 1000)); //10 seconds between ajax request
setInterval("shortcut_check_incidents()", (10 * 1000)); //10 seconds between ajax request
//To make a link as item for drag only put "item_drag_shortcut" as class.
//TODO: In the future show better as icons and the handle some icon.
//TODO: Remove the class "item_drag_shortcut" for avoid drag.
//TODO: Method for remove items.
$("#shortcut_icons_box").droppable({
drop: function( event, ui ) {
var item = ui.draggable.clone();
//unescape for avoid change returns
var content_item = unescape($('<div id="content_item"></div>').html(item).html()); //hack
//Add the element
$("<li style='display: inline; padding-right: 10px;'></li>").html(item).appendTo($("#shortcut_icons_box > ul"));
jQuery.post ('ajax.php',
{"page": "general/shortcut_bar",
"save_item_shorcut": 1,
"id_user": "<?php echo $config['id_user'];?>",
"data": content_item
},
function (data) {
}
);
}
});
$(".item_drag_shortcut").draggable({
appendTo: 'body',
helper: "clone",
scroll: false
});
});
</script>

View File

@ -386,7 +386,7 @@ switch ($moduletype) {
$remote_conf = false;
if (enterprise_installed()) {
enterprise_include_once('include/functions_config_agents.php');
$remote_conf = enterprise_hook('config_agents_has_remote_configuration',$id_agente);
$remote_conf = enterprise_hook('config_agents_has_remote_configuration',array($id_agente));
}
/* Categories is an array containing the allowed module types
@ -571,4 +571,4 @@ $(document).ready (function () {
});
});
/* ]]> */
</script>
</script>

View File

@ -251,7 +251,7 @@ if (!modules_is_string_type($id_module_type) || $edit) {
}
if (modules_is_string_type($id_module_type) || $edit) {
$table_simple->data[2][1] .= '<span id="string_warning"><em>'.__('Str.').'</em>';
$table_simple->data[2][1] .= html_print_input_text ('str_warning', $str_warning,
$table_simple->data[2][1] .= html_print_input_text ('str_warning', str_replace("\"","",$str_warning),
'', 10, 255, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy).'</span>';
}
@ -270,7 +270,7 @@ if (!modules_is_string_type($id_module_type) || $edit) {
}
if (modules_is_string_type($id_module_type) || $edit) {
$table_simple->data[2][3] .= '<span id="string_critical"><em>'.__('Str.').'</em>';
$table_simple->data[2][3] .= html_print_input_text ('str_critical', $str_critical,
$table_simple->data[2][3] .= html_print_input_text ('str_critical', str_replace("\"","",$str_critical),
'', 10, 255, true, $disabledBecauseInPolicy, false, '', $classdisabledBecauseInPolicy).'</span>';
}

View File

@ -193,7 +193,7 @@ $table_styles->data[$row][0] = __('Custom logo in login') . ui_print_help_icon("
$row++;
$table_styles->data[$row][0] = __('Disable Pandora FMS on graphs');
$table_styles->data[$row][0] = __('Disable logo in graphs');
$table_styles->data[$row][1] = __('Yes') . '&nbsp;' .
html_print_radio_button_extended ('fixed_graph', 1, '', $config["fixed_graph"], $open, '','',true) .
'&nbsp;&nbsp;';
@ -745,23 +745,23 @@ ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/');
<script language="javascript" type="text/javascript">
// Juanma (07/05/2014) New feature: Custom front page for reports
function display_custom_report_front (show) {
function display_custom_report_front (show,table) {
if (show == true) {
$('tr#table2-custom_report_front-font').show();
$('tr#table2-custom_report_front-logo').show();
$('tr#table2-custom_report_front-preview').show();
$('tr#table2-custom_report_front-header').show();
$('tr#table2-custom_report_front-first_page').show();
$('tr#table2-custom_report_front-footer').show();
$('tr#'+table+'-custom_report_front-font').show();
$('tr#'+table+'-custom_report_front-logo').show();
$('tr#'+table+'-custom_report_front-preview').show();
$('tr#'+table+'-custom_report_front-header').show();
$('tr#'+table+'-custom_report_front-first_page').show();
$('tr#'+table+'-custom_report_front-footer').show();
}
else {
$('tr#table2-custom_report_front-font').hide();
$('tr#table2-custom_report_front-logo').hide();
$('tr#table2-custom_report_front-preview').hide();
$('tr#table2-custom_report_front-header').hide();
$('tr#table2-custom_report_front-first_page').hide();
$('tr#table2-custom_report_front-footer').hide();
$('tr#'+table+'-custom_report_front-font').hide();
$('tr#'+table+'-custom_report_front-logo').hide();
$('tr#'+table+'-custom_report_front-preview').hide();
$('tr#'+table+'-custom_report_front-header').hide();
$('tr#'+table+'-custom_report_front-first_page').hide();
$('tr#'+table+'-custom_report_front-footer').hide();
}
}
@ -870,12 +870,12 @@ $(document).ready (function () {
// Juanma (06/05/2014) New feature: Custom front page for reports
var custom_report = $('#checkbox-custom_report_front')
.prop('checked');
display_custom_report_front(custom_report);
display_custom_report_front(custom_report,$('#checkbox-custom_report_front').parent().parent().parent().parent().attr('id'));
$("#checkbox-custom_report_front").click( function() {
var custom_report = $('#checkbox-custom_report_front')
.prop('checked');
display_custom_report_front(custom_report);
display_custom_report_front(custom_report,$(this).parent().parent().parent().parent().attr('id'));
});
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

View File

@ -503,6 +503,9 @@ switch ($action) {
break;
case 'group_item':
$values['id_group'] = $id_group;
$values['height'] = $height;
$values['width'] = $width;
$values['image'] = $image;
break;
case 'module_graph':
if ($height_module_graph !== null) {

View File

@ -22,7 +22,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC170202';
$build_version = 'PC170220';
$pandora_version = 'v6.0SP5';
// Do not overwrite default timezone set if defined.

View File

@ -299,44 +299,49 @@ function reporting_make_reporting_data($report = null, $id_report,
$force_height_chart);
break;
case 'netflow_area':
$report['contents'][] = reporting_simple_baseline_graph(
$report['contents'][] = reporting_netflow(
$report,
$content,
$type,
$force_width_chart,
$force_height_chart);
$force_height_chart,
'netflow_area');
break;
case 'netflow_pie':
$report['contents'][] = reporting_netflow_pie(
$report['contents'][] = reporting_netflow(
$report,
$content,
$type,
$force_width_chart,
$force_height_chart);
$force_height_chart,
'netflow_pie');
break;
case 'netflow_data':
$report['contents'][] = reporting_netflow_data(
$report['contents'][] = reporting_netflow(
$report,
$content,
$type,
$force_width_chart,
$force_height_chart);
$force_height_chart,
'netflow_data');
break;
case 'netflow_statistics':
$report['contents'][] = reporting_netflow_statistics(
$report['contents'][] = reporting_netflow(
$report,
$content,
$type,
$force_width_chart,
$force_height_chart);
$force_height_chart,
'netflow_statistics');
break;
case 'netflow_summary':
$report['contents'][] = reporting_netflow_summary(
$report['contents'][] = reporting_netflow(
$report,
$content,
$type,
$force_width_chart,
$force_height_chart);
$force_height_chart,
'netflow_summary');
break;
case 'monitor_report':
$report['contents'][] = reporting_monitor_report(
@ -6661,6 +6666,202 @@ function reporting_get_group_stats ($id_group = 0, $access = 'AR') {
return ($data);
}
/**
* Get general statistical info on a group
*
* @param int Group Id to get info from. 0 = all
*
* @return array Group statistics
*/
function reporting_get_group_stats_resume ($id_group = 0, $access = 'AR') {
global $config;
$data = array ();
$data["monitor_checks"] = 0;
$data["monitor_not_init"] = 0;
$data["monitor_unknown"] = 0;
$data["monitor_ok"] = 0;
$data["monitor_bad"] = 0; // Critical + Unknown + Warning
$data["monitor_warning"] = 0;
$data["monitor_critical"] = 0;
$data["monitor_not_normal"] = 0;
$data["monitor_alerts"] = 0;
$data["monitor_alerts_fired"] = 0;
$data["monitor_alerts_fire_count"] = 0;
$data["total_agents"] = 0;
$data["total_alerts"] = 0;
$data["total_checks"] = 0;
$data["alerts"] = 0;
$data["agents_unknown"] = 0;
$data["monitor_health"] = 100;
$data["alert_level"] = 100;
$data["module_sanity"] = 100;
$data["server_sanity"] = 100;
$data["total_not_init"] = 0;
$data["monitor_non_init"] = 0;
$data["agent_ok"] = 0;
$data["agent_warning"] = 0;
$data["agent_critical"] = 0;
$data["agent_unknown"] = 0;
$data["agent_not_init"] = 0;
$cur_time = get_system_time ();
//Check for access credentials using check_acl. More overhead, much safer
if (!check_acl ($config["id_user"], $id_group, $access)) {
return $data;
}
if ($id_group == 0) {
$id_group = array_keys(
users_get_groups($config['id_user'], $access, false));
}
// -----------------------------------------------------------------
// Server processed stats. NOT realtime (taken from tgroup_stat)
// -----------------------------------------------------------------
if ($config["realtimestats"] == 0) {
if (!is_array($id_group)) {
$my_group = $id_group;
$id_group = array();
$id_group[0] = $my_group;
}
foreach ($id_group as $group) {
$group_stat = db_get_all_rows_sql ("SELECT *
FROM tgroup_stat, tgrupo
WHERE tgrupo.id_grupo = tgroup_stat.id_group
AND tgroup_stat.id_group = $group
ORDER BY nombre");
$data["monitor_checks"] += $group_stat[0]["modules"];
$data["agent_not_init"] += $group_stat[0]["non-init"];
$data["agent_unknown"] += $group_stat[0]["unknown"];
$data["agent_ok"] += $group_stat[0]["normal"];
$data["agent_warning"] += $group_stat[0]["warning"];
$data["agent_critical"] += $group_stat[0]["critical"];
$data["monitor_alerts"] += $group_stat[0]["alerts"];
$data["monitor_alerts_fired"] += $group_stat[0]["alerts_fired"];
$data["monitor_alerts_fire_count"] += $group_stat[0]["alerts_fired"];
$data["total_checks"] += $group_stat[0]["modules"];
$data["total_alerts"] += $group_stat[0]["alerts"];
$data["total_agents"] += $group_stat[0]["agents"];
$data["agents_unknown"] += $group_stat[0]["agents_unknown"];
$data["utimestamp"] = $group_stat[0]["utimestamp"];
// This fields are not in database
$data["monitor_ok"] += (int) groups_get_normal_monitors($group);
$data["monitor_warning"] += (int) groups_get_warning_monitors($group);
$data["monitor_critical"] += (int) groups_get_critical_monitors($group);
$data["monitor_unknown"] += (int) groups_get_unknown_monitors($group);
$data["monitor_not_init"] += (int) groups_get_not_init_monitors($group);
}
// -------------------------------------------------------------------
// Realtime stats, done by PHP Console
// -------------------------------------------------------------------
}
else {
if (!empty($id_group)) {
$sql = "SELECT tg.id_grupo as id, tg.nombre as name,
SUM(ta.normal_count) as monitor_ok,
SUM(ta.warning_count) as monitor_warning,
SUM(ta.critical_count) as monitor_critical,
SUM(ta.unknown_count) as monitor_unknown,
SUM(ta.notinit_count) as monitor_not_init,
count(ta.nombre) as total_agents
FROM tagente ta, tgrupo tg
WHERE tg.id_grupo = ta.id_grupo
AND ta.id_grupo = ". $id_group ."
GROUP BY ta.id_grupo;";
$data_array = db_get_all_rows_sql($sql);
$data = $data_array[0];
// Get total count of monitors for this group, except disabled.
$data["monitor_checks"] = $data["monitor_not_init"] + $data["monitor_unknown"] + $data["monitor_warning"] + $data["monitor_critical"] + $data["monitor_ok"];
// Calculate not_normal monitors
$data["monitor_not_normal"] += $data["monitor_checks"] - $data["monitor_ok"];
}
// Get total count of monitors for this group, except disabled.
$data["monitor_checks"] = $data["monitor_not_init"] + $data["monitor_unknown"] + $data["monitor_warning"] + $data["monitor_critical"] + $data["monitor_ok"];
}
if ($data["monitor_unknown"] > 0 && $data["monitor_checks"] > 0) {
$data["monitor_health"] = format_numeric (100 - ($data["monitor_not_normal"] / ($data["monitor_checks"] / 100)), 1);
}
else {
$data["monitor_health"] = 100;
}
if ($data["monitor_not_init"] > 0 && $data["monitor_checks"] > 0) {
$data["module_sanity"] = format_numeric (100 - ($data["monitor_not_init"] / ($data["monitor_checks"] / 100)), 1);
}
else {
$data["module_sanity"] = 100;
}
if (isset($data["alerts"])) {
if ($data["monitor_alerts_fired"] > 0 && $data["alerts"] > 0) {
$data["alert_level"] = format_numeric (100 - ($data ["monitor_alerts_fired"] / ($data["alerts"] / 100)), 1);
}
else {
$data["alert_level"] = 100;
}
}
else {
$data["alert_level"] = 100;
$data["alerts"] = 0;
}
$data["monitor_bad"] = $data["monitor_critical"] + $data["monitor_warning"];
if ($data["monitor_bad"] > 0 && $data["monitor_checks"] > 0) {
$data["global_health"] = format_numeric (100 - ($data["monitor_bad"] / ($data["monitor_checks"] / 100)), 1);
}
else {
$data["global_health"] = 100;
}
$data["server_sanity"] = format_numeric (100 - $data["module_sanity"], 1);
$data['alert_fired'] = 0;
if ($data["monitor_alerts_fired"] > 0) {
$data['alert_fired'] = 1;
}
if ($data["monitor_critical"] > 0) {
$data['status'] = 'critical';
}
elseif ($data["monitor_warning"] > 0) {
$data['status'] = 'warning';
}
elseif (($data["monitor_unknown"] > 0) || ($data["agents_unknown"] > 0)) {
$data['status'] = 'unknown';
}
elseif ($data["monitor_ok"] > 0) {
$data['status'] = 'ok';
}
elseif ($data["agent_not_init"] > 0) {
$data['status'] = 'not_init';
}
else {
$data['status'] = 'none';
}
return ($data);
}
function reporting_get_stats_indicators($data, $width = 280, $height = 20, $html = true) {
$table_ind = html_get_predefined_table();

View File

@ -615,20 +615,20 @@ function ui_print_group_icon_path ($id_group, $return = false, $path = "images/g
*/
function ui_print_os_icon ($id_os, $name = true, $return = false,
$apply_skin = true, $networkmap = false, $only_src = false,
$relative = false, $options = false) {
$relative = false, $options = false, $big_icons = false) {
$subfolter = 'os_icons';
$subfolder = 'os_icons';
if ($networkmap) {
$subfolter = 'networkmap';
$subfolder = 'networkmap';
}
if ($big_icons)
$subfolder .= '/so_big_icons';
$icon = (string) db_get_value ('icon_name', 'tconfig_os', 'id_os', (int) $id_os);
$os_name = get_os_name ($id_os);
if (empty ($icon)) {
if ($only_src) {
$output = html_print_image("images/" . $subfolter . "/unknown.png",
$output = html_print_image("images/" . $subfolder . "/unknown.png",
true, $options, true, $relative, false, true);
}
else {
@ -637,18 +637,18 @@ function ui_print_os_icon ($id_os, $name = true, $return = false,
}
else if ($apply_skin) {
if ($only_src) {
$output = html_print_image("images/" . $subfolter . "/" . $icon, true, $options, true, $relative, false, true);
$output = html_print_image("images/" . $subfolder . "/" . $icon, true, $options, true, $relative, false, true);
}
else {
if (!isset($options['title'])) {
$options['title'] = $os_name;
}
$output = html_print_image("images/" . $subfolter . "/" . $icon, true, $options, false, $relative, false, true);
$output = html_print_image("images/" . $subfolder . "/" . $icon, true, $options, false, $relative, false, true);
}
}
else
//$output = "<img src='images/os_icons/" . $icon . "' alt='" . $os_name . "' title='" . $os_name . "'>";
$output = "images/" . $subfolter . "/" . $icon;
$output = "images/" . $subfolder . "/" . $icon;
if ($name === true) {
$output .= '&nbsp;&nbsp;' . $os_name;

View File

@ -2225,7 +2225,7 @@ function set_watermark(graph_id, plot, watermark_src) {
down_ticks_height = $('#'+graph_id+' .yAxis .tickLabel').eq(0).css('height').split('px')[0];
}
var left_pos = parseInt(context.canvas.width - 3) - $('#watermark_image_'+graph_id)[0].width;
var top_pos = parseInt(context.canvas.height - down_ticks_height - 20) - $('#watermark_image_'+graph_id)[0].height;
var top_pos = parseInt(context.canvas.height - down_ticks_height - 10) - $('#watermark_image_'+graph_id)[0].height;
context.drawImage(this, left_pos, top_pos);

View File

@ -213,6 +213,9 @@ $(document).ready (function () {
$('#menu').css('top','80px');
}
});
$("#alert_messages").draggable();
$("#alert_messages").css({'left':+parseInt(screen.width/2)-parseInt($("#alert_messages").css('width'))/2+'px'});
});

View File

@ -1928,6 +1928,18 @@ div.warn {
}
.submenu_not_selected {
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
font-weight: normal !important;
}
@ -2277,16 +2289,79 @@ ul.operation li a:hover {
#font-weight: bold;
}
.menu_icon{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
}
.menu_icon:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
background-color: #585858 !important;
}
.submenu_not_selected:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
background-color: #585858 !important;
}
.submenu_selected:hover{
background-color: #585858 !important;
}
.sub_subMenu{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
}
.sub_subMenu:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
background-color: #585858 !important;
}
@ -2817,43 +2892,6 @@ td.empty_field {
width: 96%;
}
/* Shortcut bar */
#shortcut_container {
position: fixed;
margin: 0px !important;
bottom: 0px;
left: 0px;
z-index: 9001;
}
#shortcut_bar {
background-color: #333;
border-top: 1px solid #808080;
border-right: 1px solid #808080;
border-top-right-radius: 5px;
}
#shortcut_button {
display: inline-block;
background-color: #333;
border: 1px solid #808080;
border-bottom: none;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
}
.shortcut_item {
padding: 2px 10px;
text-decoration: none;
}
.shortcut_item>span {
color: #eee;
font-weight: bold;
font-size: 9pt;
}
/* Policies styles */
table#policy_modules td * {
@ -3486,13 +3524,10 @@ div.simple_value > a > span.text p
-webkit-border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
z-index:2;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
z-index:3;
position:fixed;
width:650px;
top: 30%;
background:white;
}
.modalheader{
@ -3516,6 +3551,13 @@ div.simple_value > a > span.text p
margin-right:10px;
margin-top:10px;
}
.modalclosex:hover{
cursor:pointer;
display:inline;
float:right;
margin-right:10px;
margin-top:10px;
}
.modalcontent{
color:black;
background:white;
@ -3537,6 +3579,13 @@ div.simple_value > a > span.text p
margin-left:30px;
}
.modalokbutton{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
cursor:pointer;
text-align:center;
margin-right:45px;
@ -3547,16 +3596,82 @@ div.simple_value > a > span.text p
border-radius: 3px;width:90px;height:30px;background-color:white;border: 1px solid #82b92e;
}
.modalokbuttontext{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:#82b92e;font-family:Nunito;font-size:10pt;position:relative;top:6px;
}
.modalokbutton:hover {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
background-color:#82b92e;
}
.modalokbutton:hover .modalokbuttontext {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:white;
}
.modalgobutton{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
cursor:pointer;text-align:center;margin-right:15px;margin-bottom:30px;float:right;-moz-border-radius: 3px;
-webkit-border-radius: 3px;border-radius: 3px;width:240px;height:30px;background-color:white;border: 1px solid #82b92e;
}
.modalgobuttontext{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:#82b92e;font-family:Nunito;font-size:10pt;position:relative;top:6px;
}
.modalgobutton:hover {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
background-color:#82b92e;
}
.modalgobutton:hover .modalgobuttontext {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:white;
}
#opacidad{
opacity:0.5;

View File

@ -1906,6 +1906,18 @@ div.warn {
}
.submenu_not_selected {
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
font-weight: normal !important;
}
@ -2254,16 +2266,81 @@ ul.operation li a:hover {
#font-weight: bold;
}
.menu_icon{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
}
.menu_icon:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
background-color: #585858 !important;
}
.submenu_not_selected:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
-o-transition-timing-function: ease-out;
background-color: #585858 !important;
}
.submenu_selected:hover{
background-color: #585858 !important;
}
.sub_subMenu{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
}
.sub_subMenu:hover{
transition-property: background-color;
transition-duration: 0.5s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color;
-webkit-transition-duration: 0.5s;
-webkit-transition-timing-function: ease-out;
-moz-transition-property: background-color;
-moz-transition-duration: 0.5s;
-moz-transition-timing-function: ease-out;
-o-transition-property: background-color;
-o-transition-duration: 0.5s;
background-color: #585858 !important;
}
@ -2765,43 +2842,6 @@ td.empty_field {
width: 96%;
}
/* Shortcut bar */
#shortcut_container {
position: fixed;
margin: 0px !important;
bottom: 0px;
left: 0px;
z-index: 9001;
}
#shortcut_bar {
background-color: #333;
border-top: 1px solid #808080;
border-right: 1px solid #808080;
border-top-right-radius: 5px;
}
#shortcut_button {
display: inline-block;
background-color: #333;
border: 1px solid #808080;
border-bottom: none;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
}
.shortcut_item {
padding: 2px 10px;
text-decoration: none;
}
.shortcut_item>span {
color: #eee;
font-weight: bold;
font-size: 9pt;
}
/* Policies styles */
table#policy_modules td * {
@ -3171,6 +3211,13 @@ table#policy_modules td * {
}
.modalokbutton{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
cursor:pointer;
text-align:center;
margin-right:45px;
@ -3181,16 +3228,80 @@ table#policy_modules td * {
border-radius: 3px;width:90px;height:30px;background-color:white;border: 1px solid #82b92e;
}
.modalokbuttontext{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:#82b92e;font-family:Nunito;font-size:10pt;position:relative;top:6px;
}
.modalokbutton:hover {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
background-color:#82b92e;
}
.modalokbutton:hover .modalokbuttontext {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:white;
}
.modalgobutton{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
cursor:pointer;text-align:center;margin-right:15px;margin-bottom:30px;float:right;-moz-border-radius: 3px;
-webkit-border-radius: 3px;border-radius: 3px;width:240px;height:30px;background-color:white;border: 1px solid #82b92e;
}
.modalgobuttontext{
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:#82b92e;font-family:Nunito;font-size:10pt;position:relative;top:6px;
}
.modalgobutton:hover {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
background-color:#82b92e;
}
.modalgobutton:hover .modalgobuttontext {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color:white;
}
#opacidad{
opacity:0.5;

View File

@ -2846,43 +2846,6 @@ td.empty_field {
width: 96%;
}
/* Shortcut bar */
#shortcut_container {
position: fixed;
margin: 0px !important;
bottom: 0px;
left: 0px;
z-index: 9001;
}
#shortcut_bar {
background-color: #333;
border-top: 1px solid #808080;
border-right: 1px solid #808080;
border-top-right-radius: 5px;
}
#shortcut_button {
display: inline-block;
background-color: #333;
border: 1px solid #808080;
border-bottom: none;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
}
.shortcut_item {
padding: 2px 10px;
text-decoration: none;
}
.shortcut_item>span {
color: #eee;
font-weight: bold;
font-size: 9pt;
}
/* Policies styles */
table#policy_modules td * {

View File

@ -830,9 +830,6 @@ else {
require("general/logon_ok.php");
}
}
if ($config["pure"] == 0) {
require("general/shortcut_bar.php");
}
}
if ($config["pure"] == 0) {

View File

@ -71,7 +71,7 @@
<div style='height: 10px'>
<?php
$version = '6.0SP5';
$build = '170202';
$build = '170220';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -708,19 +708,19 @@ a.ui-link-inherit {
/* Active class used as the "on" state across all themes
-----------------------------------------------------------------------------------------------------------*/
.ui-btn-active {
border: 1px solid #2373a5 /*{global-active-border}*/;
border: 1px solid #82B92E /*{global-active-border}*/;
background: #5393c5 /*{global-active-background-color}*/;
font-weight: bold;
color: #fff /*{global-active-color}*/;
cursor: pointer;
text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 0 /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 0 /*{global-active-shadow-radius}*/ #82B92E /*{global-active-shadow-color}*/;
text-decoration: none;
background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
background-image: -webkit-gradient(linear, left top, left bottom, from( #82B92E /*{global-active-background-start}*/), to( #82B92E /*{global-active-background-end}*/)); /* Saf4+, Chrome */
background-image: -webkit-linear-gradient( #82B92E /*{global-active-background-start}*/, #82B92E /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
background-image: -moz-linear-gradient( #82B92E /*{global-active-background-start}*/, #82B92E /*{global-active-background-end}*/); /* FF3.6 */
background-image: -ms-linear-gradient( #82B92E /*{global-active-background-start}*/, #82B92E /*{global-active-background-end}*/); /* IE10 */
background-image: -o-linear-gradient( #82B92E /*{global-active-background-start}*/, #82B92E /*{global-active-background-end}*/); /* Opera 11.10+ */
background-image: linear-gradient( #82B92E /*{global-active-background-start}*/, #82B92E /*{global-active-background-end}*/);
font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
}
.ui-btn-active:visited,
@ -1042,9 +1042,9 @@ a.ui-link-inherit {
}
.ui-focus,
.ui-btn:focus {
-moz-box-shadow: inset 0 0 3px #387bbe /*{global-active-background-color}*/, 0 0 9px #387bbe /*{global-active-background-color}*/;
-webkit-box-shadow: inset 0 0 3px #387bbe /*{global-active-background-color}*/, 0 0 9px #387bbe /*{global-active-background-color}*/;
box-shadow: inset 0 0 3px #387bbe /*{global-active-background-color}*/, 0 0 9px #387bbe /*{global-active-background-color}*/;
-moz-box-shadow: inset 0 0 3px #82B92E /*{global-active-background-color}*/, 0 0 9px #82B92E /*{global-active-background-color}*/;
-webkit-box-shadow: inset 0 0 3px #82B92E /*{global-active-background-color}*/, 0 0 9px #82B92E /*{global-active-background-color}*/;
box-shadow: inset 0 0 3px #82B92E /*{global-active-background-color}*/, 0 0 9px #82B92E /*{global-active-background-color}*/;
}
.ui-input-text.ui-focus,
.ui-input-search.ui-focus {
@ -1123,10 +1123,29 @@ div.ui-mobile-viewport { overflow-x: hidden; }
.ui-header > .ui-btn-icon-notext,
.ui-header-fixed.ui-fixed-hidden > .ui-btn-icon-notext { top: 6px; }
.ui-header-fixed > .ui-btn-icon-notext { top: 7px;}
.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
.ui-footer .ui-title { margin: .6em 15px .8em; }
.ui-header .ui-title, .ui-footer .ui-title {
min-height: 1.1em;
text-align: center;
font-size: 16px;
display: block;
margin: .6em 30% .8em;
padding: 0;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
outline: 0 !important;
}
.ui-footer .ui-title {
margin: .6em 15px .8em;
}
/* content area*/
.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
.ui-content {
border-width: 0;
overflow: hidden;
overflow-x: hidden;
padding: 5px 5px 0px 5px;
}
/* corner styling for dialogs and popups */
.ui-corner-all > .ui-header:first-child,
.ui-corner-all > .ui-content:first-child,
@ -2128,7 +2147,7 @@ label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin
.ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
.ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
}
.ui-collapsible-inset { margin: .5em 0; }
.ui-collapsible-inset { margin: .5em 2px 1px; width:99%;}
.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
@ -2294,7 +2313,7 @@ label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin
padding: 0;
}
.ui-dialog-contain > .ui-content {
padding: 15px;
padding: 5px 5px 0px 5px;
}
.ui-dialog-contain > .ui-footer {
z-index: 10;
@ -3120,7 +3139,7 @@ div.ui-slider-switch.ui-mini {
}
}
/* Breakpoint to show as a standard table at 560px (25em x 16px) or wider */
@media ( min-width: 25em ) {
@media ( min-width: 34.99em ) {
/* Fixes table rendering when switching between breakpoints in Safari <= 5. See https://github.com/jquery/jquery-mobile/issues/5380 */
.ui-table-reflow.ui-responsive {
display: table-row-group;
@ -3143,7 +3162,7 @@ div.ui-slider-switch.ui-mini {
}
/* Hack to make IE9 and WP7.5 treat cells like block level elements, scoped to ui-responsive class */
/* Applied in a max-width media query up to the table layout breakpoint so we don't need to negate this*/
@media ( max-width: 25em ) {
@media ( max-width: 34.98em ) {
.ui-table-reflow.ui-responsive td,
.ui-table-reflow.ui-responsive th {
width: 100%;
@ -3153,6 +3172,15 @@ div.ui-slider-switch.ui-mini {
float: left;
clear: left;
}
#list_agent_Modules.ui-table-reflow.ui-responsive td.cell_0 {
width: 52% !important;
}
#list_agent_Modules.ui-table-reflow.ui-responsive td.cell_1 {
width: 15% !important;
}
#list_agent_Modules.ui-table-reflow.ui-responsive td.cell_4 {
width: 33% !important;
}
}
/* panel */
.ui-panel {

View File

@ -34,6 +34,10 @@ body {
}
.agent_graphs, .events_bar {
padding-top: 10px;
}
#tactical1 *, #tactical2 * {
font-weight: bold;
}
@ -520,11 +524,32 @@ table.event_details td.cell_event_name {
}
.agent_details {
line-height: 35px;
padding: 10px 0px 10px 0px;
}
.agent_details > img {
vertical-align: middle;
width: 20px;
}
.agent_os{
float: right;
position: absolute;
top: 0px;
right: 0px;
padding: 10px;
}
.agent_details img {
float: left;
.agent_list_ips {
padding: 10px 0px 10px 0px;
}
.agent_list_ips > img {
vertical-align: middle;
width: 20px;
}
.agent_last_contact {
padding: 10px 0px 10px 0px;
}
.agent_description {
padding: 10px 0px 10px 0px;
}
.agent_name {
@ -544,8 +569,8 @@ table.event_details td.cell_event_name {
}
#list_agents td {
height: 35px;
padding-top: 20px;
height: 25px;
padding-top: 10px;
}
.agents_tiny_stats_tactical {
@ -554,7 +579,33 @@ table.event_details td.cell_event_name {
width: 100%;
}
@media screen and (max-width: 25em) {
@media screen and (max-width: 34.99em) {
#list_agents td {
height: 35px;
padding-top: 7px;
display: table-cell;
clear: none;
padding-left: 0px !important;
padding-right: 0px !important;
}
#list_agents td.cell_0 {
width: 45%;
border-top: 0px none;
}
#list_agents td.cell_0>span.tiny>img {
width: 5px;
height: 30px;
margin-top: -6px;
margin-left: 0px;
}
#list_agents td.cell_5 {
width: 30%;
}
#list_agents td.cell_6 {
width: 25%;
}
#list_agents .cell_2 .ui-table-cell-label,
#list_agents .cell_3 .ui-table-cell-label,
#list_agents .cell_6 .ui-table-cell-label,
@ -572,7 +623,6 @@ table.event_details td.cell_event_name {
#list_agents .cell_2,
#list_agents .cell_3,
#list_agents .cell_6,
#list_agents .cell_7 {
display: inline !important;
float: none !important;
@ -594,7 +644,7 @@ table.event_details td.cell_event_name {
}
#list_agents .show_collapside {
display: inline !important;
display: none !important;
}
#list_agents .cell_1,
@ -605,16 +655,24 @@ table.event_details td.cell_event_name {
}
#list_agents .cell_0 .ui-link {
font-size: 15px;
font-size: 12px;
}
#list_agents .cell_6 .show_collapside {
display: inline !important;
display: none !important;
}
.agents_tiny_stats * {
font-size: 12px !important;
}
#list_agent_Modules td {
padding-top: 7px !important;
}
.agents_tiny_stats {
float: right;
}
}
/* For mobiles */
@ -738,7 +796,7 @@ table.event_details td.cell_event_name {
/*END-----------Visual maps styles---------------------------------------*/
/*INIT-----------Modules styles---------------------------------------*/
@media screen and (max-width: 25em) {
@media screen and (max-width: 34.99em) {
#list_Modules .cell_1 .ui-table-cell-label,
#list_Modules .cell_5 .ui-table-cell-label,
#list_Modules .cell_6 .ui-table-cell-label {
@ -755,7 +813,17 @@ table.event_details td.cell_event_name {
#list_Modules .cell_3 .ui-table-cell-label,
#list_Modules .cell_4 .ui-table-cell-label,
#list_Modules .cell_5 .ui-table-cell-label {
display: none;
display: none !important;
}
#list_Modules td {
height: 35px;
padding-top: 7px;
display: table-cell;
clear: none;
float: none;
padding-left: 0px !important;
padding-right: 0px !important;
}
#list_Modules .show_collapside {
@ -766,18 +834,43 @@ table.event_details td.cell_event_name {
white-space: nowrap;
}
#list_Modules .cell_1,
#list_Modules .cell_2,
#list_Modules .cell_3 {
display: none !important;
}
#list_Modules .cell_0 .show_collapside,
#list_Modules .cell_1 .show_collapside {
#list_Modules .cell_1 .show_collapside,
#list_Modules .cell_4 .show_collapside,
#list_Modules .cell_5 .show_collapside {
display: none !important;
}
#list_Modules .cell_0 .ui-link {
font-size: 15px;
font-size: 12px;
}
#list_Modules .cell_0{
width: 50%;
border-top: 0px none;
}
#list_Modules .cell_4{
width: 25%;
}
#list_Modules .cell_5{
width: 25%;
}
}
#list_Modules td.cell_0>span.tiny>img {
width: 5px;
height: 30px;
margin-top: -5px;
margin-left: 0px;
float: left;
}
#list_Modules .module_name {
font-size: 12px !important;
}
}
@ -795,6 +888,10 @@ table.event_details td.cell_event_name {
padding-top: 20px;
}
#list_agent_Modules td.cell_0 > span.tiny {
display: none;
}
#list_Modules .cell_5 img {
float: left;
}
@ -809,7 +906,7 @@ table.event_details td.cell_event_name {
line-height: 20px;
}
@media screen and (max-width: 25em) {
@media screen and (max-width: 34.99em) {
#list_agent_Modules .ui-table-cell-label,
#list_agent_Modules .cell_2,
#list_agent_Modules .cell_3 {
@ -877,7 +974,7 @@ li.ui-btn {
float: left;
}
@media screen and (max-width: 25em) {
@media screen and (max-width: 34.99em) {
.ui-table th, .ui-table td {
padding: 8px !important;
padding-left: 3px;
@ -924,7 +1021,7 @@ li.ui-btn {
height: 28px !important;
}
@media screen and (max-width: 25em)
@media screen and (max-width: 35em)
{
.events .status_row {
display: none;
@ -939,12 +1036,12 @@ li.ui-btn {
min-width: 50%;
}
.agents_tiny_stats, .agents_last_contact {
.agents_last_contact {
float: right;
}
}
@media screen and (min-width: 25em)
@media screen and (min-width: 35em)
{
.events .cell_0 .event_link{
display: none;
@ -1028,7 +1125,7 @@ li.ui-btn {
}
.event_name {
font-size: 18px !important;
font-size: 15px !important;
}
.login_logo img {
@ -1050,7 +1147,7 @@ li.ui-btn {
}
.event_name {
font-size: 15px;
font-size: 12px;
font-weight: bold;
}
@ -1199,6 +1296,11 @@ span.nobold * {
line-height: 1.1em;
}
.events_timestamp > img {
vertical-align: middle;
margin-left: 10px;
}
.events_agent {
float: left;
}
@ -1258,3 +1360,22 @@ DIV.nodata_container {
.ui-table-reflow.ui-responsive {
display: table !important;
}
.widget_agent_module > th {
background-color: #373737;
}
#list_agent_Modules > tbody > tr > td {
clear: none;
vertical-align: middle;
padding: 0px;
}
#list_agent_Modules > tbody > tr > td.cell_0 {
border-top: 0px none;
}
.legend_graph td.legendLabel > div {
font-size: 12px !important;
}
.legend_graph td.legendLabel {
font-size: 12px !important;
}

View File

@ -780,6 +780,7 @@ class Table {
foreach ($data as $id => $row) {
$table_row = array();
foreach ($row as $key => $value) {
if (!in_array($key, $this->head)) {
$this->head[] = $key;
}
@ -843,45 +844,40 @@ class Table {
$html = '';
$html = "<table data-role='table' id='" . $this->id . "' " .
"data-mode='reflow' class='" . $this->class_table . " ui-responsive table-stroke'>\n";
"data-mode='reflow' class='" . $this->class_table . " ui-responsive table-stroke'>";
$html .= "<thead>\n";
$html .= "<tr>\n";
//Empty head for white space between rows in the responsive vertical layout
$html .= "<th class='head_horizontal'></th>\n";
foreach ($this->head as $head) {
$html .= "<th class='head_horizontal'>" . $head . "</th>\n";
if ($this->head) {
$html .= "<thead>";
$html .= "<tr>";
//Empty head for white space between rows in the responsive vertical layout
//~ $html .= "<th class='head_horizontal'></th>";
foreach ($this->head as $head) {
$html .= "<th class='head_horizontal'>" . $head . "</th>";
}
$html .= "</tr>";
$html .= "</thead>";
}
$html .= "</tr>\n";
$html .= "</thead>\n";
$html .= "<tbody>\n";
$html .= "<tbody>";
foreach ($this->rows as $key => $row) {
$class = '';
if (isset($this->rowClass[$key])) {
$class = $this->rowClass[$key];
}
$html .= "<tr class='" . $class . "'>\n";
$html .= "<tr class='" . $class . "'>";
//Empty head for white space between rows in the responsive vertical layout
if (isset($this->row_heads[$key])) {
$html .= "<th class='head_vertical'>" . $this->row_heads[$key] . "</th>\n";
}
elseif ($this->row_keys_as_head_row) {
$html .= "<th class='head_vertical'>" . $key . "</th>\n";
}
else {
$html .= "<th class='head_vertical' style='font-size: 0px'></th>\n";
}
foreach ($row as $key_cell => $cell) {
$html .= "<td class='cell_" . $key_cell . "'>" . $cell . "</td>\n";
$html .= "<td class='cell_" . $key_cell . "'>" . $cell . "</td>";
}
$html .= "</tr>\n";
$html .= "</tr>";
}
$html .= "</tbody>\n";
$html .= "</table>\n";
$html .= "</tbody>";
$html .= "</table>";
return $html;
}

View File

@ -114,92 +114,123 @@ class Agent {
$ui->showFooter(false);
$ui->beginContent();
if (empty($this->agent)) {
$ui->contentAddHtml('<span style="color: red;">' . __('No agent found') . '</span>');
$ui->contentAddHtml('<span style="color: red;">' .
__('No agent found') . '</span>');
}
else {
$ui->contentBeginGrid();
if ($this->agent['disabled']) {
$agent_name = "<em>" . $agent_name . "</em>" . ui_print_help_tip(__('Disabled'), true);
}
else if ($this->agent['quiet']) {
$agent_name = "<em>" . $agent_name . "&nbsp;" . html_print_image("images/dot_green.disabled.png", true, array("border" => '0', "title" => __('Quiet'), "alt" => "")) . "</em>";
}
else {
$agent_name = $agent_name;
}
if ($system->getConfig('metaconsole')) {
metaconsole_connect(null, $this->agent['id_tmetaconsole_setup']);
$addresses = agents_get_addresses($this->agent['id_tagente']);
}
else
$addresses = agents_get_addresses($this->id);
if ($system->getConfig('metaconsole'))
metaconsole_restore_db();
$address = $this->agent['direccion'];
foreach ($addresses as $k => $add) {
if ($add == $address) {
unset($addresses[$k]);
}
}
$ip = html_print_image('images/world.png', true, array('title' => __('IP address'))) . '&nbsp;&nbsp;';
$ip .= empty($address) ? '<em>' . __('N/A') . '</em>' : $address;
if (!empty($addresses)) {
$ip .= ui_print_help_tip(__('Other IP addresses').': <br>'.implode('<br>',$addresses), true);
}
$ip .= '<br />';
$last_contact = '<b>' . __('Last contact') . '</b>:&nbsp;'
.ui_print_timestamp ($this->agent["ultimo_contacto"], true) . '<br />';
$description = '<b>' . __('Description') . ':</b><br>';
if (empty($agent["comentarios"])) {
$description .= '<i>' . __('N/A') . '</i>';
}
else {
$description .= $this->agent["comentarios"];
}
$html = '<div class="agent_details">';
$html .= ui_print_group_icon ($this->agent["id_grupo"], true, "groups_small", "", false) . '&nbsp;&nbsp;';
$html .= '<span class="agent_name">' . $agent_name . '</span><br />';
$html .= $ip;
$html .= $last_contact;
$html .= $description;
$html .= '</div>';
if ($this->agent['disabled']) {
$agent_name = "<em>" . $agent_name . "</em>" .
ui_print_help_tip(__('Disabled'), true);
}
else if ($this->agent['quiet']) {
$agent_name = "<em>" . $agent_name . "&nbsp;" .
html_print_image("images/dot_green.disabled.png",
true, array("border" => '0', "title" => __('Quiet'), "alt" => "")) . "</em>";
}
else {
$agent_name = $agent_name;
}
if ($system->getConfig('metaconsole')) {
metaconsole_connect(null, $this->agent['id_tmetaconsole_setup']);
}
//~ $addresses = agents_get_addresses($this->agent['id_tagente']);
}
else
$addresses = agents_get_addresses($this->id);
if ($system->getConfig('metaconsole'))
metaconsole_restore_db();
$address = $this->agent['direccion'];
//~ foreach ($addresses as $k => $add) {
//~ if ($add == $address) {
//~ unset($addresses[$k]);
//~ }
//~ }
//~ $ip = html_print_image('images/world.png',
//~ true, array('title' => __('IP address'))) .
//~ '&nbsp;&nbsp;';
$ip .= empty($address) ? '<em>' . __('N/A') .
'</em>' : $address;
//~ if (!empty($addresses)) {
//~ $ip .= ui_print_help_tip(__('Other IP addresses') .
//~ ': ' . implode(', ',$addresses), true);
//~ }
$last_contact = '<b>' . __('Last contact') .
'</b>:&nbsp;' .
ui_print_timestamp ($this->agent["ultimo_contacto"], true);
//~ $description = '<b>' . __('Description') . ':</b>&nbsp;';
if (empty($agent["comentarios"])) {
$description .= '<i>' . __('N/A') . '</i>';
}
else {
$description .= $this->agent["comentarios"];
}
$html = '<div class="agent_details" style:"float:left;">';
$html .= '<span class="agent_name">' . $agent_name .
'</span>';
$html .= '</div>';
$html .= '<div class="agent_os">' . ui_print_os_icon ($this->agent["id_os"], false, true,
true, false, false, false, false, true) . '</div>';
$html .= '<div class="agent_list_ips">';
$html .= $ip . ' - ' .
groups_get_name ($this->agent["id_grupo"], true);
$html .= '</div>
<div class="agent_last_contact">';
$html .= $last_contact;
$html .= '</div>
<div class="agent_description">';
$html .= $description;
$html .= '</div>';
if ($system->getConfig('metaconsole')) {
metaconsole_connect(null,
$this->agent['id_tmetaconsole_setup']);
}
$ui->contentGridAddCell($html, 'agent_details');
ob_start();
$html = '<div class="agent_graphs">';
$html .= "<b>" . __('Modules by status') . "</b><br />";
$html .= graph_agent_status ($this->id, 160, 160, true);
$graph_js = ob_get_clean();
$html = $graph_js . $html;
unset($this->agent['fired_count']);
if ($this->agent['total_count'] > 0) {
$html .= '<span class="agents_tiny_stats agents_tiny_stats_tactical">' . reporting_tiny_stats($this->agent, true) . ' </span><br>';
}
$html .= "<b>" . __('Events (24h)') . "</b><br /><br />";
$html .= '<div id="events_bar"></div>';
$html .= '<br>';
$html .= '</div>';
ob_start();
$html = '<div class="agent_graphs">';
$html .= "<b>" . __('Modules by status') . "</b>";
$html .= graph_agent_status ($this->id, 160, 160, true);
$graph_js = ob_get_clean();
$html = $graph_js . $html;
unset($this->agent['fired_count']);
if ($this->agent['total_count'] > 0) {
$html .= '<div class="agents_tiny_stats agents_tiny_stats_tactical">' .
reporting_tiny_stats($this->agent, true, 'agent', '&nbsp;') . ' </div>';
}
$html .= '</div>';
$html .= '<div class="events_bar">';
$html .= "<b>" . __('Events (24h)') . "</b>";
$html .= '<div id="events_bar"></div>';
$html .= '</div>';
$ui->contentGridAddCell($html, 'agent_graphs');
$ui->contentEndGrid();
if ($system->getConfig('metaconsole'))
metaconsole_restore_db();
$modules = new Modules();
if ($system->getConfig('metaconsole'))
$filters = array('id_agent' => $this->agent['id_tagente'], 'all_modules' => true, 'status' => -1);
else
$filters = array('id_agent' => $this->id, 'all_modules' => true, 'status' => -1);
$modules->setFilters($filters);
$modules->disabledColumns(array('agent'));
$ui->contentBeginCollapsible(__('Modules'));
@ -208,19 +239,24 @@ class Agent {
if ($system->getConfig('metaconsole')) {
metaconsole_connect(null, $this->agent['id_tmetaconsole_setup']);
}
}
$alerts = new Alerts();
if ($system->getConfig('metaconsole'))
$filters = array('id_agent' => $this->agent['id_tagente'], 'all_alerts' => true);
else
$filters = array('id_agent' => $this->id, 'all_alerts' => true);
$alerts->setFilters($filters);
$alerts->disabledColumns(array('agent'));
$ui->contentBeginCollapsible(__('Alerts'));
$ui->contentCollapsibleAddItem($alerts->listAlertsHtml(true));
$ui->contentEndCollapsible();
if ($system->getConfig('metaconsole'))
metaconsole_restore_db();
$events = new Events();
$events->addJavascriptDialog();

View File

@ -325,7 +325,7 @@ class Agents {
$row[7] = $row[__('Modules')] =
'<span class="show_collapside" style="vertical-align: 0%; display: none; font-weight: bolder;">' . __('Modules') . ' </span>' .
'<span class="agents_tiny_stats">' . reporting_tiny_stats($agent, true) . ' </span>';
'<span class="agents_tiny_stats">' . reporting_tiny_stats($agent, true, 'agent', '&nbsp;') . ' </span>';
$last_time = strtotime ($agent["ultimo_contacto"]);
$now = time ();

View File

@ -105,7 +105,7 @@ class Events {
$status_icon = html_print_image($img_st, true, false, false, false, false, true);
$row = array();
$row[] = '<b class="ui-table-cell-label">' . __('Event Name') . '</b><a href="javascript: openDetails(' . $event['id_evento'] . ')"><div class="event_name">' . io_safe_output($event['evento']) . '</div></a>';
$row[] = '<b class="ui-table-cell-label">' . __('Event Name') . '</b><a href="javascript: openDetails(' . $event['id_evento'] . ')"><div class="event_name">' . io_safe_output(str_replace(array('&nbsp;','&#20;'), ' ', $event['evento'])) . '</div></a>';
if ($event["id_agente"] == 0) {
$agent_name = __('System');
@ -115,7 +115,7 @@ class Events {
}
$row_1 = '<span class="events_agent">' . $agent_name . '</span>';
$row_1 .= '<span class="events_timestamp">' . $status_icon . '<br>' . ui_print_timestamp ($event['timestamp_rep'], true, array('units' => 'tiny')) . '</span>';
$row_1 .= '<span class="events_timestamp">' . ui_print_timestamp ($event['timestamp_rep'], true, array('units' => 'tiny')) . $status_icon . '</span>';
$row[] = $row_1;
@ -966,10 +966,10 @@ class Events {
var new_rows = \"\";
$.each(data.events, function(key, event) {
new_rows = \"<tr class='events \" + event[2] + \"'>\" +
\"<td class='cell_0'>\" +
\"<td class='cell_0' style='vertical-align:middle;'>\" +
event[0] +
\"</td>\" +
\"<td>\" + event[1] + \"</td>\" +
\"<td style='vertical-align:middle;'>\" + event[1] + \"</td>\" +
\"</tr>\" + new_rows;
});

View File

@ -84,7 +84,7 @@ class ModuleGraph {
$this->height = (int)$system->getRequest('height', 0);
//Sancho says "put the height to 1/2 for to make more beautyful"
//$this->height = $this->height / 2;
$this->height = $this->height / 1.5;
$this->height -= 80; //Correct the height
@ -144,7 +144,7 @@ class ModuleGraph {
$this->draw_events,
$this->width,
$this->height,
$label,
false,
$unit,
$this->draw_alerts,
$this->avg_only,
@ -172,7 +172,7 @@ class ModuleGraph {
$this->draw_events,
$this->width,
$this->height,
$label,
false,
null,
$this->draw_alerts,
$this->avg_only,
@ -203,7 +203,7 @@ class ModuleGraph {
$this->draw_events,
$this->width,
$this->height,
$label,
false,
null,
$this->draw_alerts,
1,
@ -229,7 +229,7 @@ class ModuleGraph {
$this->draw_events,
$this->width,
$this->height,
$label,
false,
$unit_name,
$this->draw_alerts,
1,
@ -279,37 +279,34 @@ class ModuleGraph {
ob_start();
?>
<script type="text/javascript">
$(document).bind('ready', function() {
$(document).ready(function() {
function load_graph() {
$("#loading_graph").show();
$("#graph_content").html($('#loading_graph').html())
.height(($(window).height()
var heigth = $(document).height()
- $(".ui-header").height()
- $(".ui-collapsible").height()
- 55) + "px").width($(".ui-collapsible").width() + "px");
ajax_get_graph($("#id_module").val());
- 55;
var width = $(document).width() - 25;
ajax_get_graph($("#id_module").val(), heigth, width);
}
load_graph();
// Detect orientation change to refresh dinamic content
$(window).on({
orientationchange: function(e) {
// Reload dinamic content
load_graph();
}
window.addEventListener("resize", function() {
// Reload dinamic content
load_graph();
});
});
function ajax_get_graph(id) {
function ajax_get_graph(id, heigth_graph, width_graph) {
postvars = {};
postvars["action"] = "ajax";
postvars["parameter1"] = "module_graph";
postvars["parameter2"] = "get_graph";
postvars["width"] = $("#graph_content").width();
postvars["height"] = $("#graph_content").height();
postvars["width"] = width_graph;
postvars["height"] = heigth_graph;
postvars["draw_alerts"] = ($("input[name = 'draw_alerts']").is(":checked"))?1:0;
postvars["draw_events"] = ($("input[name = 'draw_events']").is(":checked"))?1:0;

View File

@ -117,8 +117,8 @@ class Modules {
}
$this->status = $system->getRequest('status', __("Status"));
if (($this->status === __("Status")) || ($this->status == AGENT_MODULE_STATUS_NOT_NORMAL)) {
$this->status = AGENT_MODULE_STATUS_NOT_NORMAL;
if (($this->status === __("Status")) || ($this->status == AGENT_MODULE_STATUS_ALL)) {
$this->status = AGENT_MODULE_STATUS_ALL;
}
else {
$this->default = false;
@ -443,8 +443,49 @@ class Modules {
foreach ($modules_db as $module) {
$row = array();
$image_status = '';
if ($module['utimestamp'] == 0 && (($module['module_type'] < 21 ||
$module['module_type'] > 23) && $module['module_type'] != 100)) {
$image_status = ui_print_status_image(STATUS_MODULE_NO_DATA,
__('NOT INIT'), true);
}
elseif ($module["estado"] == 0) {
$image_status = ui_print_status_image(STATUS_MODULE_OK,
__('NORMAL') . ": " . $module["datos"], true);
}
elseif ($module["estado"] == 1) {
$image_status = ui_print_status_image(STATUS_MODULE_CRITICAL,
__('CRITICAL') . ": " . $module["datos"], true);
}
elseif ($module["estado"] == 2) {
$image_status = ui_print_status_image(STATUS_MODULE_WARNING,
__('WARNING') . ": " . $module["datos"], true);
}
else {
$last_status = modules_get_agentmodule_last_status(
$module['id_agente_modulo']);
switch($last_status) {
case 0:
$image_status = ui_print_status_image(STATUS_MODULE_UNKNOWN,
__('UNKNOWN') . " - " . __('Last status') . " " .
__('NORMAL') . ": " . $module["datos"], true);
break;
case 1:
$image_status = ui_print_status_image(STATUS_MODULE_UNKNOWN,
__('UNKNOWN') . " - " . __('Last status') ." " .
__('CRITICAL') . ": " . $module["datos"], true);
break;
case 2:
$image_status = ui_print_status_image(STATUS_MODULE_UNKNOWN,
__('UNKNOWN') . " - " . __('Last status') . " " .
__('WARNING') . ": " . $module["datos"], true);
break;
}
}
$row[0] =
$row[__('Module name')] =
$row[__('Module name')] = '<span class="tiny" style="margin-right: 5px;">' . $image_status . '</span>' .
'<span class="data module_name">' .
ui_print_truncate_text($module['module_name'], 30, false) .
"</span>";
@ -455,6 +496,7 @@ class Modules {
ui_print_truncate_text($module['agent_name'], 50, false) .
'</span>';
}
if ($module['utimestamp'] == 0 && (($module['module_type'] < 21 ||
$module['module_type'] > 23) && $module['module_type'] != 100)) {
$row[5] = $row[__('Status')] = ui_print_status_image(STATUS_MODULE_NO_DATA,
@ -559,34 +601,30 @@ class Modules {
"&refr=" . $module["module_interval"]."','".$handle."','width=700, height=480')";
if ($is_snapshot) {
if (is_image_data($module["datos"])) {
$row[7] = $row[__('Data')] = '<a href="javascript:' . $link . '">' .
html_print_image("images/photo.png", true,
array("border" => '0',
"alt" => "",
"title" => __("Snapshot view"))) . '</a> &nbsp;&nbsp;';
if (is_image_data($module["datos"])) {
$row[7] = $row[__('Data')] = '<a href="javascript:' . $link . '">' .
html_print_image("images/photo.png", true,
array("border" => '0',
"alt" => "",
"title" => __("Snapshot view"))) . '</a> &nbsp;&nbsp;';
}
else {
$row[7] = $row[__('Data')] = '<a href="javascript:' . $link . '">' .
html_print_image("images/default_list.png", true,
array("border" => '0',
"alt" => "",
"title" => __("Snapshot view"))) . '</a> &nbsp;&nbsp;';
}
}
else {
$row[7] = $row[__('Data')] = '<span style="white-space: nowrap;">' .
'<span style="display: none;" class="show_collapside">' .
$row[__('Status')] . '&nbsp;&nbsp;</span>' .
'<a data-ajax="false" class="ui-link" ' .
'href="index.php?page=module_graph&id=' .
$module['id_agente_modulo'] . '&id_agent=' .
$this->id_agent . '">' . $output . '</a>' . '</span>';
}
else {
$row[7] = $row[__('Data')] = '<a href="javascript:' . $link . '">' .
html_print_image("images/default_list.png", true,
array("border" => '0',
"alt" => "",
"title" => __("Snapshot view"))) . '</a> &nbsp;&nbsp;';
}
}
else{
$row[7] = $row[__('Data')] = '<span style="white-space: nowrap;">' .
'<span style="display: none;" class="show_collapside">' .
$row[__('Status')] . '&nbsp;&nbsp;</span>' .
'<a data-ajax="false" class="ui-link" ' .
'href="index.php?page=module_graph&id=' .
$module['id_agente_modulo'] . '&id_agent=' .
$this->id_agent . '">' . $output . '</a>' . '</span>';
}
/*
@ -600,10 +638,10 @@ class Modules {
$this->id_agent . '">' . $output . '</a>' . '</span>';*/
if (!$ajax) {
unset($row[0]);
if ($this->columns['agent']) {
unset($row[0]);
unset($row[1]);
}
unset($row[1]);
unset($row[2]);
unset($row[4]);
unset($row[5]);
@ -643,12 +681,12 @@ class Modules {
$ui->contentAddHtml($table->getHTML());
}
else {
foreach ($listModules['modules'] as $key => $module) {
$listModules['modules'][$key][__('Status')] .=
'<span style="display: none;" class="show_collapside">' .
$listModules['modules'][$key][__('Data')] .
'</span>';
}
//~ foreach ($listModules['modules'] as $key => $module) {
//~ $listModules['modules'][$key][__('Status')] .=
//~ '<span style="display: none;" class="show_collapside">' .
//~ $listModules['modules'][$key][__('Data')] .
//~ '</span>';
//~ }
$table = new Table();
$table->id = 'list_agent_Modules';
@ -710,9 +748,8 @@ class Modules {
else {
$.each(data.modules, function(key, module) {
$(\"table#list_Modules tbody\").append(\"<tr>\" +
\"<th class='head_vertical'></th>\" +
\"<td class='cell_1'><b class='ui-table-cell-label'>" . __('Module name') . "</b>\" + module[0] + \"</td>\" +
\"<td class='cell_0'><b class='ui-table-cell-label'>" . __('Agent name') . "</b>\" + module[1] + \"</td>\" +
\"<td class='cell_0'><b class='ui-table-cell-label'>" . __('Module name') . "</b>\" + module[0] + \"</td>\" +
\"<td class='cell_1'><b class='ui-table-cell-label'>" . __('Agent name') . "</b>\" + module[1] + \"</td>\" +
\"<td class='cell_2'><b class='ui-table-cell-label'>" . __('Status') . "</b>\" + module[5] + \"</td>\" +
\"<td class='cell_3'><b class='ui-table-cell-label'>" . __('Interval') . "</b>\" + module[4] + \"</td>\" +
\"<td class='cell_4'><b class='ui-table-cell-label'>" . __('Timestamp') . "</b>\" + module[6] + \"</td>\" +

View File

@ -207,7 +207,7 @@ class Tactical {
}
else {
max_height = $('#tactical2 .tactical_set').height();
$('#tactical1').height(max_height);
//~ $('#tactical1').height(max_height);
}
}

View File

@ -617,7 +617,7 @@ $table->rowspan[1][0] = 0;
$data[0][2] = '<div style="width:100%; text-align:right">';
$data[0][2] .= '<a href="index.php?sec=estado&amp;sec2=operation/agentes/ver_agente&amp;id_agente='.$id_agente.'&amp;refr=60">' . html_print_image("images/refresh.png", true, array("border" => '0', "title" => __('Refresh data'), "alt" => "")) . '</a><br>';
if (check_acl ($config["id_user"], $agent["id_grupo"], "AW"))
$data[0][2] .= '<a href="index.php?sec=estado&amp;sec2=operation/agentes/ver_agente&amp;flag_agent=1&amp;id_agente='.$id_agente.'">' . html_print_image("images/target.png", true, array("border" => '0', "title" => __('Force'), "alt" => "")) . '</a>';
$data[0][2] .= '<a href="index.php?sec=estado&amp;sec2=operation/agentes/ver_agente&amp;flag_agent=1&amp;id_agente='.$id_agente.'">' . html_print_image("images/target.png", true, array("border" => '0', "title" => __('Force remote checks'), "alt" => "")) . '</a>';
$data[0][2] .= '</div>';
$table->data = $data;

View File

@ -192,7 +192,13 @@ if (!empty($tag_with)) {
foreach ($tag_with as $id_tag) {
if ($first) $first = false;
else $sql_post .= " AND ";
$sql_post .= "tags LIKE '%" . tags_get_name($id_tag) . "%'";
$sql_post .= "tags LIKE '" . tags_get_name($id_tag) . "'";
$sql_post .= " OR ";
$sql_post .= "tags LIKE '" . tags_get_name($id_tag) . ",%'";
$sql_post .= " OR ";
$sql_post .= "tags LIKE '%, " . tags_get_name($id_tag) . "'";
$sql_post .= " OR ";
$sql_post .= "tags LIKE '%, " . tags_get_name($id_tag) . ",%'";
}
$sql_post .= ' ) ';
}

View File

@ -53,30 +53,6 @@ else {
$view_mode = true;
}
if (is_ajax ()) {
$shortcut_update = get_parameter("shortcut_update", 0);
// Update of user to show/don't show shortcut bar
if ($shortcut_update) {
// First we get the actual state
$shortcut_value = db_get_value_filter('shortcut', 'tusuario', array('id_user' => $id));
//Deactivate shorcut var
if ($shortcut_value == 1) {
db_process_sql_update('tusuario', array('shortcut' => 0), array('id_user' => $id));
}
// Activate shortcut var
else {
db_process_sql_update('tusuario', array('shortcut' => 1), array('id_user' => $id));
}
}
return;
}
// Header
if ($meta) {
user_meta_print_header();
@ -109,7 +85,6 @@ if (isset ($_GET["modified"]) && !$view_mode) {
}
$upd_info["flash_chart"] = get_parameter ("flash_charts", $config["flash_charts"]);
$upd_info["shortcut"] = get_parameter ("shortcut_bar", 0);
$upd_info["section"] = get_parameter ("section", $user_info["section"]);
$upd_info["data_section"] = get_parameter ("data_section", '');
$dashboard = get_parameter('dashboard', '');
@ -295,10 +270,7 @@ $id_usr = $config['id_user'];
if (!$meta) {
$data = array();
$data[0] = '<span style="width:50%;float:left;">'.__('Shortcut bar') . ui_print_help_tip(__('This will activate a shortcut bar with alerts, events, messages... information'), true).'</span>';
$data[0] .= $jump . '<span style="width:20%;float:left;line-height:20px;">'.html_print_checkbox('shortcut_bar', 1, $user_info["shortcut"], true).'</span>';
$data[1] = '<span style="width:40%;float:left;">'.__('Home screen'). ui_print_help_tip(__('User can customize the home page. By default, will display \'Agent Detail\'. Example: Select \'Other\' and type sec=estado&sec2=operation/agentes/estado_agente to show agent detail view'), true).'</span>';
$data[0] = '<span style="width:40%;float:left;">'.__('Home screen'). ui_print_help_tip(__('User can customize the home page. By default, will display \'Agent Detail\'. Example: Select \'Other\' and type sec=estado&sec2=operation/agentes/estado_agente to show agent detail view'), true).'</span>';
$values = array (
'Default' =>__('Default'),
'Visual console'=>__('Visual console'),
@ -311,7 +283,7 @@ if (!$meta) {
$values['Dashboard'] = __('Dashboard');
}
$data[1] .= $jump . '<span style="width:20%;float:left;line-height:20px;">'.html_print_select($values, 'section', io_safe_output($user_info["section"]), 'show_data_section();', '', -1, true, false, false).'</span>';
$data[0] .= $jump . '<span style="width:20%;float:left;line-height:20px;">'.html_print_select($values, 'section', io_safe_output($user_info["section"]), 'show_data_section();', '', -1, true, false, false).'</span>';
if (enterprise_installed()) {
$dashboards = get_user_dashboards ($config['id_user']);
@ -324,7 +296,7 @@ if (!$meta) {
$dashboards_aux[$dashboard['name']] = $dashboard['name'];
}
}
$data[1] .= html_print_select ($dashboards_aux, 'dashboard', $user_info["data_section"], '', '', '', true);
$data[0] .= html_print_select ($dashboards_aux, 'dashboard', $user_info["data_section"], '', '', '', true);
}
$layouts = visual_map_get_user_layouts ($config['id_user'], true);
@ -337,17 +309,17 @@ if (!$meta) {
$layouts_aux[$layout] = $layout;
}
}
$data[1] .= html_print_select ($layouts_aux, 'visual_console', $user_info["data_section"], '', '', '', true);
$data[1] .= html_print_input_text ('data_section', $user_info["data_section"], '', 60, 255, true, false);
$data[0] .= html_print_select ($layouts_aux, 'visual_console', $user_info["data_section"], '', '', '', true);
$data[0] .= html_print_input_text ('data_section', $user_info["data_section"], '', 60, 255, true, false);
// User only can change skins if has more than one group
$data[2] = '';
$data[1] = '';
if (function_exists('skins_print_select')) {
if (count($usr_groups) > 1) {
$data[2] = '<span style="width:30%;float:left;">'.__('Skin').'</span>';
$data[2] .= $jump . skins_print_select($id_usr,'skin', $user_info['id_skin'], '', __('None'), 0, true);
$data[1] = '<span style="width:30%;float:left;">'.__('Skin').'</span>';
$data[1] .= $jump . skins_print_select($id_usr,'skin', $user_info['id_skin'], '', __('None'), 0, true);
}
}
$table->rowclass[] = '';

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 6.0SP5
%define release 170202
%define release 170220
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 6.0SP5
%define release 170202
%define release 170220
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -65,7 +65,7 @@ INSERT INTO tconfig (token, value) VALUES ('graph_res','5');
INSERT INTO tconfig (token, value) VALUES ('step_compact','1');
INSERT INTO tconfig (token, value) VALUES ('db_scheme_first_version','6.0orc');
INSERT INTO tconfig (token, value) VALUES('db_scheme_version','6.0SP5');
INSERT INTO tconfig (token, value) VALUES('db_scheme_build','PD170202');
INSERT INTO tconfig (token, value) VALUES('db_scheme_build','PD170220');
INSERT INTO tconfig (token, value) VALUES ('show_unknown','0');
INSERT INTO tconfig (token, value) VALUES ('show_lastalerts','1');
INSERT INTO tconfig (token, value) VALUES ('style','pandora');

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 6.0SP5-170202
Version: 6.0SP5-170220
Architecture: all
Priority: optional
Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
pandora_version="6.0SP5-170202"
pandora_version="6.0SP5-170220"
package_cpan=0
package_pandora=1

View File

@ -43,7 +43,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "6.0SP5";
my $pandora_build = "170202";
my $pandora_build = "170220";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 6.0SP5
%define release 170202
%define release 170220
Summary: Pandora FMS Server
Name: %{name}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 6.0SP5
%define release 170202
%define release 170220
Summary: Pandora FMS Server
Name: %{name}

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="6.0SP5"
PI_BUILD="170202"
PI_BUILD="170220"
MODE=$1
if [ $# -gt 1 ]; then

View File

@ -33,7 +33,7 @@ use PandoraFMS::Tools;
use PandoraFMS::DB;
# version: define current version
my $version = "6.0SP5 PS170202";
my $version = "6.0SP5 PS170220";
# Pandora server configuration
my %conf;

View File

@ -35,7 +35,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
my $version = "6.0SP5 PS170202";
my $version = "6.0SP5 PS170220";
# save program name for logging
my $progname = basename($0);