Merge remote-tracking branch 'origin/develop' into ent-5527-cambio-discovery-sap-para-hacerlo-personalizable

This commit is contained in:
fbsanchez 2020-06-15 17:41:53 +02:00
commit 1eea17f9b9
54 changed files with 138857 additions and 104253 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.746-200608
Version: 7.0NG.746-200615
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="7.0NG.746-200608"
pandora_version="7.0NG.746-200615"
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

@ -55,7 +55,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.746';
use constant AGENT_BUILD => '200608';
use constant AGENT_BUILD => '200615';
# 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 7.0NG.746
%define release 200608
%define release 200615
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 7.0NG.746
%define release 200608
%define release 200615
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.746"
PI_BUILD="200608"
PI_BUILD="200615"
OS_NAME=`uname -s`
FORCE=0
@ -164,7 +164,7 @@ uninstall () {
rm -f $DESTDIR/etc/logrotate.d/pandora_agent
# Remove systemd service if exists
if [ $(systemctl --v | grep systemd | wc -l) != 0 ]
if [ `systemctl --v 2> /dev/null | grep systemd | wc -l` != 0 ]
then
PANDORA_AGENT_SERVICE="/etc/systemd/system/pandora_agent_daemon.service"
rm -f $PANDORA_AGENT_SERVICE
@ -480,7 +480,7 @@ install () {
fi
# Create systemd service
if [ $(systemctl --v | grep systemd | wc -l) != 0 ]
if [ `systemctl --v 2> /dev/null | grep systemd | wc -l` != 0 ]
then
echo "Creating systemd service for pandora_agent_daemon"

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{200608}
{200615}
ViewReadme
{Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.746(Build 200608)")
#define PANDORA_VERSION ("7.0NG.746(Build 200615)")
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", "(7.0NG.746(Build 200608))"
VALUE "ProductVersion", "(7.0NG.746(Build 200615))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.746-200608
Version: 7.0NG.746-200615
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="7.0NG.746-200608"
pandora_version="7.0NG.746-200615"
package_pear=0
package_pandora=1

View File

@ -118,6 +118,10 @@ if ($create_special_day) {
$values['id_group'] = (string) get_parameter('id_group');
$values['description'] = (string) get_parameter('description');
$aviable_description = true;
if (preg_match('<script>', $values['description'])) {
$aviable_description = false;
}
$array_date = explode('-', $date);
@ -142,8 +146,12 @@ if ($create_special_day) {
$result = '';
$messageAction = __('Could not be created, it already exists');
} else {
$result = alerts_create_alert_special_day($date, $same_day, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$values['description'].'"}';
if ($aviable_description) {
$result = alerts_create_alert_special_day($date, $same_day, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$values['description'].'"}';
} else {
$result = false;
}
}
}
@ -176,6 +184,11 @@ if ($update_special_day) {
$id_group = (string) get_parameter('id_group');
$id_group_orig = (string) get_parameter('id_group_orig');
$aviable_description = true;
if (preg_match('<script>', $description)) {
$aviable_description = false;
}
$array_date = explode('-', $date);
$year = $array_date[0];
@ -206,12 +219,16 @@ if ($update_special_day) {
$result = '';
$messageAction = __('Could not be updated, it already exists');
} else {
if ($aviable_description !== false) {
$result = alerts_update_alert_special_day($id, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}';
}
}
} else {
if ($aviable_description !== false) {
$result = alerts_update_alert_special_day($id, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}';
}
} else {
$result = alerts_update_alert_special_day($id, $values);
$info = '{"Date":"'.$date.'","Same day of the week":"'.$same_day.'","Description":"'.$description.'"}';
}
}

View File

@ -347,24 +347,32 @@ if (($create_group) && (check_acl($config['id_user'], 0, 'PM'))) {
$check = db_get_value('nombre', 'tgrupo', 'nombre', $name);
$propagate = (bool) get_parameter('propagate');
$aviable_name = true;
if (preg_match('<script>', $name)) {
$aviable_name = false;
}
// Check if name field is empty.
if ($name != '') {
if (!$check) {
$values = [
'nombre' => $name,
'icon' => empty($icon) ? '' : substr($icon, 0, -4),
'parent' => $id_parent,
'disabled' => $alerts_disabled,
'custom_id' => $custom_id,
'id_skin' => $skin,
'description' => $description,
'contact' => $contact,
'propagate' => $propagate,
'other' => $other,
'password' => io_safe_input($group_pass),
];
if ($aviable_name === true) {
$values = [
'nombre' => $name,
'icon' => empty($icon) ? '' : substr($icon, 0, -4),
'parent' => $id_parent,
'disabled' => $alerts_disabled,
'custom_id' => $custom_id,
'id_skin' => $skin,
'description' => $description,
'contact' => $contact,
'propagate' => $propagate,
'other' => $other,
'password' => io_safe_input($group_pass),
];
$result = db_process_sql_insert('tgrupo', $values);
}
$result = db_process_sql_insert('tgrupo', $values);
if ($result) {
ui_print_success_message(__('Group successfully created'));
} else {
@ -394,8 +402,13 @@ if ($update_group) {
$contact = (string) get_parameter('contact');
$other = (string) get_parameter('other');
$aviable_name = true;
if (preg_match('<script>', $name)) {
$aviable_name = false;
}
// Check if name field is empty.
if ($name != '') {
if ($name != '' && $aviable_name === true) {
$sql = sprintf(
'UPDATE tgrupo
SET nombre = "%s",

View File

@ -271,7 +271,7 @@ ui_print_page_header(
$help_header,
true,
$onheader,
true,
false,
'massivemodal'
);

View File

@ -767,9 +767,14 @@ switch ($action) {
)
);
if (count($reports)) {
$filters = [
'search' => $search,
'id_group' => $id_group,
];
$filtersStr = http_build_query($filters, '', '&amp;');
$url = 'index.php?sec=reporting&sec2=godmode/reporting/reporting_builder';
$url .= '&'.$filtersStr;
ui_pagination($total_reports, $url, $offset, $pagination);
$table = new stdClass();

View File

@ -31,11 +31,10 @@ $id_tag = (int) get_parameter('id_tag', 0);
$update_tag = (int) get_parameter('update_tag', 0);
$create_tag = (int) get_parameter('create_tag', 0);
$name_tag = (string) get_parameter('name_tag', '');
$description_tag = (string) get_parameter('description_tag', '');
$description_tag = io_safe_input(strip_tags(io_safe_output($description_tag)));
$description_tag = io_safe_input(strip_tags(io_safe_output((string) get_parameter('description_tag'))));
$url_tag = (string) get_parameter('url_tag', '');
$email_tag = (string) get_parameter('email_tag', '');
$phone_tag = (string) get_parameter('phone_tag', '');
$email_tag = io_safe_input(strip_tags(io_safe_output(((string) get_parameter('email_tag')))));
$phone_tag = io_safe_input(strip_tags(io_safe_output(((string) get_parameter('phone_tag')))));
$tab = (string) get_parameter('tab', 'list');
if (defined('METACONSOLE')) {

View File

@ -367,11 +367,11 @@ if ($search) {
$found = false;
if (!empty($filter_search)) {
if (preg_match('/.*'.$filter_search.'.*/', $user_info['fullname']) != 0) {
if (preg_match('/.*'.strtolower($filter_search).'.*/', strtolower($user_info['fullname'])) != 0) {
$found = true;
}
if (preg_match('/.*'.$filter_search.'.*/', $user_info['id_user']) != 0) {
if (preg_match('/.*'.strtolower($filter_search).'.*/', strtolower($user_info['id_user'])) != 0) {
$found = true;
}

View File

@ -692,9 +692,7 @@ class HostDevices extends Wizard
if ($this->page == 1) {
$title = __(
'"%s" features',
io_safe_output(
$this->task['name']
)
$this->task['name']
);
}

View File

@ -1088,10 +1088,18 @@ if ($dialogue_event_response) {
}
if ($add_comment) {
$aviability_comment = true;
$comment = get_parameter('comment');
if (preg_match('<script>', io_safe_output($comment))) {
$aviability_comment = false;
$return = false;
}
$event_id = get_parameter('event_id');
$return = events_comment($event_id, $comment, 'Added comment', $meta, $history);
if ($aviability_comment !== false) {
$return = events_comment($event_id, $comment, 'Added comment', $meta, $history);
}
if ($return) {
echo 'comment_ok';

View File

@ -105,7 +105,7 @@ class CustomNetScan extends Wizard
// from 'validation' page.
if (isset($this->page) === true && $this->page === 1) {
$task_id = get_parameter('task', null);
$taskname = get_parameter('taskname', '');
$taskname = io_safe_input(strip_tags(io_safe_output(get_parameter('taskname'))));
$comment = get_parameter('comment', '');
$server_id = get_parameter('id_recon_server', '');
$id_group = get_parameter('id_group', '');

View File

@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC200608';
$build_version = 'PC200615';
$pandora_version = 'v7.0NG.746';
// Do not overwrite default timezone set if defined.

View File

@ -477,7 +477,8 @@ function set_user_language()
/**
* INTERNAL (use ui_print_timestamp for output): Transform an amount of time in seconds into a human readable
* INTERNAL (use ui_print_timestamp for output):
* Transform an amount of time in seconds into a human readable
* strings of minutes, hours or days.
*
* @param integer $seconds Seconds elapsed time
@ -488,17 +489,11 @@ function set_user_language()
*/
function human_time_description_raw($seconds, $exactly=false, $units='large')
{
switch ($units) {
case 'large':
$secondsString = __('seconds');
$daysString = __('days');
$monthsString = __('months');
$yearsString = __('years');
$minutesString = __('minutes');
$hoursString = __('hours');
$nowString = __('Now');
break;
if (isset($units) === false || empty($units) === true) {
$units = 'large';
}
switch ($units) {
case 'tiny':
$secondsString = __('s');
$daysString = __('d');
@ -508,6 +503,17 @@ function human_time_description_raw($seconds, $exactly=false, $units='large')
$hoursString = __('h');
$nowString = __('N');
break;
default:
case 'large':
$secondsString = __('seconds');
$daysString = __('days');
$monthsString = __('months');
$yearsString = __('years');
$minutesString = __('minutes');
$hoursString = __('hours');
$nowString = __('Now');
break;
}
if (empty($seconds)) {
@ -3718,6 +3724,14 @@ function series_type_graph_array($data, $show_elements_graph)
}
}
if ((int) $value['min'] === PHP_INT_MAX) {
$value['min'] = 0;
}
if ((int) $value['max'] === (-PHP_INT_MAX)) {
$value['max'] = 0;
}
$data_return['legend'][$key] .= __('Min:').remove_right_zeros(
number_format(
$value['min'],

View File

@ -1506,6 +1506,12 @@ function api_set_new_agent($thrash1, $thrash2, $other, $thrash3)
return;
}
if ((int) $other['data'][3] == 0) {
$agent_creation_error = __('The agent could not be created, for security reasons use a group another than 0');
returnError('generic error', $agent_creation_error);
return;
}
$alias = io_safe_input(trim(preg_replace('/[\/\\\|%#&$]/', '', $other['data'][0])));
$direccion_agente = io_safe_input($other['data'][1]);
$nombre_agente = hash('sha256', $direccion_agente.'|'.$direccion_agente.'|'.time().'|'.sprintf('%04d', rand(0, 10000)));
@ -2048,31 +2054,31 @@ function api_get_all_agents($thrash1, $thrash2, $other, $returnType)
// Filter by status
switch ($other['data'][2]) {
case 'warning':
if ($status == 2) {
if ($status == AGENT_MODULE_STATUS_WARNING || $status == AGENT_MODULE_STATUS_WARNING_ALERT) {
$result_agents[] = $agent;
}
break;
case 'critical':
if ($status == 1) {
if ($status == AGENT_MODULE_STATUS_CRITICAL_BAD || $status == AGENT_MODULE_STATUS_CRITICAL_ALERT) {
$result_agents[] = $agent;
}
break;
case 'unknown':
if ($status == 3) {
if ($status == AGENT_MODULE_STATUS_UNKNOWN) {
$result_agents[] = $agent;
}
break;
case 'normal':
if ($status == 0) {
if ($status == AGENT_MODULE_STATUS_NORMAL || $status == AGENT_MODULE_STATUS_NORMAL_ALERT) {
$result_agents[] = $agent;
}
break;
case 'alert_fired':
if ($status == 4) {
if ($status == AGENT_STATUS_ALERT_FIRED || $status == AGENT_MODULE_STATUS_WARNING_ALERT || $status == AGENT_MODULE_STATUS_CRITICAL_ALERT || $status == AGENT_MODULE_STATUS_NORMAL_ALERT) {
$result_agents[] = $agent;
}
break;

View File

@ -287,7 +287,7 @@ function config_update_config()
$error_update[] = __('Command Snapshot');
}
if (!config_update_value('server_log_dir', get_parameter('server_log_dir'))) {
if (!config_update_value('server_log_dir', io_safe_input(strip_tags(io_safe_output(get_parameter('server_log_dir')))))) {
$error_update[] = __('Server logs directory');
}
@ -1200,8 +1200,8 @@ function config_update_config()
// --------------------------------------------------
// CUSTOM VALUES POST PROCESS
// --------------------------------------------------
$custom_value = get_parameter('custom_value');
$custom_text = get_parameter('custom_text');
$custom_value = io_safe_input(strip_tags(io_safe_output(get_parameter('custom_value'))));
$custom_text = io_safe_input(strip_tags(io_safe_output(get_parameter('custom_text'))));
$custom_value_add = (bool) get_parameter('custom_value_add', 0);
$custom_value_to_delete = get_parameter('custom_value_to_delete', 0);
@ -1272,8 +1272,8 @@ function config_update_config()
// --------------------------------------------------
// MODULE CUSTOM UNITS
// --------------------------------------------------
$custom_unit = get_parameter('custom_module_unit');
$custom_unit_to_delete = get_parameter('custom_module_unit_to_delete', '');
$custom_unit = io_safe_input(strip_tags(io_safe_output(get_parameter('custom_module_unit'))));
$custom_unit_to_delete = io_safe_input(strip_tags(io_safe_output(get_parameter('custom_module_unit_to_delete', ''))));
if (!empty($custom_unit)) {
if (!add_custom_module_unit(

View File

@ -633,6 +633,14 @@ function events_update_status($id_evento, $status, $filter=null, $history=false)
break;
case EVENT_STATUS_VALIDATED:
events_change_owner(
$id_evento,
$config['id_user'],
false,
is_metaconsole() ? true : false,
$history
);
$status_string = 'Validated';
break;
@ -1870,6 +1878,16 @@ function events_change_status(
return false;
}
if ($new_status == EVENT_STATUS_VALIDATED) {
events_change_owner(
$id_event,
$config['id_user'],
false,
$meta,
$history
);
}
events_comment(
$id_event,
'',

View File

@ -369,11 +369,21 @@ if ($delete_file) {
$config['filemanager']['message'] = ui_print_success_message(__('Deleted'), '', true);
if (is_dir($filename)) {
rmdir($filename);
$config['filemanager']['delete'] = 1;
if (rmdir($filename)) {
$config['filemanager']['delete'] = 1;
} else {
$config['filemanager']['delete'] = 0;
}
} else {
unlink($filename);
$config['filemanager']['delete'] = 1;
if (unlink($filename)) {
$config['filemanager']['delete'] = 1;
} else {
$config['filemanager']['delete'] = 0;
}
}
if ($config['filemanager']['delete'] == 0) {
$config['filemanager']['message'] = ui_print_error_message(__('Deleted'), '', true);
}
}
}
@ -743,7 +753,7 @@ function filemanager_file_explorer(
if (($editor) && (!$readOnly)) {
if (($typefile != 'bin') && ($typefile != 'pdf') && ($typefile != 'png') && ($typefile != 'jpg')
&& ($typefile != 'iso') && ($typefile != 'docx') && ($typefile != 'doc')
&& ($typefile != 'iso') && ($typefile != 'docx') && ($typefile != 'doc') && ($fileinfo['mime'] != MIME_DIR)
) {
$hash = md5($fileinfo['realpath'].$config['dbpass']);
$data[4] .= "<a style='vertical-align: top;' href='$url&edit_file=1&hash=".$hash.'&location_file='.$fileinfo['realpath']."' style='float: left;'>".html_print_image('images/edit.png', true, ['style' => 'margin-top: 2px;', 'title' => __('Edit file')]).'</a>';

View File

@ -2123,13 +2123,6 @@ function html_print_input_number(array $settings):string
$settings['maxlength'] = 255;
}
// Check Size.
if (isset($settings['size']) === false
|| $settings['size'] === 0
) {
$settings['size'] = 255;
}
foreach ($settings as $attribute => $attr_value) {
// Check valid attribute.
if (in_array($attribute, $valid_attrs) === false) {

View File

@ -238,8 +238,17 @@ function snmp_browser_print_tree(
/**
* Build the SNMP tree for the given SNMP agent.
*
* @param target_ip string IP of the SNMP agent.
* @param community string SNMP community to use.
* @param string $target_ip Target_ip.
* @param string $community Community.
* @param string $starting_oid Starting_oid.
* @param string $version Version.
* @param string $snmp3_auth_user Snmp3_auth_user.
* @param string $snmp3_security_level Snmp3_security_level.
* @param string $snmp3_auth_method Snmp3_auth_method.
* @param string $snmp3_auth_pass Snmp3_auth_pass.
* @param string $snmp3_privacy_method Snmp3_privacy_method.
* @param string $snmp3_privacy_pass Snmp3_privacy_pass.
* @param string|null $snmp3_context_engine_id Snmp3_context_engine_id.
*
* @return array The SNMP tree.
*/
@ -253,7 +262,8 @@ function snmp_browser_get_tree(
$snmp3_auth_method='',
$snmp3_auth_pass='',
$snmp3_privacy_method='',
$snmp3_privacy_pass=''
$snmp3_privacy_pass='',
$snmp3_context_engine_id=null
) {
global $config;
@ -277,6 +287,7 @@ function snmp_browser_get_tree(
default:
$snmp_version = SNMP::VERSION_2c;
break;
}
$snmp_session = new SNMP($snmp_version, $target_ip, $community);
@ -284,10 +295,34 @@ function snmp_browser_get_tree(
// Set security if SNMP Version is 3.
if ($snmp_version == SNMP::VERSION_3) {
$snmp_session->setSecurity($snmp3_security_level, $snmp3_auth_method, $snmp3_auth_pass, $snmp3_privacy_method, $snmp3_privacy_pass);
$snmp_session->setSecurity(
$snmp3_security_level,
$snmp3_auth_method,
$snmp3_auth_pass,
$snmp3_privacy_method,
$snmp3_privacy_pass,
$community,
$snmp3_context_engine_id
);
}
snmp_read_mib($config['homedir'].'/attachment/mibs');
$mibs_dir = $config['homedir'].'/attachment/mibs';
$_dir = opendir($mibs_dir);
// Future. Recomemended: Use a global config limit of MIBs loaded.
while (($mib_file = readdir($_dir)) !== false) {
if ($mib_file == '..' || $mib_file == '.') {
continue;
}
$rs = snmp_read_mib($mibs_dir.'/'.$mib_file);
if ($rs !== true) {
error_log('Failed while reading MIB file: '.$mib_file);
}
}
closedir($_dir);
$output = $snmp_session->walk($starting_oid);
if ($output == false) {
$output = $snmp_session->getError();

View File

@ -3596,11 +3596,7 @@ function visual_map_print_visual_map(
$proportion_width = ($mapWidth / $layout['width']);
if ($layout['background'] != 'None.png') {
if (is_metaconsole()) {
$backgroundImage = '/include/Image/image_functions.php?getFile=1&thumb=1&thumb_size='.$mapWidth.'x'.$mapHeight.'&file='.$config['homeurl'].'images/console/background/'.$layout['background'];
} else {
$backgroundImage = '/include/Image/image_functions.php?getFile=1&thumb=1&thumb_size='.$mapWidth.'x'.$mapHeight.'&file='.$config['homedir'].'/images/console/background/'.($layout['background']);
}
}
} else {
$mapWidth = $layout['width'];

View File

@ -1,227 +1,19 @@
(function ($) {
var options = {
export: {
export_data: false, // or true
labels_long: null,
homeurl: ''
}
};
export: {
export_data: false, // or true
labels_long: null,
homeurl: "",
},
};
function init(plot) {
plot.exportDataCSV = function (args) {
//amount = plot.getOptions().export.type,
//options = options || {};
// Options
var type = 'csv';
type = type.toLowerCase().trim();
var graphData,
dataObject,
dataObjects = plot.getData(),
result = [];
// Throw errors
var retrieveDataOject = function (dataObjects, custom) {
var result;
if (typeof dataObjects === 'undefined')
throw new Error('Empty parameter');
// Try to retrieve the avg set (not 100% reliable, I know)
if (dataObjects.length == 1) {
result = dataObjects.shift();
}
if (dataObjects.length > 1) {
dataObjects.forEach(function (element) {
if(custom){
if (/^Avg.:/i.test(element.label)){
result = element;
}
} else {
result = element;
}
});
// If the avg set is missing, retrieve the first set
if (typeof result === 'undefined')
result = dataObjects.shift();
}
if (typeof result === 'undefined')
throw new Error('Empty result');
return result;
}
// Throw errors
var processDataObject = function (dataObject) {
var result;
if (typeof dataObject === 'undefined')
throw new Error('Empty parameter');
if (typeof dataObject.data === 'undefined'
|| !(dataObject.data instanceof Array))
throw new Error('Object malformed');
/* {
* head: [<column>,<column>,...,<column>],
* data: [
* [<data>,<data>,...,<data>],
* [<data>,<data>,...,<data>],
* ...,
* [<data>,<data>,...,<data>],
* ]
* }
*/
if (type === 'csv') {
result = {
head: ['timestap', 'date', 'value', 'label'],
data: []
};
dataObject.data.forEach(function (item, index) {
var timestap = item[0];
var d = new Date(item[0]);
var monthNames = [
"Jan", "Feb", "Mar",
"Apr", "May", "Jun",
"Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"
];
date_format = (d.getDate() <10?'0':'') + d.getDate() + " " +
monthNames[d.getMonth()] + " " +
d.getFullYear() + " " +
(d.getHours()<10?'0':'') + d.getHours() + ":" +
(d.getMinutes()<10?'0':'') + d.getMinutes() + ":" +
(d.getSeconds()<10?'0':'') + d.getSeconds();
var date = date_format;
var value = item[1];
var clean_label = plot.getOptions().export.labels_long[dataObject.label];
clean_label = clean_label.replace( new RegExp("&#x20;", "g"), " ");
result.data.push([timestap, date, value, clean_label]);
});
}
/* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
else if (type === 'json') {
result = [];
dataObject.data.forEach(function (item, index) {
var date = '', value = item[1];
// Long labels are preferred
if (typeof labels_long[index] !== 'undefined')
date = labels_long[index];
else if (typeof labels[index] !== 'undefined')
date = labels[index];
result.push({
'date': date,
'value': value,
'label': dataObject.label
});
});
}
if (typeof result === 'undefined')
throw new Error('Empty result');
return result;
}
try {
var elements = [];
var custom_graph = $('#hidden-custom_graph').val();
if (custom_graph) {
dataObject = retrieveDataOject(dataObjects,0);
dataObjects.forEach(function (element) {
elements.push(processDataObject(element));
});
graphData = elements;
}
else {
dataObject = retrieveDataOject(dataObjects,1);
elements.push(processDataObject(dataObject));
graphData = elements;
}
// Transform the object data into a string
// cause PHP has limitations in the number
// of POST params received.
var graphDataStr = JSON.stringify(graphData);
// Build form
var $form = $('<form></form>'),
$dataInput = $('<input>'),
$typeInput = $('<input>'),
$separatorInput = $('<input>'),
$excelInput = $('<input>');
$dataInput
.prop('name', 'data')
.prop('type', 'text')
.prop('value', graphDataStr);
$typeInput
.prop('name', 'type')
.prop('type', 'text')
.prop('value', type);
$separatorInput
.prop('name', 'separator')
.prop('type', 'text')
.prop('value', ';');
$excelInput
.prop('name', 'excel_encoding')
.prop('type', 'text')
.prop('value', 0);
$form
.prop('method', 'POST')
.prop('action', plot.getOptions().export.homeurl + 'include/graphs/export_data.php')
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo('body')
.submit();
}
catch (e) {
alert('There was an error exporting the data');
}
}
plot.exportDataJSON = function (args) {
//amount = plot.getOptions().export.type,
//options = options || {};
// Options
var type = 'json';
var type = "csv";
type = type.toLowerCase().trim();
var graphData,
@ -233,8 +25,8 @@
var retrieveDataOject = function (dataObjects) {
var result;
if (typeof dataObjects === 'undefined')
throw new Error('Empty parameter');
if (typeof dataObjects === "undefined")
throw new Error("Empty parameter");
// Try to retrieve the avg set (not 100% reliable, I know)
if (dataObjects.length == 1) {
@ -242,31 +34,30 @@
}
if (dataObjects.length > 1) {
dataObjects.forEach(function (element) {
if (/^Avg.:/i.test(element.label))
result = element;
if (/^Avg.:/i.test(element.label)) result = element;
});
// If the avg set is missing, retrieve the first set
if (typeof result === 'undefined')
result = dataObjects.shift();
if (typeof result === "undefined") result = dataObjects.shift();
}
if (typeof result === 'undefined')
throw new Error('Empty result');
if (typeof result === "undefined") throw new Error("Empty result");
return result;
}
};
// Throw errors
var processDataObject = function (dataObject) {
var result;
if (typeof dataObject === 'undefined')
throw new Error('Empty parameter');
if (typeof dataObject === "undefined")
throw new Error("Empty parameter");
if (typeof dataObject.data === 'undefined'
|| !(dataObject.data instanceof Array))
throw new Error('Object malformed');
if (
typeof dataObject.data === "undefined" ||
!(dataObject.data instanceof Array)
)
throw new Error("Object malformed");
/* {
* head: [<column>,<column>,...,<column>],
@ -278,74 +69,291 @@
* ]
* }
*/
if (type === 'csv') {
if (type === "csv") {
result = {
head: ['date', 'value','label'],
data: []
head: ["timestap", "date", "value", "label"],
data: [],
};
dataObject.data.forEach(function (item, index) {
var date = '', value = item[1];
var timestap = item[0];
// Long labels are preferred
if (typeof plot.getOptions().export.labels_long[index] !== 'undefined')
date = plot.getOptions().export.labels_long[index];
else if (typeof labels[index] !== 'undefined')
date = labels[index];
var d = new Date(item[0]);
var monthNames = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
result.data.push([date, value,dataObject.label]);
date_format =
(d.getDate() < 10 ? "0" : "") +
d.getDate() +
" " +
monthNames[d.getMonth()] +
" " +
d.getFullYear() +
" " +
(d.getHours() < 10 ? "0" : "") +
d.getHours() +
":" +
(d.getMinutes() < 10 ? "0" : "") +
d.getMinutes() +
":" +
(d.getSeconds() < 10 ? "0" : "") +
d.getSeconds();
var date = date_format;
var value = item[1];
var clean_label = plot.getOptions().export.labels_long[
dataObject.label
];
clean_label = clean_label.replace(new RegExp("&#x20;", "g"), " ");
result.data.push([timestap, date, value, clean_label]);
});
}
/* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
else if (type === 'json') {
} else if (type === "json") {
/* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
result = [];
dataObject.data.forEach(function (item, index) {
var date = '', value = item[1];
var date = "",
value = item[1];
// Long labels are preferred
if (typeof labels_long[index] !== 'undefined')
if (typeof labels_long[index] !== "undefined")
date = labels_long[index];
else if (typeof labels[index] !== 'undefined')
date = labels[index];
else if (typeof labels[index] !== "undefined") date = labels[index];
result.push({
'date': date,
'value': value,
'label': dataObject.label
date: date,
value: value,
label: dataObject.label,
});
});
}
if (typeof result === 'undefined')
throw new Error('Empty result');
if (typeof result === "undefined") throw new Error("Empty result");
return result;
}
};
try {
var elements = [];
var custom_graph = $('input:hidden[name=custom_graph]').value;
dataObject = retrieveDataOject(dataObjects);
if (dataObject) {
elements.push(processDataObject(dataObject));
}
dataObjects.forEach(function (element) {
elements.push(processDataObject(element));
});
graphData = elements;
// Transform the object data into a string
// cause PHP has limitations in the number
// of POST params received.
var graphDataStr = JSON.stringify(graphData);
// Build form
var $form = $("<form></form>"),
$dataInput = $("<input>"),
$typeInput = $("<input>"),
$separatorInput = $("<input>"),
$excelInput = $("<input>");
$dataInput
.prop("name", "data")
.prop("type", "text")
.prop("value", graphDataStr);
$typeInput
.prop("name", "type")
.prop("type", "text")
.prop("value", type);
$separatorInput
.prop("name", "separator")
.prop("type", "text")
.prop("value", ";");
$excelInput
.prop("name", "excel_encoding")
.prop("type", "text")
.prop("value", 0);
$form
.prop("method", "POST")
.prop(
"action",
plot.getOptions().export.homeurl + "include/graphs/export_data.php"
)
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
};
plot.exportDataJSON = function (args) {
//amount = plot.getOptions().export.type,
//options = options || {};
// Options
var type = "json";
type = type.toLowerCase().trim();
var graphData,
dataObject,
dataObjects = plot.getData(),
result = [];
// Throw errors
var retrieveDataOject = function (dataObjects) {
var result;
if (typeof dataObjects === "undefined")
throw new Error("Empty parameter");
// Try to retrieve the avg set (not 100% reliable, I know)
if (dataObjects.length == 1) {
result = dataObjects.shift();
}
if (dataObjects.length > 1) {
dataObjects.forEach(function (element) {
if (/^Avg.:/i.test(element.label)) result = element;
});
// If the avg set is missing, retrieve the first set
if (typeof result === "undefined") result = dataObjects.shift();
}
if (typeof result === "undefined") throw new Error("Empty result");
return result;
};
// Throw errors
var processDataObject = function (dataObject) {
var result;
if (typeof dataObject === "undefined")
throw new Error("Empty parameter");
if (
typeof dataObject.data === "undefined" ||
!(dataObject.data instanceof Array)
)
throw new Error("Object malformed");
/* {
* head: [<column>,<column>,...,<column>],
* data: [
* [<data>,<data>,...,<data>],
* [<data>,<data>,...,<data>],
* ...,
* [<data>,<data>,...,<data>],
* ]
* }
*/
if (type === "csv") {
result = {
head: ["date", "value", "label"],
data: [],
};
dataObject.data.forEach(function (item, index) {
var date = "",
value = item[1];
// Long labels are preferred
if (
typeof plot.getOptions().export.labels_long[index] !== "undefined"
)
date = plot.getOptions().export.labels_long[index];
else if (typeof labels[index] !== "undefined") date = labels[index];
result.data.push([date, value, dataObject.label]);
});
} else if (type === "json") {
/* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
result = [];
dataObject.data.forEach(function (item, index) {
var date = "",
value = item[1];
// Long labels are preferred
if (typeof labels_long[index] !== "undefined")
date = labels_long[index];
else if (typeof labels[index] !== "undefined") date = labels[index];
result.push({
date: date,
value: value,
label: dataObject.label,
});
});
}
if (typeof result === "undefined") throw new Error("Empty result");
return result;
};
try {
var elements = [];
var custom_graph = $("input:hidden[name=custom_graph]").value;
if (custom_graph) {
dataObject = retrieveDataOject(dataObjects);
@ -353,8 +361,7 @@
elements.push(processDataObject(element));
});
graphData = elements;
}
else {
} else {
dataObject = retrieveDataOject(dataObjects);
elements.push(processDataObject(dataObject));
graphData = elements;
@ -366,51 +373,53 @@
var graphDataStr = JSON.stringify(graphData);
// Build form
var $form = $('<form></form>'),
$dataInput = $('<input>'),
$typeInput = $('<input>'),
$separatorInput = $('<input>'),
$excelInput = $('<input>');
var $form = $("<form></form>"),
$dataInput = $("<input>"),
$typeInput = $("<input>"),
$separatorInput = $("<input>"),
$excelInput = $("<input>");
$dataInput
.prop('name', 'data')
.prop('type', 'text')
.prop('value', graphDataStr);
.prop("name", "data")
.prop("type", "text")
.prop("value", graphDataStr);
$typeInput
.prop('name', 'type')
.prop('type', 'text')
.prop('value', type);
.prop("name", "type")
.prop("type", "text")
.prop("value", type);
$separatorInput
.prop('name', 'separator')
.prop('type', 'text')
.prop('value', ';');
.prop("name", "separator")
.prop("type", "text")
.prop("value", ";");
$excelInput
.prop('name', 'excel_encoding')
.prop('type', 'text')
.prop('value', 0);
.prop("name", "excel_encoding")
.prop("type", "text")
.prop("value", 0);
$form
.prop('method', 'POST')
.prop('action', plot.getOptions().export.homeurl + 'include/graphs/export_data.php')
.prop("method", "POST")
.prop(
"action",
plot.getOptions().export.homeurl + "include/graphs/export_data.php"
)
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo('body')
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
catch (e) {
alert('There was an error exporting the data');
}
}
};
}
$.plot.plugins.push({
init: init,
options: options,
name: 'exportdata',
version: '0.1'
});
})(jQuery);
$.plot.plugins.push({
init: init,
options: options,
name: "exportdata",
version: "0.1",
});
})(jQuery);

View File

@ -3009,7 +3009,7 @@ function number_format(number, force_integer, unit, short_data, divisor) {
var decimals = 2;
if (unit == "KB") {
return number + unit;
return Math.round(number * decimals) + unit;
}
// Set maximum decimal precision to 99 in case short_data is not set.
@ -3038,6 +3038,12 @@ function number_format(number, force_integer, unit, short_data, divisor) {
if (divisor) {
number = Math.round(number * decimals) / decimals;
} else {
number = Math.round(number * decimals);
}
if (isNaN(number)) {
number = 0;
}
return number + " " + shorts[pos] + unit;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -104,6 +104,27 @@ class ServiceMapWidget extends Widget
*/
protected $gridWidth;
/**
* Cell ID.
*
* @var integer
*/
protected $cellId;
/**
* Widget ID.
*
* @var integer
*/
protected $widgetId;
/**
* Dashboard ID.
*
* @var integer
*/
protected $dashboardId;
/**
* Construct.
@ -145,6 +166,15 @@ class ServiceMapWidget extends Widget
// Grid Width.
$this->gridWidth = $gridWidth;
// Cell Id.
$this->cellId = $cellId;
// Widget ID.
$this->widgetId = $widgetId;
// Dashboard ID.
$this->dashboardId = $dashboardId;
// Options.
$this->values = $this->decoders($this->getOptionsWidget());
@ -236,6 +266,14 @@ class ServiceMapWidget extends Widget
);
}
$inputs[] = [
'label' => \ui_print_info_message(
__('ZOOM functionality is only available when there is only one such widget in the dashboard'),
'',
true
),
];
$inputs[] = [
'label' => __('Service'),
'arguments' => [
@ -249,8 +287,10 @@ class ServiceMapWidget extends Widget
],
];
// Show legend.
$inputs[] = [
// TODO refactoriced services: Hidden legend.
/*
// Show legend.
$inputs[] = [
'label' => __('Show legend'),
'arguments' => [
'name' => 'showLegend',
@ -258,7 +298,8 @@ class ServiceMapWidget extends Widget
'type' => 'switch',
'value' => $values['showLegend'],
],
];
];
*/
return $inputs;
}
@ -275,8 +316,7 @@ class ServiceMapWidget extends Widget
$values = parent::getPost();
$values['serviceId'] = \get_parameter('serviceId', 0);
$values['showLegend'] = \get_parameter_switch('showLegend');
// $values['showLegend'] = \get_parameter_switch('showLegend');
return $values;
}
@ -314,10 +354,14 @@ class ServiceMapWidget extends Widget
return $output;
}
$output .= "<div id='container_servicemap' style='position: relative; text-align: center;'>";
$containerId = 'container_servicemap_'.$this->values['serviceId'].'_'.$this->cellId;
$style = 'position: relative; text-align: center;';
$output .= "<div id='".$containerId."' style='".$style."'>";
if ($this->values['showLegend'] === 1) {
$output .= "<div id='container_servicemap_legend'>";
// TODO refactoriced services: Hidden legend.
/*
if ($this->values['showLegend'] === 1) {
$output .= "<div id='container_servicemap_legend".$this->values['serviceId'].'_'.$this->cellId."'>";
$output .= '<table>';
$output .= "<tr class='legend_servicemap_title'><td colspan='3' style='padding-bottom: 10px; min-width: 177px;'><b>".__('Legend').'</b></td>';
$output .= "<td><img class='legend_servicemap_toggle' style='padding-bottom: 10px;' src='images/darrowup.png'></td></tr>";
@ -347,6 +391,22 @@ class ServiceMapWidget extends Widget
$output .= '</tr>';
$output .= '</table>';
$output .= '</div>';
}
*/
// TODO: removed refactoriced services. Only 1 widget Zoom.
$sql = sprintf(
'SELECT COUNT(*)
FROM twidget_dashboard
WHERE id_dashboard = %s
AND id_widget = %s',
$this->dashboardId,
$this->widgetId
);
$countDashboardServices = \db_get_value_sql($sql);
$disableZoom = false;
if ($countDashboardServices > 1) {
$disableZoom = true;
}
$output .= html_print_input_hidden(
@ -360,7 +420,9 @@ class ServiceMapWidget extends Widget
$this->values['serviceId'],
false,
$size['width'],
$size['height']
$size['height'],
$this->cellId,
$disableZoom
);
$output .= ob_get_clean();
$output .= '</div>';

View File

@ -477,17 +477,29 @@ div#main_pure {
margin-top: 30px;
}
#form-config-widget .info_box,
.content-widget .info_box {
border-radius: 5px;
width: 90%;
}
#form-config-widget .info_box {
margin: 0 auto;
}
#form-config-widget .info_box tbody tr td,
.content-widget .info_box tbody tr td {
padding: 10px;
}
#form-config-widget .info_box tbody tr td.icon,
.content-widget .info_box tbody tr td.icon {
padding-right: 10px !important;
}
#form-config-widget .info_box tbody tr td {
font-family: "lato-bolder", "Open Sans", sans-serif;
font-size: 8pt;
}
.content-widget .databox.filters > tbody > tr > td {
padding-right: 30px;
}

View File

@ -685,6 +685,11 @@ if (! isset($config['id_user'])) {
unset($query_params_redirect['sec2']);
}
// Dashboard do not want sec2.
if ($home_page == 'Dashboard') {
unset($query_params_redirect['sec2']);
}
$redirect_url = '?logged=1';
foreach ($query_params_redirect as $key => $value) {
if ($key == 'login') {

View File

@ -129,7 +129,7 @@
<div style='height: 10px'>
<?php
$version = '7.0NG.746';
$build = '200608';
$build = '200615';
$banner = "v$version Build $build";
error_reporting(0);

View File

@ -1962,17 +1962,7 @@ function process_datatables_item(item) {
/* Agent ID link */
if (item.id_agente > 0) {
<?php
if (in_array('agent_name', $fields)) {
?>
item.id_agente = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.id_agente + '</a>';
<?php
} else {
?>
item.id_agente = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.agent_name + '</a>';
<?php
}
?>
item.id_agente = '<a href="'+url_link+item.id_agente+url_link_hash+'">' + item.id_agente + '</a>';
} else {
item.id_agente = '';
}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.746
%define release 200608
%define release 200615
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.746
%define release 200608
%define release 200615
# User and Group under which Apache is running
%define httpd_name httpd

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.746
%define release 200608
%define release 200615
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.746-200608
Version: 7.0NG.746-200615
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="7.0NG.746-200608"
pandora_version="7.0NG.746-200615"
package_cpan=0
package_pandora=1

View File

@ -45,7 +45,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.746";
my $pandora_build = "200608";
my $pandora_build = "200615";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash
@ -399,7 +399,8 @@ sub pandora_load_config {
$pa_config->{'max_log_generation'} = 1;
# Ignore the timestamp in the XML and use the file timestamp instead
$pa_config->{'use_xml_timestamp'} = 0;
# If 1 => uses timestamp from received XML #5763.
$pa_config->{'use_xml_timestamp'} = 1;
# Server restart delay in seconds
$pa_config->{'restart_delay'} = 60;

View File

@ -234,6 +234,7 @@ sub data_consumer ($$) {
}
# Ignore the timestamp in the XML and use the file timestamp instead
# If 1 => uses timestamp from received XML #5763.
$xml_data->{'timestamp'} = strftime ("%Y-%m-%d %H:%M:%S", localtime((stat($file_name))[9])) if ($pa_config->{'use_xml_timestamp'} eq '0' || ! defined ($xml_data->{'timestamp'}));
# Double check that the file exists

View File

@ -33,7 +33,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.746";
my $pandora_build = "200608";
my $pandora_build = "200615";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.746
%define release 200608
%define release 200615
Summary: Pandora FMS Server
Name: %{name}

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_server
%define version 7.0NG.746
%define release 200608
%define release 200615
Summary: Pandora FMS Server
Name: %{name}

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.746"
PI_BUILD="200608"
PI_BUILD="200615"
MODE=$1
if [ $# -gt 1 ]; then

View File

@ -35,7 +35,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.746 PS200608";
my $version = "7.0NG.746 PS200615";
# Pandora server configuration
my %conf;

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv;
# version: define current version
my $version = "7.0NG.746 PS200608";
my $version = "7.0NG.746 PS200615";
# save program name for logging
my $progname = basename($0);