Merge branch 'develop' into 'ent-10236-14934-module-bulk-operations-anade-dynamic-interval-a-los-modulos-a-pesar-de-estar-en-none'

# Conflicts:
#   pandora_console/godmode/massive/massive_edit_modules.php
This commit is contained in:
Daniel Cebrian 2023-01-31 15:10:26 +00:00
commit dcb69c2cf4
53 changed files with 875 additions and 101 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.768-230127 Version: 7.0NG.768-230131
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

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

View File

@ -1015,7 +1015,7 @@ my $Sem = undef;
my $ThreadSem = undef; my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.768'; use constant AGENT_VERSION => '7.0NG.768';
use constant AGENT_BUILD => '230127'; use constant AGENT_BUILD => '230131';
# Agent log default file size maximum and instances # Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000; use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.768 %define version 7.0NG.768
%define release 230127 %define release 230131
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.768 %define version 7.0NG.768
%define release 230127 %define release 230131
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -10,7 +10,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.768" PI_VERSION="7.0NG.768"
PI_BUILD="230127" PI_BUILD="230131"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{230127} {230131}
ViewReadme ViewReadme
{Yes} {Yes}

View File

@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils; using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1 #define PATH_SIZE _MAX_PATH+1
#define PANDORA_VERSION ("7.0NG.768 Build 230127") #define PANDORA_VERSION ("7.0NG.768 Build 230131")
string pandora_path; string pandora_path;
string pandora_dir; string pandora_dir;

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST" VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent" VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.768(Build 230127))" VALUE "ProductVersion", "(7.0NG.768(Build 230131))"
VALUE "FileVersion", "1.0.0.0" VALUE "FileVersion", "1.0.0.0"
END END
END END

View File

@ -1,5 +1,5 @@
package: pandorafms-console package: pandorafms-console
Version: 7.0NG.768-230127 Version: 7.0NG.768-230131
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.768-230127" pandora_version="7.0NG.768-230131"
package_pear=0 package_pear=0
package_pandora=1 package_pandora=1

View File

@ -11,4 +11,15 @@ CREATE TABLE IF NOT EXISTS `tsesion_filter` (
PRIMARY KEY (`id_filter`) PRIMARY KEY (`id_filter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX `tusuario_perfil_user` ON `tusuario_perfil` (`id_usuario`);
CREATE INDEX `tusuario_perfil_group` ON `tusuario_perfil` (`id_grupo`);
CREATE INDEX `tusuario_perfil_profile` ON `tusuario_perfil` (`id_perfil`);
CREATE INDEX `tlayout_data_layout` ON `tlayout_data` (`id_layout`);
CREATE INDEX `taddress_agent_agent` ON `taddress_agent` (`id_agent`);
CREATE INDEX `ttag_name` ON `ttag` (name(15));
CREATE INDEX `tservice_element_service` ON `tservice_element` (`id_service`);
CREATE INDEX `tservice_element_agent` ON `tservice_element` (`id_agent`);
CREATE INDEX `tservice_element_am` ON `tservice_element` (`id_agente_modulo`);
CREATE INDEX `tagent_module_log_agent` ON `tagent_module_log` (`id_agent`);
COMMIT; COMMIT;

View File

@ -393,7 +393,7 @@ $data[1] = html_print_input_text(
$data[2] = __('Auth password').ui_print_help_tip(__('The pass length must be eight character minimum.'), true); $data[2] = __('Auth password').ui_print_help_tip(__('The pass length must be eight character minimum.'), true);
$data[3] = html_print_input_password( $data[3] = html_print_input_password(
'snmp3_auth_pass', 'snmp3_auth_pass',
$snmp3_auth_pass, '',
'', '',
15, 15,
60, 60,
@ -415,7 +415,7 @@ $data[1] = html_print_select(['DES' => __('DES'), 'AES' => __('AES')], 'snmp3_pr
$data[2] = __('Privacy pass').ui_print_help_tip(__('The pass length must be eight character minimum.'), true); $data[2] = __('Privacy pass').ui_print_help_tip(__('The pass length must be eight character minimum.'), true);
$data[3] = html_print_input_password( $data[3] = html_print_input_password(
'snmp3_privacy_pass', 'snmp3_privacy_pass',
$snmp3_privacy_pass, '',
'', '',
15, 15,
60, 60,
@ -711,6 +711,12 @@ $(document).ready (function () {
$("#text-custom_ip_target").hide(); $("#text-custom_ip_target").hide();
} }
}); });
// Add input password values with js to hide it in browser inspector.
$('#password-snmp3_auth_pass').val('<?php echo $snmp3_auth_pass; ?>');
$('#password-snmp3_privacy_pass').val('<?php echo $snmp3_privacy_pass; ?>');
observerInputPassword();
}); });

View File

@ -85,6 +85,8 @@ $table_simple->rowstyle['macro_field'] = 'display:none';
push_table_simple($data, 'macro_field'); push_table_simple($data, 'macro_field');
$password_fields = [];
// If there are $macros, we create the form fields // If there are $macros, we create the form fields
if (!empty($macros)) { if (!empty($macros)) {
$macros = json_decode($macros, true); $macros = json_decode($macros, true);
@ -102,7 +104,8 @@ if (!empty($macros)) {
} }
if ($m_hide) { if ($m_hide) {
$data[1] = html_print_input_password($m['macro'], io_output_password($m['value']), '', 100, 1024, true); $data[1] = html_print_input_password($m['macro'], '', '', 100, 1024, true);
array_push($password_fields, $m);
} else { } else {
$data[1] = html_print_input_text( $data[1] = html_print_input_text(
$m['macro'], $m['macro'],
@ -125,6 +128,17 @@ if (!empty($macros)) {
} }
} }
// Add input password values with js to hide it in browser inspector.
foreach ($password_fields as $k => $p) {
echo "
<script>
$(document).ready(() => {
$('input[name=\"".$p['macro']."\"]').val('".$p['value']."');
});
</script>
";
}
?> ?>
<script type="text/javascript"> <script type="text/javascript">
function changePluginSelect() { function changePluginSelect() {
@ -140,4 +154,8 @@ if (!empty($macros)) {
forced_title_callback(); forced_title_callback();
} }
$(document).ready(function () {
observerInputPassword();
});
</script> </script>

View File

@ -116,7 +116,7 @@ $data[1] = html_print_input_text(
$data[2] = __('Password'); $data[2] = __('Password');
$data[3] = html_print_input_password( $data[3] = html_print_input_password(
'plugin_pass', 'plugin_pass',
$plugin_pass, '',
'', '',
15, 15,
60, 60,
@ -191,6 +191,11 @@ $(document).ready (function () {
$("#text-custom_ip_target").hide(); $("#text-custom_ip_target").hide();
} }
}); });
// Add input password values with js to hide it in browser inspector.
$('#password-plugin_pass').val('<?php echo $plugin_pass; ?>');
observerInputPassword();
}); });
</script> </script>

View File

@ -550,7 +550,22 @@ $table->data['form_agents_3'][3] = html_print_select(
$table->data['edit0'][0] = __('Dynamic Interval'); $table->data['edit0'][0] = __('Dynamic Interval');
$table->data['edit0'][1] = html_print_extended_select_for_time('dynamic_interval', -2, '', 'None', '0', 10, true, 'width:150px', false, '', false, false, '', true); $table->data['edit0'][1] = html_print_extended_select_for_time(
'dynamic_interval',
-2,
'',
'None',
'0',
10,
true,
'width:150px',
false,
'',
false,
false,
'',
true
);
$table->data['edit0'][2] = '<table width="100%"><tr><td><em>'.__('Dynamic Min.').'</em></td>'; $table->data['edit0'][2] = '<table width="100%"><tr><td><em>'.__('Dynamic Min.').'</em></td>';
$table->data['edit0'][2] .= '<td align="right">'.html_print_input_text('dynamic_min', '', '', 10, 255, true).'</td></tr>'; $table->data['edit0'][2] .= '<td align="right">'.html_print_input_text('dynamic_min', '', '', 10, 255, true).'</td></tr>';
$table->data['edit0'][2] .= '<tr><td><em>'.__('Dynamic Max.').'</em></td>'; $table->data['edit0'][2] .= '<tr><td><em>'.__('Dynamic Max.').'</em></td>';

View File

@ -843,6 +843,7 @@ class AgentWizard extends HTML
html_print_div( html_print_div(
[ [
'class' => 'white_box', 'class' => 'white_box',
'style' => 'padding: 20px',
'content' => $this->printForm( 'content' => $this->printForm(
[ [
'form' => $form, 'form' => $form,
@ -2723,7 +2724,7 @@ class AgentWizard extends HTML
'action' => $this->sectionUrl, 'action' => $this->sectionUrl,
'id' => 'form-filter-interfaces', 'id' => 'form-filter-interfaces',
'method' => 'POST', 'method' => 'POST',
'class' => 'modal flex flex-row searchbox', 'class' => 'modal searchbox',
'extra' => '', 'extra' => '',
]; ];
@ -5476,6 +5477,19 @@ class AgentWizard extends HTML
*/ */
private function getInterfacesModulesx64(array $data=[]) private function getInterfacesModulesx64(array $data=[])
{ {
$equivalencies_x86 = [
'ifHCInOctets' => 'ifInOctets',
'ifHCOutOctets' => 'ifOutOctets',
'ifHCInUcastPkts' => 'ifInUcastPkts',
'ifHCOutUcastPkts' => 'ifOutUcastPkts',
'ifHCInNUcastPkts' => 'ifInNUcastPkts',
'ifHCOutNUcastPkts' => 'ifOutNUcastPkts',
];
foreach ($equivalencies_x86 as $key => $equivalencie) {
$this->defaultSNMPValues[$key] = $this->defaultSNMPValues[$equivalencie];
}
$moduleDescription = ''; $moduleDescription = '';
$name = ''; $name = '';
$value = '1'; $value = '1';

View File

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

View File

@ -1369,12 +1369,14 @@ function agents_get_group_agents(
'id_agente', 'id_agente',
'alias', 'alias',
'ta.id_tmetaconsole_setup AS id_server', 'ta.id_tmetaconsole_setup AS id_server',
'ta.disabled',
]; ];
} else { } else {
$fields = [ $fields = [
'ta.id_tagente AS id_agente', 'ta.id_tagente AS id_agente',
'alias', 'alias',
'ta.id_tmetaconsole_setup AS id_server', 'ta.id_tmetaconsole_setup AS id_server',
'ta.disabled',
]; ];
} }
} else { } else {
@ -1383,6 +1385,7 @@ function agents_get_group_agents(
$fields = [ $fields = [
'id_agente', 'id_agente',
'alias', 'alias',
'disabled',
]; ];
} }
@ -1427,6 +1430,13 @@ function agents_get_group_agents(
$value = mb_strtoupper($row['alias'], 'UTF-8'); $value = mb_strtoupper($row['alias'], 'UTF-8');
break; break;
case 'disabled':
$value = $row['alias'];
if ($row['disabled'] == 1) {
$value .= ' ('.__('Disabled').')';
}
break;
default: default:
$value = $row['alias']; $value = $row['alias'];
break; break;

View File

@ -14430,7 +14430,7 @@ function api_get_module_graph($id_module, $thrash2, $other, $thrash4)
$height = (!empty($other) && isset($other['data'][3]) && $other['data'][3]) ? $other['data'][3] : 225; $height = (!empty($other) && isset($other['data'][3]) && $other['data'][3]) ? $other['data'][3] : 225;
// Graph width (optional). // Graph width (optional).
$width = (!empty($other) && isset($other['data'][4]) && $other['data'][4]) ? $other['data'][4] : ''; $width = (!empty($other) && isset($other['data'][4]) && $other['data'][4]) ? $other['data'][4] : 600;
// If recive value its from mail call. // If recive value its from mail call.
$graph_font_size = $other['data'][5]; $graph_font_size = $other['data'][5];

View File

@ -257,6 +257,10 @@ function reporting_make_reporting_data(
$content['style'] = json_decode(io_safe_output($content['style']), true); $content['style'] = json_decode(io_safe_output($content['style']), true);
if (!empty($content['style']['event_filter_search'])) {
$content['style']['event_filter_search'] = io_safe_input($content['style']['event_filter_search']);
}
$graphs_to_macro = db_get_all_rows_field_filter( $graphs_to_macro = db_get_all_rows_field_filter(
'tgraph_source', 'tgraph_source',
'id_graph', 'id_graph',

View File

@ -847,30 +847,38 @@ function treeview_printTable($id_agente, $server_data=[], $no_head=false)
$permission = check_acl($config['id_user'], $agent['id_grupo'], 'RR'); $permission = check_acl($config['id_user'], $agent['id_grupo'], 'RR');
if ($permission) { if ($permission) {
$params = [ if ($interface['traffic']['in'] > 0 && $interface['traffic']['out'] > 0) {
'interface_name' => $interface_name, $params = [
'agent_id' => $id_agente, 'interface_name' => $interface_name,
'traffic_module_in' => $interface['traffic']['in'], 'agent_id' => $id_agente,
'traffic_module_out' => $interface['traffic']['out'], 'traffic_module_in' => $interface['traffic']['in'],
]; 'traffic_module_out' => $interface['traffic']['out'],
];
if (defined('METACONSOLE') && !empty($server_id)) { if (defined('METACONSOLE') && !empty($server_id)) {
$params['server'] = $server_id; $params['server'] = $server_id;
}
$params_json = json_encode($params);
$params_encoded = base64_encode($params_json);
$url = ui_get_full_url('operation/agentes/interface_traffic_graph_win.php', false, false, false);
$graph_url = "$url?params=$params_encoded";
$win_handle = dechex(crc32($interface['status_module_id'].$interface_name));
$graph_link = "<a href=\"javascript:winopeng_var('".$graph_url."','".$win_handle."', 800, 480)\">";
$graph_link .= html_print_image(
'images/chart_curve.png',
true,
['title' => __('Interface traffic')]
);
$graph_link .= '</a>';
} else {
$graph_link = html_print_image(
'images/chart_curve.disabled.png',
true,
['title' => __('inOctets and outOctets must be enabled.')]
);
} }
$params_json = json_encode($params);
$params_encoded = base64_encode($params_json);
$url = ui_get_full_url('operation/agentes/interface_traffic_graph_win.php', false, false, false);
$graph_url = "$url?params=$params_encoded";
$win_handle = dechex(crc32($interface['status_module_id'].$interface_name));
$graph_link = "<a href=\"javascript:winopeng_var('".$graph_url."','".$win_handle."', 800, 480)\">";
$graph_link .= html_print_image(
'images/chart_curve.png',
true,
['title' => __('Interface traffic')]
);
$graph_link .= '</a>';
} else { } else {
$graph_link = ''; $graph_link = '';
} }

View File

@ -1387,9 +1387,7 @@ function dashboardLoadVC(settings) {
); );
if (settings.props.maintenanceMode != null) { if (settings.props.maintenanceMode != null) {
if (settings.props.maintenanceMode.user !== settings.id_user) { visualConsoleManager.visualConsole.enableMaintenanceMode();
visualConsoleManager.visualConsole.enableMaintenanceMode();
}
} }
if (settings.mobile_view_orientation_vc === true) { if (settings.mobile_view_orientation_vc === true) {

View File

@ -1685,3 +1685,17 @@ function changePlugin() {
$("#selected_plugin_description_" + moduleProtocol).html(pluginDescription); $("#selected_plugin_description_" + moduleProtocol).html(pluginDescription);
} }
// Add observer to clear value when type attribute changes.
function observerInputPassword() {
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === "attributes" && mutation.attributeName === "type") {
mutation.target.value = "";
}
});
});
Array.from($("input[type=password]")).forEach(function(input) {
observer.observe(input, { attributes: true });
});
}

View File

@ -117,13 +117,12 @@ function createVisualConsole(
visualConsole.updateElements(items); visualConsole.updateElements(items);
} }
if ( if (window.location.pathname.indexOf("index.php") <= 0) {
visualConsole.props.maintenanceMode != null && if (visualConsole.props.maintenanceMode != null) {
visualConsole.props.maintenanceMode.user !== id_user visualConsole.enableMaintenanceMode();
) { } else {
visualConsole.enableMaintenanceMode(); visualConsole.disableMaintenanceMode();
} else { }
visualConsole.disableMaintenanceMode();
} }
// Emit the VC update event. // Emit the VC update event.

View File

@ -6223,7 +6223,7 @@ div.text_message_dialog p {
} }
form#form-filter-interfaces { form#form-filter-interfaces {
margin-left: -30px; margin-left: 20px;
} }
form#form-filter-interfaces ul { form#form-filter-interfaces ul {
@ -6240,7 +6240,7 @@ form#form-filter-interfaces ul li {
align-items: center; align-items: center;
flex-direction: row; flex-direction: row;
justify-content: flex-start; justify-content: flex-start;
max-width: 35%; max-width: 45%;
} }
form#form-filter-interfaces ul li.select-interfaces { form#form-filter-interfaces ul li.select-interfaces {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -131,7 +131,7 @@
<div style='padding-bottom: 50px'> <div style='padding-bottom: 50px'>
<?php <?php
$version = '7.0NG.768'; $version = '7.0NG.768';
$build = '230127'; $build = '230131';
$banner = "v$version Build $build"; $banner = "v$version Build $build";
error_reporting(0); error_reporting(0);

View File

@ -68,13 +68,16 @@ function print_filters($sec)
] ]
); );
$table->data[1][0] = __('Agents'); $table->data[1][0] = __('Filter Agents');
$table->data[1][1] = html_print_input_text('filter_agents', '', '', 20, 255, true);
$table->data[2][0] = __('Agents');
if (empty($agents) === true || $agents == -1) { if (empty($agents) === true || $agents == -1) {
$agents = []; $agents = [];
} }
$table->data[1][1] = html_print_select( $table->data[2][1] = html_print_select(
[], [],
'selected_agents[]', 'selected_agents[]',
'', '',
@ -90,8 +93,8 @@ function print_filters($sec)
); );
// Interfaces. // Interfaces.
$table->data[1][3] = '<b>'.__('Interfaces').'</b>'; $table->data[2][3] = '<b>'.__('Interfaces').'</b>';
$table->data[1][4] = html_print_select( $table->data[2][4] = html_print_select(
[], [],
'selected_interfaces[]', 'selected_interfaces[]',
$selected_interfaces, $selected_interfaces,
@ -536,8 +539,10 @@ function print_table(
$select_if_usage_module_data_out_down $select_if_usage_module_data_out_down
); );
$table->head[8] = __('Last data'); $table->head[8] = __('Graph');
$table->head[8] .= ui_get_sorting_arrows(
$table->head[9] = __('Last data');
$table->head[9] .= ui_get_sorting_arrows(
$last_data.'up', $last_data.'up',
$last_data.'down', $last_data.'down',
$select_if_last_data_up, $select_if_last_data_up,
@ -677,6 +682,42 @@ function print_table(
$table_data[$loop_index]['if_agent_name'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=main&id_agente='.$agent_interfaces['agent_id'].'">'.$agent_interfaces['agent_alias'].'</a>'; $table_data[$loop_index]['if_agent_name'] = '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=main&id_agente='.$agent_interfaces['agent_id'].'">'.$agent_interfaces['agent_alias'].'</a>';
} }
$all_groups = agents_get_all_groups_agent($agent_interfaces['agent_id']);
$permission = check_acl_one_of_groups($config['id_user'], $all_groups, 'RR');
if ($permission) {
if ($agent_interfaces['traffic']['in'] > 0 && $agent_interfaces['traffic']['out'] > 0) {
$params = [
'interface_name' => $agent_interfaces['if_name'],
'agent_id' => $agent_interfaces['agent_id'],
'traffic_module_in' => $agent_interfaces['traffic']['in'],
'traffic_module_out' => $agent_interfaces['traffic']['out'],
];
$params_json = json_encode($params);
$params_encoded = base64_encode($params_json);
$win_handle = dechex(crc32($interface['status_module_id'].$agent_interfaces['if_name']));
$graph_link = "<a href=\"javascript:winopeng_var('operation/agentes/interface_traffic_graph_win.php?params=";
$graph_link .= $params_encoded."','";
$graph_link .= $win_handle."', 800, 480)\">";
$graph_link .= html_print_image(
'images/chart.png',
true,
[
'title' => __('Interface traffic'),
'class' => 'invert_filter',
]
).'</a>';
} else {
$graph_link = html_print_image(
'images/chart_curve.disabled.png',
true,
['title' => __('inOctets and outOctets must be enabled.')]
);
}
} else {
$graph_link = '';
}
$table_data[$loop_index]['if_name'] = $agent_interfaces['if_name']; $table_data[$loop_index]['if_name'] = $agent_interfaces['if_name'];
$table_data[$loop_index]['if_status_image'] = $agent_interfaces['status_image']; $table_data[$loop_index]['if_status_image'] = $agent_interfaces['status_image'];
$table_data[$loop_index]['if_speed_data'] = ($if_speed_value === null) ? __('N/A') : $if_speed_value.' '.$if_speed_unit; $table_data[$loop_index]['if_speed_data'] = ($if_speed_value === null) ? __('N/A') : $if_speed_value.' '.$if_speed_unit;
@ -684,6 +725,7 @@ function print_table(
$table_data[$loop_index]['if_out_octets'] = ($ifOutOctets['datos'] === null) ? __('N/A') : $ifOutOctets['datos']; $table_data[$loop_index]['if_out_octets'] = ($ifOutOctets['datos'] === null) ? __('N/A') : $ifOutOctets['datos'];
$table_data[$loop_index]['if_usage_module_data_in'] = ($usage_module_data_in['datos'] === null) ? __('N/A') : $usage_module_data_in['datos']; $table_data[$loop_index]['if_usage_module_data_in'] = ($usage_module_data_in['datos'] === null) ? __('N/A') : $usage_module_data_in['datos'];
$table_data[$loop_index]['if_usage_module_data_out'] = ($usage_module_data_out['datos'] === null) ? __('N/A') : $usage_module_data_out['datos']; $table_data[$loop_index]['if_usage_module_data_out'] = ($usage_module_data_out['datos'] === null) ? __('N/A') : $usage_module_data_out['datos'];
$table_data[$loop_index]['if_graph'] = $graph_link;
$table_data[$loop_index]['if_last_data'] = human_time_comparation($agent_interfaces['last_contact']); $table_data[$loop_index]['if_last_data'] = human_time_comparation($agent_interfaces['last_contact']);
$loop_index++; $loop_index++;

View File

@ -137,6 +137,7 @@ $(document).ready(function() {
if (sec === 'estado' && agent_id > 0) { if (sec === 'estado' && agent_id > 0) {
load_agent_interfaces_selector([agent_id]); load_agent_interfaces_selector([agent_id]);
} }
$("#selected_agents").filterByText($("#text-filter_agents"));
}); });

View File

@ -1265,16 +1265,24 @@ if (is_ajax() === true) {
$permission = check_acl($config['id_user'], $agent['id_grupo'], 'RR'); $permission = check_acl($config['id_user'], $agent['id_grupo'], 'RR');
if ($permission) { if ($permission) {
$params = [ if ($interface['traffic']['in'] > 0 && $interface['traffic']['out'] > 0) {
'interface_name' => $interface_name, $params = [
'agent_id' => $id_agent, 'interface_name' => $interface_name,
'traffic_module_in' => $interface['traffic']['in'], 'agent_id' => $id_agent,
'traffic_module_out' => $interface['traffic']['out'], 'traffic_module_in' => $interface['traffic']['in'],
]; 'traffic_module_out' => $interface['traffic']['out'],
$params_json = json_encode($params); ];
$params_encoded = base64_encode($params_json); $params_json = json_encode($params);
$win_handle = dechex(crc32($interface['status_module_id'].$interface_name)); $params_encoded = base64_encode($params_json);
$graph_link = "<a href=\"javascript:winopeng_var('operation/agentes/interface_traffic_graph_win.php?params=$params_encoded','$win_handle', 800, 480)\">".html_print_image('images/chart_curve.png', true, ['title' => __('Interface traffic')]).'</a>'; $win_handle = dechex(crc32($interface['status_module_id'].$interface_name));
$graph_link = "<a href=\"javascript:winopeng_var('operation/agentes/interface_traffic_graph_win.php?params=$params_encoded','$win_handle', 800, 480)\">".html_print_image('images/chart_curve.png', true, ['title' => __('Interface traffic')]).'</a>';
} else {
$graph_link = html_print_image(
'images/chart_curve.disabled.png',
true,
['title' => __('inOctets and outOctets must be enabled.')]
);
}
} else { } else {
$graph_link = ''; $graph_link = '';
} }

View File

@ -1411,8 +1411,8 @@ $agent_interfaces = agents_get_network_interfaces(
if (isset($agent_interfaces) !== true if (isset($agent_interfaces) !== true
|| isset($agent_interfaces[$id_agente]) !== true || isset($agent_interfaces[$id_agente]) !== true
|| is_array($agent_interfaces[$id_agente]['interfaces']) !== true || (is_array($agent_interfaces[$id_agente]['interfaces']) !== true
|| is_object($agent_interfaces[$id_agente]['interfaces']) !== true && is_object($agent_interfaces[$id_agente]['interfaces']) !== true)
) { ) {
$agent_interfaces_count = 0; $agent_interfaces_count = 0;
} else { } else {

View File

@ -320,6 +320,7 @@ try {
$rss .= xml_entry('link', $url.'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$row['id_agente']); $rss .= xml_entry('link', $url.'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$row['id_agente']);
} }
$rss .= xml_entry('author', $row['agent_name']);
$rss .= xml_entry('comments', $row['']); $rss .= xml_entry('comments', $row['']);
$rss .= xml_entry('pubDate', $row['timestamp']); $rss .= xml_entry('pubDate', $row['timestamp']);
$rss .= xml_entry('category', $row['source']); $rss .= xml_entry('category', $row['source']);

View File

@ -282,9 +282,7 @@ $visualConsoleItems = VisualConsole::getItemsFromDB(
); );
if(props.maintenanceMode != null) { if(props.maintenanceMode != null) {
if(props.maintenanceMode.user !== '<?php echo $config['id_user']; ?>') { visualConsoleManager.visualConsole.enableMaintenanceMode();
visualConsoleManager.visualConsole.enableMaintenanceMode();
}
} }
var controls = document.getElementById('vc-controls'); var controls = document.getElementById('vc-controls');

View File

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

View File

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

View File

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

View File

@ -42,7 +42,8 @@ CREATE TABLE IF NOT EXISTS `taddress_agent` (
`id_ag` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `id_ag` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`id_a` BIGINT UNSIGNED NOT NULL DEFAULT 0, `id_a` BIGINT UNSIGNED NOT NULL DEFAULT 0,
`id_agent` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, `id_agent` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id_ag`) PRIMARY KEY (`id_ag`),
INDEX `taddress_agent_agent` (`id_agent`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
@ -1333,7 +1334,10 @@ CREATE TABLE IF NOT EXISTS `tusuario_perfil` (
`assigned_by` VARCHAR(100) NOT NULL DEFAULT '', `assigned_by` VARCHAR(100) NOT NULL DEFAULT '',
`id_policy` INT UNSIGNED NOT NULL DEFAULT 0, `id_policy` INT UNSIGNED NOT NULL DEFAULT 0,
`tags` TEXT, `tags` TEXT,
PRIMARY KEY (`id_up`) PRIMARY KEY (`id_up`),
INDEX `tusuario_perfil_user` (`id_usuario`),
INDEX `tusuario_perfil_group` (`id_grupo`),
INDEX `tusuario_perfil_profile` (`id_perfil`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- ---------------------------------------------------------------------- -- ----------------------------------------------------------------------
@ -1731,7 +1735,8 @@ CREATE TABLE IF NOT EXISTS `tlayout_data` (
`show_last_value` TINYINT UNSIGNED NULL DEFAULT 0, `show_last_value` TINYINT UNSIGNED NULL DEFAULT 0,
`cache_expiration` INT UNSIGNED NOT NULL DEFAULT 0, `cache_expiration` INT UNSIGNED NOT NULL DEFAULT 0,
`title` TEXT , `title` TEXT ,
PRIMARY KEY(`id`) PRIMARY KEY(`id`),
INDEX `tlayout_data_layout` (`id_layout`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
@ -2136,7 +2141,8 @@ CREATE TABLE IF NOT EXISTS `ttag` (
`email` TEXT NULL, `email` TEXT NULL,
`phone` TEXT NULL, `phone` TEXT NULL,
`previous_name` TEXT NULL, `previous_name` TEXT NULL,
PRIMARY KEY (`id_tag`) PRIMARY KEY (`id_tag`),
INDEX `ttag_name` (name(15))
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- ----------------------------------------------------- -- -----------------------------------------------------
@ -2867,7 +2873,10 @@ CREATE TABLE IF NOT EXISTS `tservice_element` (
`id_server_meta` INT unsigned NOT NULL DEFAULT 0, `id_server_meta` INT unsigned NOT NULL DEFAULT 0,
`rules` TEXT, `rules` TEXT,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
INDEX `IDX_tservice_element` (`id_service`,`id_agente_modulo`) INDEX `IDX_tservice_element` (`id_service`,`id_agente_modulo`),
INDEX `tservice_element_service` (`id_service`),
INDEX `tservice_element_agent` (`id_agent`),
INDEX `tservice_element_am` (`id_agente_modulo`)
) ENGINE=InnoDB ) ENGINE=InnoDB
COMMENT = 'Table to define the modules and the weights of the modules that define a service' COMMENT = 'Table to define the modules and the weights of the modules that define a service'
DEFAULT CHARSET=UTF8MB4; DEFAULT CHARSET=UTF8MB4;
@ -3345,7 +3354,8 @@ CREATE TABLE IF NOT EXISTS `tagent_module_log` (
`source` TEXT, `source` TEXT,
`timestamp` DATETIME DEFAULT '1970-01-01 00:00:00', `timestamp` DATETIME DEFAULT '1970-01-01 00:00:00',
`utimestamp` BIGINT DEFAULT 0, `utimestamp` BIGINT DEFAULT 0,
PRIMARY KEY (`id_agent_module_log`) PRIMARY KEY (`id_agent_module_log`),
INDEX `tagent_module_log_agent` (`id_agent`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------

View File

@ -0,0 +1,579 @@
import ibm_db
import re
import argparse,sys,re,json,os,traceback,hashlib
from datetime import datetime
import subprocess
__author__ = "Alejandro Sánchez Carrion"
__copyright__ = "Copyright 2022, PandoraFMS"
__maintainer__ = "Operations department"
__status__ = "Production"
__version__= '1.0'
info = f"""
Pandora FMS DB2
Version = {__version__}
Manual execution
./pandora_informix --hostname <host> --port <port> --uid <user> --database <database> --password <password> --conf <path conf> --as_agent_plugin 1
"""
parser = argparse.ArgumentParser(description= info, formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('--database', help="database name",default="sysmaster")
parser.add_argument('--hostname', help="IP")
parser.add_argument('--port', help="default:9089")
parser.add_argument('--uid', help="user")
parser.add_argument('--password', help="password")
parser.add_argument('--default_metrics', help="",type=int,default=1)
parser.add_argument('--conf', help='path for the file with the queries')
parser.add_argument('--agent_name', help='agent name', default= "Informix")
parser.add_argument('-a','--agent_alias', help='Name of the agent to store monitoring, default=p: informix', default= "Informix")
parser.add_argument('-A', '--use_alias_as_name', help='Use Agent Alias as Agent Name name', action='store_true')
parser.add_argument('-m', '--module_prefix', help='PandoraFMS module prefix', default='informix')
parser.add_argument('-g', '--group', help='PandoraFMS destination group (default informix)', default='informix')
parser.add_argument('--data_dir', help='PandoraFMS data dir (default: /var/spool/pandora/data_in/)', default='/var/spool/pandora/data_in/')
parser.add_argument('--as_agent_plugin', help='mode plugin', default=0,type=int)
parser.add_argument('--tentacle_port', help='tentacle port', default=41121)
parser.add_argument('--tentacle_address', help='tentacle adress', default=None)
args = parser.parse_args()
conn_str=f'database={args.database};hostname={args.hostname};port={args.port};protocol=tcpip;uid={args.uid};pwd={args.password}'
def connect(conn_str):
try:
ibm_db_conn = ibm_db.connect(conn_str,'','')
return ibm_db_conn
except:
print("no connection:", ibm_db.conn_errormsg())
sys.exit(1)
def executeQuery(con, query):
try:
stmt = ibm_db.exec_immediate(con, query)
result = ibm_db.fetch_both(stmt)
return result
except Exception as message:
pass
### Pandora Tools ###-------------------------------------------------------------------------------------------------------
modules = []
#########################################################################################
# print_agent
#########################################################################################
def print_agent(agent, modules, data_dir="/var/spool/pandora/data_in/", log_modules= None, print_flag = None):
"""Prints agent XML. Requires agent conf (dict) and modules (list) as arguments.
- Use print_flag to show modules' XML in STDOUT.
- Returns a tuple (xml, data_file).
"""
data_file=None
header = "<?xml version='1.0' encoding='UTF-8'?>\n"
header += "<agent_data"
for dato in agent:
header += " " + str(dato) + "='" + str(agent[dato]) + "'"
header += ">\n"
xml = header
if modules :
for module in modules:
modules_xml = print_module(module)
xml += str(modules_xml)
xml += "</agent_data>"
if not print_flag:
data_file = write_xml(xml, agent["agent_name"], data_dir)
else:
print(xml)
return (xml,data_file)
#########################################################################################
# print_module
#########################################################################################
def print_module(module, print_flag=None):
"""Returns module in XML format. Accepts only {dict}.\n
- Only works with one module at a time: otherwise iteration is needed.
- Module "value" field accepts str type or [list] for datalists.
- Use print_flag to show modules' XML in STDOUT.
"""
data = dict(module)
module_xml = ("<module>\n"
"\t<name><![CDATA[" + str(data["name"]) + "]]></name>\n"
"\t<type>" + str(data["type"]) + "</type>\n"
)
if type(data["type"]) is not str and "string" not in data["type"]: #### Strip spaces if module not generic_data_string
data["value"] = data["value"].strip()
if isinstance(data["value"], list): # Checks if value is a list
module_xml += "\t<datalist>\n"
for value in data["value"]:
if type(value) is dict and "value" in value:
module_xml += "\t<data>\n"
module_xml += "\t\t<value><![CDATA[" + str(value["value"]) + "]]></value>\n"
if "timestamp" in value:
module_xml += "\t\t<timestamp><![CDATA[" + str(value["timestamp"]) + "]]></timestamp>\n"
module_xml += "\t</data>\n"
module_xml += "\t</datalist>\n"
else:
module_xml += "\t<data><![CDATA[" + str(data["value"]) + "]]></data>\n"
if "desc" in data:
module_xml += "\t<description><![CDATA[" + str(data["desc"]) + "]]></description>\n"
if "unit" in data:
module_xml += "\t<unit><![CDATA[" + str(data["unit"]) + "]]></unit>\n"
if "interval" in data:
module_xml += "\t<module_interval><![CDATA[" + str(data["interval"]) + "]]></module_interval>\n"
if "tags" in data:
module_xml += "\t<tags>" + str(data["tags"]) + "</tags>\n"
if "module_group" in data:
module_xml += "\t<module_group>" + str(data["module_group"]) + "</module_group>\n"
if "module_parent" in data:
module_xml += "\t<module_parent>" + str(data["module_parent"]) + "</module_parent>\n"
if "min_warning" in data:
module_xml += "\t<min_warning><![CDATA[" + str(data["min_warning"]) + "]]></min_warning>\n"
if "min_warning_forced" in data:
module_xml += "\t<min_warning_forced><![CDATA[" + str(data["min_warning_forced"]) + "]]></min_warning_forced>\n"
if "max_warning" in data:
module_xml += "\t<max_warning><![CDATA[" + str(data["max_warning"]) + "]]></max_warning>\n"
if "max_warning_forced" in data:
module_xml += "\t<max_warning_forced><![CDATA[" + str(data["max_warning_forced"]) + "]]></max_warning_forced>\n"
if "min_critical" in data:
module_xml += "\t<min_critical><![CDATA[" + str(data["min_critical"]) + "]]></min_critical>\n"
if "min_critical_forced" in data:
module_xml += "\t<min_critical_forced><![CDATA[" + str(data["min_critical_forced"]) + "]]></min_critical_forced>\n"
if "max_critical" in data:
module_xml += "\t<max_critical><![CDATA[" + str(data["max_critical"]) + "]]></max_critical>\n"
if "max_critical_forced" in data:
module_xml += "\t<max_critical_forced><![CDATA[" + str(data["max_critical_forced"]) + "]]></max_critical_forced>\n"
if "str_warning" in data:
module_xml += "\t<str_warning><![CDATA[" + str(data["str_warning"]) + "]]></str_warning>\n"
if "str_warning_forced" in data:
module_xml += "\t<str_warning_forced><![CDATA[" + str(data["str_warning_forced"]) + "]]></str_warning_forced>\n"
if "str_critical" in data:
module_xml += "\t<str_critical><![CDATA[" + str(data["str_critical"]) + "]]></str_critical>\n"
if "str_critical_forced" in data:
module_xml += "\t<str_critical_forced><![CDATA[" + str(data["str_critical_forced"]) + "]]></str_critical_forced>\n"
if "critical_inverse" in data:
module_xml += "\t<critical_inverse><![CDATA[" + str(data["critical_inverse"]) + "]]></critical_inverse>\n"
if "warning_inverse" in data:
module_xml += "\t<warning_inverse><![CDATA[" + str(data["warning_inverse"]) + "]]></warning_inverse>\n"
if "max" in data:
module_xml += "\t<max><![CDATA[" + str(data["max"]) + "]]></max>\n"
if "min" in data:
module_xml += "\t<min><![CDATA[" + str(data["min"]) + "]]></min>\n"
if "post_process" in data:
module_xml += "\t<post_process><![CDATA[" + str(data["post_process"]) + "]]></post_process>\n"
if "disabled" in data:
module_xml += "\t<disabled><![CDATA[" + str(data["disabled"]) + "]]></disabled>\n"
if "min_ff_event" in data:
module_xml += "\t<min_ff_event><![CDATA[" + str(data["min_ff_event"]) + "]]></min_ff_event>\n"
if "status" in data:
module_xml += "\t<status><![CDATA[" + str(data["status"]) + "]]></status>\n"
if "timestamp" in data:
module_xml += "\t<timestamp><![CDATA[" + str(data["timestamp"]) + "]]></timestamp>\n"
if "custom_id" in data:
module_xml += "\t<custom_id><![CDATA[" + str(data["custom_id"]) + "]]></custom_id>\n"
if "critical_instructions" in data:
module_xml += "\t<critical_instructions><![CDATA[" + str(data["critical_instructions"]) + "]]></critical_instructions>\n"
if "warning_instructions" in data:
module_xml += "\t<warning_instructions><![CDATA[" + str(data["warning_instructions"]) + "]]></warning_instructions>\n"
if "unknown_instructions" in data:
module_xml += "\t<unknown_instructions><![CDATA[" + str(data["unknown_instructions"]) + "]]></unknown_instructions>\n"
if "quiet" in data:
module_xml += "\t<quiet><![CDATA[" + str(data["quiet"]) + "]]></quiet>\n"
if "module_ff_interval" in data:
module_xml += "\t<module_ff_interval><![CDATA[" + str(data["module_ff_interval"]) + "]]></module_ff_interval>\n"
if "crontab" in data:
module_xml += "\t<crontab><![CDATA[" + str(data["crontab"]) + "]]></crontab>\n"
if "min_ff_event_normal" in data:
module_xml += "\t<min_ff_event_normal><![CDATA[" + str(data["min_ff_event_normal"]) + "]]></min_ff_event_normal>\n"
if "min_ff_event_warning" in data:
module_xml += "\t<min_ff_event_warning><![CDATA[" + str(data["min_ff_event_warning"]) + "]]></min_ff_event_warning>\n"
if "min_ff_event_critical" in data:
module_xml += "\t<min_ff_event_critical><![CDATA[" + str(data["min_ff_event_critical"]) + "]]></min_ff_event_critical>\n"
if "ff_type" in data:
module_xml += "\t<ff_type><![CDATA[" + str(data["ff_type"]) + "]]></ff_type>\n"
if "ff_timeout" in data:
module_xml += "\t<ff_timeout><![CDATA[" + str(data["ff_timeout"]) + "]]></ff_timeout>\n"
if "each_ff" in data:
module_xml += "\t<each_ff><![CDATA[" + str(data["each_ff"]) + "]]></each_ff>\n"
if "module_parent_unlink" in data:
module_xml += "\t<module_parent_unlink><![CDATA[" + str(data["parent_unlink"]) + "]]></module_parent_unlink>\n"
if "global_alerts" in data:
for alert in data["alert"]:
module_xml += "\t<alert_template><![CDATA[" + alert + "]]></alert_template>\n"
module_xml += "</module>\n"
if print_flag:
print (module_xml)
return (module_xml)
#########################################################################################
# write_xml
#########################################################################################
def write_xml(xml, agent_name, data_dir="/var/spool/pandora/data_in/"):
"""Creates a agent .data file in the specified data_dir folder\n
Args:
- xml (str): XML string to be written in the file.
- agent_name (str): agent name for the xml and file name.
- data_dir (str): folder in which the file will be created."""
Utime = datetime.now().strftime('%s')
data_file = "%s/%s.%s.data" %(str(data_dir),agent_name,str(Utime))
try:
with open(data_file, 'x') as data:
data.write(xml)
except OSError as o:
sys.exit(f"ERROR - Could not write file: {o}, please check directory permissions")
except Exception as e:
sys.exit(f"{type(e).__name__}: {e}")
return (data_file)
# # default agent
def clean_agent() :
global agent
agent = {
"agent_name" : "",
"agent_alias" : "",
"parent_agent_name" : "",
"description" : "",
"version" : "",
"os_name" : "",
"os_version" : "",
"timestamp" : datetime.today().strftime('%Y/%m/%d %H:%M:%S'),
#"utimestamp" : int(datetime.timestamp(datetime.today())),
"address" : "",
"group" : args.group,
"interval" : "",
"agent_mode" : "1",
}
return agent
# default module
def clean_module() :
global modulo
modulo = {
"name" : "",
"type" : "generic_data_string",
"desc" : "",
"value" : "",
}
return modulo
#########################################################################################
# tentacle_xml
#########################################################################################
def tentacle_xml(file, tentacle_ops,tentacle_path='', debug=0):
"""Sends file using tentacle protocol\n
- Only works with one file at time.
- file variable needs full file path.
- tentacle_opts should be a dict with tentacle options (address [password] [port]).
- tentacle_path allows to define a custom path for tentacle client in case is not in sys path).
- if debug is enabled, the data file will not be removed after being sent.
Returns 0 for OK and 1 for errors.
"""
if file is None :
sys.stderr.write("Tentacle error: file path is required.")
else :
data_file = file
if tentacle_ops['address'] is None :
sys.stderr.write("Tentacle error: No address defined")
return 1
try :
with open(data_file, 'r') as data:
data.read()
data.close()
except Exception as e :
sys.stderr.write(f"Tentacle error: {type(e).__name__} {e}")
return 1
tentacle_cmd = f"{tentacle_path}tentacle_client -v -a {tentacle_ops['address']} "
if "port" in tentacle_ops:
tentacle_cmd += f"-p {tentacle_ops['port']} "
if "password" in tentacle_ops:
tentacle_cmd += f"-x {tentacle_ops['password']} "
tentacle_cmd += f"{data_file} "
tentacle_exe=subprocess.Popen(tentacle_cmd, stdout=subprocess.PIPE, shell=True)
rc=tentacle_exe.wait()
if rc != 0 :
sys.stderr.write("Tentacle error")
return 1
elif debug == 0 :
os.remove(file)
return 0
## funcion agent
def agentplugin(modules,agent,plugin_type="server",data_dir="/var/spool/pandora/data_in/",tentacle=False,tentacle_conf=None) :
if plugin_type == "server":
for modulo in modules:
print_module(modulo,1)
elif tentacle == True and tentacle_conf is not None:
agent_file=print_agent(agent, modules,data_dir)
if agent_file[1] is not None:
tentacle_xml(agent_file[1],tentacle_conf)
print ("1")
else:
print_agent(agent, modules,data_dir)
print ("1")
### Pandora Tools end ###-------------------------------------------------------------------------------------------------------
# hash md5 agent name
if args.use_alias_as_name is not True:
agent_name_md5 = (hashlib.md5(args.agent_alias.encode()).hexdigest())
else:
agent_name_md5 = args.agent_alias
ibm_db_conn=connect(conn_str)
if args.default_metrics == 1:
clean_agent()
agent.update(
agent_name = args.agent_name +"_metrics",
agent_alias =agent_name_md5 ,
description ="Agent generated by pandora_db2"
)
#Dbspace I/O
dbspaceIO = executeQuery(ibm_db_conn, 'SELECT d.name[1,18] dbspace,fname [1,22], sum(pagesread) dreads, sum(pageswritten) dwrites FROM syschkio c, syschunks k, sysdbspaces d WHERE d.dbsnum = k.dbsnum AND k.chknum = c.chunknum GROUP BY 1, 2 ORDER BY 3 desc;')
for dato,value in dbspaceIO.items():
if 'dbspace' in str(dato):
name=value
if 'fname' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.fname',
type = "generic_data_string",
desc = "",
value = value
)
modules.append(modulo)
if 'dreads' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.dreads',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'dwrites' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.dwrites',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
#Dbspace usage
dbspaceusage = executeQuery(ibm_db_conn, 'SELECT sysdbspaces.name[1,18] name, nchunks, format_units(sum(syschunks.chksize * (SELECT sh_pagesize FROM sysshmvals)))::CHAR(12) total, format_units(sum(syschunks.chksize * (SELECT sh_pagesize FROM sysshmvals)) - sum(syschunks.nfree * (SELECT sh_pagesize FROM sysshmvals)))::CHAR(12) used, round (100 - ((sum(syschunks.nfree)) / (sum(syschunks.chksize)) * 100), 2) pct_used FROM sysdbspaces,syschunks WHERE sysdbspaces.dbsnum = syschunks.dbsnum AND sysdbspaces.is_sbspace = 0 GROUP BY 1,2 UNION SELECT sysdbspaces.name[1,18] name, nchunks, format_units(sum(syschunks.chksize * (SELECT sh_pagesize FROM sysshmvals)))::CHAR(12) total, format_units(sum(syschunks.chksize * (SELECT sh_pagesize FROM sysshmvals)) - sum(syschunks.nfree * (SELECT sh_pagesize FROM sysshmvals)))::CHAR(12) used, round (100 - ((sum(syschunks.nfree)) / (sum(syschunks.chksize)) * 100), 2) pct_used FROM sysdbspaces,syschunks WHERE sysdbspaces.dbsnum = syschunks.dbsnum AND sysdbspaces.is_sbspace = 1 GROUP BY 1,2 ORDER BY pct_used DESC;')
patron='[+-]?\d*\.?\d+'
for dato,value in dbspaceusage.items():
if 'name' in str(dato):
name=value
if 'nchunks' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.nchunks',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'total' in str(dato):
value_module=re.findall(patron,str(value))
clean_module()
modulo.update(
name = f'{name.strip()}.total',
type = "generic_data",
desc = "",
value = value_module[0],
unit="MB"
)
modules.append(modulo)
if 'used' in str(dato) and 'pct_used' not in str(dato):
value_module=re.findall(patron,str(value))
clean_module()
modulo.update(
name = f'{name.strip()}.used',
type = "generic_data",
desc = "",
value = value_module[0],
unit="MB"
)
modules.append(modulo)
if 'pct_used' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.pct_used',
type = "generic_data",
desc = "",
value = value,
unit="%"
)
modules.append(modulo)
# #Checking tables I/O
tablesIO = executeQuery(ibm_db_conn, 'SELECT dbsname[1,18], tabname[1,18], (isreads + pagreads) diskreads,(iswrites + pagwrites) diskwrites FROM sysptprof ORDER BY 3 desc, 4 desc;')
for dato,value in tablesIO.items():
if 'dbsname' in str(dato):
name=value
if 'tabname' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.tabname',
type = "generic_data_string",
desc = "",
value = value.strip()
)
modules.append(modulo)
if 'diskreads' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.diskreads',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'diskwrites' in str(dato):
clean_module()
modulo.update(
name = f'{name.strip()}.diskwrites',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
# #Session statistics
sessionstatics = executeQuery(ibm_db_conn, 'select sid, username[1,20], hostname[1,20], connected logint_time, hex(state) s_state from syssessions order by logint_time')
for dato,value in sessionstatics.items():
if 'sid' in str(dato):
name=value
if 'hostname' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.hostname',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'logint_time' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.diskwrites',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 's_state' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.diskwrites',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
##Session profile
sessionprofile = executeQuery(ibm_db_conn, 'select syssessions.sid, username[1,20],(isreads+bufreads+bufwrites+pagreads+pagwrites) access,locksheld, seqscans,total_sorts,dsksorts from syssesprof, syssessions where syssesprof.sid = syssessions.sid')
for dato,value in sessionprofile.items():
if 'sid' in str(dato):
name=value
if 'access' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.access',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'locksheld' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.locksheld',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'seqscans' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.seqscans',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'total_sorts' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.total_sorts',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if 'dsksorts' in str(dato):
clean_module()
modulo.update(
name = f'sid->{name}.dsksorts',
type = "generic_data",
desc = "",
value = value
)
modules.append(modulo)
if args.tentacle_address is not None:
tentacle_conf={"address":args.tentacle_address,"port":args.tentacle_port}
agentplugin(modules,agent,"agent",config["data_in"],True,tentacle_conf)
elif args.as_agent_plugin!=1:
agentplugin(modules,agent,"agent",config["data_in"])
else:
agentplugin(modules,agent)

View File

@ -1,5 +1,5 @@
package: pandorafms-server package: pandorafms-server
Version: 7.0NG.768-230127 Version: 7.0NG.768-230131
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
pandora_version="7.0NG.768-230127" pandora_version="7.0NG.768-230131"
package_cpan=0 package_cpan=0
package_pandora=1 package_pandora=1

View File

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

View File

@ -1547,11 +1547,11 @@ sub pandora_execute_action ($$$$$$$$$;$$) {
my $threshold = shift; my $threshold = shift;
my $period = $hours * 3600; # Hours to seconds my $period = $hours * 3600; # Hours to seconds
if($threshold == 0){ if($threshold == 0){
$params->{"other"} = $period . '%7C1%7C0%7C225%7C""%7C14'; $params->{"other"} = $period . '%7C1%7C0%7C225%7C%7C14';
$cid = 'module_graph_' . $hours . 'h'; $cid = 'module_graph_' . $hours . 'h';
} }
else{ else{
$params->{"other"} = $period . '%7C1%7C1%7C225%7C""%7C14'; $params->{"other"} = $period . '%7C1%7C1%7C225%7C%7C14';
$cid = 'module_graphth_' . $hours . 'h'; $cid = 'module_graphth_' . $hours . 'h';
} }
@ -3886,7 +3886,7 @@ sub pandora_create_agent ($$$$$$$$$$;$$$$$$$$$$) {
$agent_mode = 1 unless defined($agent_mode); $agent_mode = 1 unless defined($agent_mode);
$alias = $agent_name unless defined($alias); $alias = $agent_name unless defined($alias);
$description = "Created by $server_name" unless (defined($description) && $description ne ''); $description = '' unless (defined($description));
my ($columns, $values) = db_insert_get_values ({ 'nombre' => safe_input($agent_name), my ($columns, $values) = db_insert_get_values ({ 'nombre' => safe_input($agent_name),
'direccion' => $address, 'direccion' => $address,
'comentarios' => $description, 'comentarios' => $description,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -188,7 +188,7 @@ sub process_module($$$$$){
$data_object{"data"} = $valor; $data_object{"data"} = $valor;
pandora_process_module ($pa_config, \%data_object, $agent, $module, '', $timestamp, $utimestamp, 1, $dbh, ""); pandora_process_module ($pa_config, \%data_object, $agent, $module, '', $timestamp, $utimestamp, 1, $dbh);
pandora_update_agent($pa_config, $timestamp, $target_agent, undef, undef, -1, $dbh); pandora_update_agent($pa_config, $timestamp, $target_agent, undef, undef, -1, $dbh);
$modules_processed++; $modules_processed++;

View File

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

View File

@ -821,15 +821,34 @@ abstract class VisualConsoleItem<Props extends ItemProps> {
prevProps: Props | null = null, prevProps: Props | null = null,
prevMeta: ItemMeta | null = null prevMeta: ItemMeta | null = null
): void { ): void {
if (
prevProps &&
(prevProps.type == ItemType.LINE_ITEM ||
prevProps.type == ItemType.NETWORK_LINK)
) {
this.updateDomElement(this.childElementRef);
}
// Move box. // Move box.
if (!prevProps || this.positionChanged(prevProps, this.props)) { if (!prevProps || this.positionChanged(prevProps, this.props)) {
this.moveElement(this.props.x, this.props.y); this.moveElement(this.props.x, this.props.y);
this.updateDomElement(this.childElementRef); if (
prevProps &&
prevProps.type != ItemType.LINE_ITEM &&
prevProps.type != ItemType.NETWORK_LINK
) {
this.updateDomElement(this.childElementRef);
}
} }
// Resize box. // Resize box.
if (!prevProps || this.sizeChanged(prevProps, this.props)) { if (!prevProps || this.sizeChanged(prevProps, this.props)) {
this.resizeElement(this.props.width, this.props.height); this.resizeElement(this.props.width, this.props.height);
this.updateDomElement(this.childElementRef); if (
prevProps &&
prevProps.type != ItemType.LINE_ITEM &&
prevProps.type != ItemType.NETWORK_LINK
) {
this.updateDomElement(this.childElementRef);
}
} }
// Change label. // Change label.
const oldLabelHtml = this.labelElementRef.innerHTML; const oldLabelHtml = this.labelElementRef.innerHTML;

View File

@ -558,6 +558,20 @@ export default class VisualConsole {
delete this.lineLinks[i]; delete this.lineLinks[i];
} }
} }
if (
(this.lineLinks[i][line].start != itemAtStart &&
this.lineLinks[i][line].end == itemAtEnd) ||
(this.lineLinks[i][line].start == itemAtStart &&
this.lineLinks[i][line].end != itemAtEnd)
) {
// Object not connected to a line.
delete this.lineLinks[i][line];
if (Object.keys(this.lineLinks[i]).length === 0) {
delete this.lineLinks[i];
}
}
} }
} }
} catch (error) { } catch (error) {