Merge remote-tracking branch 'origin/develop' into ent-7049-permitir-seleccionar-a-nivel-de-usuario-si-autenticara-local-o-remotamente-ldap-ad

This commit is contained in:
Calvo 2022-02-02 10:38:53 +01:00
commit f1dca5e525
65 changed files with 1439 additions and 936 deletions

View File

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

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

View File

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

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.759"
PI_BUILD="220131"
PI_BUILD="220202"
OS_NAME=`uname -s`
FORCE=0

View File

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

View File

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

View File

@ -3,5 +3,6 @@ START TRANSACTION;
ALTER TABLE `tpolicy_queue` MODIFY COLUMN `progress` int(10) NOT NULL default '0';
CREATE INDEX `IDX_tservice_element` ON `tservice_element`(`id_service`,`id_agente_modulo`);
ALTER TABLE `tusuario` ADD COLUMN `local_user` tinyint(1) unsigned NOT NULL DEFAULT 0;
ALTER TABLE tevent_response ADD COLUMN display_command tinyint(1) default 0;
COMMIT;

View File

@ -2003,6 +2003,7 @@ ALTER TABLE `tserver` ADD COLUMN `port` int(5) unsigned NOT NULL default 0;
-- ---------------------------------------------------------------------
ALTER TABLE tevent_response ADD COLUMN server_to_exec int(10) unsigned NOT NULL DEFAULT 0;
ALTER TABLE tevent_response ADD COLUMN command_timeout int(5) unsigned NOT NULL DEFAULT 90;
ALTER TABLE tevent_response ADD COLUMN display_command tinyint(1) DEFAULT 0;
-- ---------------------------------------------------------------------
-- Table `tmodule`

View File

@ -135,6 +135,7 @@ $first_create = (int) get_parameter('first_create');
$create_downtime = (int) get_parameter('create_downtime');
$update_downtime = (int) get_parameter('update_downtime');
$edit_downtime = (int) get_parameter('edit_downtime');
$downtime_copy = (int) get_parameter('downtime_copy');
$id_downtime = (int) get_parameter('id_downtime');
$id_agent = (int) get_parameter('id_agent');
@ -420,6 +421,16 @@ if ($create_downtime || $update_downtime) {
}
}
if ($downtime_copy) {
$result = planned_downtimes_copy($id_downtime);
if ($result['id_downtime'] !== false) {
$id_downtime = $result['id_downtime'];
ui_print_success_message($result['success']);
} else {
ui_print_error_message(__($result['error']));
}
}
// Have any data to show ?
if ($id_downtime > 0) {
// Columns of the table tplanned_downtime.
@ -628,20 +639,20 @@ $table->data[5][1] = "
<tr><td>".ui_get_using_system_timezone_warning().'</td></tr>
<tr>
<td>'.__('Type Periodicity:').'&nbsp;'.html_print_select(
[
'weekly' => __('Weekly'),
'monthly' => __('Monthly'),
],
'type_periodicity',
$type_periodicity,
'change_type_periodicity();',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
[
'weekly' => __('Weekly'),
'monthly' => __('Monthly'),
],
'type_periodicity',
$type_periodicity,
'change_type_periodicity();',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
)."</td>
</tr>
<tr>
@ -661,31 +672,31 @@ $table->data[5][1] = "
<tr>
<td>".__('From day:').'</td>
<td>'.html_print_select(
$days,
'periodically_day_from',
$periodically_day_from,
'',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
$days,
'periodically_day_from',
$periodically_day_from,
'',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
).'</td>
<td>'.__('To day:').'</td>
<td>'.html_print_select(
$days,
'periodically_day_to',
$periodically_day_to,
'',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
$days,
'periodically_day_to',
$periodically_day_to,
'',
'',
0,
true,
false,
true,
'',
$disabled_in_execution
).'</td>
<td>'.ui_print_help_tip(__('The end day must be higher than the start day'), true).'</td>
</tr>
@ -694,26 +705,26 @@ $table->data[5][1] = "
<tr>
<td>'.__('From hour:').'</td>
<td>'.html_print_input_text(
'periodically_time_from',
$periodically_time_from,
'',
7,
7,
true,
$disabled_in_execution
'periodically_time_from',
$periodically_time_from,
'',
7,
7,
true,
$disabled_in_execution
).ui_print_help_tip(
__('The end time must be higher than the start time'),
true
).'</td>
<td>'.__('To hour:').'</td>
<td>'.html_print_input_text(
'periodically_time_to',
$periodically_time_to,
'',
7,
7,
true,
$disabled_in_execution
'periodically_time_to',
$periodically_time_to,
'',
7,
7,
true,
$disabled_in_execution
).ui_print_help_tip(
__('The end time must be higher than the start time'),
true
@ -997,13 +1008,13 @@ $table->data['module'][1] = "
<td class='cell_delete_button' style='text-align: right; width:10%;' id=''>".'<a class="link_delete"
onclick="if(!confirm(\''.__('Are you sure?').'\')) return false;"
href="">'.html_print_image(
'images/cross.png',
true,
[
'border' => '0',
'alt' => __('Delete'),
'class' => 'invert_filter',
]
'images/cross.png',
true,
[
'border' => '0',
'alt' => __('Delete'),
'class' => 'invert_filter',
]
).'</a>'."</td>
</tr>
<tr class='datos2' id='add_modules_row'>

View File

@ -405,6 +405,7 @@ else {
if ($write_permisson || $manage_permisson) {
$table->head['stop'] = __('Stop downtime');
$table->head['copy'] = __('Copy');
$table->head['edit'] = __('Edit');
$table->head['delete'] = __('Delete');
}
@ -492,6 +493,8 @@ else {
if (check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW')
|| check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD')
) {
// Copy.
$data['copy'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&downtime_copy=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/copy.png', true, ['title' => __('Copy'), 'class' => 'invert_filter']).'</a>';
// Edit.
$data['edit'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&edit_downtime=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/config.png', true, ['title' => __('Update'), 'class' => 'invert_filter']).'</a>';
// Delete.
@ -504,6 +507,8 @@ else {
if (check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AW')
|| check_acl_restricted_all($config['id_user'], $downtime['id_group'], 'AD')
) {
// Copy.
$data['copy'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&downtime_copy=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/copy.png', true, ['title' => __('Copy'), 'class' => 'invert_filter']).'</a>';
// Edit.
$data['edit'] = '<a href="index.php?sec=extensions&sec2=godmode/agentes/planned_downtime.editor&edit_downtime=1&id_downtime='.$downtime['id'].'">'.html_print_image('images/config.png', true, ['title' => __('Update'), 'class' => 'invert_filter']).'</a>';
// Delete.
@ -513,11 +518,13 @@ else {
$data['delete'] = '';
}
} else {
$data['copy'] = '';
$data['edit'] = '';
$data['delete'] = '';
}
} else {
$data['stop'] = '';
$data['copy'] = '';
$data['edit'] = '';
$data['delete'] = '';
}

View File

@ -197,6 +197,18 @@ $data[0] = '<div id="command_timeout_label" class="labels invisible">'.__('Comma
$data[1] = '<div id="command_timeout_value" class="invisible">'.html_print_input_text('command_timeout', $event_response['command_timeout'], '', 4, 5, true);
$table->data[5] = $data;
$data = [];
$data[0] = __('Display command').ui_print_help_tip(__('If enabled the command will be displayed to any user that can execute this event response'), true);
$data[1] = html_print_checkbox_switch(
'display_command',
1,
$event_response['display_command'],
true
);
$table->data[6] = $data;
if ($event_response_id == 0) {
echo '<form method="post" action="index.php?sec=geventos&sec2=godmode/events/events&section=responses&mode=list&action=create_response&amp;pure='.$config['pure'].'">';
html_print_table($table);

View File

@ -41,6 +41,7 @@ switch ($action) {
$values['modal_height'] = get_parameter('modal_height');
$values['new_window'] = get_parameter('new_window');
$values['params'] = get_parameter('params');
$values['display_command'] = get_parameter('display_command');
$values['server_to_exec'] = get_parameter('server_to_exec');
$values['command_timeout'] = get_parameter('command_timeout', 90);
@ -64,6 +65,7 @@ switch ($action) {
$values['modal_height'] = get_parameter('modal_height');
$values['new_window'] = get_parameter('new_window');
$values['params'] = get_parameter('params');
$values['display_command'] = get_parameter('display_command');
$values['server_to_exec'] = get_parameter('server_to_exec');
$response_id = get_parameter('id_response', 0);
$values['command_timeout'] = get_parameter('command_timeout', '90');

View File

@ -113,6 +113,7 @@ if (is_ajax() === true) {
'|'
);
$force_serialized = (bool) get_parameter('force_serialized', false);
$nodes = (array) get_parameter('nodes', []);
if ((bool) check_acl($config['id_user'], $id_group, 'AR') === false) {
db_pandora_audit(
@ -154,6 +155,10 @@ if (is_ajax() === true) {
$filter[$_sql_post] = '1';
}
if (is_metaconsole() === true && empty($nodes) === false) {
$filter['id_server'] = $nodes;
}
$id_groups_get_agents = $id_group;
if ($id_group == 0 && $privilege != '') {
$groups = users_get_groups($config['id_user'], $privilege, false);

View File

@ -14,7 +14,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -26,10 +26,13 @@
* ============================================================================
*/
use PandoraFMS\Agent;
use PandoraFMS\Enterprise\Metaconsole\Node;
// Begin.
check_login();
if (! check_acl($config['id_user'], 0, 'AW')) {
if ((bool) check_acl($config['id_user'], 0, 'AW') === false) {
db_pandora_audit(
'ACL Violation',
'Trying to access massive agent deletion section'
@ -38,30 +41,63 @@ if (! check_acl($config['id_user'], 0, 'AW')) {
return;
}
require_once 'include/functions_agents.php';
require_once 'include/functions_alerts.php';
require_once 'include/functions_modules.php';
require_once 'include/functions_users.php';
require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_alerts.php';
require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_users.php';
require_once $config['homedir'].'/include/functions_massive_operations.php';
/**
* Bulk operations Delete.
*
* @param array $id_agents Agents to delete.
*
* @return boolean
*/
function process_manage_delete($id_agents)
{
if (empty($id_agents)) {
if (empty($id_agents) === true) {
ui_print_error_message(__('No agents selected'));
return false;
}
$id_agents = (array) $id_agents;
$copy_modules = (bool) get_parameter('copy_modules');
$copy_alerts = (bool) get_parameter('copy_alerts');
$error = false;
$count_deleted = 0;
$agent_id_restore = 0;
foreach ($id_agents as $id_agent) {
$success = agents_delete_agent($id_agent);
if (! $success) {
if (is_metaconsole() === true) {
$array_id = explode('|', $id_agent);
try {
$node = new Node((int) $array_id[0]);
$node->connect();
$agent = new Agent((int) $array_id[1]);
$success = $agent->delete();
$node->disconnect();
$success = agent_delete_from_metaconsole(
$array_id[1],
$array_id[0]
);
} catch (\Exception $e) {
// Unexistent agent.
$success = false;
$node->disconnect();
}
} else {
try {
$agent = new Agent($id_agent);
$success = $agent->delete();
} catch (\Exception $e) {
// Unexistent agent.
$success = false;
}
}
if ($success === false) {
$agent_id_restore = $id_agent;
break;
}
@ -69,11 +105,22 @@ function process_manage_delete($id_agents)
$count_deleted++;
}
if (! $success) {
if ($success === false) {
if (is_metaconsole() === true) {
$array_id = explode('|', $agent_id_restore);
$alias = agents_get_alias_metaconsole(
$array_id[1],
'none',
$array_id[0]
);
} else {
$alias = agents_get_alias($agent_id_restore);
}
ui_print_error_message(
sprintf(
__('There was an error deleting the agent, the operation has been cancelled Could not delete agent %s'),
agents_get_name($agent_id_restore)
$alias
)
);
@ -96,22 +143,32 @@ function process_manage_delete($id_agents)
$id_group = (int) get_parameter('id_group');
$id_agents = get_parameter('id_agents');
$recursion = get_parameter('recursion');
$delete = (bool) get_parameter_post('delete');
if ($delete) {
if ($delete === true) {
$result = process_manage_delete($id_agents);
$info = '{"Agent":"'.implode(',', $id_agents).'"}';
if ($result) {
db_pandora_audit('Massive management', 'Delete agent ', false, false, $info);
if ($result === true) {
db_pandora_audit(
'Massive management',
'Delete agent ',
false,
false,
$info
);
} else {
db_pandora_audit('Massive management', 'Fail try to delete agent', false, false, $info);
db_pandora_audit(
'Massive management',
'Fail try to delete agent',
false,
false,
$info
);
}
}
$groups = users_get_groups();
$table = new stdClass;
$table->id = 'delete_table';
$table->class = 'databox filters';
$table->width = '100%';
@ -177,31 +234,98 @@ $table->data[1][3] = html_print_select(
__('All'),
2,
true,
false,
true,
'',
'',
'',
'',
false,
'width:30%;'
);
$table->data[2][0] = __('Agents');
$table->data[2][0] .= '<span id="agent_loading" class="invisible">';
$table->data[2][0] .= html_print_image('images/spinner.png', true);
$table->data[2][0] .= '</span>';
$table->data[2][1] = html_print_select(
agents_get_group_agents(array_keys(users_get_groups($config['id_user'], 'AW', false)), false, 'none'),
if (is_metaconsole() === true) {
$servers = metaconsole_get_servers();
$server_fields = [];
foreach ($servers as $key => $server) {
$server_fields[$key] = $server['server_name'];
}
$table->data[2][2] = __('Node');
$table->data[2][3] = html_print_select(
$server_fields,
'nodes[]',
0,
false,
'',
'',
true,
true,
true,
'',
false,
'min-width: 500px; max-width: 500px; max-height: 100px',
false,
false,
false,
'',
false,
false,
false,
false,
true,
true,
true
);
}
$table->data[3][0] = __('Agents');
$table->data[3][0] .= '<span id="agent_loading" class="invisible">';
$table->data[3][0] .= html_print_image('images/spinner.png', true);
$table->data[3][0] .= '</span>';
$agents = agents_get_group_agents(
array_keys(users_get_groups($config['id_user'], 'AW', false)),
['disabled' => 2],
'none',
false,
false,
is_metaconsole(),
'|'
);
$table->data[3][1] = html_print_select(
$agents,
'id_agents[]',
0,
false,
'',
'',
true,
true,
true,
'',
false,
'min-width: 500px; max-width: 500px; max-height: 100px',
false,
false,
false,
'',
false,
false,
false,
false,
true,
true,
true
);
echo '<form method="post" id="form_agents" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=delete_agents">';
$url = 'index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=delete_agents';
if (is_metaconsole() === true) {
$url = 'index.php?sec=advanced&sec2=advanced/massive_operations&tab=massive_agents&pure=0&option=delete_agents';
}
echo '<form method="post" id="form_agent" action="'.$url.'">';
html_print_table($table);
if (is_management_allowed() === true) {
if (is_metaconsole() === true || is_management_allowed() === true) {
attachActionButton('delete', 'delete', $table->width);
}
@ -215,25 +339,34 @@ ui_require_jquery_file('pandora.controls');
<script type="text/javascript">
$(document).ready (function () {
// Check Metaconsole.
var metaconsole = '<?php echo (is_metaconsole() === true) ? 1 : 0; ?>';
// Listeners.
var recursion;
$("#checkbox-recursion").click(function () {
recursion = this.checked ? 1 : 0;
$("#id_group").trigger("change");
});
var disabled;
$("#disabled").click(function () {
disabled = this.value;
$("#id_group").trigger("change");
$("#disabled").change(function () {
disabled = this.value;
$("#id_group").trigger("change");
});
$("#id_group").pandoraSelectGroupAgent ({
var nodes;
$("#nodes").change(function () {
nodes = $("#nodes").val();
$("#id_group").trigger("change");
});
$("#status_agents").change(function() {
$("#id_group").trigger("change");
});
// Build data.
var data = {
status_agents: function () {
return $("#status_agents").val();
},
@ -244,16 +377,18 @@ ui_require_jquery_file('pandora.controls');
},
disabled: function() {
return disabled;
}
});
$("#status_agents").change(function() {
$("#id_group").trigger("change");
});
disabled = 2;
},
}
$("#id_group").trigger("change");
if (metaconsole == 1) {
data.serialized = true;
data.serialized_separator = '|';
data.nodes = function() {
return nodes;
};
}
// Change agents.
$("#id_group").pandoraSelectGroupAgent(data);
});
</script>

View File

@ -683,6 +683,7 @@ $(document).ready (function () {
var params = {
"page" : "operation/agentes/ver_agente",
"get_agent_modules_json" : 1,
"truncate_module_names": 1,
"get_distinct_name" : 1,
"indexed" : 0,
"privilege" : "AW",
@ -712,7 +713,7 @@ $(document).ready (function () {
function (data, status) {
jQuery.each (data, function (id, value) {
option = $("<option></option>")
.attr("value", value["nombre"])
.attr({value: value["nombre"], title: value["nombre"]})
.html(value["safe_name"]);
$("#module_name").append (option);
});

View File

@ -38,13 +38,13 @@ if (! check_acl($config['id_user'], 0, 'AW')) {
return;
}
require_once 'include/functions_agents.php';
require_once 'include/functions_ui.php';
require_once 'include/functions_alerts.php';
require_once 'include/functions_modules.php';
require_once 'include/functions_servers.php';
require_once 'include/functions_gis.php';
require_once 'include/functions_users.php';
require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_ui.php';
require_once $config['homedir'].'/include/functions_alerts.php';
require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_servers.php';
require_once $config['homedir'].'/include/functions_gis.php';
require_once $config['homedir'].'/include/functions_users.php';
enterprise_include_once('include/functions_config_agents.php');
if (is_ajax()) {
@ -56,7 +56,7 @@ if (is_ajax()) {
$name = agents_get_name($id_agent);
$agent_md5 = md5($name);
if (file_exists($config['remote_config'].'/md5/'.$agent_md5.'.md5')) {
$cont ++;
$cont++;
}
}
@ -171,7 +171,7 @@ if ($update_agents) {
}
}
// CONF FILE DELETION
// CONF FILE DELETION.
if (isset($values['delete_conf'])) {
unset($values['delete_conf']);
$n_deleted = 0;
@ -339,7 +339,7 @@ if ($update_agents) {
}
$info = [];
// Update Custom Fields
// Update Custom Fields.
foreach ($fields as $field) {
$info[$field['id_field']] = $field['name'];
$value = get_parameter('customvalue_'.$field['id_field']);
@ -354,7 +354,7 @@ if ($update_agents) {
);
if ($old_value === false) {
// Create custom field if not exist
// Create custom field if not exist.
$result = db_process_sql_insert(
'tagent_custom_data',
[
@ -400,8 +400,6 @@ if ($update_agents) {
$id_group = 0;
$groups = users_get_groups();
$table = new StdClass();
$table->id = 'delete_table';
$table->class = 'databox filters';
@ -468,18 +466,22 @@ $table->data[1][3] = html_print_select(
__('All'),
2,
true,
false,
true,
'',
'',
'',
'',
false,
'width:30%;'
);
$table->data[2][0] = __('Agents');
$table->data[2][0] .= '<span id="agent_loading" class="invisible">';
$table->data[2][0] .= html_print_image('images/spinner.png', true);
$table->data[2][0] .= '</span>';
$enabled_agents = agents_get_group_agents(array_keys(users_get_groups($config['id_user'], 'AW', false)), ['disabled' => 0], 'none');
$all_agents = (agents_get_group_agents(array_keys(users_get_groups($config['id_user'], 'AW', false)), ['disabled' => 1], 'none') + $enabled_agents);
$all_agents = agents_get_group_agents(
array_keys(users_get_groups($config['id_user'], 'AW', false)),
['disabled' => 2],
'none'
);
$table->data[2][1] = html_print_select(
$all_agents,
@ -489,10 +491,27 @@ $table->data[2][1] = html_print_select(
'',
'',
true,
true,
true,
'',
false,
'min-width: 500px; max-width: 500px; max-height: 100px',
false,
false,
false,
'',
false,
false,
false,
false,
true,
true,
true
);
echo '<form method="post" id="form_agent" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=edit_agents">';
echo '<form method="post" autocomplete="off" id="form_agent" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&option=edit_agents">';
echo html_print_avoid_autocomplete();
html_print_table($table);
$nombre_agente = '';
@ -522,9 +541,6 @@ $table->size[3] = '35%';
$table->data = [];
$groups = users_get_groups($config['id_user'], 'AW', false);
$agents = agents_get_group_agents(array_keys($groups));
$modules = db_get_all_rows_sql(
'SELECT id_agente_modulo as id_module, nombre as name FROM tagente_modulo
WHERE id_agente = '.$id_parent
@ -609,7 +625,7 @@ $table->data[3][1] .= ' <span id="os_preview">';
$table->data[3][1] .= ui_print_os_icon($id_os, false, true);
$table->data[3][1] .= '</span>';
// Network server
// Network server.
$none = '';
if ($server_name == '' && $id_agente) {
$none = __('None');
@ -631,7 +647,7 @@ $table->data[4][1] = html_print_select(
'width: 150px;'
);
// Description
// Description.
$table->data[5][0] = __('Description');
$table->data[5][1] = html_print_input_text('description', $description, '', 45, 255, true);
@ -662,27 +678,27 @@ $table->style = [];
$table->style[0] = 'font-weight: bold; width: 150px;';
$table->data = [];
// Custom ID
// Custom ID.
$table->data[0][0] = __('Custom ID');
$table->data[0][1] = html_print_input_text('custom_id', $custom_id, '', 16, 255, true);
// Learn mode / Normal mode
// Learn mode / Normal mode.
$table->data[1][0] = __('Module definition');
$table->data[1][1] = __('No change').' '.html_print_radio_button_extended('mode', -1, '', $mode, false, '', 'class="mrgn_right_40px"', true);
$table->data[1][1] .= __('Learning mode').' '.html_print_radio_button_extended('mode', 1, '', $mode, false, '', 'class="mrgn_right_40px"', true);
$table->data[1][1] .= __('Normal mode').' '.html_print_radio_button_extended('mode', 0, '', $mode, false, '', 'class="mrgn_right_40px"', true);
$table->data[1][1] .= __('Autodisable mode').' '.html_print_radio_button_extended('mode', 2, '', $mode, false, '', 'class="mrgn_right_40px"', true);
// Status (Disabled / Enabled)
// Status (Disabled / Enabled).
$table->data[2][0] = __('Status');
$table->data[2][1] = __('No change').' '.html_print_radio_button_extended('disabled', -1, '', $disabled, false, '', 'class="mrgn_right_40px"', true);
$table->data[2][1] .= __('Disabled').' '.ui_print_help_tip(__('If the remote configuration is enabled, it will also go into standby mode when disabling it.'), true).' '.html_print_radio_button_extended('disabled', 1, '', $disabled, false, '', 'class="mrgn_right_40px"', true);
$table->data[2][1] .= __('Active').' '.html_print_radio_button_extended('disabled', 0, '', $disabled, false, '', 'class="mrgn_right_40px"', true);
// Remote configuration
// Remote configuration.
$table->data[3][0] = __('Remote configuration');
// Delete remote configuration
// Delete remote configuration.
$table->data[3][1] = '<div id="delete_configurations" class="invisible">'.__('Delete available remote configurations').' (';
$table->data[3][1] .= '<span id="n_configurations"></span>';
$table->data[3][1] .= ') '.html_print_checkbox_extended('delete_conf', 1, 0, false, '', 'class="mrgn_right_40px"', true).'</div>';
@ -700,7 +716,7 @@ $path = 'images/gis_map/icons/';
// TODO set better method the path
if ($icon_path == '') {
$display_icons = 'none';
// Hack to show no icon. Use any given image to fix not found image errors
// Hack to show no icon. Use any given image to fix not found image errors.
$path_without = 'images/spinner.png';
$path_default = 'images/spinner.png';
$path_ok = 'images/spinner.png';
@ -801,7 +817,8 @@ foreach ($fields as $field) {
}
if ($field['is_password_type']) {
$data[1] = html_print_input_text_extended(
$data[1] = html_print_input_password_avoid_autocomplete();
$data[1] .= html_print_input_text_extended(
'customvalue_'.$field['id_field'],
$custom_value,
'customvalue_'.$field['id_field'],
@ -864,7 +881,6 @@ var limit_parameters_massive = <?php echo $config['limit_parameters_massive']; ?
//Use this function for change 3 icons when change the selectbox
$(document).ready (function () {
var checked = $("#cascade_protection").val();
$("#cascade_protection_module").attr("disabled", 'disabled');
$("#cascade_protection").change(function () {
@ -891,9 +907,9 @@ $(document).ready (function () {
$("#safe_mode_module").attr("disabled", "disabled");
$('#safe_mode_module').empty();
$("#safe_mode_module").append($("<option></option>").attr("value", 'Any').html('Any'));
}
}
});
// Fill modules in Safe Operation Mode.
function refreshSafeModules(){
var idAgents = Array();
@ -907,7 +923,7 @@ $(document).ready (function () {
"id_agent" : idAgents,
"selection_mode": "common"
};
jQuery.post ("ajax.php",
params,
function (data, status) {
@ -926,30 +942,26 @@ $(document).ready (function () {
);
}
$("#form_agent").submit(function() {
var get_parameters_count = window.location.href.slice(
window.location.href.indexOf('?') + 1).split('&').length;
var post_parameters_count = $("#form_agent").serializeArray().length;
var count_parameters =
get_parameters_count + post_parameters_count;
if (count_parameters > limit_parameters_massive) {
alert("<?php echo __('Unsucessful sending the data, please contact with your administrator or make with less elements.'); ?>");
return false;
}
});
var disabled;
$("#disabled").click(function () {
disabled = this.value;
$("#id_group").trigger("change");
$("#disabled").change(function () {
disabled = this.value;
$("#id_group").trigger("change");
});
$('#id_agents').on('change', function() {
var idAgents = Array();
jQuery.each ($("#id_agents option:selected"), function (i, val) {
@ -980,19 +992,19 @@ $(document).ready (function () {
refreshSafeModules();
}
});
$("#id_group").change (function () {
$("#form_agents").attr("style", "display: none");
});
$("select#id_os").pandoraSelectOS ();
var recursion;
$("#checkbox-recursion2").click(function () {
recursion = this.checked ? 1 : 0;
$("#id_group").trigger("change");
});
$("#id_group").pandoraSelectGroupAgent ({
status_agents: function () {
return $("#status_agents").val();
@ -1006,27 +1018,26 @@ $(document).ready (function () {
return disabled;
}
});
$("#status_agents").change(function() {
$("#id_group").trigger("change");
});
disabled = 2;
$("#id_group").trigger("change");
//$("#id_group").trigger("change");
});
function changeIcons() {
var icon = $("#icon_path :selected").val();
$("#icon_without_status").attr("src", "images/spinner.png");
$("#icon_default").attr("src", "images/spinner.png");
$("#icon_ok").attr("src", "images/spinner.png");
$("#icon_bad").attr("src", "images/spinner.png");
$("#icon_warning").attr("src", "images/spinner.png");
if (icon.length == 0) {
$("#icon_without_status").attr("style", "display:none;");
$("#icon_default").attr("style", "display:none;");

View File

@ -1369,6 +1369,7 @@ $(document).ready (function () {
var params = {
"page" : "operation/agentes/ver_agente",
"get_agent_modules_json" : 1,
"truncate_module_names": 1,
"get_distinct_name" : 1,
"indexed" : 0,
"safe_name" : 1
@ -1396,7 +1397,7 @@ $(document).ready (function () {
params,
function (data, status) {
jQuery.each (data, function (id, value) {
option = $("<option></option>").attr("value", value["nombre"]).html(value["safe_name"]);
option = $("<option></option>").attr({value: value["nombre"], title: value["nombre"]}).html(value["safe_name"]);
$("#module_name").append (option);
});
hideSpinner();

View File

@ -14,7 +14,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Copyright (c) 2005-2022 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -29,6 +29,8 @@
// Begin.
check_login();
global $config;
if (! check_acl($config['id_user'], 0, 'AW')) {
db_pandora_audit(
'ACL Violation',
@ -38,16 +40,20 @@ if (! check_acl($config['id_user'], 0, 'AW')) {
return;
}
require_once 'include/functions_agents.php';
require_once 'include/functions_alerts.php';
require_once 'include/functions_modules.php';
require_once 'include/functions_massive_operations.php';
require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_alerts.php';
require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_massive_operations.php';
enterprise_include('godmode/massive/massive_operations.php');
$tab = (string) get_parameter('tab', 'massive_agents');
$option = (string) get_parameter('option');
$url = 'index.php?sec=gmassive&sec2=godmode/massive/massive_operations';
if (is_metaconsole() === true) {
$url = 'index.php?sec=advanced&sec2=advanced/massive_operations&tab=massive_agents&pure=0';
}
$options_alerts = [
'add_alerts' => __('Bulk alert add'),
@ -62,6 +68,11 @@ $options_agents = [
'edit_agents' => __('Bulk agent edit'),
'delete_agents' => __('Bulk agent delete'),
];
if (is_metaconsole() === true) {
$options_agents = [
'delete_agents' => __('Bulk agent delete'),
];
}
if (check_acl($config['id_user'], 0, 'UM')) {
$options_users = [
@ -114,28 +125,31 @@ if ($options_services === ENTERPRISE_NOT_HOOK) {
}
if (in_array($option, array_keys($options_alerts))) {
if (in_array($option, array_keys($options_alerts)) === true) {
$tab = 'massive_alerts';
} else if (in_array($option, array_keys($options_agents))) {
} else if (in_array($option, array_keys($options_agents)) === true) {
$tab = 'massive_agents';
} else if (in_array($option, array_keys($options_users))) {
} else if (in_array($option, array_keys($options_users)) === true) {
$tab = 'massive_users';
} else if (in_array($option, array_keys($options_modules))) {
} else if (in_array($option, array_keys($options_modules)) === true) {
$tab = 'massive_modules';
} else if (in_array($option, array_keys($options_policies))) {
} else if (in_array($option, array_keys($options_policies)) === true) {
$tab = 'massive_policies';
} else if (in_array($option, array_keys($options_snmp))) {
} else if (in_array($option, array_keys($options_snmp)) === true) {
$tab = 'massive_snmp';
} else if (in_array($option, array_keys($options_satellite))) {
} else if (in_array($option, array_keys($options_satellite)) === true) {
$tab = 'massive_satellite';
} else if (in_array($option, array_keys($options_plugins))) {
} else if (in_array($option, array_keys($options_plugins)) === true) {
$tab = 'massive_plugins';
} else if (in_array($option, array_keys($options_services))) {
} else if (in_array($option, array_keys($options_services)) === true) {
$tab = 'massive_services';
}
if ($tab == 'massive_agents' && $option == '') {
if ($tab === 'massive_agents' && empty($option) === true) {
$option = 'edit_agents';
if (is_metaconsole() === true) {
$option = 'delete_agents';
}
}
if ($tab == 'massive_modules' && $option == '') {
@ -212,7 +226,7 @@ if ($option == '') {
}
$alertstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_alerts">'.html_print_image(
'text' => '<a href="'.$url.'&tab=massive_alerts">'.html_print_image(
'images/bell.png',
true,
[
@ -224,7 +238,7 @@ $alertstab = [
];
$userstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_users">'.html_print_image(
'text' => '<a href="'.$url.'&tab=massive_users">'.html_print_image(
'images/user.png',
true,
[
@ -236,7 +250,7 @@ $userstab = [
];
$agentstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_agents">'.html_print_image(
'text' => '<a href="'.$url.'&tab=massive_agents">'.html_print_image(
'images/agent.png',
true,
[
@ -247,138 +261,116 @@ $agentstab = [
'active' => $tab == 'massive_agents',
];
$modulestab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_modules">'.html_print_image(
'images/module.png',
true,
[
'title' => __('Modules operations'),
'class' => 'invert_filter',
]
).'</a>',
'active' => $tab == 'massive_modules',
];
$modulestab = [
'text' => '<a href="'.$url.'&tab=massive_modules">'.html_print_image(
'images/module.png',
true,
[
'title' => __('Modules operations'),
'class' => 'invert_filter',
]
).'</a>',
'active' => $tab == 'massive_modules',
];
$pluginstab = [
'text' => '<a href="index.php?sec=gmassive&sec2=godmode/massive/massive_operations&tab=massive_plugins">'.html_print_image(
'images/plugin.png',
true,
[
'title' => __('Plugins operations'),
'class' => 'invert_filter',
]
).'</a>',
'active' => $tab == 'massive_plugins',
];
$pluginstab = [
'text' => '<a href="'.$url.'&tab=massive_plugins">'.html_print_image(
'images/plugin.png',
true,
[
'title' => __('Plugins operations'),
'class' => 'invert_filter',
]
).'</a>',
'active' => $tab == 'massive_plugins',
];
$policiestab = enterprise_hook('massive_policies_tab');
$policiestab = enterprise_hook('massive_policies_tab');
if ($policiestab == ENTERPRISE_NOT_HOOK) {
$policiestab = '';
}
if ($policiestab == ENTERPRISE_NOT_HOOK) {
$policiestab = '';
}
$snmptab = enterprise_hook('massive_snmp_tab');
$snmptab = enterprise_hook('massive_snmp_tab');
if ($snmptab == ENTERPRISE_NOT_HOOK) {
$snmptab = '';
}
if ($snmptab == ENTERPRISE_NOT_HOOK) {
$snmptab = '';
}
$satellitetab = enterprise_hook('massive_satellite_tab');
$satellitetab = enterprise_hook('massive_satellite_tab');
if ($satellitetab == ENTERPRISE_NOT_HOOK) {
$satellitetab = '';
}
if ($satellitetab == ENTERPRISE_NOT_HOOK) {
$satellitetab = '';
}
$servicestab = enterprise_hook('massive_services_tab');
$servicestab = enterprise_hook('massive_services_tab');
if ($servicestab == ENTERPRISE_NOT_HOOK) {
$servicestab = '';
}
if ($servicestab == ENTERPRISE_NOT_HOOK) {
$servicestab = '';
}
$onheader = [];
$onheader['massive_agents'] = $agentstab;
$onheader['massive_modules'] = $modulestab;
$onheader['massive_plugins'] = $pluginstab;
if (check_acl($config['id_user'], 0, 'UM')) {
$onheader['user_agents'] = $userstab;
}
$onheader = [];
$onheader['massive_agents'] = $agentstab;
$onheader['massive_modules'] = $modulestab;
$onheader['massive_plugins'] = $pluginstab;
if (check_acl($config['id_user'], 0, 'UM')) {
$onheader['user_agents'] = $userstab;
}
$onheader['massive_alerts'] = $alertstab;
$onheader['policies'] = $policiestab;
$onheader['snmp'] = $snmptab;
$onheader['satellite'] = $satellitetab;
$onheader['services'] = $servicestab;
$onheader['massive_alerts'] = $alertstab;
$onheader['policies'] = $policiestab;
$onheader['snmp'] = $snmptab;
$onheader['satellite'] = $satellitetab;
$onheader['services'] = $servicestab;
/*
Hello there! :)
// Header.
if (is_metaconsole() === false) {
ui_print_page_header(
__('Bulk operations').' &raquo; '.$options[$option],
'images/gm_massive_operations.png',
false,
$help_header,
true,
$onheader,
false,
'massivemodal'
);
} else {
massive_meta_print_header();
}
We added some of what seems to be "buggy" messages to the openSource version recently. This is not to force open-source users to move to the enterprise version, this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support. This does not imply open-source version is limited in any way. If you check the recently added code, it contains only warnings and messages, no limitations except one: we removed the option to add custom logo in header. In the Update Manager section, it warns about the 'danger of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that's why someone using a Pandora with 8000 agents should consider asking for support. It's not a joke, we know of many setups with a huge number of agents, and we hate to hear that “its becoming unstable and slow” :(
// Checks if the PHP configuration is correctly.
if ((get_cfg_var('max_execution_time') != 0)
|| (get_cfg_var('max_input_time') != -1)
) {
echo '<div id="notify_conf" class="notify">';
echo __('In order to perform massive operations, PHP needs a correct configuration in timeout parameters. Please, open your PHP configuration file (php.ini) for example: <i>sudo vi /etc/php5/apache2/php.ini;</i><br> And set your timeout parameters to a correct value: <br><i> max_execution_time = 0</i> and <i>max_input_time = -1</i>');
echo '</div>';
}
You can of course remove the warnings, that's why we include the source and do not use any kind of trick. And that's why we added here this comment, to let you know this does not reflect any change in our opensource mentality of does the last 14 years.
// Catch all submit operations in this view to display Wait banner.
$submit_action = get_parameter('go');
$submit_update = get_parameter('updbutton');
$submit_del = get_parameter('del');
$submit_template_disabled = get_parameter('id_alert_template_disabled');
$submit_template_enabled = get_parameter('id_alert_template_enabled');
$submit_template_not_standby = get_parameter('id_alert_template_not_standby');
$submit_template_standby = get_parameter('id_alert_template_standby');
$submit_add = get_parameter('crtbutton');
// Waiting spinner.
ui_print_spinner(__('Loading'));
// Modal for show messages.
html_print_div(
[
'id' => 'massive_modal',
'content' => '',
]
);
*/
// Load common JS files.
ui_require_javascript_file('massive_operations');
ui_print_page_header(
__('Bulk operations').' &raquo; '.$options[$option],
'images/gm_massive_operations.png',
false,
$help_header,
true,
$onheader,
false,
'massivemodal'
);
// Checks if the PHP configuration is correctly.
if ((get_cfg_var('max_execution_time') != 0)
|| (get_cfg_var('max_input_time') != -1)
) {
echo '<div id="notify_conf" class="notify">';
echo __('In order to perform massive operations, PHP needs a correct configuration in timeout parameters. Please, open your PHP configuration file (php.ini) for example: <i>sudo vi /etc/php5/apache2/php.ini;</i><br> And set your timeout parameters to a correct value: <br><i> max_execution_time = 0</i> and <i>max_input_time = -1</i>');
echo '</div>';
}
if ($tab == 'massive_policies' && is_management_allowed() === false) {
if (is_metaconsole() === false) {
$url = '<a target="_blank" href="'.ui_get_meta_url(
'index.php?sec=advanced&sec2=advanced/policymanager'
).'">'.__('metaconsole').'</a>';
} else {
$url = __('any node');
}
ui_print_warning_message(
__(
'This node is configured with centralized mode. All policies information is read only. Go to %s to manage it.',
$url
)
);
return;
}
// Catch all submit operations in this view to display Wait banner.
$submit_action = get_parameter('go');
$submit_update = get_parameter('updbutton');
$submit_del = get_parameter('del');
$submit_template_disabled = get_parameter('id_alert_template_disabled');
$submit_template_enabled = get_parameter('id_alert_template_enabled');
$submit_template_not_standby = get_parameter('id_alert_template_not_standby');
$submit_template_standby = get_parameter('id_alert_template_standby');
$submit_add = get_parameter('crtbutton');
// Waiting spinner.
ui_print_spinner(__('Loading'));
// Modal for show messages.
html_print_div(
[
'id' => 'massive_modal',
'content' => '',
]
);
// Load common JS files.
ui_require_javascript_file('massive_operations');
?>
?>
<script language="javascript" type="text/javascript">
/* <![CDATA[ */
@ -411,25 +403,25 @@ $agentstab = [
</script>
<?php
if (is_management_allowed() === false && $option == 'delete_agents') {
if (is_management_allowed() === false) {
if (is_metaconsole() === false) {
$url = '<a target="_blank" href="'.ui_get_meta_url(
$text_warning = '<a target="_blank" href="'.ui_get_meta_url(
'index.php?sec=monitoring&sec2=monitoring/wizard/wizard'
).'">'.__('metaconsole').'</a>';
} else {
$url = __('any node');
$text_warning = __('any node');
}
ui_print_warning_message(
__(
'This node is configured with centralized mode. To delete agents go to %s',
$url
$text_warning
)
);
}
echo '<br />';
echo '<form method="post" id="form_options" action="index.php?sec=gmassive&sec2=godmode/massive/massive_operations">';
echo '<form method="post" id="form_options" action="'.$url.'">';
echo '<table border="0"><tr><td>';
echo __('Action');
echo '</td><td>';
@ -444,7 +436,7 @@ html_print_select(
false,
false
);
if ($option == 'edit_agents' || $option == 'edit_modules') {
if ($option === 'edit_agents' || $option === 'edit_modules') {
ui_print_help_tip(__('The blank fields will not be updated'));
}
@ -454,64 +446,64 @@ echo '<br />';
switch ($option) {
case 'delete_alerts':
include_once 'godmode/massive/massive_delete_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_delete_alerts.php';
break;
case 'add_alerts':
include_once 'godmode/massive/massive_add_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_add_alerts.php';
break;
case 'delete_action_alerts':
include_once 'godmode/massive/massive_delete_action_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_delete_action_alerts.php';
break;
case 'add_action_alerts':
include_once 'godmode/massive/massive_add_action_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_add_action_alerts.php';
break;
case 'enable_disable_alerts':
include_once 'godmode/massive/massive_enable_disable_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_enable_disable_alerts.php';
break;
case 'standby_alerts':
include_once 'godmode/massive/massive_standby_alerts.php';
include_once $config['homedir'].'/godmode/massive/massive_standby_alerts.php';
break;
case 'add_profiles':
include_once 'godmode/massive/massive_add_profiles.php';
include_once $config['homedir'].'/godmode/massive/massive_add_profiles.php';
break;
case 'delete_profiles':
include_once 'godmode/massive/massive_delete_profiles.php';
include_once $config['homedir'].'/godmode/massive/massive_delete_profiles.php';
break;
case 'delete_agents':
include_once 'godmode/massive/massive_delete_agents.php';
include_once $config['homedir'].'/godmode/massive/massive_delete_agents.php';
break;
case 'edit_agents':
include_once 'godmode/massive/massive_edit_agents.php';
include_once $config['homedir'].'/godmode/massive/massive_edit_agents.php';
break;
case 'delete_modules':
include_once 'godmode/massive/massive_delete_modules.php';
include_once $config['homedir'].'/godmode/massive/massive_delete_modules.php';
break;
case 'edit_modules':
include_once 'godmode/massive/massive_edit_modules.php';
include_once $config['homedir'].'/godmode/massive/massive_edit_modules.php';
break;
case 'copy_modules':
include_once 'godmode/massive/massive_copy_modules.php';
include_once $config['homedir'].'/godmode/massive/massive_copy_modules.php';
break;
case 'edit_plugins':
include_once 'godmode/massive/massive_edit_plugins.php';
include_once $config['homedir'].'/godmode/massive/massive_edit_plugins.php';
break;
default:
if (!enterprise_hook('massive_operations', [$option])) {
include_once 'godmode/massive/massive_config.php';
include_once $config['homedir'].'/godmode/massive/massive_config.php';
}
break;
}

View File

@ -327,59 +327,17 @@ echo '<br>';
// Configuration form.
echo '<span id ="none_text" class="invisible">'.__('None').'</span>';
echo "<form method='post' action='index.php?sec=reporting&sec2=godmode/reporting/graph_builder&tab=graph_editor&add_module=1&edit_graph=1&id=".$id_graph."'>";
echo "<form id='agentmodules' method='post' action='index.php?sec=reporting&sec2=godmode/reporting/graph_builder&tab=graph_editor&add_module=1&edit_graph=1&id=".$id_graph."'>";
echo "<table width='100%' cellpadding='4' cellpadding='4' class='databox filters'>";
echo '<tr>';
echo "<td colspan='1'>".__('Filter group').'</td>';
echo '</tr><tr>';
echo "<td colspan='1'>".html_print_select_groups(
$config['id_user'],
($report_w == true) ? 'RW' : (($report_m == true) ? 'RM' : 'RW'),
true,
'group',
'',
'filterByGroup($(\'#group\').val());',
'',
0,
true
).'</td>';
echo '</tr><tr>';
echo "<td class='top'>".__('Agents').ui_print_help_tip(
__('If you select several agents, only the common modules will be displayed'),
true
).'</td>';
echo '<td></td>';
echo "<td class='top'>".__('Modules').'</td>';
echo '</tr><tr>';
echo '<td class="w50p">'.html_print_select(
agents_get_group_agents(),
'id_agents[]',
0,
false,
'',
'',
true,
true,
true,
'w100p',
false,
''
).'</td>';
echo '<td class="select_module_graph"></td>';
echo '<td class="w50p">'.html_print_select(
[],
'module[]',
0,
false,
'',
0,
true,
true,
true,
'w100p',
false,
''
echo '<td class="w50p pdd_50px" id="select_multiple_modules_filtered">'.html_print_input(
[
'type' => 'select_multiple_modules_filtered',
'uniqId' => 'modules',
'class' => 'flex flex-row',
'searchBar' => true,
]
).'</td>';
echo '</tr><tr>';
echo "<td colspan='3'>";
@ -403,52 +361,34 @@ ui_require_jquery_file('autocomplete');
$(document).ready (function () {
$(document).data('text_for_module', $("#none_text").html());
$("#id_agents").change(agent_changed_by_multiple_agents);
$("#submit-add").click(function() {
$('#module').map(function(){
if ($(this).val() != "0" )
$(this).prop('selected', true);
});
if($('#module')[0].childElementCount == 1 && ($('#module')[0].value == "" || $('#module')[0].value == "0")) {
if($('#filtered-module-modules-modules')[0].value == "" || $('#filtered-module-modules-modules')[0].value == "0") {
alert("<?php echo __('Please, select a module'); ?>");
return false;
}
var modules_selected = $(
"#filtered-module-modules-modules"
).val();
var agents_selected = $(
"#filtered-module-agents-modules"
).val();
$("#agentmodules").submit( function(eventObj) {
$("<input />").attr("type", "hidden")
.attr("value", agents_selected)
.attr("name", "id_agents")
.appendTo("#agentmodules");
$("<input />").attr("type", "hidden")
.attr("value", modules_selected)
.attr("name", "id_modules")
.appendTo("#agentmodules");
return true;
});
});
});
function filterByGroup(idGroup) {
$('#id_agents').empty ();
$('#module').empty();
$("#module").append ($("<option></option>").attr ("value", 0).html ('<?php echo __('None'); ?>'));
jQuery.post ("ajax.php",
{"page" : "godmode/groups/group_list",
"get_group_agents" : 1,
"id_group" : idGroup,
// Add a key prefix to avoid auto sorting in js object conversion
"keys_prefix" : "_"
},
function (data, status) {
i = 0
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
i++;
$("#id_agents").append ($("<option></option>").attr ("value", id).html (value));
});
if (i == 0) {
$("#id_agents").append ($("<option></option>").attr ("value", 0).html ('<?php echo __('None'); ?>'));
}
},
"json"
);
}
function added_ids_sorted_items_to_hidden_input() {
var ids = '';
var first = true;

View File

@ -222,17 +222,14 @@ function add_quotes($item)
if ($add_module === true) {
$id_graph = get_parameter('id');
$id_modules = get_parameter('module');
$id_agents = get_parameter('id_agents');
$id_modules = explode(',', get_parameter('id_modules'));
$id_agents = explode(',', get_parameter('id_agents'));
$weight = get_parameter('weight');
// Id modules has double entities conversion.
// Safe output remove all entities.
io_safe_output_array($id_modules, '');
// We need to put the entities again
// to browse in db.
io_safe_input_array($id_modules);
$id_agent_modules = db_get_all_rows_sql(
'SELECT id_agente_modulo FROM tagente_modulo WHERE id_agente IN ('.implode(',', $id_agents).") AND nombre IN ('".implode("','", $id_modules)."')"

View File

@ -1176,12 +1176,15 @@ if ($dialogue_event_response) {
$prompt = '<br>> ';
switch ($event_response['type']) {
case 'command':
$display_command = (bool) $event_response['display_command'];
$command_str = ($display_command === true) ? $command : '';
if ($massive) {
echo "<div class='left'>";
echo $prompt.sprintf(
'(Event #'.$event_id.') '.__(
'Executing command: %s',
$command
$command_str
)
);
echo '</div><br>';
@ -1214,7 +1217,7 @@ if ($dialogue_event_response) {
} else {
echo "<div class='left'>";
echo $prompt."Executing command: $command";
echo $prompt."Executing command: $command_str";
echo '</div><br>';
echo "<div id='response_loading_command' style='display:none'>".html_print_image('images/spinner.gif', true).'</div>';

View File

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

View File

@ -1221,6 +1221,15 @@ function agents_get_group_agents(
}
}
if ((isset($search['disabled']) === true
&& $search['disabled'] === 2)
|| (isset($filter['disabled']) === true
&& $filter['disabled'] === 2)
) {
unset($search['disabled']);
unset($filter['disabled']);
}
if (isset($search['all_agents'])) {
unset($search['all_agents']);
}
@ -1313,17 +1322,20 @@ function agents_get_group_agents(
}
}
if (is_metaconsole() && isset($search['id_server'])) {
$filter['id_tmetaconsole_setup'] = $search['id_server'];
if (is_metaconsole() === true
&& isset($search['id_server']) === true
&& empty($search['id_server']) === false
) {
$filter['ta.id_tmetaconsole_setup'] = $search['id_server'];
if ($filter['id_tmetaconsole_setup'] == 0) {
// All nodes.
unset($filter['id_tmetaconsole_setup']);
}
unset($search['id_server']);
}
unset($search['id_server']);
if (!$add_alert_bulk_op) {
// Add the rest of the filter from the search array.
foreach ($search as $key => $value) {
@ -1336,7 +1348,7 @@ function agents_get_group_agents(
$filter['order'] = 'alias';
if (is_metaconsole()) {
if (is_metaconsole() === true) {
$table_name = 'tmetaconsole_agent ta LEFT JOIN tmetaconsole_agent_secondary_group tasg ON ta.id_agente = tasg.id_agent';
if ($meta_fields === true) {

View File

@ -17548,6 +17548,35 @@ function api_get_event_mcid($server_id, $console_event_id, $trash2, $returnType)
}
/**
* Return whether or not a node is in centralized mode.
*
* @param [string] $server_id server id (node)
* @param [string] $thrash1 don't use
* @param [string] $thrash2 don't use
* @param [string] $returnType
*
* Example
* api.php?op=get&op2=is_centralized&id=3&apipass=1234&user=admin&pass=pandora
*
* @return void
*/
function api_get_is_centralized($server_id, $thrash1, $thrash2, $returnType)
{
if (is_metaconsole() === true) {
$unified = db_get_value_filter('unified', 'tmetaconsole_setup', ['id' => $server_id]);
if ($unified !== false) {
returnData($returnType, ['type' => 'string', 'data' => $unified]);
} else {
returnData($returnType, ['type' => 'string', 'data' => 'Node with ID '.$server_id.' does not exist']);
}
} else {
returnData($returnType, ['type' => 'string', 'data' => (int) is_centralized()]);
}
}
/**
* Function to set events in progress status.
*

View File

@ -1480,11 +1480,43 @@ function html_print_select_multiple_modules_filtered(array $data):string
'return' => true,
'nothing' => __('All'),
'nothing_value' => 0,
'script' => 'fmModuleChange(\''.$uniqId.'\', '.is_metaconsole().')',
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
]
);
$output .= '</div>';
if (empty($data['searchBar']) === false && $data['searchBar'] === true) {
$output .= '<div>';
$output .= '<div>';
$output .= html_print_input(
[
'type' => 'text',
'name' => 'agent-searchBar-'.$uniqId,
'onKeyUp' => 'searchAgent(\''.$uniqId.'\')',
'placeholder' => __('Type to search agents'),
'return' => true,
]
);
$output .= '</div>';
$output .= '<div>';
$output .= html_print_input(
[
'type' => 'text',
'name' => 'module-searchBar-'.$uniqId,
'onKeyUp' => 'searchModule(\''.$uniqId.'\')',
'return' => true,
'placeholder' => __('Type to search modules'),
]
);
$output .= '</div>';
$output .= '</div>';
}
$output .= '<div>';
// Agent.
$agents = agents_get_group_agents(
@ -1533,7 +1565,7 @@ function html_print_select_multiple_modules_filtered(array $data):string
'return' => true,
'multiple' => true,
'style' => 'min-width: 200px;max-width:200px;',
'script' => 'fmModuleChange(\''.$uniqId.'\', '.is_metaconsole().')',
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
]
);
@ -1550,7 +1582,7 @@ function html_print_select_multiple_modules_filtered(array $data):string
'name' => 'filtered-module-show-common-modules-'.$uniqId,
'selected' => $data['mShowCommonModules'],
'return' => true,
'script' => 'fmModuleChange(\''.$uniqId.'\', '.is_metaconsole().')',
'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')',
]
);
@ -4218,6 +4250,33 @@ function html_html2rgb($htmlcolor)
}
/**
* Avoid autocomplete.
*
* @return void
*/
function html_print_avoid_autocomplete()
{
$output = '';
$output .= '<input type="text" style="display:none">';
$output .= '<input type="password" style="display:none">';
return $output;
}
/**
* Input password avoid autocomplete.
*
* @return void
*/
function html_print_input_password_avoid_autocomplete()
{
$output = '<input type="text" style="opacity: 0;position: absolute; width: 0px;">';
return $output;
}
/**
* Print a magic-ajax control to select the module.
*

View File

@ -890,7 +890,7 @@ function modules_create_agent_module(
} else {
db_process_sql(
'UPDATE tagente
SET total_count=total_count+1, notinit_count=notinit_count+1
SET total_count=total_count+1, notinit_count=notinit_count+1, update_module_count=1
WHERE id_agente='.(int) $id_agent
);
}

View File

@ -919,3 +919,88 @@ function delete_planned_downtimes($filter)
return $return;
}
function planned_downtimes_copy($id_downtime)
{
$planned_downtime = db_get_row_filter(
'tplanned_downtime',
['id' => $id_downtime]
);
$planned_agents = db_get_all_rows_filter(
'tplanned_downtime_agents',
['id_downtime' => $id_downtime]
);
$planned_modules = db_get_all_rows_filter(
'tplanned_downtime_modules',
['id_downtime' => $id_downtime]
);
if ($planned_downtime === false) {
return false;
}
// Unset id.
unset($planned_downtime['id']);
// Change copy name.
$planned_downtime['name'] = __('Copy of ').$planned_downtime['name'];
// Insert new downtime
$result['id_downtime'] = db_process_sql_insert(
'tplanned_downtime',
$planned_downtime
);
if ($result === false) {
$result['error'] = __('Could not be copied');
return $result;
} else {
$result['success'] = __('Successfully copied');
}
if ($planned_agents !== false) {
foreach ($planned_agents as $planned_agent) {
// Unset id.
unset($planned_agent['id']);
// Set id_planned downtime
$planned_agent['id_downtime'] = $result['id_downtime'];
$result['id_agents'][] = db_process_sql_insert(
'tplanned_downtime_agents',
$planned_agent
);
if ($result === false) {
$return['error'] = __('Error adding agents to copied downtime');
break;
}
}
}
if ($result === false) {
return false;
}
if ((bool) $planned_agents['all_modules'] === false
&& $planned_modules !== false
) {
foreach ($planned_modules as $planned_module) {
// Unset id.
unset($planned_module['id']);
// Set id_planned downtime
$planned_module['id_downtime'] = $result['id_downtime'];
$result['id_modules'][] = db_process_sql_insert(
'tplanned_downtime_moduless',
$planned_module
);
if ($result === false) {
$return['error'] = __('Error adding module to copied downtime');
break;
}
}
}
return $result;
}

View File

@ -6868,7 +6868,7 @@ function reporting_advanced_sla(
$min_value_warning = $agentmodule_info['min_warning'];
$max_value_warning = $agentmodule_info['max_warning'];
} else {
$max_values = io_safe_output($agentmodule_info['str_critical']);
$max_value = io_safe_output($agentmodule_info['str_critical']);
$max_value_warning = io_safe_output($agentmodule_info['str_warning']);
}
@ -7412,23 +7412,25 @@ function reporting_advanced_sla(
}
// Take notice of $inverse_interval value.
if ($inverse_interval == 0) {
$sla_check_value = $match;
if ($inverse_interval === 1) {
// Is not inverse.
$sla_check_value = ($match === 1) ? false : true;
} else {
$sla_check_value = !$match;
// Is inverse.
$sla_check_value = ($match === 1) ? true : false;
}
// Warning SLA check.
if (empty($max_value_warning)) {
$match = preg_match('/^'.$max_value_warning.'$/', $current_data['datos']);
$match2 = preg_match('/^'.$max_value_warning.'$/', $current_data['datos']);
} else {
$match = preg_match('/'.$max_value_warning.'/', $current_data['datos']);
$match2 = preg_match('/'.$max_value_warning.'/', $current_data['datos']);
}
if ($inverse_interval_warning == 0) {
$sla_check_value_warning = $match;
$sla_check_value_warning = $match2;
} else {
$sla_check_value_warning = !$match;
$sla_check_value_warning = !$match2;
}
} else {
// OK SLA check.

View File

@ -1,371 +1,355 @@
/* globals jQuery, js_html_entity_decode */
(function($) {
var dummyFunc = function () {
return true;
};
var _pandoraSelectGroupAgent = function (disabled) {
var that = this;
this.defaults = {
agentSelect: "select#id_agent",
status_agents: -1,
recursion: 0,
filter_agents_json: "",
loading: "#agent_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
debug: false,
disabled: disabled || false,
privilege: "",
};
/* public methods */
this.construct = function (settings) {
return this.each (function() {
this.config = {};
this.config = $.extend (this.config, that.defaults, settings);
var config = this.config;
$(this).change (function () {
var $select = $(config.agentSelect).disable ();
$(config.loading).show ();
$("option[value!=0]", $select).remove ();
if (! config.callbackBefore (this))
return;
var dummyFunc = function() {
return true;
};
if (typeof config.recursion === "function") {
// Perform this for those cases where recursion parameter is obtained through a function that returns a variable that is set in the lexical environment where this constructor is called.
var recursion_value = config.recursion();
var _pandoraSelectGroupAgent = function(disabled) {
var that = this;
if (typeof recursion_value === "boolean") {
recursion_value = recursion_value ? 1 : 0;
}
} else {
var recursion_value = config.recursion;
}
this.defaults = {
agentSelect: "select#id_agent",
status_agents: -1,
recursion: 0,
filter_agents_json: "",
loading: "#agent_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
debug: false,
disabled: disabled || false,
privilege: "",
serialized: false,
serialized_separator: "",
nodes: []
};
var opts = {
"page" : "godmode/groups/group_list",
"get_group_agents" : 1,
"id_group" : this.value,
"recursion" : recursion_value,
"filter_agents_json" : config.filter_agents_json,
"disabled" : (typeof config.disabled === "function")
? (config.disabled())
: (config.disabled),
"status_agents" : config.status_agents,
"add_alert_bulk_op" : config.add_alert_bulk_op,
"privilege" : config.privilege,
// Add a key prefix to avoid auto sorting in js object conversion
"keys_prefix" : "_"
};
if(opts['disabled'] == 1 || opts['disabled'] == 0){
jQuery.post ("ajax.php",
opts,
function (data, status) {
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
if (id !== 'keycount') {
config.callbackPre ();
option = $("<option></option>")
.attr ("value", id)
.html (value);
config.callbackPost (id, value, option);
$(config.agentSelect).append (option);
}
});
$(config.loading).hide ();
$select.enable ();
config.callbackAfter ();
},
"json"
);
}
else{
opts['disabled'] = 0;
jQuery.post ("ajax.php",
opts,
function (data, status) {
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
if (id !== 'keycount') {
config.callbackPre ();
option = $("<option></option>")
.attr ("value", id)
.html (value);
config.callbackPost (id, value, option);
$(config.agentSelect).append (option);
}
});
$(config.loading).hide ();
$select.enable ();
config.callbackAfter ();
},
"json"
);
opts['disabled'] = 1;
jQuery.post ("ajax.php",
opts,
function (data, status) {
jQuery.each (data, function (id, value) {
// Remove keys_prefix from the index
id = id.substring(1);
if (id !== 'keycount') {
config.callbackPre ();
option = $("<option></option>")
.attr ("value", id)
.html (value);
config.callbackPost (id, value, option);
$(config.agentSelect).append (option);
}
});
$(config.loading).hide ();
$select.enable ();
config.callbackAfter ();
},
"json"
);
}
});
});
};
};
$.extend ({
pandoraSelectGroupAgent: new _pandoraSelectGroupAgent(),
pandoraSelectGroupAgentDisabled: new _pandoraSelectGroupAgent(true),
});
$.extend ({
pandoraSelectAgentModule: new function() {
this.defaults = {
moduleSelect: "select#id_agent_module",
loading: "#module_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
moduleFilter: {
disabled: 0,
deletePending: 0
},
debug: false
};
/* public methods */
this.construct = function (settings) {
return this.each (function() {
this.config = {};
this.config = $.extend (this.config, $.pandoraSelectAgentModule.defaults, settings);
var config = this.config;
$(this).change (function () {
var $select = $(config.moduleSelect).disable ();
$(config.loading).show ();
$("option[value!=0]", $select).remove ();
if (! config.callbackBefore (this))
return;
jQuery.post ('ajax.php',
{
"page": "operation/agentes/ver_agente",
"get_agent_modules_json": 1,
"id_agent": this.value,
"disabled": config.moduleFilter.disabled,
"delete_pending": config.moduleFilter.deletePending
},
function (data) {
jQuery.each (data, function (i, value) {
config.callbackPre ();
// Get the selected item from hidden field
selected = $('#hidden-'+config.moduleSelect.attr('id')+'_selected').val();
if (selected == i) {
option = $("<option></option>")
.prop ("selected", true)
.attr ("value", value['id_agente_modulo'])
.html (js_html_entity_decode (value['nombre']));
}
else {
option = $("<option></option>")
.attr ("value", value['id_agente_modulo'])
.html (js_html_entity_decode (value['nombre']));
}
config.callbackPost (i, value, option);
$(config.moduleSelect).append (option);
});
$(config.loading).hide ();
$select.enable ();
config.callbackAfter ();
},
"json"
);
});
});
};
}
});
$.extend ({
pandoraSelectAgentAlert: new function() {
this.defaults = {
alertSelect: "select#id_agent_module",
loading: "#alert_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
debug: false
};
/* public methods */
this.construct = function (settings) {
return this.each (function() {
this.config = {};
this.config = $.extend (this.config, $.pandoraSelectAgentAlert.defaults, settings);
var config = this.config;
$(this).change (function () {
var $select = $(config.alertSelect).disable ();
$(config.loading).show ();
$("option[value!=0]", $select).remove ();
if (! config.callbackBefore (this))
return;
jQuery.post ('ajax.php',
{"page": "include/ajax/alert_list.ajax",
"get_agent_alerts_simple": 1,
"id_agent": this.value
},
function (data) {
jQuery.each (data, function (i, value) {
config.callbackPre ();
option = $("<option></option>")
.attr ("value", value['id'])
.html (js_html_entity_decode (value['template']['name']))
.append (" ("+js_html_entity_decode (value['module_name'])+")");
config.callbackPost (i, value, option);
$(config.alertSelect).append (option);
});
$(config.loading).hide ();
$select.enable ();
config.callbackAfter ();
},
"json"
);
});
});
};
}
});
$.extend ({
pandoraSelectOS: new function() {
this.defaults = {
alertSelect: "select#id_os",
spanPreview: "#os_preview",
debug: false
};
/* public methods */
this.construct = function (settings) {
return this.each (function() {
this.config = {};
this.config = $.extend (this.config, $.pandoraSelectOS.defaults, settings);
var config = this.config;
$(this).change (function () {
var id_os = this.value;
var home_url;
if (typeof(settings) == 'undefined')
home_url = './';
else
home_url = settings.home_url;
$(config.spanPreview).fadeOut ('fast', function () {
$("img", config.spanPreview).remove ();
jQuery.post (home_url + 'ajax.php',
{"page": "godmode/setup/setup",
"get_os_icon": 1,
"id_os": id_os
},
function (data) {
$(config.spanPreview)
.append (data)
.fadeIn ('fast');
},
"html"
);
});
});
});
};
}
});
$.extend ({
pandoraSelectGroupIcon: new function() {
this.defaults = {
alertSelect: "select#id_group",
spanPreview: "#group_preview",
debug: false
};
/* public methods */
this.construct = function (settings) {
return this.each (function() {
this.config = {};
this.config = $.extend (this.config, $.pandoraSelectGroupIcon.defaults, settings);
var config = this.config;
$(this).change (function () {
var id_group = this.value;
$(config.spanPreview).fadeOut ('fast', function () {
$("img", config.spanPreview).remove ();
jQuery.post ('ajax.php',
{"page": "godmode/groups/group_list",
"get_group_json": 1,
"id_group": id_group
},
function (data) {
img = $("<img />").attr ("src", "images/groups_small/"+data["icon"]+".png");
$(config.spanPreview)
.append (img)
.fadeIn ('fast');
},
"json"
);
});
});
});
};
}
});
$.fn.extend({
pandoraSelectGroupAgent: $.pandoraSelectGroupAgent.construct,
pandoraSelectGroupAgentDisabled: $.pandoraSelectGroupAgentDisabled.construct,
pandoraSelectAgentModule: $.pandoraSelectAgentModule.construct,
pandoraSelectAgentAlert: $.pandoraSelectAgentAlert.construct,
pandoraSelectOS: $.pandoraSelectOS.construct,
pandoraSelectGroupIcon: $.pandoraSelectGroupIcon.construct
});
}) (jQuery);
/* public methods */
this.construct = function(settings) {
return this.each(function() {
this.config = {};
this.config = $.extend(this.config, that.defaults, settings);
var config = this.config;
$(this).change(function() {
var $select = $(config.agentSelect).disable();
$(config.loading).show();
$("option[value!=0]", $select).remove();
if (!config.callbackBefore(this)) return;
var recursion_value;
if (typeof config.recursion === "function") {
// Perform this for those cases where recursion parameter
// is obtained through a function that returns a variable
// that is set in the lexical environment
// where this constructor is called.
recursion_value = config.recursion();
if (typeof recursion_value === "boolean") {
recursion_value = recursion_value ? 1 : 0;
}
} else {
recursion_value = config.recursion;
}
var opts = {
page: "godmode/groups/group_list",
get_group_agents: 1,
id_group: this.value,
recursion: recursion_value,
filter_agents_json: config.filter_agents_json,
disabled:
typeof config.disabled === "function"
? config.disabled()
: config.disabled,
status_agents: config.status_agents,
add_alert_bulk_op: config.add_alert_bulk_op,
privilege: config.privilege,
// Add a key prefix to avoid auto sorting in js object conversion
keys_prefix: "_",
serialized: config.serialized,
serialized_separator: config.serialized_separator,
nodes:
typeof config.nodes === "function"
? config.nodes()
: config.disabled
};
jQuery.post(
"ajax.php",
opts,
function(data) {
jQuery.each(data, function(id, value) {
// Remove keys_prefix from the index.
id = id.substring(1);
if (id !== "keycount") {
config.callbackPre();
var option = $("<option></option>")
.attr("value", id)
.html(value);
config.callbackPost(id, value, option);
$(config.agentSelect).append(option);
}
});
$(config.loading).hide();
$select.enable();
config.callbackAfter();
},
"json"
);
});
});
};
};
$.extend({
pandoraSelectGroupAgent: new _pandoraSelectGroupAgent(),
pandoraSelectGroupAgentDisabled: new _pandoraSelectGroupAgent(true)
});
$.extend({
pandoraSelectAgentModule: new (function() {
this.defaults = {
moduleSelect: "select#id_agent_module",
loading: "#module_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
moduleFilter: {
disabled: 0,
deletePending: 0
},
debug: false
};
/* public methods */
this.construct = function(settings) {
return this.each(function() {
this.config = {};
this.config = $.extend(
this.config,
$.pandoraSelectAgentModule.defaults,
settings
);
var config = this.config;
$(this).change(function() {
var $select = $(config.moduleSelect).disable();
$(config.loading).show();
$("option[value!=0]", $select).remove();
if (!config.callbackBefore(this)) return;
jQuery.post(
"ajax.php",
{
page: "operation/agentes/ver_agente",
get_agent_modules_json: 1,
id_agent: this.value,
disabled: config.moduleFilter.disabled,
delete_pending: config.moduleFilter.deletePending
},
function(data) {
jQuery.each(data, function(i, value) {
config.callbackPre();
// Get the selected item from hidden field
var selected = $(
"#hidden-" + config.moduleSelect.attr("id") + "_selected"
).val();
var option;
if (selected == i) {
option = $("<option></option>")
.prop("selected", true)
.attr("value", value["id_agente_modulo"])
.html(js_html_entity_decode(value["nombre"]));
} else {
option = $("<option></option>")
.attr("value", value["id_agente_modulo"])
.html(js_html_entity_decode(value["nombre"]));
}
config.callbackPost(i, value, option);
$(config.moduleSelect).append(option);
});
$(config.loading).hide();
$select.enable();
config.callbackAfter();
},
"json"
);
});
});
};
})()
});
$.extend({
pandoraSelectAgentAlert: new (function() {
this.defaults = {
alertSelect: "select#id_agent_module",
loading: "#alert_loading",
callbackBefore: dummyFunc,
callbackPre: dummyFunc,
callbackPost: dummyFunc,
callbackAfter: dummyFunc,
debug: false
};
/* public methods */
this.construct = function(settings) {
return this.each(function() {
this.config = {};
this.config = $.extend(
this.config,
$.pandoraSelectAgentAlert.defaults,
settings
);
var config = this.config;
$(this).change(function() {
var $select = $(config.alertSelect).disable();
$(config.loading).show();
$("option[value!=0]", $select).remove();
if (!config.callbackBefore(this)) return;
jQuery.post(
"ajax.php",
{
page: "include/ajax/alert_list.ajax",
get_agent_alerts_simple: 1,
id_agent: this.value
},
function(data) {
jQuery.each(data, function(i, value) {
config.callbackPre();
var option = $("<option></option>")
.attr("value", value["id"])
.html(js_html_entity_decode(value["template"]["name"]))
.append(
" (" + js_html_entity_decode(value["module_name"]) + ")"
);
config.callbackPost(i, value, option);
$(config.alertSelect).append(option);
});
$(config.loading).hide();
$select.enable();
config.callbackAfter();
},
"json"
);
});
});
};
})()
});
$.extend({
pandoraSelectOS: new (function() {
this.defaults = {
alertSelect: "select#id_os",
spanPreview: "#os_preview",
debug: false
};
/* public methods */
this.construct = function(settings) {
return this.each(function() {
this.config = {};
this.config = $.extend(
this.config,
$.pandoraSelectOS.defaults,
settings
);
var config = this.config;
$(this).change(function() {
var id_os = this.value;
var home_url;
if (typeof settings == "undefined") home_url = "./";
else home_url = settings.home_url;
$(config.spanPreview).fadeOut("fast", function() {
$("img", config.spanPreview).remove();
jQuery.post(
home_url + "ajax.php",
{ page: "godmode/setup/setup", get_os_icon: 1, id_os: id_os },
function(data) {
$(config.spanPreview)
.append(data)
.fadeIn("fast");
},
"html"
);
});
});
});
};
})()
});
$.extend({
pandoraSelectGroupIcon: new (function() {
this.defaults = {
alertSelect: "select#id_group",
spanPreview: "#group_preview",
debug: false
};
/* public methods */
this.construct = function(settings) {
return this.each(function() {
this.config = {};
this.config = $.extend(
this.config,
$.pandoraSelectGroupIcon.defaults,
settings
);
var config = this.config;
$(this).change(function() {
var id_group = this.value;
$(config.spanPreview).fadeOut("fast", function() {
$("img", config.spanPreview).remove();
jQuery.post(
"ajax.php",
{
page: "godmode/groups/group_list",
get_group_json: 1,
id_group: id_group
},
function(data) {
var img = $("<img />").attr(
"src",
"images/groups_small/" + data["icon"] + ".png"
);
$(config.spanPreview)
.append(img)
.fadeIn("fast");
},
"json"
);
});
});
});
};
})()
});
$.fn.extend({
pandoraSelectGroupAgent: $.pandoraSelectGroupAgent.construct,
pandoraSelectGroupAgentDisabled:
$.pandoraSelectGroupAgentDisabled.construct,
pandoraSelectAgentModule: $.pandoraSelectAgentModule.construct,
pandoraSelectAgentAlert: $.pandoraSelectAgentAlert.construct,
pandoraSelectOS: $.pandoraSelectOS.construct,
pandoraSelectGroupIcon: $.pandoraSelectGroupIcon.construct
});
})(jQuery);

View File

@ -1,4 +1,4 @@
/** global $ */
/* global $, confirmDialog, showSpinner, hideSpinner */
function massiveOperationValidation(contents, totalCount, limit, thisForm) {
var output = false;

View File

@ -231,7 +231,7 @@ function fmModuleChange(uniqId, isMeta) {
if (data) {
jQuery.each(data, function(id, value) {
var option = $("<option></option>");
if (isMeta === true) {
if (isMeta === 1) {
option
.attr(
"value",
@ -251,3 +251,50 @@ function fmModuleChange(uniqId, isMeta) {
"json"
);
}
// Function to search in agents select.
function searchAgent(uniqId) {
// Declare variables
var agents = $("#filtered-module-agents-" + uniqId + " option");
// Loop through all list items, and hide those who don't match the search query
agents.each(function() {
var filter = $("#text-agent-searchBar-modules")
.val()
.toUpperCase();
if (
$(this)
.text()
.toUpperCase()
.indexOf(filter) > -1
) {
$(this).show();
} else {
$(this).hide();
}
});
}
// Function to search in modules select.
function searchModule(uniqId) {
// Declare variables
var modules = $("#filtered-module-modules-" + uniqId + " option");
// Loop through all list items, and hide those who don't match the search query
modules.each(function() {
var filter = $("#text-module-searchBar-modules")
.val()
.toUpperCase();
if (
$(this)
.text()
.toUpperCase()
.indexOf(filter) > -1
) {
$(this).show();
} else {
$(this).hide();
}
});
}

View File

@ -88,6 +88,23 @@ function js_html_entity_decode(str) {
return str2;
}
function truncate_string(str, str_length, separator) {
if (str.length <= str_length) {
return str;
}
separator = separator || "...";
var separator_length = separator.length,
chars_to_show = str_length - separator_length,
front_chars = Math.ceil(chars_to_show / 2),
tail_chars = Math.floor(chars_to_show / 2);
return (
str.substr(0, front_chars) + separator + str.substr(str.length - tail_chars)
);
}
/**
* Function to search an element in an array.
*
@ -554,6 +571,7 @@ function module_changed_by_multiple_modules(event, id_module, selected) {
{
page: "operation/agentes/ver_agente",
get_agents_json_for_multiple_modules: 1,
truncate_agent_names: 1,
status_module: status_module,
"module_name[]": idModules,
selection_mode: selection_mode,
@ -619,8 +637,8 @@ function module_changed_by_multiple_modules(event, id_module, selected) {
s = js_html_entity_decode(val);
$("#agents").append(
$("<option></option>")
.html(s)
.attr("value", i)
.html(truncate_string(s, 30, "..."))
.attr({ value: i, title: s })
);
$("#agents").fadeIn("normal");
});

View File

@ -630,7 +630,7 @@ function configure_modules_form() {
moduletype = $("#hidden-moduletype").val();
if (moduletype == 5) {
if ($("#prediction_module").val() == null) {
if ($("#id_modules").val() === null) {
$("#prediction_module").focus();
$("#message").showMessage(no_prediction_module_lang);
return false;

View File

@ -590,15 +590,19 @@ class Agent extends Entity
/**
* Delete agent from db.
*
* @return void
* @return boolean
*/
public function delete()
{
// This function also mark modules for deletion.
\agents_delete_agent(
$res = (bool) \agents_delete_agent(
$this->fields['id_agente']
);
if ($res === false) {
return false;
}
// Delete modules.
if ($this->modules !== null) {
foreach ($this->modules as $module) {
@ -608,6 +612,8 @@ class Agent extends Entity
unset($this->fields);
unset($this->modules);
return $res;
}

View File

@ -406,7 +406,8 @@ final class Group extends Item
$html .= '<div class="group-item-title">';
$html .= $groupName;
$html .= '</div>';
$html .= '<div class="group-item-info" style="padding:0%;width: 96%">';
$html .= '<div class="group-item-info" style="padding:0%;width: 100%;justify-content:center">';
$html .= '<div style="width:90%;display:flex;flex-direction:row;flex-wrap:wrap;padding:1%">';
// Critical.
$html .= '<div class="group-item-info-container">';
$html .= '<div class="value-style red_background">';
@ -436,6 +437,7 @@ final class Group extends Item
$html .= '<div class="name-style">'.__('Unknown').'</div>';
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';

View File

@ -8469,3 +8469,40 @@ div#err_msg_centralised {
display: flex;
flex-direction: row;
}
#select_multiple_modules_filtered > div {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 5px;
flex-wrap: wrap;
flex: 1 1 320px;
}
#select_multiple_modules_filtered > div > div {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
flex-wrap: wrap;
width: 250px;
}
#select_multiple_modules_filtered > div > div > * {
flex: auto;
}
#select_multiple_modules_filtered > div > div > select {
min-width: 250px !important;
}
#select_multiple_modules_filtered > div > div > .select2 {
min-width: 250px !important;
}
#select_multiple_modules_filtered > div > div > input {
max-width: 250px;
width: 95%;
height: 95%;
}

View File

@ -491,6 +491,7 @@ li#li-timeZone-item > select:not(:first-child) {
flex-direction: row;
border-radius: 2px;
max-height: 50px;
min-height: 35px;
margin: 1%;
}
@ -498,7 +499,7 @@ li#li-timeZone-item > select:not(:first-child) {
flex: 1;
color: #fff;
font-size: 100%;
padding: 5%;
padding: 0%;
width: 100%;
display: flex;
flex-direction: row;
@ -511,7 +512,7 @@ li#li-timeZone-item > select:not(:first-child) {
background-color: white;
color: black;
font-size: 100%;
padding: 5%;
padding: 0%;
width: 100%;
height: 100%;
display: flex;
@ -695,6 +696,25 @@ div.module-graph .gauge_d3_class {
color: #000;
}
.orange_background {
background: #ffa631;
}
.red_background {
background: #e63c52;
}
.yellow_background {
background: #f3b200;
}
.grey_background {
background: #b2b2b2;
}
.blue_background {
background: #4a83f3;
}
.green_background {
background: #82b92e;
}
/* Styles for the solid icons */
.fa {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

@ -353,6 +353,8 @@ if (is_ajax()) {
$selection_mode = get_parameter('selection_mode', 'common') == 'all';
$status_modulo = (int) get_parameter('status_module', -1);
$tags_selected = (array) get_parameter('tags', []);
$truncate_agent_names = (bool) get_parameter('truncate_agent_names');
$names = select_agents_for_module_group(
$nameModules,
$selection_mode,
@ -790,6 +792,8 @@ if (is_ajax()) {
$safe_name = (bool) get_parameter('safe_name', false);
$truncate_module_names = (bool) get_parameter('truncate_module_names');
// Filter.
$filter = [];
if ($disabled !== -1) {
@ -945,6 +949,16 @@ if (is_ajax()) {
$agent_modules = $new_elements;
}
if ($truncate_module_names === true) {
$agent_modules = array_map(
function ($item) {
$item['safe_name'] = ui_print_truncate_text($item['safe_name'], 'module_medium');
return $item;
},
$agent_modules
);
}
echo json_encode($agent_modules);
return;

View File

@ -215,7 +215,7 @@ $agent_status_arr[AGENT_STATUS_NOT_INIT] = __('Not init');
$row = [];
$row[] = __('Search group');
$row[] = html_print_input_text('search_group', $search_group, '', is_metaconsole() ? 50 : 25, 30, true);
$row[] = html_print_input_text('search_group', $search_group, '', 25, 30, true);
if (is_metaconsole()) {
$row[] = __('Show not init modules');
@ -228,11 +228,16 @@ $table->data[] = $row;
$row = [];
$row[] = __('Search agent');
$row[] = html_print_input_text('search_agent', $search_agent, '', is_metaconsole() ? 50 : 25, 30, true);
$row[] = html_print_input_text('search_agent', $search_agent, '', 25, 30, true);
$row[] = __('Show not init agents');
$row[] = html_print_checkbox('show_not_init_agents', $show_not_init_agents, true, true);
if (is_metaconsole() === true) {
$table->data[] = $row;
$row = [];
}
$row[] = __('Show full hirearchy');
$row[] = html_print_checkbox('serach_hirearchy', $serach_hirearchy, false, true);
@ -241,8 +246,12 @@ $row[] = html_print_select($agent_status_arr, 'status_agent', $status_agent, '',
$row[] = html_print_input_hidden('show_not_init_modules_hidden', $show_not_init_modules, true);
// Button
if (is_metaconsole() === true) {
$table->data[] = $row;
$row = [];
}
$row[] = html_print_submit_button(__('Filter'), 'uptbutton', false, 'class="sub search"', true);
$table->rowspan[][(count($row) - 1)] = 2;
$table->data[] = $row;

View File

@ -556,13 +556,13 @@ $table_ichanges = '<div class="autorefresh_select">
</div>
<div class="autorefresh_select_arrows" style="display:grid">
<a href="javascript:">'.html_print_image(
'images/darrowright_green.png',
true,
[
'id' => 'right_autorefreshlist',
'alt' => __('Push selected pages into autorefresh list'),
'title' => __('Push selected pages into autorefresh list'),
]
'images/darrowright_green.png',
true,
[
'id' => 'right_autorefreshlist',
'alt' => __('Push selected pages into autorefresh list'),
'title' => __('Push selected pages into autorefresh list'),
]
).'</a>
<a href="javascript:">'.html_print_image(
'images/darrowleft_green.png',

View File

@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.759
%define release 220131
%define release 220202
# 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.759
%define release 220131
%define release 220202
# 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.759
%define release 220131
%define release 220202
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2

View File

@ -2227,6 +2227,7 @@ CREATE TABLE IF NOT EXISTS `tevent_response` (
`params` TEXT NOT NULL,
`server_to_exec` int(10) unsigned NOT NULL DEFAULT 0,
`command_timeout` int(5) unsigned NOT NULL DEFAULT 90,
`display_command` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1186,7 +1186,7 @@ INSERT INTO `tagent_custom_fields` VALUES (1,'Serial&#x20;Number',0,0,''),(2,'De
INSERT INTO `ttag` VALUES (1,'network','Network&#x20;equipment','http://artica.es','','',''),(2,'critical','Critical&#x20;modules','','','',''),(3,'dmz','DMZ&#x20;Network&#x20;Zone','','','',''),(4,'performance','Performance&#x20;anda&#x20;capacity&#x20;modules','','','',''),(5,'configuration','','','','','');
INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#x20;the&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_agent_address_','command',0,620,500,0,'',0,90),(3,'Create&#x20;incident&#x20;from&#x20;event','Create&#x20;a&#x20;incident&#x20;from&#x20;the&#x20;event&#x20;with&#x20;the&#x20;standard&#x20;incidents&#x20;system&#x20;of&#x20;Pandora&#x20;FMS','index.php?sec=workspace&amp;sec2=operation/incidents/incident_detail&amp;insert_form&amp;from_event=_event_id_','url',0,0,0,1,'',0,90),(5,'Restart&#x20;agent','Restart&#x20;the&#x20;agent&#x20;with&#x20;using&#x20;UDP&#x20;protocol.&#x0d;&#x0a;&#x0d;&#x0a;To&#x20;use&#x20;this&#x20;response&#x20;is&#x20;necessary&#x20;to&#x20;have&#x20;installed&#x20;Pandora&#x20;FMS&#x20;server&#x20;and&#x20;console&#x20;in&#x20;the&#x20;same&#x20;machine.','/usr/share/pandora_server/util/udp_client.pl&#x20;_agent_address_&#x20;41122&#x20;&quot;REFRESH&#x20;AGENT&quot;','command',0,620,500,0,'',0,90),(6,'Ping&#x20;to&#x20;module&#x20;agent&#x20;host','Ping&#x20;to&#x20;the&#x20;module&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_module_address_','command',0,620,500,0,'',0,90);
INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#x20;the&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_agent_address_','command',0,620,500,0,'',0,90,0),(3,'Create&#x20;incident&#x20;from&#x20;event','Create&#x20;a&#x20;incident&#x20;from&#x20;the&#x20;event&#x20;with&#x20;the&#x20;standard&#x20;incidents&#x20;system&#x20;of&#x20;Pandora&#x20;FMS','index.php?sec=workspace&amp;sec2=operation/incidents/incident_detail&amp;insert_form&amp;from_event=_event_id_','url',0,0,0,1,'',0,90,0),(5,'Restart&#x20;agent','Restart&#x20;the&#x20;agent&#x20;with&#x20;using&#x20;UDP&#x20;protocol.&#x0d;&#x0a;&#x0d;&#x0a;To&#x20;use&#x20;this&#x20;response&#x20;is&#x20;necessary&#x20;to&#x20;have&#x20;installed&#x20;Pandora&#x20;FMS&#x20;server&#x20;and&#x20;console&#x20;in&#x20;the&#x20;same&#x20;machine.','/usr/share/pandora_server/util/udp_client.pl&#x20;_agent_address_&#x20;41122&#x20;&quot;REFRESH&#x20;AGENT&quot;','command',0,620,500,0,'',0,90,0),(6,'Ping&#x20;to&#x20;module&#x20;agent&#x20;host','Ping&#x20;to&#x20;the&#x20;module&#x20;agent&#x20;host','ping&#x20;-c&#x20;5&#x20;_module_address_','command',0,620,500,0,'',0,90,0);
INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', '');

View File

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

View File

@ -46,7 +46,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.759";
my $pandora_build = "220131";
my $pandora_build = "220202";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash

View File

@ -1096,12 +1096,12 @@ sub pandora_execute_action ($$$$$$$$$;$$) {
my ($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field9, $field10);
my ($field11, $field12, $field13, $field14, $field15, $field16, $field17, $field18, $field19, $field20);
# Check for empty alert fields and assign command field.
my $index = 1;
my @command_fields = split(/,|\[|\]/, $action->{'fields_values'});
foreach my $field (@command_fields) {
# Check for empty alert fields and assign command field.
my $index = 1;
my @command_fields = split(/,|\[|\]/, $action->{'fields_values'});
foreach my $field (@command_fields) {
unless (defined($action->{'field'.$index}) && $action->{'field'.$index} ne "") {
$action->{'field'.$index} = defined($field) ? $field : "" ;
$action->{'field'.$index} = defined($field) ? $field : "" ;
}
}
@ -1262,6 +1262,13 @@ sub pandora_execute_action ($$$$$$$$$;$$) {
$group = get_db_single_row ($dbh, 'SELECT * FROM tgrupo WHERE id_grupo = ?', $agent->{'id_grupo'});
}
my $agent_status;
if(ref ($module) eq "HASH") {
$agent_status = get_db_single_row ($dbh, 'SELECT * FROM tagente_estado WHERE id_agente_modulo = ?', $module->{'id_agente_modulo'});
}
my $time_down = (defined ($agent_status)) ? (time() - $agent_status->{'last_status_change'}) : undef;
if (is_numeric($data)) {
my $data_precision = $pa_config->{'graph_precision'};
$data = sprintf("%.$data_precision" . "f", $data);
@ -1269,94 +1276,100 @@ sub pandora_execute_action ($$$$$$$$$;$$) {
$data =~ s/\.+$//;
}
# Thanks to people of Cordoba univ. for the patch for adding module and
# Thanks to people of Cordoba univ. for the patch for adding module and
# id_agent macros to the alert.
# TODO: Reuse queries. For example, tag data can be extracted with a single query.
# Alert macros
my %macros = (_field1_ => $field1,
_field2_ => $field2,
_field3_ => $field3,
_field4_ => $field4,
_field5_ => $field5,
_field6_ => $field6,
_field7_ => $field7,
_field8_ => $field8,
_field9_ => $field9,
_field10_ => $field10,
_field11_ => $field11,
_field12_ => $field12,
_field13_ => $field13,
_field14_ => $field14,
_field15_ => $field15,
_field16_ => $field16,
_field17_ => $field17,
_field18_ => $field18,
_field19_ => $field19,
_field20_ => $field20,
_agentname_ => (defined ($agent)) ? $agent->{'nombre'} : '',
_agentalias_ => (defined ($agent)) ? $agent->{'alias'} : '',
_agent_ => (defined ($agent)) ? ($agent->{'alias'} ? $agent->{'alias'} : $agent->{'nombre'}) : '',
_agentcustomid_ => (defined ($agent)) ? $agent->{'custom_id'} : '',
'_agentcustomfield_\d+_' => undef,
_agentdescription_ => (defined ($agent)) ? $agent->{'comentarios'} : '',
_agentgroup_ => (defined ($group)) ? $group->{'nombre'} : '',
_agentstatus_ => undef,
_agentos_ => (defined ($agent)) ? get_os_name($dbh, $agent->{'id_os'}) : '',
_address_ => (defined ($agent)) ? $agent->{'direccion'} : '',
_timestamp_ => (defined($timestamp)) ? $timestamp : strftime ("%Y-%m-%d %H:%M:%S", localtime()),
_timezone_ => strftime ("%Z", localtime()),
_data_ => $data,
_prevdata_ => undef,
_homeurl_ => $pa_config->{'public_url'},
_alert_name_ => $alert->{'name'},
_alert_description_ => $alert->{'description'},
_alert_threshold_ => $alert->{'time_threshold'},
_alert_times_fired_ => $alert->{'times_fired'},
_alert_priority_ => $alert->{'priority'},
_alert_text_severity_ => get_priority_name($alert->{'priority'}),
_alert_critical_instructions_ => $alert->{'critical_instructions'},
_alert_warning_instructions_ => $alert->{'warning_instructions'},
_alert_unknown_instructions_ => $alert->{'unknown_instructions'},
_groupcontact_ => (defined ($group)) ? $group->{'contact'} : '',
_groupcustomid_ => (defined ($group)) ? $group->{'custom_id'} : '',
_groupother_ => (defined ($group)) ? $group->{'other'} : '',
_module_ => (defined ($module)) ? $module->{'nombre'} : '',
_modulecustomid_ => (defined ($module)) ? $module->{'custom_id'} : '',
_modulegroup_ => undef,
_moduledescription_ => (defined ($module)) ? $module->{'descripcion'} : '',
_modulestatus_ => undef,
_moduletags_ => undef,
'_moduledata_\S+_' => undef,
_id_agent_ => (defined ($module)) ? $module->{'id_agente'} : '',
_id_module_ => (defined ($module)) ? $module->{'id_agente_modulo'} : '',
_id_group_ => (defined ($group)) ? $group->{'id_grupo'} : '',
_id_alert_ => (defined ($alert->{'id_template_module'})) ? $alert->{'id_template_module'} : '',
_interval_ => (defined ($module) && $module->{'module_interval'} != 0) ? $module->{'module_interval'} : (defined ($agent)) ? $agent->{'intervalo'} : '',
_server_ip_ => (defined ($agent)) ? get_db_value($dbh, "SELECT ip_address FROM tserver WHERE name = ?", $agent->{'server_name'}) : '',
_server_name_ => (defined ($agent)) ? $agent->{'server_name'} : '',
_target_ip_ => (defined ($module)) ? $module->{'ip_target'} : '',
_target_port_ => (defined ($module)) ? $module->{'tcp_port'} : '',
_policy_ => (defined ($module)) ? get_db_value ($dbh, "SELECT name FROM tpolicies WHERE id = ?", get_db_value ($dbh, "SELECT id_policy FROM tpolicy_modules WHERE id = ?", $module->{'id_policy_module'})) : '',
_plugin_parameters_ => (defined ($module)) ? $module->{'plugin_parameter'} : '',
_email_tag_ => undef,
_phone_tag_ => undef,
_name_tag_ => undef,
_all_address_ => undef,
'_addressn_\d+_' => undef,
_secondarygroups_ => undef,
);
my %macros = (
_field1_ => $field1,
_field2_ => $field2,
_field3_ => $field3,
_field4_ => $field4,
_field5_ => $field5,
_field6_ => $field6,
_field7_ => $field7,
_field8_ => $field8,
_field9_ => $field9,
_field10_ => $field10,
_field11_ => $field11,
_field12_ => $field12,
_field13_ => $field13,
_field14_ => $field14,
_field15_ => $field15,
_field16_ => $field16,
_field17_ => $field17,
_field18_ => $field18,
_field19_ => $field19,
_field20_ => $field20,
_agentname_ => (defined ($agent)) ? $agent->{'nombre'} : '',
_agentalias_ => (defined ($agent)) ? $agent->{'alias'} : '',
_agent_ => (defined ($agent)) ? ($agent->{'alias'} ? $agent->{'alias'} : $agent->{'nombre'}) : '',
_agentcustomid_ => (defined ($agent)) ? $agent->{'custom_id'} : '',
'_agentcustomfield_\d+_' => undef,
_agentdescription_ => (defined ($agent)) ? $agent->{'comentarios'} : '',
_agentgroup_ => (defined ($group)) ? $group->{'nombre'} : '',
_agentstatus_ => undef,
_agentos_ => (defined ($agent)) ? get_os_name($dbh, $agent->{'id_os'}) : '',
_address_ => (defined ($agent)) ? $agent->{'direccion'} : '',
_timestamp_ => (defined($timestamp)) ? $timestamp : strftime ("%Y-%m-%d %H:%M:%S", localtime()),
_timezone_ => strftime ("%Z", localtime()),
_data_ => $data,
_prevdata_ => undef,
_homeurl_ => $pa_config->{'public_url'},
_alert_name_ => $alert->{'name'},
_alert_description_ => $alert->{'description'},
_alert_threshold_ => $alert->{'time_threshold'},
_alert_times_fired_ => $alert->{'times_fired'},
_alert_priority_ => $alert->{'priority'},
_alert_text_severity_ => get_priority_name($alert->{'priority'}),
_alert_critical_instructions_ => $alert->{'critical_instructions'},
_alert_warning_instructions_ => $alert->{'warning_instructions'},
_alert_unknown_instructions_ => $alert->{'unknown_instructions'},
_groupcontact_ => (defined ($group)) ? $group->{'contact'} : '',
_groupcustomid_ => (defined ($group)) ? $group->{'custom_id'} : '',
_groupother_ => (defined ($group)) ? $group->{'other'} : '',
_module_ => (defined ($module)) ? $module->{'nombre'} : '',
_modulecustomid_ => (defined ($module)) ? $module->{'custom_id'} : '',
_modulegroup_ => undef,
_moduledescription_ => (defined ($module)) ? $module->{'descripcion'} : '',
_modulestatus_ => undef,
_moduletags_ => undef,
'_moduledata_\S+_' => undef,
_id_agent_ => (defined ($module)) ? $module->{'id_agente'} : '',
_id_module_ => (defined ($module)) ? $module->{'id_agente_modulo'} : '',
_id_group_ => (defined ($group)) ? $group->{'id_grupo'} : '',
_id_alert_ => (defined ($alert->{'id_template_module'})) ? $alert->{'id_template_module'} : '',
_interval_ => (defined ($module) && $module->{'module_interval'} != 0) ? $module->{'module_interval'} : (defined ($agent)) ? $agent->{'intervalo'} : '',
_server_ip_ => (defined ($agent)) ? get_db_value($dbh, "SELECT ip_address FROM tserver WHERE name = ?", $agent->{'server_name'}) : '',
_server_name_ => (defined ($agent)) ? $agent->{'server_name'} : '',
_target_ip_ => (defined ($module)) ? $module->{'ip_target'} : '',
_target_port_ => (defined ($module)) ? $module->{'tcp_port'} : '',
_policy_ => (defined ($module)) ? get_db_value ($dbh, "SELECT name FROM tpolicies WHERE id = ?", get_db_value ($dbh, "SELECT id_policy FROM tpolicy_modules WHERE id = ?", $module->{'id_policy_module'})) : '',
_plugin_parameters_ => (defined ($module)) ? $module->{'plugin_parameter'} : '',
_email_tag_ => undef,
_phone_tag_ => undef,
_name_tag_ => undef,
_all_address_ => undef,
'_addressn_\d+_' => undef,
_secondarygroups_ => undef,
_time_down_seconds_ => (defined ($time_down)) ? int($time_down) : '',
_time_down_human_ => seconds_totime($time_down),
_warning_threshold_min_ => (defined ($module->{'min_warning'})) ? $module->{'min_warning'} : '',
_warning_threshold_max_ => (defined ($module->{'max_warning'})) ? $module->{'max_warning'} : '',
_critical_threshold_min_ => (defined ($module->{'min_critical'})) ? $module->{'min_critical'} : '',
_critical_threshold_max_ => (defined ($module->{'max_critical'})) ? $module->{'max_critical'} : '',
);
if ((defined ($extra_macros)) && (ref($extra_macros) eq "HASH")) {
while ((my $macro, my $value) = each (%{$extra_macros})) {
$macros{$macro} = $value;
}
}
if (defined ($module)) {
load_module_macros ($module->{'module_macros'}, \%macros);
}
#logger($pa_config, "Clean name ".$clean_name, 10);
# User defined alert

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.759";
my $pandora_build = "220131";
my $pandora_build = "220202";
our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -147,6 +147,7 @@ our @EXPORT = qw(
ping
resolve_hostname
ticks_totime
seconds_totime
safe_input
safe_output
month_have_days
@ -1409,6 +1410,31 @@ sub ticks_totime ($){
return "$days days, $hours hours, $minutes minutes, $seconds seconds";
}
################################################################################
## SUB human_time_readable
# Transform a seconds count in a human readable date
################################################################################
sub seconds_totime ($){
my $SECONDS_PER_MINUTE = 60;
my $SECONDS_PER_HOUR = $SECONDS_PER_MINUTE * 60;
my $SECONDS_PER_DAY = $SECONDS_PER_HOUR * 24;
my $orig_seconds = shift;
if (!defined($orig_seconds)){
return "";
}
my $seconds = int($orig_seconds) % 60;
my $minutes = int($orig_seconds / $SECONDS_PER_MINUTE) % 60;
my $hours = int($orig_seconds / $SECONDS_PER_HOUR) % 24;
my $days = int($orig_seconds / $SECONDS_PER_DAY);
return "$days days, $hours hours, $minutes minutes, $seconds seconds";
}
################################################################################
=head2 C<< pandora_ping (I<$pa_config>, I<$host>) >>

View File

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

View File

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

View File

@ -9,7 +9,7 @@
# **********************************************************************
PI_VERSION="7.0NG.759"
PI_BUILD="220131"
PI_BUILD="220202"
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.759 Build 220131";
my $version = "7.0NG.759 Build 220202";
# 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.759 Build 220131";
my $version = "7.0NG.759 Build 220202";
# save program name for logging
my $progname = basename($0);

View File

@ -491,6 +491,7 @@ li#li-timeZone-item > select:not(:first-child) {
flex-direction: row;
border-radius: 2px;
max-height: 50px;
min-height: 35px;
margin: 1%;
}
@ -498,7 +499,7 @@ li#li-timeZone-item > select:not(:first-child) {
flex: 1;
color: #fff;
font-size: 100%;
padding: 5%;
padding: 0%;
width: 100%;
display: flex;
flex-direction: row;
@ -511,7 +512,7 @@ li#li-timeZone-item > select:not(:first-child) {
background-color: white;
color: black;
font-size: 100%;
padding: 5%;
padding: 0%;
width: 100%;
height: 100%;
display: flex;
@ -694,3 +695,22 @@ div.module-graph .gauge_d3_class {
.gauge-data #percent {
color: #000;
}
.orange_background {
background: #ffa631;
}
.red_background {
background: #e63c52;
}
.yellow_background {
background: #f3b200;
}
.grey_background {
background: #b2b2b2;
}
.blue_background {
background: #4a83f3;
}
.green_background {
background: #82b92e;
}