Merge remote-tracking branch 'origin/develop' into ent-6576-macros-de-respuestas-de-eventos-que-no-funcionan

This commit is contained in:
fbsanchez 2020-10-29 18:00:17 +01:00
commit b92cfc6c10
70 changed files with 1051 additions and 387 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.750-201021
Version: 7.0NG.750-201029
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.750-201021"
pandora_version="7.0NG.750-201029"
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.750';
use constant AGENT_BUILD => '201021';
use constant AGENT_BUILD => '201029';
# 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.750
%define release 201021
%define release 201029
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}

View File

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

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.750"
PI_BUILD="201021"
PI_BUILD="201029"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{201021}
{201029}
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.750(Build 201021)")
#define PANDORA_VERSION ("7.0NG.750(Build 201029)")
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.750(Build 201021))"
VALUE "ProductVersion", "(7.0NG.750(Build 201029))"
VALUE "FileVersion", "1.0.0.0"
END
END

View File

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

View File

@ -668,7 +668,7 @@ function mainAgentsModules()
if ($recursion) {
$filter_groups['id_grupo'] = array_merge(
$group_id,
groups_get_id_recursive($group_id, true)
groups_get_children_ids($group_id, true)
);
} else {
$filter_groups['id_grupo'] = $group_id;

View File

@ -86,7 +86,6 @@ function mainModuleGroups()
);
$info = $tree_group->getArray();
$info = groupview_plain_groups($info);
$counter = count($info);
$offset = get_parameter('offset', 0);
$agent_group_search = get_parameter('agent_group_search', '');
$module_group_search = get_parameter('module_group_search', '');
@ -134,6 +133,8 @@ function mainModuleGroups()
$ids_group = -1;
}
$counter = count($info);
$condition_critical = modules_get_state_condition(AGENT_MODULE_STATUS_CRITICAL_ALERT);
$condition_warning = modules_get_state_condition(AGENT_MODULE_STATUS_WARNING_ALERT);
$condition_unknown = modules_get_state_condition(AGENT_MODULE_STATUS_UNKNOWN);

View File

@ -149,7 +149,7 @@ if (is_ajax()) {
ui_require_javascript_file('openlayers.pandora');
$new_agent = (bool) get_parameter('new_agent');
$new_agent = (empty($id_agente)) ? true : false;
if (! isset($id_agente) && ! $new_agent) {
db_pandora_audit('ACL Violation', 'Trying to access agent manager witout an agent');
@ -1222,6 +1222,7 @@ ui_require_jquery_file('bgiframe');
$(document).ready (function() {
var $id_agent = '<?php echo $id_agente; ?>';
var previous_primary_group_select;
$("#grupo").on('focus', function () {
previous_primary_group_select = this.value;
@ -1276,12 +1277,14 @@ ui_require_jquery_file('bgiframe');
}
});
paint_qrcode(
"<?php echo ui_get_full_url('mobile/index.php?page=agent&id='.$id_agente); ?>",
"#qr_code_agent_view",
128,
128
);
if (typeof $id_agent !== 'undefined' && $id_agent !== '0') {
paint_qrcode(
"<?php echo ui_get_full_url('mobile/index.php?page=agent&id='.$id_agente); ?>",
"#qr_code_agent_view",
128,
128
);
}
$("#text-agente").prop('readonly', true);
});

View File

@ -408,7 +408,7 @@ if ($ag_group > 0) {
$ag_groups = [];
$ag_groups = (array) $ag_group;
if ($recursion) {
$ag_groups = groups_get_id_recursive($ag_group, true);
$ag_groups = groups_get_children_ids($ag_group, true);
}
$user_groups_to_sql = implode(',', $ag_groups);
@ -754,7 +754,6 @@ if (check_acl($config['id_user'], 0, 'AW')) {
// Create agent button.
echo '<div style="text-align: right;">';
echo '<form method="post" action="index.php?sec=gagente&amp;sec2=godmode/agentes/configurar_agente">';
html_print_input_hidden('new_agent', 1);
html_print_submit_button(
__('Create agent'),
'crt-2',

View File

@ -877,7 +877,7 @@ if ($id_downtime > 0) {
$filter_cond = '';
if ($filter_group > 0) {
if ($recursion) {
$rg = groups_get_id_recursive($filter_group, true);
$rg = groups_get_children_ids($filter_group, true);
$filter_cond .= ' AND id_grupo IN (';
$i = 0;

View File

@ -131,7 +131,7 @@ if (check_acl($config['id_user'], 0, 'LM')) {
$table->data[2][0] = __('Template');
$own_info = get_user_info($config['id_user']);
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) {
if ($own_info['is_admin']) {
$templates = alerts_get_alert_templates(false, ['id', 'name']);
} else {
$usr_groups = users_get_groups($config['id_user'], 'LW', true);

View File

@ -168,7 +168,15 @@ if ($id_group) {
}
} else {
$table->data[2][1] = '<div class="w250px inline">';
$table->data[2][1] .= html_print_select_groups(false, 'AR', true, 'id_parent', $id_parent, '', '', '', true);
$table->data[2][1] .= html_print_input(
[
'type' => 'select_groups',
'name' => 'id_parent',
'selected' => $id_parent,
'return' => true,
'returnAllGroup' => true,
]
);
$table->data[2][1] .= '</div>';
}

View File

@ -40,7 +40,7 @@ if (is_ajax()) {
$keys_prefix = (string) get_parameter('keys_prefix', '');
if ($recursion) {
$groups = groups_get_id_recursive($id_group, true);
$groups = groups_get_children_ids($id_group, true);
} else {
$groups = [$id_group];
}

View File

@ -258,7 +258,7 @@ if ($id_modulo === COMPONENT_TYPE_WIZARD) {
if ($execution_type === EXECUTION_TYPE_PLUGIN || $module_protocol === 'wmi') {
// Search all parameters received with extra_fields.
foreach ($_REQUEST as $parameter => $thisValue) {
// Extra fields (OIDs Macros or WMI Extra fields)
// Extra fields (OIDs Macros or WMI Extra fields).
if (preg_match('/extra_field_'.$module_protocol.'_/', $parameter) !== 0) {
$tmpParameter = explode('_', $parameter);
$extra_fields['extra_field_'.$tmpParameter[3]] = get_parameter($parameter);
@ -330,7 +330,7 @@ if ($create_component) {
if ($name && !$name_check) {
$id = network_components_create_network_component(
strip_tags(io_safe_input($name), '<br>'),
$name,
$type,
$id_group,
[
@ -431,7 +431,7 @@ if ($update_component) {
$id,
[
'type' => $type,
'name' => strip_tags(io_safe_input($name, '<br>')),
'name' => $name,
'id_group' => $id_group,
'description' => $description,
'module_interval' => $module_interval,

View File

@ -278,7 +278,7 @@ if ($ag_group > 0) {
$ag_groups = [];
$ag_groups = (array) $ag_group;
if ($recursion) {
$ag_groups = groups_get_id_recursive($ag_group, true);
$ag_groups = groups_get_children_ids($ag_group, true);
}
}

View File

@ -223,8 +223,9 @@ switch ($action) {
$server_name = $item['server_name'];
// Metaconsole db connection.
if ($meta && !empty($server_name)) {
if ($meta && empty($server_name) === false) {
$connection = metaconsole_get_connection($server_name);
$server_id = $connection['id'];
if (metaconsole_load_external_db($connection) != NOERR) {
continue;
}
@ -1383,8 +1384,7 @@ $class = 'databox filters';
html_print_input_hidden('id_agent', $idAgent);
html_print_input_hidden('server_name', $server_name);
html_print_input_hidden('server_id', $server_name);
html_print_input_hidden('id_server', '');
html_print_input_hidden('server_id', $server_id);
$params = [];
$params['show_helptip'] = false;
@ -3744,6 +3744,16 @@ $(document).ready (function () {
$("#combo_group").change (
function () {
// Alert report group must show all matches when selecting All group
// ignoring 'recursion' option. #6497.
if ($("#combo_group").val() == 0) {
$('#checkbox-recursion').attr('disabled',true)
$('#checkbox-recursion').attr('checked','checked')
} else {
$('#checkbox-recursion').removeAttr('disabled')
}
$("#id_agents").html('');
$("#id_agents2").html('');
$("#module").html('');
@ -3772,6 +3782,7 @@ $(document).ready (function () {
);
}
);
$("#combo_group").change();
$("#checkbox-recursion").change (
function () {

View File

@ -1380,11 +1380,12 @@ switch ($action) {
switch ($action) {
case 'update':
$values = [];
$server_name = get_parameter('server_id');
if (is_metaconsole() && $server_name != '') {
$id_meta = metaconsole_get_id_server($server_name);
$server_id = get_parameter('server_id', 0);
if (is_metaconsole() === true
&& empty($server_id) === false
) {
$connection = metaconsole_get_connection_by_id(
$id_meta
$server_id
);
metaconsole_connect($connection);
$values['server_name'] = $connection['server_name'];
@ -1811,7 +1812,6 @@ switch ($action) {
'combo_modulegroup'
);
$values['id_group'] = get_parameter('combo_group');
$values['server_name'] = get_parameter('server_name');
if ($values['server_name'] == '') {
$values['server_name'] = get_parameter(
@ -1867,9 +1867,7 @@ switch ($action) {
);
// If metaconsole is activated.
if ($config['metaconsole'] == 1
&& defined('METACONSOLE')
) {
if (is_metaconsole() === true) {
if (($values['type'] == 'custom_graph')
|| ($values['type'] == 'automatic_custom_graph')
) {

View File

@ -115,7 +115,7 @@ if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'AW')) {
$return_all_group,
'ag_group',
$ag_group,
'this.form.submit();',
'',
'',
0,
false,
@ -126,7 +126,7 @@ if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'AW')) {
);
echo "</li></ul></li><li class='second_elements'><ul><li>";
echo __('Group Recursion');
html_print_checkbox('recursion', 1, $recursion, false, false, 'this.form.submit()');
html_print_checkbox('recursion', 1, $recursion, false, false, '');
echo '</li><li>';
echo "<input name='search_visual_console' type='submit' class='sub search' value='".__('Search')."'>";
echo '</li></ul></li></ul>';
@ -143,7 +143,7 @@ if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'AW')) {
$ag_groups = [];
$ag_groups = (array) $ag_group;
if ($recursion) {
$ag_groups = groups_get_id_recursive($ag_group, true);
$ag_groups = groups_get_children_ids($ag_group, true);
}
} else if ($own_info['is_admin']) {
$returnAllGroups = 1;

View File

@ -140,7 +140,7 @@ if (isset($_GET['server'])) {
ui_print_error_message(__('There was a problem deleting the server'));
}
} else if (isset($_GET['update'])) {
$address = trim(get_parameter_post('address'), '&#x20;');
$address = trim(io_safe_output(get_parameter_post('address')), ' ');
$description = trim(get_parameter_post('description'), '&#x20;');
$id_server = get_parameter_post('server');
$exec_proxy = get_parameter_post('exec_proxy');

View File

@ -1313,6 +1313,7 @@ $(document).ready (function () {
var img_delete = '<?php echo $delete_image; ?>';
var id_user = '<?php echo io_safe_output($id); ?>';
var is_metaconsole = '<?php echo $meta; ?>';
var data = [];
$('input:image[name="add"]').click(function (e) {
@ -1357,7 +1358,7 @@ $(document).ready (function () {
$('input:image[name="del"]').click(function (e) {
e.preventDefault();
var rows = $("#table_profiles tr").length;
if (rows <= 3) {
if ((is_metaconsole === '1' && rows <= 4) || (is_metaconsole === '' && rows <= 3)) {
if (!confirm('<?php echo __('Deleting last profile will delete this user'); ?>' + '. ' + '<?php echo __('Are you sure?'); ?>')) {
return;
}
@ -1379,7 +1380,7 @@ $(document).ready (function () {
success: function (data) {
row.remove();
var rows = $("#table_profiles tr").length;
if (rows <= 2) {
if ((is_metaconsole === '1' && rows <= 3) || (is_metaconsole === '' && rows <= 2)) {
window.location.replace("<?php echo ui_get_full_url('index.php?sec=gusuarios&sec2=godmode/users/user_list&tab=user&pure=0', false, false, false); ?>");
}
}
@ -1389,7 +1390,7 @@ $(document).ready (function () {
$('#submit-crtbutton').click(function (e) {
e.preventDefault();
var rows = $("#table_profiles tr").length;
if (rows <= 2) {
if ((is_metaconsole === '1' && rows <= 3) || (is_metaconsole === '' && rows <= 2)) {
alert('<?php echo __('please add a profile'); ?>');
} else {
this.form.submit();

View File

@ -1170,6 +1170,380 @@ class HostDevices extends Wizard
];
}
// Input: SNMP enabled.
$form['inputs'][] = [
'label' => __('SNMP enabled'),
'arguments' => [
'name' => 'snmp_enabled',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['snmp_enabled'])) ? $this->task['snmp_enabled'] : 1,
'onclick' => 'extraSNMP();',
],
];
// SNMP CONFIGURATION.
$form['inputs'][] = [
'hidden' => 1,
'block_id' => 'snmp_extra',
'class' => 'indented',
'block_content' => [
[
'label' => __('SNMP version'),
'arguments' => [
'name' => 'snmp_version',
'fields' => [
'1' => 'v. 1',
'2c' => 'v. 2c',
'3' => 'v. 3',
],
'type' => 'select',
'script' => 'SNMPExtraShow(this.value)',
'selected' => $this->task['snmp_version'],
'return' => true,
],
],
],
];
// SNMP Options pack v1.
$form['inputs'][] = [
'hidden' => 1,
'block_id' => 'snmp_options_basic',
'class' => 'indented',
'block_content' => [
[
'label' => __('SNMP communities to try with').ui_print_help_tip(
__(
'You can specify several values, separated by commas, for example: public,mysecret,1234'
),
true
),
'arguments' => [
'name' => 'community',
'type' => 'text',
'value' => $this->task['snmp_community'],
'size' => 25,
'return' => true,
],
],
],
];
// SNMP Options pack v3.
$form['inputs'][] = [
'hidden' => 1,
'block_id' => 'snmp_options_v3',
'class' => 'indented',
'block_content' => [
[
'label' => '<b>'.__('Context').'</b>',
'arguments' => [
'name' => 'snmp_context',
'type' => 'text',
'value' => $this->task['snmp_community'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth user').'</b>',
'arguments' => [
'name' => 'snmp_auth_user',
'type' => 'text',
'value' => $this->task['snmp_auth_user'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth password').'</b>'.ui_print_help_tip(
__(
'The pass length must be eight character minimum.'
),
true
),
'arguments' => [
'name' => 'snmp_auth_pass',
'type' => 'password',
'value' => $this->task['snmp_auth_pass'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Privacy method').'</b>',
'arguments' => [
'name' => 'snmp_privacy_method',
'type' => 'select',
'fields' => [
'DES' => __('DES'),
'AES' => __('AES'),
],
'selected' => $this->task['snmp_privacy_method'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Privacy pass').'</b>'.ui_print_help_tip(
__(
'The pass length must be eight character minimum.'
),
true
),
'arguments' => [
'name' => 'snmp_privacy_pass',
'type' => 'password',
'value' => $this->task['snmp_privacy_pass'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Auth method').'</b>',
'arguments' => [
'name' => 'snmp_auth_method',
'type' => 'select',
'fields' => [
'MD5' => __('MD5'),
'SHA' => __('SHA'),
],
'selected' => $this->task['snmp_auth_method'],
'size' => 15,
'return' => true,
],
],
[
'label' => '<b>'.__('Security level').'</b>',
'arguments' => [
'name' => 'snmp_security_level',
'type' => 'select',
'fields' => [
'noAuthNoPriv' => __('Not auth and not privacy method'),
'authNoPriv' => __('Auth and not privacy method'),
'authPriv' => __('Auth and privacy method'),
],
'selected' => $this->task['snmp_security_level'],
'size' => 15,
'return' => true,
],
],
],
];
// Input: Enforce os detection.
$form['inputs'][] = [
'label' => __('OS detection'),
'arguments' => [
'name' => 'os_detect',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['os_detect'])) ? $this->task['os_detect'] : 1,
],
];
// Input: Name resolution.
$form['inputs'][] = [
'label' => __('Name resolution'),
'arguments' => [
'name' => 'resolve_names',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['resolve_names'])) ? $this->task['resolve_names'] : 1,
],
];
// Input: Parent detection.
$form['inputs'][] = [
'label' => __('Parent detection'),
'arguments' => [
'name' => 'parent_detection',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['parent_detection'])) ? $this->task['parent_detection'] : 1,
],
];
// Input: Parent recursion.
$form['inputs'][] = [
'label' => __('Parent recursion'),
'arguments' => [
'name' => 'parent_recursion',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['parent_recursion'])) ? $this->task['parent_recursion'] : 1,
],
];
// Input: VLAN enabled.
$form['inputs'][] = [
'label' => __('VLAN enabled'),
'arguments' => [
'name' => 'vlan_enabled',
'type' => 'switch',
'return' => true,
'value' => (isset($this->task['vlan_enabled'])) ? $this->task['vlan_enabled'] : 1,
],
];
// Input: WMI enabled.
$form['inputs'][] = [
'label' => __('WMI enabled'),
'arguments' => [
'name' => 'wmi_enabled',
'type' => 'switch',
'value' => (isset($this->task['wmi_enabled'])) ? $this->task['wmi_enabled'] : 0,
'return' => true,
'onclick' => 'toggleAuth();',
],
];
// AUTH CONFIGURATION.
$show_auth = false;
if ((isset($this->task['wmi_enabled']) && $this->task['wmi_enabled'] > 0)
|| (isset($this->task['rcmd_enabled']) && $this->task['rcmd_enabled'] > 0)
) {
$show_auth = true;
}
include_once $config['homedir'].'/include/class/CredentialStore.class.php';
$available_keys = CredentialStore::getKeys('CUSTOM');
if (check_acl($config['id_user'], 0, 'PM')) {
$link_to_cs = '<a class="ext_link" href="'.ui_get_full_url(
'index.php?sec=gagente&sec2=godmode/groups/group_list&tab=credbox'
).'" >';
$link_to_cs .= __('No credentials available').', ';
$link_to_cs .= strtolower(__('Manage credentials')).'</a>';
} else {
$link_to_cs = __('No credentials available');
}
if (count($available_keys) > 0) {
$form['inputs'][] = [
'block_id' => 'auth_block',
'class' => 'indented',
'hidden' => !$show_auth,
'block_content' => [
[
'label' => __('Credentials to try with'),
'arguments' => [
'type' => 'select',
'name' => 'auth_strings[]',
'fields' => CredentialStore::getKeys('CUSTOM'),
'selected' => explode(
',',
$this->task['auth_strings']
),
'multiple' => true,
'class' => 'select_multiple',
],
],
],
];
} else {
$form['inputs'][] = [
'block_id' => 'auth_block',
'class' => 'indented',
'hidden' => !$show_auth,
'block_content' => [
[
'label' => __('Credentials'),
'extra' => $link_to_cs,
],
],
];
}
ui_require_jquery_file('tag-editor.min');
ui_require_jquery_file('caret.min');
ui_require_css_file('jquery.tag-editor');
$form['js'] = '
$(\'#text-community\').tagEditor({
forceLowercase: false
});
function SNMPExtraShow(target) {
$("#snmp_options_basic").hide();
$("#snmp_options_v3").hide();
if (document.getElementsByName("snmp_enabled")[0].checked) {
$("#snmp_extra").show();
if (target == 3) {
$("#snmp_options_v3").show();
} else {
$("#snmp_options_basic").show();
}
}
}
function extraSNMP() {
if (document.getElementsByName("snmp_enabled")[0].checked) {
SNMPExtraShow($("#snmp_version").val());
$("#snmp_extra").show();
// Enable snmp dependant checks
if (!document.getElementsByName("parent_recursion")[0].checked)
$("input[name=parent_recursion]").click();
if (!document.getElementsByName("parent_detection")[0].checked)
$("input[name=parent_detection]").click();
if (!document.getElementsByName("resolve_names")[0].checked)
$("input[name=resolve_names]").click();
if (!document.getElementsByName("vlan_enabled")[0].checked)
$("input[name=vlan_enabled]").click();
} else {
// Hide unusable sections
$("#snmp_extra").hide();
$("#snmp_options_basic").hide();
$("#snmp_options_v3").hide();
// Disable snmp dependant checks
if (document.getElementsByName("parent_recursion")[0].checked)
$("input[name=parent_recursion]").click();
if (document.getElementsByName("parent_detection")[0].checked)
$("input[name=parent_detection]").click();
if (document.getElementsByName("resolve_names")[0].checked)
$("input[name=resolve_names]").click();
if (document.getElementsByName("vlan_enabled")[0].checked)
$("input[name=vlan_enabled]").click();
}
}
function toggleAuth() {
if (document.getElementsByName("wmi_enabled")[0].checked
|| (typeof document.getElementsByName("rcmd_enabled")[0] != "undefined"
&& document.getElementsByName("rcmd_enabled")[0].checked)
) {
$("#auth_block").show();
} else {
$("#auth_block").hide();
}
}
$(function() {
SNMPExtraShow($("#snmp_version").val());
});
';
if (enterprise_installed()) {
// Feature configuration.
$extra = enterprise_hook('hd_showextrainputs', [$this]);
@ -1178,7 +1552,7 @@ class HostDevices extends Wizard
$form['inputs'],
$extra['inputs']
);
$form['js'] = $extra['js'];
$form['js'] .= $extra['js'];
}
}

View File

@ -216,7 +216,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
} else if ($search_agents && is_metaconsole()) {
$id_agent = (int) get_parameter('id_agent');
$string = (string) get_parameter('q');
// q is what autocomplete plugin gives
// Q is what autocomplete plugin gives.
$id_group = (int) get_parameter('id_group', -1);
$addedItems = html_entity_decode((string) get_parameter('add'));
$addedItems = json_decode($addedItems);
@ -236,6 +236,7 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
'alias',
'direccion',
'id_tmetaconsole_setup AS id_server',
'server_name',
];
$filter = [];
@ -254,36 +255,33 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
case 'enabled':
$filter['disabled'] = 0;
break;
default:
// Not possible.
break;
}
if (!empty($id_agent)) {
if (empty($id_agent) === false) {
$filter['id_agente'] = $id_agent;
}
if (!empty($string)) {
if (empty($string) === false) {
// Get agents for only the alias.
$filter_alias = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_alias[] = '(alias COLLATE utf8_general_ci LIKE "%'.$string.'%")';
break;
$filter_alias[] = '(alias COLLATE utf8_general_ci LIKE "%'.$string.'%")';
case 'postgresql':
$filter_alias[] = '(alias LIKE \'%'.$string.'%\')';
break;
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
$filter_alias,
$fields
);
case 'oracle':
$filter_alias[] = '(UPPER(alias) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = db_get_all_rows_filter('tmetaconsole_agent', $filter_alias, $fields);
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = [
'id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'alias' => io_safe_output($agent['alias']),
'alias' => io_safe_output($agent['alias']).' ('.io_safe_output($agent['server_name']).')',
'ip' => io_safe_output($agent['direccion']),
'id_server' => $agent['id_server'],
'filter' => 'alias',
@ -293,27 +291,20 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
// Get agents for only the name.
$filter_agents = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_agents[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci LIKE "%'.$string.'%")';
break;
$filter_agents[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci LIKE "%'.$string.'%")';
case 'postgresql':
$filter_agents[] = '(alias NOT LIKE \'%'.$string.'%\' AND nombre LIKE \'%'.$string.'%\')';
break;
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
$filter_agents,
$fields
);
case 'oracle':
$filter_agents[] = '(UPPER(alias) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(nombre) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = db_get_all_rows_filter('tmetaconsole_agent', $filter_agents, $fields);
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = [
'id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'alias' => io_safe_output($agent['alias']),
'alias' => io_safe_output($agent['alias']).' ('.io_safe_output($agent['server_name']).')',
'ip' => io_safe_output($agent['direccion']),
'id_server' => $agent['id_server'],
'filter' => 'agent',
@ -321,29 +312,22 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
}
}
// Get agents for only the address
// Get agents for only the address.
$filter_address = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_address[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion LIKE "%'.$string.'%")';
break;
$filter_address[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion LIKE "%'.$string.'%")';
case 'postgresql':
$filter_address[] = '(alias NOT LIKE \'%'.$string.'%\' AND nombre NOT LIKE \'%'.$string.'%\' AND direccion LIKE \'%'.$string.'%\')';
break;
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
$filter_address,
$fields
);
case 'oracle':
$filter_address[] = '(UPPER(alias) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(nombre) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(direccion) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = db_get_all_rows_filter('tmetaconsole_agent', $filter_address, $fields);
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = [
'id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'alias' => io_safe_output($agent['alias']),
'alias' => io_safe_output($agent['alias']).' ('.io_safe_output($agent['server_name']).')',
'ip' => io_safe_output($agent['direccion']),
'id_server' => $agent['id_server'],
'filter' => 'address',
@ -351,29 +335,22 @@ if ($search_agents && (!is_metaconsole() || $force_local)) {
}
}
// Get agents for only the description
// Get agents for only the description.
$filter_description = $filter;
switch ($config['dbtype']) {
case 'mysql':
$filter_description[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion NOT LIKE "%'.$string.'%" AND comentarios LIKE "%'.$string.'%")';
break;
$filter_description[] = '(alias COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion NOT LIKE "%'.$string.'%" AND comentarios LIKE "%'.$string.'%")';
case 'postgresql':
$filter_description[] = '(alias NOT LIKE \'%'.$string.'%\' AND nombre NOT LIKE \'%'.$string.'%\' AND direccion NOT LIKE \'%'.$string.'%\' AND comentarios LIKE \'%'.$string.'%\')';
break;
$agents = db_get_all_rows_filter(
'tmetaconsole_agent',
$filter_description,
$fields
);
case 'oracle':
$filter_description[] = '(UPPER(alias) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(nombre) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(direccion) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(comentarios) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = db_get_all_rows_filter('tmetaconsole_agent', $filter_description, $fields);
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = [
'id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'alias' => io_safe_output($agent['alias']),
'alias' => io_safe_output($agent['alias']).' ('.io_safe_output($agent['server_name']).')',
'ip' => io_safe_output($agent['direccion']),
'id_server' => $agent['id_server'],
'filter' => 'description',

View File

@ -3002,7 +3002,7 @@ class AgentWizard extends HTML
$newModule = $module;
// Split the values got to obtain the name.
$tmpFirst = explode('.', $value);
$tmpSecond = explode(' ', $tmpFirst[1]);
$tmpSecond = explode(' ', $tmpFirst[(count($tmpFirst) - 1)]);
// Position 0 is the index, Position 3 is the MIB name.
$snmpwalkNames[$tmpSecond[0]] = $tmpSecond[3];
// Perform the operations for get the values.
@ -3011,6 +3011,11 @@ class AgentWizard extends HTML
$currentOid = $oid.'.'.$tmpSecond[0];
$macros['macros'][$oidName] = $currentOid;
$currentOidValue = $this->snmpgetValue($currentOid);
// If for any reason the value comes empty, add 1.
if ($currentOidValue == '') {
$currentOidValue = 1;
}
$thisOperation = preg_replace(
'/'.$oidName.'/',
$currentOidValue,
@ -4566,7 +4571,7 @@ class AgentWizard extends HTML
// Definition object.
$definition = [];
// ifHCInOctets.
// IfHCInOctets.
$moduleName = $name.'ifHCInOctets';
$definition['ifHCInOctets'] = [
'module_name' => $moduleName,
@ -4592,7 +4597,7 @@ class AgentWizard extends HTML
],
];
// ifHCOutOctets.
// IfHCOutOctets.
$moduleName = $name.'ifHCOutOctets';
$definition['ifHCOutOctets'] = [
'module_name' => $moduleName,
@ -4618,7 +4623,7 @@ class AgentWizard extends HTML
],
];
// ifHCInUcastPkts.
// IfHCInUcastPkts.
$moduleName = $name.'ifHCInUcastPkts';
$definition['ifHCInUcastPkts'] = [
'module_name' => $moduleName,
@ -4644,7 +4649,7 @@ class AgentWizard extends HTML
],
];
// ifHCOutUcastPkts.
// IfHCOutUcastPkts.
$moduleName = $name.'ifHCOutUcastPkts';
$definition['ifHCOutUcastPkts'] = [
'module_name' => $moduleName,
@ -4669,7 +4674,7 @@ class AgentWizard extends HTML
'inv_critical' => false,
],
];
// ifHCInNUcastPkts.
// IfHCInNUcastPkts.
$moduleName = $name.'ifHCInNUcastPkts';
$definition['ifHCInNUcastPkts'] = [
'module_name' => $moduleName,
@ -4733,17 +4738,18 @@ class AgentWizard extends HTML
* @param integer|null $type Module type.
*
* @return string
* @throws Exception Handle of unwanted operations.
*/
private function evalOperation(
string $operation,
string $unit='',
?int $type=0
) {
// Avoid non-numeric or arithmetic chars for security reasons.
if (preg_match('/(([^0-9\s\+\-\*\/\(\).,])+)/', $operation) === 1) {
$output = 'ERROR';
} else {
try {
try {
// Avoid non-numeric or arithmetic chars for security reasons.
if (preg_match('/(([^0-9\s\+\-\*\/\(\).,])+)/', $operation) === 1) {
throw new Exception(sprintf(__("The operation '%s' is not permitted. Review for remote components."), $operation));
} else {
// Get the result of the operation and set it.
$output = '';
eval('$output = '.$operation.';');
@ -4753,9 +4759,11 @@ class AgentWizard extends HTML
$unit,
$type
);
} catch (Exception $e) {
$output = 'ERROR';
}
} catch (Exception $e) {
$this->message['type'][] = 'error';
$this->message['message'][] = $e->getMessage();
$this->showMessage();
}
return $output;
@ -5034,15 +5042,13 @@ class AgentWizard extends HTML
var imageInfoModules = $("#image-info-modules-" + blockNumber);
var totalCount = 0;
var markedCount = 0;
var hidden_input = document.getElementById("hidden-module-active-"+switchName[2]+"_"+switchName[3]);
var id_input = hidden_input.id.split("_");
if (type == 'block') {
selectedBlock
.parent()
.removeClass("alpha50");
if (selectedBlock.prop("checked")) {
// Set to active the values of fields.
$("[id*='"+id_input[0]+"']")
$("[id*=hidden-module-active-"+blockNumber+"]")
.each(function(){
$(this).val('1');
});
@ -5054,7 +5060,7 @@ class AgentWizard extends HTML
imageInfoModules.removeClass('hidden');
} else {
// Set to inactive the values of fields.
$("[id*='"+id_input[0]+"']")
$("[id*=hidden-module-active-"+blockNumber+"]")
.each(function(){
$(this).val('0');
});

View File

@ -248,7 +248,7 @@ class CredentialStore extends Wizard
);
} else {
$groups = [ $filter['filter_id_group'] ];
$childrens = groups_get_childrens($id_group, null, true);
$childrens = groups_get_children($id_group, null, true);
if (!empty($childrens)) {
foreach ($childrens as $child) {
$groups[] = (int) $child['id_grupo'];

View File

@ -810,7 +810,7 @@ class NetworkMap
$filter['id_grupo'] = $this->idGroup;
} else {
// Show current group and children.
$childrens = groups_get_childrens($this->idGroup, null, true);
$childrens = groups_get_children($this->idGroup, null, true);
if (!empty($childrens)) {
$childrens = array_keys($childrens);

View File

@ -264,6 +264,7 @@ class TreeService extends Tree
ts.id_agent_module,
ts.name,
ts.name as `alias`,
ts.description as `description`,
ts.id as `rootID`,
"services" as `rootType`,
"services" as `type`,
@ -311,6 +312,7 @@ class TreeService extends Tree
];
$services[$service['id']]['name'] = $service['name'];
$services[$service['id']]['id'] = $service['id'];
$services[$service['id']]['description'] = $service['description'];
$services[$service['id']]['serviceDetail'] = 'index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.(int) $service['id'];
}
@ -512,6 +514,8 @@ class TreeService extends Tree
$tmp['id'] = (int) $item->service()->id();
$tmp['name'] = $item->service()->name();
$tmp['alias'] = $item->service()->name();
$tmp['description'] = $item->service()->description();
$tmp['elementDescription'] = $item->description();
if ($this->connectedToNode === false
&& is_metaconsole() === true
@ -643,6 +647,8 @@ class TreeService extends Tree
ts.id_agent_module,
ts.name,
ts.name as `alias`,
ts.description as `description`,
tse.description as `elementDescription`,
tse.id_service as `rootID`,
"services" as `rootType`,
"services" as `type`,

View File

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

View File

@ -1342,6 +1342,73 @@ function get_priority_name($priority)
}
/**
* Translates status into string.
*
* @param integer $status Agent status.
*
* @return string Translation.
*/
function get_agent_status_string($status)
{
switch ($status) {
case AGENT_STATUS_CRITICAL:
return __('CRITICAL');
case AGENT_STATUS_WARNING:
return __('WARNING');
case AGENT_STATUS_ALERT_FIRED:
return __('ALERT FIRED');
case AGENT_STATUS_NOT_INIT:
return __('NO DATA');
case AGENT_STATUS_NORMAL:
return __('NORMAL');
case AGENT_STATUS_UNKNOWN:
default:
return __('UNKNOWN');
}
}
/**
* Translates status into string.
*
* @param integer $status Module status.
*
* @return string Translation.
*/
function get_module_status_string($status)
{
switch ($status) {
case AGENT_MODULE_STATUS_CRITICAL_BAD:
return __('CRITICAL');
case AGENT_MODULE_STATUS_WARNING_ALERT:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
return __('ALERT FIRED');
case AGENT_MODULE_STATUS_WARNING:
return __('WARNING');
case AGENT_MODULE_STATUS_UNKNOWN:
return __('UNKNOWN');
case AGENT_MODULE_STATUS_NO_DATA:
case AGENT_MODULE_STATUS_NOT_INIT:
return __('NO DATA');
case AGENT_MODULE_STATUS_NORMAL_ALERT:
case AGENT_MODULE_STATUS_NORMAL:
default:
return __('NORMAL');
}
}
/**
* Get priority class (CSS class) from priority value.
*
@ -3753,7 +3820,16 @@ function series_type_graph_array($data, $show_elements_graph)
$name_legend .= __('Unit ').' ';
$name_legend .= $show_elements_graph['unit'].': ';
} else {
$name_legend = $show_elements_graph['labels'][$value['agent_module_id']].': ';
if (isset($show_elements_graph['from_interface']) === true
&& (bool) $show_elements_graph['from_interface'] === true
) {
$label_interfaces = array_flip($show_elements_graph['modules_series']);
$name_legend = $show_elements_graph['labels'][$value['agent_module_id']][$label_interfaces[$value['agent_module_id']]].': ';
} else if (is_array($show_elements_graph['labels'][$value['agent_module_id']]) === true) {
$name_legend = 'Avg: ';
} else {
$name_legend = $show_elements_graph['labels'][$value['agent_module_id']].': ';
}
}
} else {
if (strpos($key, 'baseline') !== false) {

View File

@ -19,17 +19,18 @@
require_once $config['homedir'].'/include/functions.php';
require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_users.php';/**
* Return the agent if exists in the DB.
*
* @param integer $id_agent The agent id.
* @param boolean $show_disabled Show the agent found althought it is disabled. By default false.
* @param boolean $force_meta
*
* @return boolean The result to check if the agent is in the DB.
*/
require_once $config['homedir'].'/include/functions_users.php';
/**
* Return the agent if exists in the DB.
*
* @param integer $id_agent The agent id.
* @param boolean $show_disabled Show the agent found althought it is disabled. By default false.
* @param boolean $force_meta
*
* @return boolean The result to check if the agent is in the DB.
*/
function agents_get_agent($id_agent, $show_disabled=true, $force_meta=false)
{
$agent = db_get_row_filter(
@ -335,6 +336,11 @@ function agents_get_alerts_simple($id_agent=false, $filter='', $options=false, $
// Filter by agents id.
$id_agents_list = implode(',', $id_agent);
if ($id_agents_list === '') {
$id_agents_list = '0';
}
$subQuery .= ' AND id_agente in ('.$id_agents_list.')';
} else if ($id_agent === false || empty($id_agent)) {
if ($allModules) {
@ -1108,11 +1114,14 @@ function agents_get_group_agents(
foreach ($id_group as $parent) {
$id_group = array_merge(
$id_group,
groups_get_id_recursive($parent, false)
groups_get_children_ids($parent, $noACL)
);
}
} else {
$id_group = groups_get_id_recursive($id_group, false);
$id_group = array_merge(
[$id_group],
groups_get_children_ids($id_group, $noACL)
);
}
// Check available groups for target user only if asking for 'All' group.

View File

@ -2871,17 +2871,8 @@ function alerts_get_agent_modules(
);
$agent_modules = db_get_all_rows_sql($sql);
} else {
$groups = groups_get_children($id_grupo, true);
if (empty($groups) === false) {
$groups = array_reduce(
$groups,
function ($carry, $item) {
$carry[] = $item['id_grupo'];
return $carry;
},
[$id_grupo]
);
$groups = groups_get_children_ids($id_grupo, true);
if (count($groups) > 1) {
$sql = sprintf(
'SELECT distinct(atm.id_agent_module)
FROM talert_template_modules atm

View File

@ -1973,7 +1973,7 @@ function api_get_all_agents($thrash1, $thrash2, $other, $returnType)
$ag_groups = $other['data'][1];
// Recursion.
if ($other['data'][6] === '1') {
$ag_groups = groups_get_id_recursive($ag_groups, true);
$ag_groups = groups_get_children_ids($ag_groups, true);
}
$ag_groups = implode(',', (array) $ag_groups);
@ -12513,7 +12513,13 @@ function api_set_create_event($id, $trash1, $other, $returnType)
if ($other['data'][18] != '') {
$values['id_extra'] = $other['data'][18];
$sql_validation = 'SELECT id_evento FROM tevento where estado IN (0,2) and id_extra ="'.$other['data'][18].'";';
if (is_metaconsole()) {
$table_event = 'tmetaconsole_event';
} else {
$table_event = 'tevento';
}
$sql_validation = 'SELECT id_evento FROM '.$table_event.' where estado IN (0,2) and id_extra ="'.$other['data'][18].'";';
$validation = db_get_all_rows_sql($sql_validation);
if ($validation) {
foreach ($validation as $val) {

View File

@ -367,7 +367,7 @@ function agent_counters_custom_fields($filters)
if ($filters['group']) {
// Recursion check acl.
if ($filters['recursion']) {
$recursion_groups = groups_get_id_recursive($filters['group'], true);
$recursion_groups = groups_get_children_ids($filters['group'], true);
if (!users_can_manage_group_all('AR')) {
if (isset($user_groups) && is_array($user_groups)) {
$groups_intersect = array_intersect($user_groups, $recursion_groups);

View File

@ -871,37 +871,23 @@ function events_get_all(
}
$groups = $filter['id_group_filter'];
if (isset($groups) && $groups > 0) {
$propagate = db_get_value(
'propagate',
'tgrupo',
'id_grupo',
$groups
);
if (isset($groups) === true && $groups > 0) {
$children = groups_get_children($groups);
if (!$propagate && isset($groups)) {
$sql_filters[] = sprintf(
' AND (te.id_grupo = %d OR tasg.id_group = %d)',
$groups,
$groups
);
} else {
$children = groups_get_children($groups);
$_groups = [ $groups ];
if (!empty($children)) {
foreach ($children as $child) {
$_groups[] = (int) $child['id_grupo'];
}
$_groups = [ $groups ];
if (empty($children) === false) {
foreach ($children as $child) {
$_groups[] = (int) $child['id_grupo'];
}
$groups = $_groups;
$sql_filters[] = sprintf(
' AND (te.id_grupo IN (%s) OR tasg.id_group IN (%s))',
join(',', $groups),
join(',', $groups)
);
}
$groups = $_groups;
$sql_filters[] = sprintf(
' AND (te.id_grupo IN (%s) OR tasg.id_group IN (%s))',
join(',', $groups),
join(',', $groups)
);
}
// Skip system messages if user is not PM.
@ -1258,7 +1244,11 @@ function events_get_all(
// Order.
$order_by = '';
if (isset($order, $sort_field)) {
$order_by = events_get_sql_order($sort_field, $order);
if (isset($filter['group_rep']) && $filter['group_rep'] == 1) {
$order_by = events_get_sql_order('MAX('.$sort_field.')', $order);
} else {
$order_by = events_get_sql_order($sort_field, $order);
}
}
// Pagination.

View File

@ -266,48 +266,25 @@ function groups_check_used($idGroup)
/**
* Return a array of id_group of childrens (to branches down)
*
* @param integer $parent The id_group parent to search the childrens.
* @param array $groups The groups, its for optimize the querys to DB.
*/
function groups_get_childrens_ids($parent, $groups=null)
{
if (empty($groups)) {
$groups = db_get_all_rows_in_table('tgrupo');
}
$return = '';
foreach ($groups as $key => $group) {
if ($group['id_grupo'] == 0) {
continue;
}
if ($group['parent'] == $parent) {
$return .= $group['id_grupo'].',';
$propagate = db_get_value('propagate', 'tgrupo', 'id_grupo', $group['id_grupo']);
if ($propagate) {
$return .= groups_get_childrens_ids($group['id_grupo']);
}
}
}
return $return;
}
/**
* Return a array of id_group of children of given parent.
* Return a array of id_group of children of given parent INCLUDING PARENT!!.
*
* @param integer $parent The id_grupo parent to search its children.
* @param array $ignorePropagate Ignore propagate.
* @param string $privilege Default privilege.
* @param boolean $selfInclude Include group "id_parent" in return.
*
* @return array Of Groups, children of $parent.
*/
function groups_get_children($parent, $ignorePropagate=false)
{
function groups_get_children(
$parent,
$ignorePropagate=false,
$privilege='AR',
$selfInclude=true
) {
static $groups;
static $user_groups;
if (empty($groups)) {
if (empty($groups) === true) {
$aux_groups = [];
$groups = db_get_all_rows_in_table('tgrupo');
foreach ($groups as $key => $value) {
@ -317,19 +294,45 @@ function groups_get_children($parent, $ignorePropagate=false)
$groups = $aux_groups;
}
if (empty($user_groups) === true) {
$user_groups = users_get_groups(false, $privilege, true);
}
// Admin see always all groups.
$ignorePropagate = users_is_admin() || $ignorePropagate;
// Prepare array.
$return = [];
if ($selfInclude === true) {
if (array_key_exists($parent, $user_groups) === true) {
$return[$parent] = $groups[$parent];
}
}
foreach ($groups as $key => $g) {
if ($g['id_grupo'] == 0) {
continue;
}
if ($ignorePropagate || $parent == 0 || $groups[$parent]['propagate']) {
// IgnorePropagate will be true if user can access child.
$allowed = $ignorePropagate || array_key_exists(
$g['id_grupo'],
$user_groups
);
if ($allowed === true
|| (int) $parent === 0
|| (bool) $groups[$parent]['propagate'] === true
) {
if ($g['parent'] == $parent) {
$return += [$g['id_grupo'] => $g];
if ($g['propagate'] || $ignorePropagate) {
$return += groups_get_children(
$g['id_grupo'],
$ignorePropagate
$ignorePropagate,
$privilege,
$selfInclude
);
}
}
@ -340,38 +343,6 @@ function groups_get_children($parent, $ignorePropagate=false)
}
/**
* @deprecated This is not working. Expects 'propagate' on CHILD not on PARENT!!!
*
* Return a array of id_group of childrens (to branches down)
*
* @param integer $parent The id_group parent to search the childrens.
* @param array $groups The groups, its for optimize the querys to DB.
*/
function groups_get_childrens($parent, $groups=null, $onlyPropagate=false)
{
if (empty($groups)) {
$groups = db_get_all_rows_in_table('tgrupo');
}
$return = [];
foreach ($groups as $key => $group) {
if ($group['id_grupo'] == 0) {
continue;
}
if ($group['propagate'] || $onlyPropagate) {
if ($group['parent'] == $parent) {
$return = ($return + [$group['id_grupo'] => $group] + groups_get_childrens($group['id_grupo'], $groups, $onlyPropagate));
}
}
}
return $return;
}
/**
* Return a array of id_group of parents (to roots up).
*
@ -534,42 +505,30 @@ function groups_get_all($groupWithAgents=false)
/**
* Get all groups recursive from an initial group.
* Get all groups recursive from an initial group INCLUDING PARENT!!.
*
* @param int Id of the parent group
* @param bool Whether to force recursive search ignoring propagation (true) or not (false)
* @param integer $id_parent Id of the parent group.
* @param boolean $ignorePropagate Whether to force recursive search ignoring
* propagation (true) or not (false).
* @param boolean $selfInclude Include group "id_parent" in return.
* @param string $privilege Privilege flag to search for default 'AR'.
*
* @return array with all result groups
* @return array With all result groups.
*/
function groups_get_id_recursive($id_parent, $all=false)
{
$return = [];
function groups_get_children_ids(
$id_parent,
$ignorePropagate=false,
$selfInclude=true,
$privilege='AR'
) {
$return = groups_get_children(
$id_parent,
$ignorePropagate,
$privilege,
$selfInclude
);
$return = array_merge($return, [$id_parent]);
// Check propagate
$propagate = db_get_value_filter('propagate', 'tgrupo', ['id_grupo' => $id_parent]);
if (($propagate == 1) || $all) {
$children = db_get_all_rows_filter('tgrupo', ['parent' => $id_parent, 'disabled' => 0], ['id_grupo']);
if ($children === false) {
$children = [];
} else {
$temp = [];
foreach ($children as $id_children) {
$temp = array_merge($temp, [$id_children['id_grupo']]);
}
$children = $temp;
}
foreach ($children as $id_children) {
$return = array_merge($return, groups_get_id_recursive($id_children, $all));
}
}
return $return;
return array_keys($return);
}

View File

@ -428,7 +428,7 @@ function html_print_select_style($fields, $name, $selected='', $style='', $scrip
* @param boolean $disabled Disabled or enabled.
* @param boolean $style CSS inline style.
* @param string $option_style CSS inline style in array format.
* @param array $id_group Groups to be manually added.
* @param integer $id_group Exclude group branch from id_group.
* @param string $keys_field Field to be used as array key, (id).
* @param boolean $strict_user Strict.
* @param array $delete_groups Remove groups from select.
@ -500,6 +500,15 @@ function html_print_select_groups(
$name = 'group_select'.$idcounter[$name];
}
if ($id_group !== false) {
$children = groups_get_children($id_group);
foreach ($children as $child) {
$delete_groups[] = $child['id_grupo'];
}
$delete_groups[] = $id_group;
}
$fields = [];
// Preload selector.
if (is_array($selected) === false) {
@ -510,7 +519,15 @@ function html_print_select_groups(
}
} else {
foreach ($selected as $k) {
$fields[$k] = groups_get_name($k);
if ($k === null || $k === '') {
continue;
}
$fields[$k] = groups_get_name($k, $returnAllGroup);
}
if (empty($fields) === true && $returnAllGroup) {
$fields[0] = groups_get_name(null, true);
}
}

View File

@ -319,7 +319,7 @@ function networkmap_generate_dot(
if ($dont_show_subgroups) {
$filter['id_grupo'] = $group;
} else {
$childrens = groups_get_childrens($group, null, true);
$childrens = groups_get_children($group, null, true);
if (!empty($childrens)) {
$childrens = array_keys($childrens);

View File

@ -2972,7 +2972,11 @@ function reporting_group_report($report, $content)
$return['data']['count_events'] = count($events);
$return['data']['group_stats'] = reporting_get_group_stats($content['id_group']);
$return['data']['group_stats'] = reporting_get_group_stats(
$content['id_group'],
'AR',
(bool) $content['recursion']
);
if ($config['metaconsole']) {
metaconsole_restore_db();
@ -3912,7 +3916,7 @@ function reporting_alert_report_group($report, $content)
$agent_modules = alerts_get_agent_modules(
$content['id_group'],
$content['recursion']
(((string) $content['id_group'] === '0') ? true : $content['recursion'])
);
if (empty($alerts)) {
@ -4979,6 +4983,16 @@ function reporting_agent_configuration($report, $content)
}
/**
* Report Min, Max and Avg.
*
* @param array $report Info report.
* @param array $content Content report.
* @param string $type Type report.
* @param boolean $pdf Is pdf.
*
* @return array Data draw report.
*/
function reporting_value($report, $content, $type, $pdf=false)
{
global $config;
@ -4993,16 +5007,17 @@ function reporting_value($report, $content, $type, $pdf=false)
$return['type'] = 'min_value';
break;
case 'avg':
$return['type'] = 'avg_value';
break;
case 'sum':
$return['type'] = 'sumatory';
break;
case 'avg':
default:
$return['type'] = 'avg_value';
break;
}
if (empty($content['name'])) {
if (empty($content['name']) === true) {
switch ($type) {
case 'max':
$content['name'] = __('Max. Value');
@ -5012,17 +5027,18 @@ function reporting_value($report, $content, $type, $pdf=false)
$content['name'] = __('Min. Value');
break;
case 'avg':
$content['name'] = __('AVG. Value');
break;
case 'sum':
$content['name'] = __('Summatory');
break;
case 'avg':
default:
$content['name'] = __('AVG. Value');
break;
}
}
if ($config['metaconsole']) {
if (is_metaconsole() === true) {
$id_meta = metaconsole_get_id_server($content['server_name']);
$server = metaconsole_get_connection_by_id($id_meta);
@ -5060,14 +5076,15 @@ function reporting_value($report, $content, $type, $pdf=false)
$return['agent_name'] = $agent_name;
$return['module_name'] = $module_name;
$only_image = false;
if ($pdf) {
$only_image = 1;
$only_image = true;
}
$params = [
'agent_module_id' => $content['id_agent_module'],
'period' => $content['period'],
'width' => '600px',
'width' => '90%',
'pure' => false,
'date' => $report['datetime'],
'only_image' => $only_image,
@ -5086,6 +5103,7 @@ function reporting_value($report, $content, $type, $pdf=false)
case 'max':
case 'min':
case 'avg':
default:
$divisor = get_data_multiplier($unit);
if ($content['lapse_calc'] == 0) {
@ -5107,6 +5125,7 @@ function reporting_value($report, $content, $type, $pdf=false)
break;
case 'avg':
default:
$value = reporting_get_agentmodule_data_average(
$content['id_agent_module'],
$content['period'],
@ -5118,7 +5137,14 @@ function reporting_value($report, $content, $type, $pdf=false)
if (!$config['simple_module_value']) {
$formated_value = $value;
} else {
$formated_value = format_for_graph($value, $config['graph_precision'], '.', ',', $divisor, $unit);
$formated_value = format_for_graph(
$value,
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
}
} else {
$return['visual_format'] = $content['visual_format'];
@ -5126,17 +5152,51 @@ function reporting_value($report, $content, $type, $pdf=false)
switch ($type) {
case 'max':
$params['force_interval'] = 'max_only';
$value = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision'], '.', ',', $divisor, $unit);
$value = format_for_graph(
reporting_get_agentmodule_data_max(
$content['id_agent_module'],
$content['period'],
$report['datetime']
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
case 'min':
$params['force_interval'] = 'min_only';
$value = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision'], '.', ',', $divisor, $unit);
$value = format_for_graph(
reporting_get_agentmodule_data_min(
$content['id_agent_module'],
$content['period'],
$report['datetime']
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
case 'avg':
default:
$params['force_interval'] = 'avg_only';
$value = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['period'], $report['datetime']), $config['graph_precision'], '.', ',', $divisor, $unit);
$value = format_for_graph(
reporting_get_agentmodule_data_average(
$content['id_agent_module'],
$content['period'],
$report['datetime']
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
}
@ -5166,15 +5226,49 @@ function reporting_value($report, $content, $type, $pdf=false)
if ($i > $time_begin['utimestamp']) {
switch ($type) {
case 'max':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_max($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision'], '.', ',', $divisor, $unit);
$row[__('Maximun')] = format_for_graph(
reporting_get_agentmodule_data_max(
$content['id_agent_module'],
$content['lapse'],
($i + $content['lapse'])
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
case 'min':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_min($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision'], '.', ',', $divisor, $unit);
$row[__('Maximun')] = format_for_graph(
reporting_get_agentmodule_data_min(
$content['id_agent_module'],
$content['lapse'],
($i + $content['lapse'])
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
case 'avg':
$row[__('Maximun')] = format_for_graph(reporting_get_agentmodule_data_average($content['id_agent_module'], $content['lapse'], ($i + $content['lapse'])), $config['graph_precision'], '.', ',', $divisor, $unit);
default:
$row[__('Maximun')] = format_for_graph(
reporting_get_agentmodule_data_average(
$content['id_agent_module'],
$content['lapse'],
($i + $content['lapse'])
),
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
break;
}
} else {
@ -5185,7 +5279,7 @@ function reporting_value($report, $content, $type, $pdf=false)
}
}
if ($config['metaconsole']) {
if (is_metaconsole() === true) {
metaconsole_restore_db();
}
@ -5205,7 +5299,14 @@ function reporting_value($report, $content, $type, $pdf=false)
} else {
$divisor = get_data_multiplier($unit);
$formated_value = format_for_graph($value, $config['graph_precision'], '.', ',', $divisor, $unit);
$formated_value = format_for_graph(
$value,
$config['graph_precision'],
'.',
',',
$divisor,
$unit
);
}
break;
}
@ -5215,7 +5316,7 @@ function reporting_value($report, $content, $type, $pdf=false)
'formated_value' => $formated_value,
];
if ($config['metaconsole']) {
if (is_metaconsole() === true) {
metaconsole_restore_db();
}
@ -8969,7 +9070,7 @@ function reporting_get_agents_detailed_event(
*
* @return array Group statistics
*/
function reporting_get_group_stats($id_group=0, $access='AR')
function reporting_get_group_stats($id_group=0, $access='AR', $recursion=true)
{
global $config;
@ -9071,16 +9172,19 @@ function reporting_get_group_stats($id_group=0, $access='AR')
// Store the groups where we are quering
$covered_groups = [];
$group_array = [];
foreach ($id_group as $group) {
$children = groups_get_childrens($group);
// Show empty groups only if they have children with agents
// $group_array = array();
foreach ($children as $sub) {
// If the group is quering previously, we ingore it
if (!in_array($sub['id_grupo'], $covered_groups)) {
array_push($covered_groups, $sub['id_grupo']);
array_push($group_array, $sub['id_grupo']);
foreach ($id_group as $group) {
if ($recursion === true) {
$children = groups_get_children($group);
// Show empty groups only if they have children with agents
// $group_array = array();
foreach ($children as $sub) {
// If the group is quering previously, we ingore it
if (!in_array($sub['id_grupo'], $covered_groups)) {
array_push($covered_groups, $sub['id_grupo']);
array_push($group_array, $sub['id_grupo']);
}
}
}

View File

@ -501,6 +501,8 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
$table1->head[5] = __('Status');
$table1->headstyle = [];
$table1->headstyle[0] = 'text-align: left';
$table1->headstyle[1] = 'text-align: left';
$table1->headstyle[2] = 'text-align: right';
$table1->headstyle[3] = 'text-align: right';
$table1->headstyle[4] = 'text-align: right';
@ -536,6 +538,8 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
$table2->head[6] = __('Downtime');
$table2->headstyle = [];
$table2->headstyle[0] = 'text-align: left';
$table2->headstyle[1] = 'text-align: left';
$table2->headstyle[2] = 'text-align: right';
$table2->headstyle[3] = 'text-align: right';
$table2->headstyle[4] = 'text-align: right';
@ -548,7 +552,7 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
$table3->align = [];
$table3->align[0] = 'left';
$table3->align[1] = 'left';
$table3->align[1] = 'right';
$table3->align[2] = 'right';
$table3->align[3] = 'right';
$table3->align[4] = 'right';
@ -565,6 +569,8 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
$table3->head[4] = __('Checks Unknown');
$table3->headstyle = [];
$table3->headstyle[0] = 'text-align: left';
$table3->headstyle[1] = 'text-align: right';
$table3->headstyle[2] = 'text-align: right';
$table3->headstyle[3] = 'text-align: right';
$table3->headstyle[4] = 'text-align: right';
@ -721,23 +727,23 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
true
);
} else {
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
// $table1->title = $item['title'];
// $table1->titleclass = 'title_table_pdf';
// $table1->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table(
$table1,
true
);
$table2->title = $item['title'];
$table2->titleclass = 'title_table_pdf';
$table2->titlestyle = 'text-align:left;';
// $table2->title = $item['title'];
// $table2->titleclass = 'title_table_pdf';
// $table2->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table(
$table2,
true
);
$table3->title = $item['title'];
$table3->titleclass = 'title_table_pdf';
$table3->titlestyle = 'text-align:left;';
// $table3->title = $item['title'];
// $table3->titleclass = 'title_table_pdf';
// $table3->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table(
$table3,
true
@ -782,9 +788,9 @@ function reporting_html_SLA($table, $item, $mini, $pdf=0)
true
);
} else {
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
// $table1->title = $item['title'];
// $table1->titleclass = 'title_table_pdf';
// $table1->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table(
$table1,
true
@ -2965,8 +2971,26 @@ function reporting_html_min_value(&$table, $item, $mini)
}
function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_empty=false)
{
/**
* Htlm report AVg, min, Max, Only.
*
* @param array $table Table.
* @param array $item Data.
* @param boolean $mini Is mini.
* @param boolean $only_value Only value.
* @param boolean $check_empty Empty.
* @param integer $pdf PDF Mode.
*
* @return string Html output.
*/
function reporting_html_value(
$table,
$item,
$mini,
$only_value=false,
$check_empty=false,
$pdf=0
) {
global $config;
if ($mini) {
@ -2975,8 +2999,12 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
$font_size = $config['font_size_item_report'].'em';
}
if (isset($item['visual_format']) && $item['visual_format'] != 0
&& ($item['type'] == 'max_value' || $item['type'] == 'min_value' || $item['type'] == 'avg_value')
$return_pdf = '';
if (isset($item['visual_format']) === true && $item['visual_format'] != 0
&& ($item['type'] == 'max_value'
|| $item['type'] == 'min_value'
|| $item['type'] == 'avg_value')
) {
$table2 = new stdClass();
$table2->width = '100%';
@ -2998,6 +3026,7 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
break;
case 'avg_value':
default:
$table2->head = [
__('Agent'),
__('Module'),
@ -3025,15 +3054,28 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
$table->colspan[2][0] = 3;
$table->colspan[3][0] = 3;
array_push($table->data, html_print_table($table2, true));
if ($pdf === 0) {
array_push($table->data, html_print_table($table2, true));
} else {
$return_pdf .= html_print_table($table2, true);
}
unset($item['data'][0]);
if ($item['visual_format'] != 1) {
$value = $item['data'][1]['value'];
array_push($table->data, $value);
unset($item['data'][1]);
if ($pdf === 0) {
array_push($table->data, $value);
} else {
$style_div_pdf = 'text-align:center;margin-bottom:20px;';
$return_pdf .= '<div style="'.$style_div_pdf.'">';
$return_pdf .= $value;
$return_pdf .= '</div>';
}
}
unset($item['data'][1]);
if ($item['visual_format'] != 2) {
$table1 = new stdClass();
$table1->width = '100%';
@ -3053,6 +3095,7 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
break;
case 'avg_value':
default:
$table1->head = [
__('Lapse'),
__('Average'),
@ -3061,8 +3104,9 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
}
$table1->data = [];
$row = [];
foreach ($item['data'] as $data) {
if (!is_numeric($data[__('Maximun')])) {
if (is_numeric($data[__('Maximun')]) === false) {
$row = [
$data[__('Lapse')],
$data[__('Maximun')],
@ -3070,7 +3114,12 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
} else {
$row = [
$data[__('Lapse')],
remove_right_zeros(number_format($data[__('Maximun')], $config['graph_precision'])),
remove_right_zeros(
number_format(
$data[__('Maximun')],
$config['graph_precision']
)
),
];
}
@ -3080,10 +3129,22 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
if ($pdf === 0) {
array_push($table->data, html_print_table($table1, true));
} else {
$return_pdf .= html_print_table($table1, true);
}
}
array_push($table->data, html_print_table($table1, true));
if ($pdf !== 0) {
return $return_pdf;
}
} else {
if ($pdf !== 0) {
$table = new stdClass();
$table->width = '100%';
}
$table->colspan['data']['cell'] = 3;
$table->cellstyle['data']['cell'] = 'text-align: left;';
@ -3098,6 +3159,10 @@ function reporting_html_value(&$table, $item, $mini, $only_value=false, $check_e
}
$table->data['data']['cell'] .= '</p>';
if ($pdf !== 0) {
return html_print_table($table, true);
}
}
}
@ -3617,9 +3682,9 @@ function reporting_html_availability($table, $item, $pdf=0)
$data[0] = html_print_table($table1, true);
array_push($table->data, $data);
} else {
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
// $table1->title = $item['title'];
// $table1->titleclass = 'title_table_pdf';
// $table1->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table($table1, true);
}
@ -3629,9 +3694,9 @@ function reporting_html_availability($table, $item, $pdf=0)
$data2[0] = html_print_table($table2, true);
array_push($table->data, $data2);
} else {
$table2->title = $item['title'];
$table2->titleclass = 'title_table_pdf';
$table2->titlestyle = 'text-align:left;';
// $table2->title = $item['title'];
// $table2->titleclass = 'title_table_pdf';
// $table2->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table($table2, true);
}
}
@ -3699,9 +3764,9 @@ function reporting_html_availability($table, $item, $pdf=0)
);
array_push($table->data, $data);
} else {
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
// $table1->title = $item['title'];
// $table1->titleclass = 'title_table_pdf';
// $table1->titlestyle = 'text-align:left;';
$return_pdf .= html_print_table(
$table1,
true

View File

@ -941,7 +941,7 @@ function tags_get_acl_tags_event_condition(
}
// Group condition (The module belongs to an agent of the group X)
// $group_condition = sprintf('id_grupo IN (%s)', implode(',', array_values(groups_get_id_recursive($group_id, true))));.
// $group_condition = sprintf('id_grupo IN (%s)', implode(',', array_values(groups_get_children_ids($group_id, true))));.
$group_condition = '('.$id_grupo_table_pretag.'id_grupo = '.$group_id.' OR '.$alt_id_grupo_table_pretag.'id_group = '.$group_id.')';
// Tags condition (The module has at least one of the restricted tags).
@ -1350,7 +1350,7 @@ function tags_checks_event_acl($id_user, $id_group, $access, $tags=[], $children
foreach ($user_tags as $user_tag) {
$tags_user = $user_tag['tags'];
$id_group_user = $user_tag['id_grupo'];
$childrens = groups_get_childrens($id_group_user, null, true);
$childrens = groups_get_children($id_group_user, null, true);
if (empty($childrens)) {
$group_ids = $id_group_user;
@ -1421,7 +1421,7 @@ function tags_get_agents_counter($id_tag, $groups_and_tags=[], $agent_filter=[],
$tags_arr = explode(',', $tags);
foreach ($tags_arr as $tag) {
if ($tag == $id_tag) {
$hierarchy_groups = groups_get_id_recursive($group_id);
$hierarchy_groups = groups_get_children_ids($group_id);
$groups_id = array_merge($groups_id, $hierarchy_groups);
}
}
@ -1923,7 +1923,7 @@ function tags_get_monitors_counter($id_tag, $groups_and_tags=[], $agent_filter=[
$tags_arr = explode(',', $tags);
foreach ($tags_arr as $tag) {
if ($tag == $id_tag) {
$hierarchy_groups = groups_get_id_recursive($group_id);
$hierarchy_groups = groups_get_children_ids($group_id);
$groups_id = array_merge($groups_id, $hierarchy_groups);
}
}
@ -2219,7 +2219,7 @@ function tags_monitors_fired_alerts($id_tag, $groups_and_tags=[], $id_agente=fal
$tags_arr = explode(',', $tags);
foreach ($tags_arr as $tag) {
if ($tag == $id_tag) {
$hierarchy_groups = groups_get_id_recursive($group_id);
$hierarchy_groups = groups_get_children_ids($group_id);
$groups_id = array_merge($groups_id, $hierarchy_groups);
}
}
@ -2283,7 +2283,7 @@ function tags_get_monitors_alerts($id_tag, $groups_and_tags=[], $id_agente=false
$tags_arr = explode(',', $tags);
foreach ($tags_arr as $tag) {
if ($tag == $id_tag) {
$hierarchy_groups = groups_get_id_recursive($group_id);
$hierarchy_groups = groups_get_children_ids($group_id);
$groups_id = array_merge($groups_id, $hierarchy_groups);
}
}

View File

@ -2024,7 +2024,7 @@ function getServerUrl() {
server_url = get_php_value("homeurl");
} catch (SyntaxError) {
console.warn("Pandora homeurl cannot be found.");
server_url = window.location.origin + "/pandora_console";
server_url = $("#hidden-homeurl").val();
}
return server_url;
}

View File

@ -637,7 +637,20 @@ var TreeController = {
.css("cursor", "pointer");
$content.append($serviceDetailImage);
$content.append(" " + element.name);
if (
typeof element.elementDescription !== "undefined" &&
element.elementDescription != ""
) {
$content.append(" " + element.elementDescription);
} else if (
typeof element.description !== "undefined" &&
element.description != ""
) {
$content.append(" " + element.description);
} else {
$content.append(" " + element.name);
}
// $content.append(" " + element.name);
} else {
$content.remove($node);
}

View File

@ -278,6 +278,11 @@ class TopNEventByGroupWidget extends Widget
];
// Groups.
$selected_groups = [];
if ($values['groupId']) {
$selected_groups = explode(',', $values['groupId'][0]);
}
$inputs[] = [
'label' => __('Groups'),
'arguments' => [
@ -285,7 +290,7 @@ class TopNEventByGroupWidget extends Widget
'name' => 'groupId[]',
'returnAllGroup' => true,
'privilege' => 'AR',
'selected' => explode(',', $values['groupId'][0]),
'selected' => $selected_groups,
'return' => true,
'multiple' => true,
],

View File

@ -277,6 +277,11 @@ class TopNEventByModuleWidget extends Widget
],
];
$selected_groups = [];
if ($values['groupId']) {
$selected_groups = explode(',', $values['groupId'][0]);
}
// Groups.
$inputs[] = [
'label' => __('Groups'),
@ -285,7 +290,7 @@ class TopNEventByModuleWidget extends Widget
'name' => 'groupId[]',
'returnAllGroup' => true,
'privilege' => 'AR',
'selected' => explode(',', $values['groupId'][0]),
'selected' => $selected_groups,
'return' => true,
'multiple' => true,
],

View File

@ -1480,6 +1480,7 @@ table.databox {
padding: 9px 7px;
font-weight: normal;
color: #fff;
text-align: justify;
}
.databox > th * {

View File

@ -11,6 +11,10 @@ ul.wizard {
ul.wizard li {
padding-bottom: 10px;
padding-top: 10px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
}
ul.wizard li > label:not(.p-switch) {

View File

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

View File

@ -546,7 +546,7 @@ if (!empty($search_custom)) {
if ($group_id > 0) {
$groups = [$group_id];
if ($recursion) {
$groups = groups_get_id_recursive($group_id, true);
$groups = groups_get_children_ids($group_id, true);
}
} else {
$groups = [];
@ -576,7 +576,7 @@ if ($strict_user) {
if ($group_id > 0) {
$groups = [$group_id];
if ($recursion) {
$groups = groups_get_id_recursive($group_id, true);
$groups = groups_get_children_ids($group_id, true);
}
$filter['id_group'] = implode(',', $groups);
@ -902,7 +902,6 @@ if (!empty($table->data)) {
if (check_acl($config['id_user'], 0, 'AW') || check_acl($config['id_user'], 0, 'AM')) {
echo '<div style="text-align: right; float: right;">';
echo '<form method="post" action="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente">';
html_print_input_hidden('new_agent', 1);
html_print_submit_button(__('Create agent'), 'crt', false, 'class="sub next"');
echo '</form>';
echo '</div>';
@ -913,7 +912,6 @@ if (!empty($table->data)) {
ui_print_info_message([ 'no_close' => true, 'message' => __('There are no defined agents') ]);
echo '<div style="text-align: right; float: right;">';
echo '<form method="post" action="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente">';
html_print_input_hidden('new_agent', 1);
html_print_submit_button(__('Create agent'), 'crt', false, 'class="sub next"');
echo '</form>';
echo '</div>';

View File

@ -88,7 +88,7 @@ if (is_ajax()) {
if ($get_agents_group_json) {
$id_group = (int) get_parameter('id_group');
$recursion = (bool) get_parameter('recursion');
$recursion = (get_parameter_switch('recursion', 'false') === 'true');
$id_os = get_parameter('id_os', '');
$agent_name = get_parameter('name', '');
@ -146,14 +146,24 @@ if (is_ajax()) {
// Perform search.
$agents = agents_get_group_agents(
// Id_group.
$id_group,
// Search.
$filter,
// Case.
'lower',
false,
// NoACL.
true,
// ChildGroups.
$recursion,
// Serialized.
false,
// Separator.
'|',
$cluster_mode
// Add_alert_bulk_op.
$cluster_mode,
// Force_serialized.
false
);
if (empty($agents)) {

View File

@ -28,7 +28,7 @@ if ($id_group > 0) {
if ($propagate) {
$childrens_ids = [$id_group];
$childrens = groups_get_childrens($id_group, null, true);
$childrens = groups_get_children($id_group, null, true);
if (!empty($childrens)) {
foreach ($childrens as $child) {

View File

@ -358,6 +358,21 @@ if (is_ajax()) {
$tmp->comments = ui_print_comments($tmp->comments);
}
// Show last event.
if (isset($tmp->max_id_evento) && $tmp->max_id_evento !== $tmp->id_evento) {
$max_event = db_get_row_sql(
sprintf(
'SELECT criticity, timestamp FROM %s
WHERE id_evento = %s',
($tmp->meta) ? 'tmetaconsole_event' : 'tevento',
$tmp->max_id_evento
)
);
$tmp->timestamp = $max_event['timestamp'];
$tmp->criticity = $max_event['criticity'];
}
$tmp->agent_name = io_safe_output($tmp->agent_name);
$tmp->ack_utimestamp = ui_print_timestamp(
$tmp->ack_utimestamp,
@ -1935,16 +1950,21 @@ function process_datatables_item(item) {
/* Status */
img = '<?php echo html_print_image('images/star.png', true, ['title' => __('Unknown'), 'class' => 'forced-title']); ?>';
state = '0';
switch (item.estado) {
case "<?php echo EVENT_STATUS_NEW; ?>":
img = '<?php echo html_print_image('images/star.png', true, ['title' => __('New event'), 'class' => 'forced-title']); ?>';
break;
case "<?php echo EVENT_STATUS_VALIDATED; ?>":
state = '1';
img = '<?php echo html_print_image('images/tick.png', true, [ 'title' => __('Event validated'), 'class' => 'forced-title']); ?>';
break;
case "<?php echo EVENT_STATUS_INPROCESS; ?>":
state = '2';
img = '<?php echo html_print_image('images/hourglass.png', true, [ 'title' => __('Event in process'), 'class' => 'forced-title']); ?>';
break;
}
@ -1976,6 +1996,9 @@ function process_datatables_item(item) {
}
item.estado = '<div>';
item.estado += '<span style="display: none">';
item.estado += state;
item.estado += '</span>';
item.estado += img;
item.estado += '</div>';

View File

@ -43,6 +43,8 @@ enterprise_include('index.php');
$url_css = ui_get_full_url('include/styles/visual_maps.css', false, false, false);
echo '<link rel="stylesheet" href="'.$url_css.'" type="text/css" />';
html_print_input_hidden('homeurl', $config['homeurl']);
$url_css_modal = ui_get_full_url('include/styles/register.css', false, false, false);
echo '<link rel="stylesheet" href="'.$url_css_modal.'" type="text/css" />';
// Connection lost alert.

View File

@ -31,6 +31,8 @@ require_once $config['homedir'].'/vendor/autoload.php';
ui_require_css_file('visual_maps');
ui_require_css_file('register');
html_print_input_hidden('homeurl', $config['homeurl']);
// Connection lost alert.
$conn_title = __('Connection with server has been lost');
$conn_text = __('Connection to the server has been lost. Please check your internet connection or contact with administrator.');

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.750
%define release 201021
%define release 201029
# 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.750
%define release 201021
%define release 201029
# 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.750
%define release 201021
%define release 201029
%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.750-201021
Version: 7.0NG.750-201029
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.750-201021"
pandora_version="7.0NG.750-201029"
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.750";
my $pandora_build = "201021";
my $pandora_build = "201029";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash

View File

@ -34,7 +34,7 @@ our @ISA = qw(Exporter);
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.750";
my $pandora_build = "201021";
my $pandora_build = "201029";
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.750
%define release 201021
%define release 201029
Summary: Pandora FMS Server
Name: %{name}

View File

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

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.750"
PI_BUILD="201021"
PI_BUILD="201029"
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.750 PS201021";
my $version = "7.0NG.750 PS201029";
# 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.750 PS201021";
my $version = "7.0NG.750 PS201029";
# save program name for logging
my $progname = basename($0);