Merge branch 'develop' into ent-6030-Problema-codificacion

This commit is contained in:
alejandro-campos 2020-07-01 16:39:00 +02:00
commit 63df6c15f0
100 changed files with 10648 additions and 3563 deletions

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix
Version: 7.0NG.746-200623
Version: 7.0NG.746-200701
Architecture: all
Priority: optional
Section: admin

View File

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

View File

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

View File

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

View File

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

View File

@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="7.0NG.746"
PI_BUILD="200623"
PI_BUILD="200701"
OS_NAME=`uname -s`
FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{200623}
{200701}
ViewReadme
{Yes}

View File

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

View File

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

View File

@ -6,7 +6,10 @@ attachment/collection
attachment/files_repo
include/config.php
pandora_console.log
log/console.log
log/cron.log
enterprise
*.bak
audit.log
log/audit.log
install_old.php

View File

@ -1,5 +1,5 @@
package: pandorafms-console
Version: 7.0NG.746-200623
Version: 7.0NG.746-200701
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -69,7 +69,11 @@ function pandoralogs_extension_main()
$logs_directory = (!empty($config['server_log_dir'])) ? io_safe_output($config['server_log_dir']) : '/var/log/pandora';
view_logfile($config['homedir'].'/pandora_console.log');
// Do not attempt to show console log if disabled.
if ($config['console_log_enabled']) {
view_logfile($config['homedir'].'/log/console.log');
}
view_logfile($logs_directory.'/pandora_server.log');
view_logfile($logs_directory.'/pandora_server.error');
}

View File

@ -199,8 +199,8 @@ function pandora_realtime_graphs()
html_print_input_hidden('custom_action', urlencode(base64_encode('&nbsp;<a href="javascript:realtimeGraphs.setOID();"><img src="'.ui_get_full_url('images').'/input_filter.disabled.png" title="'.__('Use this OID').'" style="vertical-align: middle;"></img></a>')), false);
html_print_input_hidden('incremental_base', '0');
echo '<script type="text/javascript" src="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.js').'"></script>';
echo '<script type="text/javascript" src="'.ui_get_full_url('include/javascript/pandora_snmp_browser.js').'"></script>';
echo '<script type="text/javascript" src="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.js').'"></script>';
echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url('extensions/realtime_graphs/realtime_graphs.css').'"></style>';
// Store servers timezone offset to be retrieved from js

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,66 +1,67 @@
<?php
/**
* Wizard for SNMP / WMI discover.
*
* @category Agent Wizard
* @package Pandora FMS
* @subpackage Opensource
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2020 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; version 2
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Begin.
global $config;
check_login();
$wizard_section = get_parameter('wizard_section', 'snmp_interfaces_explorer');
$idAgent = (int) get_parameter('id_agente', 0);
$ipAgent = db_get_value('direccion', 'tagente', 'id_agente', $idAgent);
switch ($wizard_section) {
case 'snmp_interfaces_explorer':
$snmp_interfaces_explorer_style = 'font-weight: bold;';
$wmi_explorer_style = '';
break;
case 'wmi_explorer':
$snmp_interfaces_explorer_style = '';
$wmi_explorer_style = 'font-weight: bold;';
break;
case 'snmp_explorer':
$snmp_interfaces_explorer_style = '';
$wmi_explorer_style = 'font-weight: bold;';
break;
}
/*
echo "<div style='text-align: right; width: 98%; padding-top: 10px; padding-bottom: 10px;'>";
echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=snmp_interfaces_explorer&id_agente=$idAgent' style='" . $snmp_interfaces_explorer_style . "'>" . __('SNMP Interfaces explorer') . "</a>";
echo " | ";
echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=wmi_explorer&id_agente=$idAgent' style='" . $wmi_explorer_style . "'>" . __('WMI explorer') . "</a>";
echo "</div>";
*/
require 'agent_wizard.'.$wizard_section.'.php';
?>
<script language="javascript" type="text/javascript">
function satellite_remote_warn(id_satellite, remote)
{
if(!remote)
{
$('#server_to_exec option[value='+id_satellite+']').prop('disabled', true);
$('#satellite_remote_tip').removeAttr("style").show();
}
else
{
$('#satellite_remote_tip').removeAttr("style").hide();
// Require needed class.
require_once $config['homedir'].'/include/class/AgentWizard.class.php';
// This page.
$ajaxPage = 'godmode/agentes/agent_wizard';
$pageName = '[AgentWizard]';
// Control call flow.
try {
// User access and validation is being processed on class constructor.
$obj = new AgentWizard($ajaxPage);
} catch (Exception $e) {
if (is_ajax()) {
echo json_encode(['error' => $pageName.$e->getMessage() ]);
exit;
} else {
echo $pageName.$e->getMessage();
}
// Stop this execution, but continue 'globally'.
return;
}
</script>
// AJAX controller.
if (is_ajax()) {
$method = get_parameter('method');
if (method_exists($obj, $method) === true) {
$obj->{$method}();
} else {
$obj->error('Method not found. ['.$method.']');
}
// Stop any execution.
exit;
} else {
// Run.
$obj->run();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,743 +0,0 @@
<?php
/**
* Extension to manage a list of gateways and the node address where they should
* point to.
*
* @category SNMP interfaces.
* @package Pandora FMS
* @subpackage Community
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
global $config;
require_once $config['homedir'].'/include/functions_agents.php';
require_once 'include/functions_modules.php';
require_once 'include/functions_alerts.php';
require_once 'include/functions_reporting.php';
require_once 'include/graphs/functions_utils.php';
$idAgent = (int) get_parameter('id_agente', 0);
$ipAgent = db_get_value('direccion', 'tagente', 'id_agente', $idAgent);
check_login();
$ip_target = (string) get_parameter('ip_target', $ipAgent);
$use_agent = get_parameter('use_agent');
$snmp_community = (string) get_parameter('snmp_community', 'public');
$server_to_exec = get_parameter('server_to_exec', 0);
$snmp_version = get_parameter('snmp_version', '1');
$snmp3_auth_user = io_safe_output(get_parameter('snmp3_auth_user'));
$snmp3_security_level = get_parameter('snmp3_security_level');
$snmp3_auth_method = get_parameter('snmp3_auth_method');
$snmp3_auth_pass = io_safe_output(get_parameter('snmp3_auth_pass'));
$snmp3_privacy_method = get_parameter('snmp3_privacy_method');
$snmp3_privacy_pass = io_safe_output(get_parameter('snmp3_privacy_pass'));
$tcp_port = (string) get_parameter('tcp_port');
// See if id_agente is set (either POST or GET, otherwise -1.
$id_agent = $idAgent;
// Get passed variables.
$snmpwalk = (int) get_parameter('snmpwalk', 0);
$create_modules = (int) get_parameter('create_modules', 0);
$interfaces = [];
$interfaces_ip = [];
if ($snmpwalk) {
// OID Used is for SNMP MIB-2 Interfaces.
$snmpis = get_snmpwalk(
$ip_target,
$snmp_version,
$snmp_community,
$snmp3_auth_user,
$snmp3_security_level,
$snmp3_auth_method,
$snmp3_auth_pass,
$snmp3_privacy_method,
$snmp3_privacy_pass,
0,
'.1.3.6.1.2.1.2',
$tcp_port,
$server_to_exec
);
// IfXTable is also used.
$ifxitems = get_snmpwalk(
$ip_target,
$snmp_version,
$snmp_community,
$snmp3_auth_user,
$snmp3_security_level,
$snmp3_auth_method,
$snmp3_auth_pass,
$snmp3_privacy_method,
$snmp3_privacy_pass,
0,
'.1.3.6.1.2.1.31.1.1',
$tcp_port,
$server_to_exec
);
// Get the interfaces IPV4/IPV6.
$snmp_int_ip = get_snmpwalk(
$ip_target,
$snmp_version,
$snmp_community,
$snmp3_auth_user,
$snmp3_security_level,
$snmp3_auth_method,
$snmp3_auth_pass,
$snmp3_privacy_method,
$snmp3_privacy_pass,
0,
'.1.3.6.1.2.1.4.34.1.3',
$tcp_port,
$server_to_exec
);
// Build a [<interface id>] => [<interface ip>] array.
if (!empty($snmp_int_ip)) {
foreach ($snmp_int_ip as $key => $value) {
// The key is something like IP-MIB::ipAddressIfIndex.ipv4."<ip>".
// or IP-MIB::ipAddressIfIndex.ipv6."<ip>".
// The value is something like INTEGER: <interface id>.
$data = explode(': ', $value);
$interface_id = !empty($data) && isset($data[1]) ? $data[1] : false;
if (preg_match('/^.+"(.+)"$/', $key, $matches) && isset($matches[1])) {
$interface_ip = $matches[1];
}
// Get the first ip.
if ($interface_id !== false && !empty($interface_ip) && !isset($interfaces_ip[$interface_id])) {
$interfaces_ip[$interface_id] = $interface_ip;
}
}
unset($snmp_int_ip);
}
$snmpis = array_merge((($snmpis === false) ? [] : $snmpis), (($ifxitems === false) ? [] : $ifxitems));
$interfaces = [];
// We get here only the interface part of the MIB, not full mib.
foreach ($snmpis as $key => $snmp) {
$data = explode(': ', $snmp, 2);
$keydata = explode('::', $key);
$keydata2 = explode('.', $keydata[1]);
// Avoid results without index and interfaces without name.
if (!isset($keydata2[1]) || !isset($data[1])) {
continue;
}
if (array_key_exists(1, $data)) {
$interfaces[$keydata2[1]][$keydata2[0]]['type'] = $data[0];
$interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[1];
} else {
$interfaces[$keydata2[1]][$keydata2[0]]['type'] = '';
$interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[0];
}
$interfaces[$keydata2[1]][$keydata2[0]]['oid'] = $key;
$interfaces[$keydata2[1]][$keydata2[0]]['checked'] = 0;
}
unset($interfaces[0]);
}
if ($create_modules) {
$id_snmp_serialize = get_parameter_post('id_snmp_serialize');
$interfaces = unserialize_in_temp($id_snmp_serialize);
$id_snmp_int_ip_serialize = get_parameter_post('id_snmp_int_ip_serialize');
$interfaces_ip = unserialize_in_temp($id_snmp_int_ip_serialize);
if (!$interfaces) {
$interfaces = [];
}
if (!$interfaces_ip) {
$interfaces_ip = [];
}
$values = [];
if ($tcp_port != '') {
$values['tcp_port'] = $tcp_port;
}
$values['snmp_community'] = $snmp_community;
if ($use_agent) {
$values['ip_target'] = 'auto';
} else {
$values['ip_target'] = $ip_target;
}
$values['tcp_send'] = $snmp_version;
if ($snmp_version == '3') {
$values['plugin_user'] = $snmp3_auth_user;
$values['plugin_pass'] = $snmp3_auth_pass;
$values['plugin_parameter'] = $snmp3_auth_method;
$values['custom_string_1'] = $snmp3_privacy_method;
$values['custom_string_2'] = $snmp3_privacy_pass;
$values['custom_string_3'] = $snmp3_security_level;
}
$oids = [];
foreach ($interfaces as $key => $interface) {
foreach ($interface as $key2 => $module) {
$oid = get_parameter($key.'-'.$key2, '');
if ($oid != '') {
$interfaces[$key][$key2]['checked'] = 1;
$oids[$key][] = $interfaces[$key][$key2]['oid'];
} else {
$interfaces[$key][$key2]['checked'] = 0;
}
}
}
$modules = get_parameter('module', []);
$id_snmp = get_parameter('id_snmp');
if ($id_snmp == false) {
ui_print_error_message(__('No modules selected'));
$id_snmp = [];
}
if (agents_get_name($id_agent) == false) {
ui_print_error_message(__('No agent selected or the agent does not exist'));
$id_snmp = [];
}
$result = false;
$errors = [];
$done = 0;
foreach ($id_snmp as $id) {
$ifname = '';
$ifPhysAddress = '';
if (isset($interfaces[$id]['ifName']) && $interfaces[$id]['ifName']['value'] != '') {
$ifname = $interfaces[$id]['ifName']['value'];
} else if (isset($interfaces[$id]['ifDescr']) && $interfaces[$id]['ifDescr']['value'] != '') {
$ifname = $interfaces[$id]['ifDescr']['value'];
}
if (isset($interfaces[$id]['ifPhysAddress']) && $interfaces[$id]['ifPhysAddress']['value'] != '') {
$ifPhysAddress = $interfaces[$id]['ifPhysAddress']['value'];
$ifPhysAddress = strtoupper($ifPhysAddress);
}
foreach ($modules as $module) {
$oid_array = explode('.', $module);
$oid_array[(count($oid_array) - 1)] = $id;
$oid = implode('.', $oid_array);
// Get the name.
$name_array = explode('::', $oid_array[0]);
$name = $ifname.'_'.$name_array[1];
// If you select "show all modules" and the module is not from the interface.
if (!array_key_exists($name_array[1], $interfaces[$id])) {
continue;
}
// Clean the name.
$name = str_replace('"', '', $name);
// Proc moduletypes.
if (preg_match('/Status/', $name_array[1])) {
$module_type = 18;
} else if (preg_match('/Present/', $name_array[1])) {
$module_type = 18;
} else if (preg_match('/PromiscuousMode/', $name_array[1])) {
$module_type = 18;
} else if (preg_match('/Alias/', $name_array[1])) {
// String moduletypes.
$module_type = 17;
} else if (preg_match('/Address/', $name_array[1])) {
$module_type = 17;
} else if (preg_match('/Name/', $name_array[1])) {
$module_type = 17;
} else if (preg_match('/Specific/', $name_array[1])) {
$module_type = 17;
} else if (preg_match('/Descr/', $name_array[1])) {
$module_type = 17;
} else if (preg_match('/s$/', $name_array[1])) {
// Specific counters (ends in s).
$module_type = 16;
} else {
// Otherwise, numeric.
$module_type = 15;
}
$values['unit'] = '';
if (preg_match('/Octets/', $name_array[1])) {
$values['unit'] = 'Bytes';
}
$module_server = 2;
if ($server_to_exec != 0) {
$sql = sprintf('SELECT server_type, ip_address FROM tserver WHERE id_server = %d', $server_to_exec);
$row = db_get_row_sql($sql);
if ($row['server_type'] == 13) {
if (preg_match('/ifPhysAddress/', $name_array[1])) {
$module_type = 3;
} else if (preg_match('/ifSpecific/', $name_array[1])) {
$module_type = 3;
} else if (preg_match('/ifType/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifSpeed/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifPromiscuousMode/', $name_array[1])) {
$module_type = 2;
} else if (preg_match('/ifOutQLen/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifName/', $name_array[1])) {
$module_type = 3;
} else if (preg_match('/ifMtu/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifLinkUpDownTrapEnable/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifLastChange/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifIndex/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifDescr/', $name_array[1])) {
$module_type = 3;
} else if (preg_match('/ifCounterDiscontinuityTime/', $name_array[1])) {
$module_type = 1;
} else if (preg_match('/ifConnectorPresent/', $name_array[1])) {
$module_type = 2;
} else if (preg_match('/ifAdminStatus/', $name_array[1])) {
$module_type = 2;
} else if (preg_match('/ifOperStatus/', $name_array[1])) {
$module_type = 2;
} else {
$module_type = 4;
}
$module_server = 1;
$output_oid = '';
exec('snmptranslate -On '.$oid, $output_oid, $rc);
$conf_oid = $output_oid[0];
$oid = $conf_oid;
}
}
$values['id_tipo_modulo'] = $module_type;
if (!empty($ifPhysAddress) && isset($interfaces_ip[$id])) {
$values['descripcion'] = io_safe_input('(IP: '.$interfaces_ip[$id].' - MAC: '.$ifPhysAddress.' - '.$name.') '.$interfaces[$id]['ifDescr']['value']);
} else if (!empty($ifPhysAddress)) {
$values['descripcion'] = io_safe_input('(MAC: '.$ifPhysAddress.' - '.$name.') '.$interfaces[$id]['ifDescr']['value']);
} else if (isset($interfaces_ip[$id])) {
$values['descripcion'] = io_safe_input('(IP: '.$interfaces_ip[$id].' - '.$name.') '.$interfaces[$id]['ifDescr']['value']);
} else {
$values['descripcion'] = io_safe_input('('.$name.') '.$interfaces[$id]['ifDescr']['value']);
}
$values['snmp_oid'] = $oid;
$values['id_modulo'] = $module_server;
$result = modules_create_agent_module($id_agent, io_safe_input($name), $values);
if (is_error($result)) {
if (!isset($errors[$result])) {
$errors[$result] = 0;
}
$errors[$result]++;
} else {
if ($server_to_exec != 0) {
$sql = sprintf('SELECT server_type FROM tserver WHERE id_server = %d', $server_to_exec);
$row = db_get_row_sql($sql);
if ($row['server_type'] == 13) {
$module_type_name = db_get_value_filter('nombre', 'ttipo_modulo', ['id_tipo' => $values['id_tipo_modulo']]);
$new_module_configuration_data = "module_begin\nmodule_name ".io_safe_input($name)."\nmodule_description ".io_safe_output($values['descripcion'])."\nmodule_type ".$module_type_name."\nmodule_snmp\nmodule_version ".$snmp_version."\nmodule_oid ".$conf_oid."\nmodule_community ".$values['snmp_community'];
if ($snmp_version == '3') {
$new_module_configuration_data .= "\nmodule_secname ".$snmp3_auth_user;
$new_module_configuration_data .= "\nmodule_seclevel ".$snmp3_security_level;
if ($snmp3_security_level == 'authNoPriv' || $snmp3_security_level == 'authPriv') {
$new_module_configuration_data .= "\nmodule_authpass ".$snmp3_auth_pass;
$new_module_configuration_data .= "\nmodule_authproto ".$snmp3_auth_method;
}
if ($snmp3_security_level == 'authPriv') {
$new_module_configuration_data .= "\nmodule_privproto ".$snmp3_privacy_method;
$new_module_configuration_data .= "\nmodule_privpass ".$snmp3_privacy_pass;
}
}
$new_module_configuration_data .= "\nmodule_end";
config_agents_add_module_in_conf($id_agent, $new_module_configuration_data);
}
}
$done++;
}
}
}
if ($done > 0) {
ui_print_success_message(
__('Successfully modules created').' ('.$done.')'
);
}
if (!empty($errors)) {
$msg = __('Could not be created').':';
foreach ($errors as $code => $number) {
switch ($code) {
case ERR_EXIST:
$msg .= '<br>'.__('Another module already exists with the same name').' ('.$number.')';
break;
case ERR_INCOMPLETE:
$msg .= '<br>'.__('Some required fields are missed').': ('.__('name').') ('.$number.')';
break;
case ERR_DB:
case ERR_GENERIC:
default:
$msg .= '<br>'.__('Processing error').' ('.$number.')';
break;
}
}
ui_print_error_message($msg);
}
}
// Create the interface list for the interface.
$interfaces_list = [];
foreach ($interfaces as $interface) {
// Get the interface name, removing " " characters and avoid "blank" interfaces.
if (isset($interface['ifDescr']) && $interface['ifDescr']['value'] != '') {
$ifname = $interface['ifDescr']['value'];
} else if (isset($interface['ifName']) && $interface['ifName']['value'] != '') {
$ifname = $interface['ifName']['value'];
} else {
continue;
}
$interfaces_list[$interface['ifIndex']['value']] = str_replace('"', '', $ifname);
}
echo '<span id ="none_text" style="display: none;">'.__('None').'</span>';
echo "<form method='post' id='walk_form' action='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=snmp_interfaces_explorer&id_agente=".$id_agent."'>";
$table->width = '100%';
$table->cellpadding = 0;
$table->cellspacing = 0;
$table->class = 'databox filters';
$table->data[0][0] = '<b>'.__('Target IP').'</b>';
$table->data[0][1] = html_print_input_text('ip_target', $ip_target, '', 15, 60, true);
$table->data[0][2] = '<b>'.__('Port').'</b>';
$table->data[0][3] = html_print_input_text('tcp_port', $tcp_port, '', 5, 20, true);
$table->data[1][0] = '<b>'.__('Use agent ip').'</b>';
$table->data[1][1] = html_print_checkbox('use_agent', 1, $use_agent, true);
$servers_to_exec = [];
$servers_to_exec[0] = __('Local console');
if (enterprise_installed()) {
enterprise_include_once('include/functions_satellite.php');
$rows = get_proxy_servers();
// Check if satellite server has remote configuration enabled.
$satellite_remote = config_agents_has_remote_configuration($id_agent);
foreach ($rows as $row) {
if ($row['server_type'] != 13) {
$s_type = ' (Standard)';
} else {
$id_satellite = $row['id_server'];
$s_type = ' (Satellite)';
}
$servers_to_exec[$row['id_server']] = $row['name'].$s_type;
}
}
$table->data[1][2] = '<b>'.__('Server to execute command').'</b>'.ui_print_help_icon('agent_snmp_explorer_tab', true);
$table->data[1][2] .= '<span id=satellite_remote_tip>'.ui_print_help_tip(__('In order to use remote executions you need to enable remote execution in satellite server'), true, 'images/tip_help.png', false, 'display:').'</span>';
$table->data[1][4] = html_print_select(
$servers_to_exec,
'server_to_exec',
$server_to_exec,
'satellite_remote_warn('.$id_satellite.','.$satellite_remote.')',
'',
'',
true
);
$snmp_versions['1'] = 'v. 1';
$snmp_versions['2'] = 'v. 2';
$snmp_versions['2c'] = 'v. 2c';
$snmp_versions['3'] = 'v. 3';
$table->data[2][0] = '<b>'.__('SNMP community').'</b>';
$table->data[2][1] = html_print_input_text('snmp_community', $snmp_community, '', 15, 60, true);
$table->data[2][2] = '<b>'.__('SNMP version').'</b>';
$table->data[2][3] = html_print_select($snmp_versions, 'snmp_version', $snmp_version, '', '', '', true, false, false, '');
$table->data[2][3] .= '<div id="spinner_modules" style="float: left; display: none;">'.html_print_image('images/spinner.gif', true).'</div>';
html_print_input_hidden('snmpwalk', 1);
html_print_table($table);
unset($table);
// SNMP3 OPTIONS.
$table->width = '100%';
$table->data[2][1] = '<b>'.__('Auth user').'</b>';
$table->data[2][2] = html_print_input_text('snmp3_auth_user', $snmp3_auth_user, '', 15, 60, true);
$table->data[2][3] = '<b>'.__('Auth password').'</b>';
$table->data[2][4] = html_print_input_password('snmp3_auth_pass', $snmp3_auth_pass, '', 15, 60, true);
$table->data[2][4] .= html_print_input_hidden_extended('active_snmp_v3', 0, 'active_snmp_v3_awsie', true);
$table->data[5][0] = '<b>'.__('Privacy method').'</b>';
$table->data[5][1] = html_print_select(['DES' => __('DES'), 'AES' => __('AES')], 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true);
$table->data[5][2] = '<b>'.__('privacy pass').'</b>';
$table->data[5][3] = html_print_input_password('snmp3_privacy_pass', $snmp3_privacy_pass, '', 15, 60, true);
$table->data[6][0] = '<b>'.__('Auth method').'</b>';
$table->data[6][1] = html_print_select(['MD5' => __('MD5'), 'SHA' => __('SHA')], 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true);
$table->data[6][2] = '<b>'.__('Security level').'</b>';
$table->data[6][3] = html_print_select(
[
'noAuthNoPriv' => __('Not auth and not privacy method'),
'authNoPriv' => __('Auth and not privacy method'),
'authPriv' => __('Auth and privacy method'),
],
'snmp3_security_level',
$snmp3_security_level,
'',
'',
'',
true
);
if ($snmp_version == 3) {
echo '<div id="snmp3_options">';
} else {
echo '<div id="snmp3_options" style="display: none;">';
}
html_print_table($table);
echo '</div>';
echo "<div style='text-align:right; width:".$table->width."'>";
echo '<span id="oid_loading" class="invisible">'.html_print_image('images/spinner.gif', true).'</span>';
html_print_submit_button(__('SNMP Walk'), 'snmp_walk', false, ['class' => 'sub next']);
echo '</div>';
if ($snmpwalk && !$snmpis) {
ui_print_error_message(__('Unable to do SNMP walk'));
}
unset($table);
echo '</form>';
if (!empty($interfaces_list)) {
echo '<span id ="none_text" style="display: none;">'.__('None').'</span>';
echo "<form method='post' action='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=snmp_interfaces_explorer&id_agente=".$id_agent."'>";
echo '<span id="form_interfaces">';
$id_snmp_serialize = serialize_in_temp($interfaces, $config['id_user'].'_snmp');
html_print_input_hidden('id_snmp_serialize', $id_snmp_serialize);
$id_snmp_int_ip_serialize = serialize_in_temp($interfaces_ip, $config['id_user'].'_snmp_int_ip');
html_print_input_hidden('id_snmp_int_ip_serialize', $id_snmp_int_ip_serialize);
html_print_input_hidden('create_modules', 1);
html_print_input_hidden('ip_target', $ip_target);
html_print_input_hidden('use_agent', $use_agent);
html_print_input_hidden('tcp_port', $tcp_port);
html_print_input_hidden('snmp_community', $snmp_community);
html_print_input_hidden('snmp_version', $snmp_version);
html_print_input_hidden('snmp3_auth_user', $snmp3_auth_user);
html_print_input_hidden('snmp3_auth_pass', $snmp3_auth_pass);
html_print_input_hidden('snmp3_auth_method', $snmp3_auth_method);
html_print_input_hidden('snmp3_privacy_method', $snmp3_privacy_method);
html_print_input_hidden('snmp3_privacy_pass', $snmp3_privacy_pass);
html_print_input_hidden('snmp3_security_level', $snmp3_security_level);
html_print_input_hidden('server_to_exec', $server_to_exec);
$table->width = '100%';
// Agent selector.
$table->data[0][0] = '<b>'.__('Interfaces').'</b>';
$table->data[0][1] = '';
$table->data[0][2] = '<b>'.__('Modules').'</b>';
$table->data[1][0] = html_print_select($interfaces_list, 'id_snmp[]', 0, false, '', '', true, true, true, '', false, 'width:500px; overflow: auto;');
$table->data[1][1] = __('When selecting interfaces');
$table->data[1][1] .= '<br>';
$table->data[1][1] .= html_print_select(
[
1 => __('Show common modules'),
0 => __('Show all modules'),
],
'modules_selection_mode',
1,
false,
'',
'',
true,
false,
false
);
$table->data[1][2] = html_print_select([], 'module[]', 0, false, '', 0, true, true, true, '', false, 'width:200px;');
$table->data[1][2] .= html_print_input_hidden('agent', $id_agent, true);
html_print_table($table);
echo "<div style='text-align:right; width:".$table->width."'>";
html_print_submit_button(__('Create modules'), '', false, ['class' => 'sub add']);
echo '</div>';
unset($table);
echo '</span>';
echo '</form>';
echo '</div>';
}
ui_require_jquery_file('pandora.controls');
ui_require_jquery_file('ajaxqueue');
ui_require_jquery_file('bgiframe');
?>
<script language="javascript" type="text/javascript">
/* <![CDATA[ */
$(document).ready (function () {
var inputActive = true;
$('#server_to_exec option').trigger('change');
$(document).data('text_for_module', $("#none_text").html());
$("#id_snmp").change(snmp_changed_by_multiple_snmp);
$("#snmp_version").change(function () {
if (this.value == "3") {
$("#snmp3_options").css("display", "");
}
else {
$("#snmp3_options").css("display", "none");
}
});
$("#walk_form").submit(function() {
$("#submit-snmp_walk").disable ();
$("#oid_loading").show ();
$("#no_snmp").hide ();
$("#form_interfaces").hide ();
});
// When select interfaces changes
$("#modules_selection_mode").change (function() {
$("#id_snmp").trigger('change');
});
});
function snmp_changed_by_multiple_snmp (event, id_snmp, selected) {
var idSNMP = Array();
var get_common_modules = $("#modules_selection_mode option:selected").val();
jQuery.each ($("#id_snmp option:selected"), function (i, val) {
idSNMP.push($(val).val());
});
$('#module').attr ('disabled', 1);
$('#module').empty ();
$('#module').append ($('<option></option>').html ("Loading...").attr ("value", 0));
jQuery.post ('ajax.php',
{"page" : "godmode/agentes/agent_manager",
"get_modules_json_for_multiple_snmp": 1,
"get_common_modules" : get_common_modules,
"id_snmp[]": idSNMP,
"id_snmp_serialize": $("#hidden-id_snmp_serialize").val()
},
function (data) {
$('#module').empty ();
c = 0;
jQuery.each (data, function (i, val) {
s = js_html_entity_decode(val);
$('#module').append ($('<option></option>').html (s).attr ("value", i));
$('#module').fadeIn ('normal');
c++;
});
if (c == 0) {
if (typeof($(document).data('text_for_module')) != 'undefined') {
$('#module').append ($('<option></option>').html ($(document).data('text_for_module')).attr("value", 0).prop('selected', true));
}
else {
if (typeof(data['any_text']) != 'undefined') {
$('#module').append ($('<option></option>').html (data['any_text']).attr ("value", 0).prop('selected', true));
}
else {
var anyText = $("#any_text").html(); //Trick for catch the translate text.
if (anyText == null) {
anyText = 'Any';
}
$('#module').append ($('<option></option>').html (anyText).attr ("value", 0).prop('selected', true));
}
}
}
if (selected != undefined)
$('#module').attr ('value', selected);
$('#module').removeAttr('disabled');
},
"json");
}
/* ]]> */
</script>

View File

@ -1,873 +0,0 @@
<?php
/**
* Pandora FMS - http://pandorafms.com.
* * ==================================================
* * Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
* * Please see http://pandorafms.org for full contribution list
* * This program is free software; you can redistribute it and/or
* * modify it under the terms of the GNU General Public License
* * as published by the Free Software Foundation; version 2
* * This program is distributed in the hope that it will be useful,
* * but WITHOUT ANY WARRANTY; without even the implied warranty of
* * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* * GNU General Public License for more details.
*/
global $config;
require_once $config['homedir'].'/include/functions_agents.php';
require_once 'include/functions_modules.php';
require_once 'include/functions_alerts.php';
require_once 'include/functions_reporting.php';
require_once 'include/functions_network_components.php';
require_once 'include/functions_wmi.php';
require_once 'include/graphs/functions_utils.php';
check_login();
$ip_target = (string) get_parameter('ip_target', $ipAgent);
// Host.
$plugin_user = (string) get_parameter('plugin_user', 'Administrator');
// Username.
$plugin_pass = io_safe_output(get_parameter('plugin_pass', ''));
// Password.
$tcp_send = (string) get_parameter('tcp_send');
// Namespace.
$server_to_exec = get_parameter('server_to_exec', 0);
// See if id_agente is set (either POST or GET, otherwise -1.
$id_agent = $idAgent;
// Get passed variables.
$wmiexplore = (int) get_parameter('wmiexplore', 0);
$create_modules = (int) get_parameter('create_modules', 0);
$interfaces = [];
$wmi_client = 'wmic';
if ($wmiexplore) {
$wmi_command = wmi_compose_query(
$wmi_client,
$plugin_user,
$plugin_pass,
$ip_target,
$tcp_send
);
$processes = [];
$services = [];
$disks = [];
$network_component_groups = [];
// Processes.
$wmi_processes = $wmi_command.' "select Name from Win32_Process"';
$processes_name_field = 1;
if (enterprise_installed() && (int) $server_to_exec != 0) {
$server_data = db_get_row('tserver', 'id_server', $server_to_exec);
if (empty($server_data['port'])) {
exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_processes."'",
$output,
$rc
);
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_processes."'",
$output,
$rc
);
}
} else {
exec($wmi_processes, $output);
}
$fail = false;
if (preg_match('/^Failed/', $output[0])) {
$fail = true;
}
if (!$fail) {
foreach ($output as $index => $row) {
// First and second rows are Class and column names, ignore it.
if ($index < 2) {
continue;
}
$row_exploded = explode('|', $row);
if (!in_array($row_exploded[$processes_name_field], $processes)) {
if (preg_match('/ERROR/', $row_exploded[$processes_name_field])) {
$processes[$row_exploded[$prouycesses_name_field]] = __('None');
} else {
$processes[$row_exploded[$prouycesses_name_field]] = $row_exploded[$processes_name_field];
}
}
}
unset($output);
// Services.
$wmi_services = $wmi_command.' "select Name from Win32_Service"';
$services_name_field = 0;
$services_check_field = 1;
if (enterprise_installed() && (int) $server_to_exec != 0) {
$server_data = db_get_row(
'tserver',
'id_server',
$server_to_exec
);
if (empty($server_data['port'])) {
exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_services."'",
$output,
$rc
);
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_services."'",
$output,
$rc
);
}
} else {
exec($wmi_services, $output);
}
foreach ($output as $index => $row) {
// First and second rows are Class and column names, ignore it.
if ($index < 2) {
continue;
}
$row_exploded = explode('|', $row);
if (!in_array($row_exploded[$services_name_field], $services)) {
if (preg_match('/ERROR/', $row_exploded[$services_name_field])) {
$services[$row_exploded[$services_name_field]] = __('None');
} else {
$services[$row_exploded[$services_name_field]] = $row_exploded[$services_name_field];
}
}
}
unset($output);
// Disks.
$wmi_disks = $wmi_command.' "Select DeviceID from Win32_LogicalDisk"';
$disks_name_field = 0;
if (enterprise_installed() && (int) $server_to_exec != 0) {
$server_data = db_get_row('tserver', 'id_server', $server_to_exec);
if (empty($server_data['port'])) {
exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_disks."'",
$output,
$rc
);
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_disks."'",
$output,
$rc
);
}
} else {
exec($wmi_disks, $output);
}
foreach ($output as $index => $row) {
// First and second rows are Class and column names, ignore it.
if ($index < 2) {
continue;
}
$row_exploded = explode('|', $row);
if (!in_array($row_exploded[$disks_name_field], $services)) {
if (preg_match('/ERROR/', $row_exploded[$disks_name_field])) {
$disks[$row_exploded[$disks_name_field]] = __('None');
} else {
$disk_string = sprintf(
__('Free space on %s'),
$row_exploded[$disks_name_field]
);
$disks[$row_exploded[$disks_name_field]] = $disk_string;
}
}
}
unset($output);
// WMI Components.
$network_component_groups = network_components_get_groups(MODULE_WMI);
}
}
if ($create_modules) {
$modules = get_parameter('module', []);
$services = [];
$processes = [];
$disks = [];
$components = [];
foreach ($modules as $module) {
// Split module data to get type.
$module_exploded = explode('_', $module);
$type = $module_exploded[0];
// Delete type from module data.
unset($module_exploded[0]);
// Rebuild module data.
$module = implode('_', $module_exploded);
switch ($type) {
case 'service':
$services[] = $module;
break;
case 'process':
$processes[] = $module;
break;
case 'disk':
$disks[] = $module;
break;
case 'component':
$components[] = $module;
break;
default:
// Default.
break;
}
}
// Common values for WMI modules.
$values = [
'ip_target' => $ip_target,
'tcp_send' => $tcp_send,
'plugin_user' => $plugin_user,
'plugin_pass' => $plugin_pass,
'id_modulo' => MODULE_WMI,
];
if ($server_to_exec != 0) {
$sql = sprintf(
'SELECT server_type FROM tserver WHERE id_server = %d',
$server_to_exec
);
$row = db_get_row_sql($sql);
if ($row['server_type'] == 13) {
$values['id_modulo'] = 1;
}
}
// Create Service modules.
$services_values = $values;
$services_values['snmp_community'] = 'Running';
// Key string.
$services_values['tcp_port'] = 1;
// Field number (Running/Stopped).
$services_values['id_tipo_modulo'] = 2;
// Generic boolean.
$services_result = wmi_create_wizard_modules(
$id_agent,
$services,
'services',
$services_values,
0,
0,
$server_to_exec
);
// Create Process modules.
$processes_values = $values;
$processes_values['tcp_port'] = 0;
// Field number (OID).
$processes_values['id_tipo_modulo'] = 2;
// Generic boolean.
$processes_result = wmi_create_wizard_modules(
$id_agent,
$processes,
'processes',
$processes_values,
0,
0,
$server_to_exec
);
// Create Space on disk modules.
$disks_values = $values;
$disks_values['tcp_port'] = 1;
// Free space in bytes.
$disks_values['id_tipo_modulo'] = 1;
// Generic numeric.
$disks_values['unit'] = 'Bytes';
// Unit.
$disks_result = wmi_create_wizard_modules(
$id_agent,
$disks,
'disks',
$disks_values,
0,
0,
$server_to_exec
);
// Create modules from component.
$components_values = $values;
$components_values['id_agente'] = $id_agent;
$components_result = wmi_create_module_from_components(
$components,
$components_values,
0,
0,
$server_to_exec
);
// Errors/Success messages.
$success_message = '';
$error_message = '';
if (!empty($services_result)) {
if (count($services_result[NOERR]) > 0) {
$success_message .= sprintf(
__('%s service modules created succesfully'),
count($services_result[NOERR])
).'<br>';
}
if (count($services_result[ERR_GENERIC]) > 0) {
$error_message .= sprintf(
__('Error creating %s service modules'),
count($services_result[ERR_GENERIC])
).'<br>';
}
}
if (!empty($processes_result)) {
if (count($processes_result[NOERR]) > 0) {
$success_message .= sprintf(
__('%s process modules created succesfully'),
count($processes_result[NOERR])
).'<br>';
}
if (count($processes_result[ERR_GENERIC]) > 0) {
$error_message .= sprintf(
__('Error creating %s process modules'),
count($processes_result[ERR_GENERIC])
).'<br>';
}
}
if (!empty($disks_result)) {
if (count($disks_result[NOERR]) > 0) {
$success_message .= sprintf(
__('%s disk space modules created succesfully'),
count($disks_result[NOERR])
).'<br>';
}
if (count($disks_result[ERR_GENERIC]) > 0) {
$error_message .= sprintf(
__('Error creating %s disk space modules'),
count($disks_result[ERR_GENERIC])
).'<br>';
}
}
if (!empty($components_result)) {
if (count($components_result[NOERR]) > 0) {
$success_message .= sprintf(
__('%s modules created from components succesfully'),
count($components_result[NOERR])
).'<br>';
}
if (count($components_result[ERR_GENERIC]) > 0) {
$error_message .= sprintf(
__('Error creating %s modules from components'),
count($components_result[ERR_GENERIC])
).'<br>';
}
if (count($components_result[ERR_EXIST]) > 0) {
$error_message .= sprintf(
__('%s modules already exist'),
count($components_result[ERR_EXIST])
).'<br>';
}
}
if (!empty($success_message)) {
ui_print_success_message($success_message);
}
if (!empty($error_message)) {
ui_print_error_message($error_message);
}
}
echo '<span id ="none_text" style="display: none;">'.__('None').'</span>';
echo "<form method='post' id='wmi_form'
action='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=wmi_explorer&id_agente=$id_agent'>";
$table->width = '100%';
$table->cellpadding = 0;
$table->cellspacing = 0;
$table->class = 'databox filters';
$table->data[0][0] = '<b>'.__('Target IP').'</b>';
$table->data[0][1] = html_print_input_text(
'ip_target',
$ip_target,
'',
15,
60,
true
);
$table->data[0][2] = '<b>'.__('Namespace').'</b>';
$table->data[0][3] = html_print_input_text(
'tcp_send',
$tcp_send,
'',
15,
60,
true
);
$table->data[1][0] = '<b>'.__('Username').'</b>';
$table->data[1][1] = html_print_input_text(
'plugin_user',
$plugin_user,
'',
15,
60,
true
);
$table->data[1][2] = '<b>'.__('Password').'</b>';
$table->data[1][3] = html_print_input_password(
'plugin_pass',
$plugin_pass,
'',
15,
60,
true
);
$table->data[1][3] .= '<div id="spinner_modules" style="float: left; display: none;">
'.html_print_image('images/spinner.gif', true).'</div>';
html_print_input_hidden('wmiexplore', 1);
$servers_to_exec = [];
$servers_to_exec[0] = __('Local console');
if (enterprise_installed()) {
enterprise_include_once('include/functions_satellite.php');
$rows = get_proxy_servers();
foreach ($rows as $row) {
if ($row['server_type'] != 13) {
$s_type = ' (Standard)';
} else {
$s_type = ' (Satellite)';
}
$servers_to_exec[$row['id_server']] = $row['name'].$s_type;
}
}
$table->data[2][0] = '<b>'.__('Server to execute command').'</b>'.ui_print_help_icon('agent_snmp_explorer_tab', true);
$table->data[2][1] = html_print_select(
$servers_to_exec,
'server_to_exec',
$server_to_exec,
'',
'',
'',
true
);
html_print_table($table);
echo "<div style='text-align:right; width:".$table->width."'>";
echo '<span id="oid_loading" class="invisible">
'.html_print_image('images/spinner.gif', true).'</span>';
html_print_submit_button(
__('WMI Explore'),
'wmi_explore',
false,
['class' => 'sub next']
);
echo '</div><br>';
if ($wmiexplore && $fail) {
ui_print_error_message(__('Unable to do WMI explorer'));
}
unset($table);
echo '</form>';
if ($wmiexplore && !$fail) {
echo '<br><span id ="none_text" style="display: none;">'.__('None').'</span>';
echo "<form method='post'
action='index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=agent_wizard&wizard_section=wmi_explorer&id_agente=$id_agent'>";
echo '<span id="form_interfaces">';
html_print_input_hidden('create_modules', 1);
html_print_input_hidden('ip_target', $ip_target);
// Host.
html_print_input_hidden('plugin_user', $plugin_user);
// User.
html_print_input_hidden('plugin_pass', $plugin_pass);
// Password.
html_print_input_hidden('tcp_send', $tcp_send);
// Namespace.
html_print_input_hidden('server_to_exec', $server_to_exec);
$table->width = '100%';
// Mode selector.
$modes = [];
$modes['services'] = __('Services');
$modes['processes'] = __('Processes');
$modes['disks'] = __('Free space on disk');
$modes['components'] = __('WMI components');
$table->data[1][0] = __('Wizard mode').': ';
$table->data[1][0] .= html_print_select(
$modes,
'wmi_wizard_modes',
'',
'',
'',
'',
true,
false,
false
);
$table->cellstyle[1][0] = 'vertical-align: middle;';
$table->colspan[1][0] = 2;
$table->data[1][2] = '<b>'.__('Modules').'</b>';
$table->cellstyle[1][2] = 'text-align: center;';
// Components list.
$table->data[2][0] = '<div class="wizard_mode_form wizard_mode_components">';
$table->data[2][0] .= __('Filter by group').'<br>';
$table->data[2][0] .= html_print_select(
$network_component_groups,
'network_component_group',
'',
'',
'',
'',
true,
false,
false,
'',
false,
'width: 300px;'
).'<br>';
$table->data[2][0] .= html_print_select(
[],
'network_component',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width: 300px;'
);
$table->data[2][0] .= '</div>';
// Services list.
$table->data[2][0] .= '<div class="wizard_mode_form wizard_mode_services">';
$table->data[2][0] .= html_print_select(
$services,
'services',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width: 300px;'
);
$table->data[2][0] .= '</div>';
// Processes list.
$table->data[2][0] .= '<div class="wizard_mode_form wizard_mode_processes">';
$table->data[2][0] .= html_print_select(
$processes,
'processes',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width: 300px;'
);
$table->data[2][0] .= '</div>';
$table->data[2][0] .= '<span id="no_component"
class="invisible error wizard_mode_form wizard_mode_components">';
$table->data[2][0] .= __('No component was found');
$table->data[2][0] .= '</span>';
// Disks list.
$table->data[2][0] .= '<div class="wizard_mode_form wizard_mode_disks">';
$table->data[2][0] .= html_print_select(
$disks,
'disks',
'',
'',
'',
'',
true,
true,
true,
'',
false,
'width: 300px;'
);
$table->data[2][0] .= '</div>';
$table->cellstyle[2][0] = 'vertical-align: bottom; text-align: center;';
// Components arrow.
$table->data[2][1] = '<div
class="wizard_mode_form wizard_mode_components wizard_mode_components_arrow clickable">
'.html_print_image(
'images/darrowright.png',
true,
['title' => __('Add to modules list')]
).'</div>';
// Services arrow.
$table->data[2][1] .= '<div
class="wizard_mode_form wizard_mode_services wizard_mode_services_arrow clickable">
'.html_print_image(
'images/darrowright.png',
true,
['title' => __('Add to modules list')]
).'</div>';
// Processes arrow.
$table->data[2][1] .= '<div
class="wizard_mode_form wizard_mode_processes wizard_mode_processes_arrow clickable">
'.html_print_image(
'images/darrowright.png',
true,
['title' => __('Add to modules list')]
).'</div>';
// Disks arrow.
$table->data[2][1] .= '<div
class="wizard_mode_form wizard_mode_disks wizard_mode_disks_arrow clickable">
'.html_print_image(
'images/darrowright.png',
true,
['title' => __('Add to modules list')]
).'</div>';
$table->data[2][1] .= '<br><br>
<div class="wizard_mode_delete_arrow clickable">
'.html_print_image(
'images/cross.png',
true,
['title' => __('Remove from modules list')]
).'</div>';
$table->cellstyle[2][1] = 'vertical-align: middle; text-align: center;';
$table->data[2][2] = html_print_select(
[],
'module[]',
0,
false,
'',
0,
true,
true,
true,
'',
false,
'width:300px; height: 100%;'
);
$table->data[2][2] .= html_print_input_hidden(
'agent',
$id_agent,
true
);
$table->cellstyle[2][2] = 'vertical-align: top; text-align: center;';
html_print_table($table);
echo "<div style='text-align:right; width:".$table->width."'>";
html_print_submit_button(
__('Create modules'),
'create_modules_btn',
false,
['class' => 'sub add']
);
echo '</div>';
unset($table);
echo '</span>';
echo '</form>';
echo '</div>';
}
ui_require_jquery_file('pandora.controls');
ui_require_jquery_file('ajaxqueue');
ui_require_jquery_file('bgiframe');
ui_require_javascript_file('pandora_modules');
?>
<script language="javascript" type="text/javascript">
/* <![CDATA[ */
$(document).ready (function () {
$("#wmi_form").submit(function() {
$("#oid_loading").show ();
});
network_component_group_change_event();
$('#network_component_group').trigger('change');
$("#wmi_wizard_modes").change(function() {
$(".wizard_mode_form").hide();
var selected_mode = $("#wmi_wizard_modes").val();
$(".wizard_mode_" + selected_mode).show();
$('#form_interfaces').show();
});
$("#wmi_wizard_modes").trigger('change');
<?php
if (!$wmiexplore || $fail) {
?>
$('#form_interfaces').hide();
<?php
}
?>
$('.wizard_mode_services_arrow').click(function() {
jQuery.each($("select[name='services'] option:selected"), function (key, value) {
var id = 'service_' + $(value).attr('value');
var name = $(value).html() + ' (<?php echo __('Service'); ?>)';
if (name != <?php echo "'".__('None')."'"; ?>) {
if($("#module").find("option[value='" + id + "']").length == 0) {
$("select[name='module[]']").append($("<option></option>").val(id).html(name));
}
else {
alert("<?php echo __('Repeated'); ?>");
}
$("#module").find("option[value='0']").remove();
}
});
});
$('.wizard_mode_processes_arrow').click(function() {
jQuery.each($("select[name='processes'] option:selected"), function (key, value) {
var id = 'process_' + $(value).attr('value');
var name = $(value).html() + ' (<?php echo __('Process'); ?>)';
if (name != <?php echo "'".__('None')."'"; ?>) {
if($("#module").find("option[value='" + id + "']").length == 0) {
$("select[name='module[]']").append($("<option></option>").val(id).html(name));
}
else {
alert("<?php echo __('Repeated'); ?>");
}
$("#module").find("option[value='0']").remove();
}
});
});
$('.wizard_mode_disks_arrow').click(function() {
jQuery.each($("select[name='disks'] option:selected"), function (key, value) {
var id = 'disk_' + $(value).attr('value');
var name = $(value).html();
if (name != <?php echo "'".__('None')."'"; ?>) {
if($("#module").find("option[value='" + id + "']").length == 0) {
$("select[name='module[]']").append($("<option></option>").val(id).html(name));
}
else {
alert("<?php echo __('Repeated'); ?>");
}
$("#module").find("option[value='0']").remove();
}
});
});
$('.wizard_mode_components_arrow').click(function() {
jQuery.each($("select[name='network_component'] option:selected"), function (key, value) {
var id = 'component_' + $(value).attr('value');
var name = $(value).html();
if (name != <?php echo "'".__('None')."'"; ?>) {
if($("#module").find("option[value='" + id + "']").length == 0) {
$("select[name='module[]']").append($("<option></option>").val(id).html(name));
}
else {
alert("<?php echo __('Repeated'); ?>");
}
$("#module").find("option[value='0']").remove();
}
});
});
$('.wizard_mode_delete_arrow').click(function() {
jQuery.each($("select[name='module[]'] option:selected"), function (key, value) {
var name = $(value).html();
if (name != <?php echo "'".__('None')."'"; ?>) {
$(value).remove();
}
});
if($("#module option").length == 0) {
$("select[name='module[]']").append($("<option></option>").val(0).html(<?php echo "'".__('None')."'"; ?>));
}
});
$("#submit-create_modules_btn").click(function () {
if($("#module option").length == 0 || ($("#module option").length == 1 && $("#module option").eq(0).val() == 0)) {
alert("<?php echo __('Modules list is empty'); ?>");
return false;
}
$('#module option').map(function() {
$(this).prop('selected', true);
});
});
});
/* ]]> */
</script>

View File

@ -1378,8 +1378,8 @@ if ($update_module || $create_module) {
$ip_target = (string) get_parameter('ip_target');
// No autofill if the module is a webserver module.
if ($ip_target == ''
&& $id_module_type < MODULE_WEBSERVER_CHECK_LATENCY
&& $id_module_type > MODULE_WEBSERVER_RETRIEVE_STRING_DATA
&& $id_module_type < MODULE_TYPE_WEB_DATA
&& $id_module_type > MODULE_TYPE_WEB_CONTENT_STRING
) {
$ip_target = 'auto';
}

View File

@ -47,6 +47,39 @@ require_once $config['homedir'].'/include/functions_categories.php';
enterprise_include_once('meta/include/functions_components_meta.php');
require_once $config['homedir'].'/include/functions_component_groups.php';
// Header.
if (defined('METACONSOLE')) {
$sec = 'advanced';
$id_modulo = (int) get_parameter('id_component_type');
$new_component = (bool) get_parameter('new_component');
} else {
$id_modulo = (int) get_parameter('id_component_type');
$new_component = (bool) get_parameter('new_component');
if ($id_modulo == COMPONENT_TYPE_NETWORK || $id_modulo == COMPONENT_TYPE_PLUGIN || $id_modulo == COMPONENT_TYPE_WMI || $id_modulo == COMPONENT_TYPE_WIZARD) {
$help_header = 'local_module_tab';
} else if (!$new_component) {
$help_header = 'network_component_tab';
} else {
$help_header = 'network_component_tab';
}
ui_print_page_header(
__('Remote components'),
'',
false,
$help_header,
true,
'',
false,
'modulemodal',
GENERIC_SIZE_TEXT,
'',
__('Configuration').'&nbsp;/&nbsp;'.__('Templates').'&nbsp;/&nbsp;'.__('Remote components')
);
$sec = 'gmodules';
}
$type = (int) get_parameter('type');
$name = (string) get_parameter('name');
$description = (string) get_parameter('description');
@ -180,6 +213,68 @@ if ($duplicate_network_component) {
$id = 0;
}
// Wizard Common.
$module_enabled = get_parameter_switch('module_enabled');
$module_protocol = get_parameter('module_protocol', 'snmp');
$scan_type = (int) get_parameter('scan_type', SCAN_TYPE_FIXED);
$execution_type = (int) get_parameter('execution_type', EXECUTION_TYPE_NETWORK);
// Wizard SNMP.
$manufacturer_id = get_parameter('manufacturer_id');
$name_oid = get_parameter('name_oid');
$value = get_parameter('value_oid');
// Other Wizard WMI fields.
$query_filter = '';
$wmi_class = get_parameter('wmi_class');
$query_key_field = get_parameter('query_key_field');
// Enabled Module.
$enabled = get_parameter_switch('enabled');
if ($id_modulo === COMPONENT_TYPE_WIZARD) {
// Wizard Common extra fields.
$macros = [];
$macros['satellite_execution'] = get_parameter('satellite_execution_'.$module_protocol);
$macros['value_operation'] = get_parameter('value_operation_'.$module_protocol);
$macros['server_plugin'] = get_parameter('server_plugin_'.$module_protocol);
if ($module_protocol === 'snmp') {
// If not select any manufacturer_id, there is 'all'.
if (empty($manufacturer_id) === true) {
$manufacturer_id = 'all';
}
} else if ($module_protocol === 'wmi') {
// Wizard WMI Query filters.
$query_filter = [];
$query_filter['scan'] = get_parameter('query_filter_scan');
$query_filter['execution'] = get_parameter('query_filter_execution');
$query_filter['field'] = get_parameter('field_value_filter');
$query_filter['key_string'] = get_parameter('key_string_filter');
$query_filter = json_encode($query_filter);
}
// Default extra field.
$extra_fields = [ 'extra_field_1' => '' ];
// If Plugin execution is selected.
if ($execution_type === EXECUTION_TYPE_PLUGIN || $module_protocol === 'wmi') {
// Search all parameters received with extra_fields.
foreach ($_REQUEST as $parameter => $thisValue) {
// Extra fields (OIDs Macros or WMI Extra fields)
if (preg_match('/extra_field_'.$module_protocol.'_/', $parameter) !== 0) {
$tmpParameter = explode('_', $parameter);
$extra_fields['extra_field_'.$tmpParameter[3]] = get_parameter($parameter);
}
// The plugin macros.
if (preg_match('/'.$module_protocol.'_field/', $parameter) !== 0) {
$macros[$parameter] = io_safe_input($thisValue);
}
}
// All of macros saved in the same array.
$macros = json_encode(array_merge($extra_fields, $macros));
}
}
$custom_string_1 = '';
$custom_string_2 = '';
$custom_string_3 = '';
@ -210,7 +305,7 @@ if (defined('METACONSOLE')) {
$sec = 'gmodules';
}
if ($type >= 15 && $type <= 18) {
if ($type >= MODULE_TYPE_REMOTE_SNMP && $type <= MODULE_TYPE_REMOTE_SNMP_PROC) {
// New support for snmp v3.
$tcp_send = $snmp_version;
$plugin_user = $snmp3_auth_user;
@ -219,7 +314,7 @@ if ($type >= 15 && $type <= 18) {
$custom_string_1 = $snmp3_privacy_method;
$custom_string_2 = $snmp3_privacy_pass;
$custom_string_3 = $snmp3_security_level;
} else if ($type >= 34 && $type <= 37) {
} else if ($type >= MODULE_TYPE_REMOTE_CMD && $type <= MODULE_TYPE_REMOTE_CMD_INC) {
$tcp_send = $command_text;
$custom_string_1 = $command_credential_identifier;
$custom_string_2 = $command_os;
@ -275,7 +370,6 @@ if ($create_component) {
'post_process' => $post_process,
'unit' => $unit,
'wizard_level' => $wizard_level,
'macros' => $macros,
'critical_instructions' => $critical_instructions,
'warning_instructions' => $warning_instructions,
'unknown_instructions' => $unknown_instructions,
@ -289,6 +383,17 @@ if ($create_component) {
'min_ff_event_critical' => $ff_event_critical,
'ff_type' => $ff_type,
'each_ff' => $each_ff,
'manufacturer_id' => $manufacturer_id,
'protocol' => $module_protocol,
'scan_type' => $scan_type,
'execution_type' => $execution_type,
'value' => $value,
'query_class' => $wmi_class,
'query_key_field' => $query_key_field,
'query_filters' => $query_filter,
'name_oid' => $name_oid,
'module_enabled' => $module_enabled,
'enabled' => $enabled,
]
);
} else {
@ -298,9 +403,17 @@ if ($create_component) {
if ($id === false || !$id) {
db_pandora_audit(
'Module management',
'Fail try to create network component'
'Fail try to create remote component'
);
ui_print_error_message(__('Could not be created'));
if ($name_check !== false) {
// If name exists, advice about it.
ui_print_error_message(__('Could not be created because the component exists'));
} else {
// Other cases.
ui_print_error_message(__('Could not be created'));
}
include_once 'godmode/modules/manage_network_components_form.php';
return;
}
@ -356,7 +469,6 @@ if ($update_component) {
'post_process' => $post_process,
'unit' => $unit,
'wizard_level' => $wizard_level,
'macros' => $macros,
'critical_instructions' => $critical_instructions,
'warning_instructions' => $warning_instructions,
'unknown_instructions' => $unknown_instructions,
@ -370,6 +482,17 @@ if ($update_component) {
'min_ff_event_critical' => $ff_event_critical,
'ff_type' => $ff_type,
'each_ff' => $each_ff,
'manufacturer_id' => $manufacturer_id,
'protocol' => $module_protocol,
'scan_type' => $scan_type,
'execution_type' => $execution_type,
'value' => $value,
'query_class' => $wmi_class,
'query_key_field' => $query_key_field,
'query_filters' => $query_filter,
'name_oid' => $name_oid,
'module_enabled' => $module_enabled,
'enabled' => $enabled,
]
);
} else {
@ -559,11 +682,6 @@ foreach ($component_groups as $component_group_key => $component_group_val) {
);
}
}
// Only show component groups with local components.
if ($num_components == 0 && $num_components_childs == 0) {
unset($component_groups[$component_group_key]);
}
}
$table->data[0][1] = html_print_select(
@ -665,14 +783,16 @@ $table->head['checkbox'] = html_print_checkbox(
false
);
$table->head[0] = __('Module name');
$table->head[1] = __('Type');
$table->head[1] = __('Server');
$table->head[2] = __('Type');
$table->head[3] = __('Description');
$table->head[4] = __('Group');
$table->head[5] = __('Max/Min');
$table->head[6] = __('Action');
$table->size = [];
$table->size['checkbox'] = '20px';
$table->size[1] = '75px';
$table->size[1] = '40px';
$table->size[2] = '50px';
$table->size[6] = '80px';
$table->align[6] = 'left';
$table->data = [];
@ -698,7 +818,6 @@ foreach ($components as $component) {
$data[0] = '<a href="index.php?sec='.$sec.'&sec2=godmode/modules/manage_network_components&id='.$component['id_nc'].'&pure='.$pure.'">';
$data[0] .= io_safe_output($component['name']);
$data[0] .= '</a>';
$data[1] = ui_print_moduletype_icon($component['type'], true);
switch ($component['id_modulo']) {
case MODULE_NETWORK:
$data[1] .= html_print_image(
@ -724,11 +843,20 @@ foreach ($components as $component) {
);
break;
case MODULE_WIZARD:
$data[1] .= html_print_image(
'images/wand.png',
true,
['title' => __('Wizard module')]
);
break;
default:
// Not possible.
break;
}
$data[2] = ui_print_moduletype_icon($component['type'], true);
$data[3] = "<span style='font-size: 8px'>".mb_strimwidth(io_safe_output($component['description']), 0, 60, '...').'</span>';
$data[4] = network_components_get_group_name($component['id_group']);
$data[5] = $component['max'].' / '.$component['min'];
@ -777,9 +905,10 @@ echo '<div class="" style="float:right;">';
html_print_input_hidden('new_component', 1);
html_print_select(
[
2 => __('Create a new network component'),
4 => __('Create a new plugin component'),
6 => __('Create a new WMI component'),
COMPONENT_TYPE_NETWORK => __('Create a new network component'),
COMPONENT_TYPE_PLUGIN => __('Create a new plugin component'),
COMPONENT_TYPE_WMI => __('Create a new WMI component'),
COMPONENT_TYPE_WIZARD => __('Create a new wizard component'),
],
'id_component_type',
'',

View File

@ -110,56 +110,69 @@ if ($create_network_from_module) {
if (isset($id)) {
$component = network_components_get_network_component((int) $id);
if ($component !== false) {
$id_component_type = $component['id_modulo'];
$name = $component['name'];
$type = $component['type'];
$description = $component['description'];
$max = $component['max'];
$min = $component['min'];
$module_interval = $component['module_interval'];
$tcp_port = $component['tcp_port'];
$tcp_rcv = $component['tcp_rcv'];
$tcp_send = $component['tcp_send'];
$snmp_community = $component['snmp_community'];
$snmp_oid = $component['snmp_oid'];
$id_module_group = $component['id_module_group'];
$id_group = $component['id_group'];
$id_plugin = $component['id_plugin'];
$plugin_user = $component['plugin_user'];
$plugin_pass = io_output_password($component['plugin_pass']);
$plugin_parameter = $component['plugin_parameter'];
$macros = $component['macros'];
$max_timeout = $component['max_timeout'];
$max_retries = $component['max_retries'];
$dynamic_interval = $component['dynamic_interval'];
$dynamic_max = $component['dynamic_max'];
$dynamic_min = $component['dynamic_min'];
$dynamic_two_tailed = $component['dynamic_two_tailed'];
$min_warning = $component['min_warning'];
$max_warning = $component['max_warning'];
$str_warning = $component['str_warning'];
$max_critical = $component['max_critical'];
$min_critical = $component['min_critical'];
$str_critical = $component['str_critical'];
$ff_event = $component['min_ff_event'];
$history_data = $component['history_data'];
$post_process = $component['post_process'];
$unit = $component['unit'];
$wizard_level = $component['wizard_level'];
$critical_instructions = $component['critical_instructions'];
$warning_instructions = $component['warning_instructions'];
$unknown_instructions = $component['unknown_instructions'];
$critical_inverse = $component['critical_inverse'];
$warning_inverse = $component['warning_inverse'];
$id_category = $component['id_category'];
$tags = $component['tags'];
$ff_event_normal = $component['min_ff_event_normal'];
$ff_event_warning = $component['min_ff_event_warning'];
$ff_event_critical = $component['min_ff_event_critical'];
$ff_type = $component['ff_type'];
$each_ff = $component['each_ff'];
$id_component_type = $component['id_modulo'];
$name = $component['name'];
$type = $component['type'];
$description = $component['description'];
$max = $component['max'];
$min = $component['min'];
$module_interval = $component['module_interval'];
$tcp_port = $component['tcp_port'];
$tcp_rcv = $component['tcp_rcv'];
$tcp_send = $component['tcp_send'];
$snmp_community = $component['snmp_community'];
$snmp_oid = $component['snmp_oid'];
$id_module_group = $component['id_module_group'];
$id_group = $component['id_group'];
$id_plugin = $component['id_plugin'];
$plugin_user = $component['plugin_user'];
$plugin_pass = io_output_password($component['plugin_pass']);
$plugin_parameter = $component['plugin_parameter'];
$macros = $component['macros'];
$max_timeout = $component['max_timeout'];
$max_retries = $component['max_retries'];
$dynamic_interval = $component['dynamic_interval'];
$dynamic_max = $component['dynamic_max'];
$dynamic_min = $component['dynamic_min'];
$dynamic_two_tailed = $component['dynamic_two_tailed'];
$min_warning = $component['min_warning'];
$max_warning = $component['max_warning'];
$str_warning = $component['str_warning'];
$max_critical = $component['max_critical'];
$min_critical = $component['min_critical'];
$str_critical = $component['str_critical'];
$ff_event = $component['min_ff_event'];
$history_data = $component['history_data'];
$post_process = $component['post_process'];
$unit = $component['unit'];
$wizard_level = $component['wizard_level'];
$critical_instructions = $component['critical_instructions'];
$warning_instructions = $component['warning_instructions'];
$unknown_instructions = $component['unknown_instructions'];
$critical_inverse = $component['critical_inverse'];
$warning_inverse = $component['warning_inverse'];
$id_category = $component['id_category'];
$tags = $component['tags'];
$ff_event_normal = $component['min_ff_event_normal'];
$ff_event_warning = $component['min_ff_event_warning'];
$ff_event_critical = $component['min_ff_event_critical'];
$ff_type = $component['ff_type'];
$each_ff = $component['each_ff'];
$manufacturer_id = $component['manufacturer_id'];
$module_protocol = $component['protocol'];
$scan_type = $component['scan_type'];
$execution_type = $component['execution_type'];
$value = $component['value'];
$wmi_class = $component['query_class'];
$query_key_field = $component['query_key_field'];
$query_Key_wmi = $component['key_string'];
$name_oid = $component['name_oid'];
$value_oid = $component['value_oid'];
$query_filter = $component['query_filters'];
$module_enabled = $component['module_enabled'];
$enabled = $component['enabled'];
if ($type >= 15 && $type <= 18) {
if ($type >= MODULE_TYPE_REMOTE_SNMP && $type <= MODULE_TYPE_REMOTE_SNMP_PROC) {
// New support for snmp v3.
$snmp_version = $component['tcp_send'];
$snmp3_auth_user = $component['plugin_user'];
@ -170,7 +183,7 @@ if (isset($id)) {
$component['custom_string_2']
);
$snmp3_security_level = $component['custom_string_3'];
} else if ($type >= 34 && $type <= 37) {
} else if ($type >= MODULE_TYPE_REMOTE_CMD && $type <= MODULE_TYPE_REMOTE_CMD_INC) {
$command_text = $component['tcp_send'];
$command_credential_identifier = $component['custom_string_1'];
$command_os = $component['custom_string_2'];
@ -192,7 +205,7 @@ if (isset($id)) {
$tcp_send = '';
$snmp_community = '';
$id_module_group = '';
if ($id_component_type == 6) {
if ($id_component_type == COMPONENT_TYPE_WMI) {
$id_group = 14;
} else {
$id_group = '';
@ -238,28 +251,67 @@ if (isset($id)) {
$command_text = '';
$command_os = 'inherited';
$command_credential_identifier = '';
$macros = '';
$manufacturer_id = '';
$module_protocol = 'snmp';
$scan_type = SCAN_TYPE_FIXED;
$execution_type = EXECUTION_TYPE_NETWORK;
$value = '';
$wmi_class = '';
$query_key_field = '';
$query_Key_wmi = '';
$name_oid = '';
$value_oid = '';
$query_filter = '';
$module_enabled = true;
$enabled = true;
}
}
$table = new stdClass();
if ($id_component_type == 6) {
/**
* Common function for adding rows to main table
*
* @param array $row Array with the data for add.
* @param mixed $id If added, the DOM id for this block.
*
* @return void
*/
function push_table_row($row, $id=false)
{
global $table;
if ($id) {
$data = [$id => $row];
} else {
$data = [$row];
}
$table->data = array_merge($table->data, $data);
}
$remote_components_path = $config['homedir'].'/godmode/modules/';
if ($id_component_type == COMPONENT_TYPE_WMI) {
$categories = [
0,
1,
2,
];
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_wmi.php';
} else if ($id_component_type == 4) {
include $remote_components_path.'manage_network_components_form_common.php';
include $remote_components_path.'manage_network_components_form_wmi.php';
} else if ($id_component_type == COMPONENT_TYPE_PLUGIN) {
$categories = [
0,
1,
2,
];
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_plugin.php';
} else if ($id_component_type == 2 || $create_network_from_module) {
include $remote_components_path.'manage_network_components_form_common.php';
include $remote_components_path.'manage_network_components_form_plugin.php';
} else if ($id_component_type == COMPONENT_TYPE_WIZARD) {
$categories = [
3,
4,
@ -269,8 +321,19 @@ if ($id_component_type == 6) {
$categories[] = 10;
}
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_network.php';
include $remote_components_path.'manage_network_components_form_wizard.php';
} else if ($id_component_type == COMPONENT_TYPE_NETWORK || $create_network_from_module) {
$categories = [
3,
4,
5,
];
if (enterprise_installed()) {
$categories[] = 10;
}
include $remote_components_path.'manage_network_components_form_common.php';
include $remote_components_path.'manage_network_components_form_network.php';
} else {
return;
}
@ -291,15 +354,10 @@ if (defined('METACONSOLE')) {
$table->headstyle[0] = 'text-align: center';
}
$table->colspan['description'][1] = 3;
$data = [];
$data[0] = __('Description');
$data[1] = html_print_textarea('description', 2, 65, $description, '', true);
push_table_row($data, 'description');
html_print_table($table);
echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_button(__('Go back'), 'go_back', false, 'history.go(-1);', 'class="sub cancel"');
html_print_input_hidden('id_component_type', $id_component_type);
if ($id) {
html_print_input_hidden('update_component', 1);

View File

@ -23,23 +23,6 @@ if (! check_acl($config['id_user'], 0, 'PM') && ! check_acl($config['id_user'],
return;
}
include_javascript_d3();
function push_table_row($row, $id=false)
{
global $table;
if ($id) {
$data = [$id => $row];
} else {
$data = [$row];
}
$table->data = array_merge($table->data, $data);
}
$table->id = 'network_component';
$table->width = '100%';
$table->class = 'databox';
@ -323,7 +306,11 @@ $table->data[12][0] = __('Unknown instructions').ui_print_help_tip(__('Instructi
$table->data[12][1] = html_print_textarea('unknown_instructions', 2, 65, $unknown_instructions, '', true);
$table->colspan[12][1] = 3;
$next_row = 13;
$table->data[13][0] = __('Description');
$table->data[13][1] = html_print_textarea('description', 2, 65, $description, '', true);
$table->colspan[13][1] = 3;
$next_row = 14;
if (check_acl($config['id_user'], 0, 'PM')) {
$table->data[$next_row][0] = __('Category');

View File

@ -187,8 +187,21 @@ $data[1] = html_print_extended_select_for_post_process(
false,
true
);
$data[2] = '';
$data[3] = '';
$data[2] = __('Name OID').'&nbsp;'.ui_print_help_icon('xxx', true);
$data[3] = html_print_input_text_extended(
'name_oid',
$name_oid,
'name_oid',
'',
30,
10000,
'',
'',
'',
true
);
push_table_row($data, 'field_process');
// Advanced stuff.

View File

@ -0,0 +1,839 @@
<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2020 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
global $config;
require_once $config['homedir'].'/include/graphs/functions_d3.php';
check_login();
include_javascript_d3();
if (!check_acl($config['id_user'], 0, 'PM')
&& !check_acl($config['id_user'], 0, 'AW')
) {
db_pandora_audit('ACL Violation', 'Trying to access Agent Management');
include 'general/noaccess.php';
return;
}
/**
* Add to the table the extra fields.
*
* @param array $extra_fields Array with the extra fields needed.
* @param string $protocol Protocol for define the text.
*
* @return void
*/
function generateExtraFields($extra_fields, $protocol)
{
global $table;
$cntFields = 0;
foreach ($extra_fields as $k => $field) {
// Avoid the not extra fields.
if (preg_match('/extra_field_/', $k) === 0) {
continue;
} else {
$cntFields++;
}
// Get the number of extra field.
$tmpExtraField = explode('_', $k);
$idField = $tmpExtraField[2];
if ($protocol === 'snmp') {
$extraFieldText = '_oid_'.$idField.'_';
$rowId = 'pluginRow-'.$protocol.'Row';
} else if ($protocol === 'wmi') {
$extraFieldText = '_field_wmi_'.$idField.'_';
$rowId = $protocol.'Row';
}
$data = [];
$data[0] = '<div style="text-align: right;">'.$extraFieldText.'</div>';
$data[1] = html_print_input_text_extended(
'extra_field_'.$protocol.'_'.$idField,
$field,
'extra_field_'.$protocol.'_'.$idField,
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['oid-list-'.$rowId.'-row-'.$idField][1] = 3;
push_table_row($data, 'oid-list-'.$rowId.'-row-'.$idField);
}
$data = [];
$image_add = html_print_div(
[
'id' => 'add_field_button',
'class' => 'float-right clickable',
'content' => html_print_image(
'images/add.png',
true,
[
'title' => __('Add a macro oid'),
'onclick' => 'manageComponentFields(\'add\', \'oid-list-'.$rowId.'\');',
]
),
],
true
);
$image_del = html_print_div(
[
'id' => 'del_field_button',
'class' => 'float-right',
'style' => $cntFields <= 1 ? 'opacity: 0.5;' : '',
'content' => html_print_image(
'images/cross.png',
true,
[
'title' => __('Remove last macro oid'),
'onclick' => 'manageComponentFields(\'del\', \'oid-list-'.$rowId.'\');',
'style' => 'margin-left: 1em;',
]
),
],
true
);
$data[0] = html_print_div(
[
'id' => 'combo_oid_button',
'content' => $image_del.$image_add,
],
true
);
push_table_row($data, 'manage-oid-list-'.$rowId);
}
// Get the data.
$module_type_list = [
MODULE_TYPE_NUMERIC => __('Numeric'),
MODULE_TYPE_INCREMENTAL => __('Incremental'),
MODULE_TYPE_BOOLEAN => __('Boolean'),
MODULE_TYPE_ALPHANUMERIC => __('Alphanumeric'),
];
$module_protocol_list = [
'snmp' => 'SNMP',
'wmi' => 'WMI',
];
$scan_type_list = [
SCAN_TYPE_FIXED => 'Fixed',
SCAN_TYPE_DYNAMIC => 'Dynamic',
];
$execution_type_list = [
EXECUTION_TYPE_NETWORK => 'Network',
EXECUTION_TYPE_PLUGIN => 'Plugin',
];
// Establish module type value.
switch ($type) {
case MODULE_TYPE_REMOTE_SNMP:
case MODULE_TYPE_GENERIC_DATA:
$module_type = MODULE_TYPE_NUMERIC;
break;
case MODULE_TYPE_REMOTE_SNMP_INC:
case MODULE_TYPE_GENERIC_DATA_INC:
$module_type = MODULE_TYPE_INCREMENTAL;
break;
case MODULE_TYPE_REMOTE_SNMP_STRING:
case MODULE_TYPE_GENERIC_DATA_STRING:
$module_type = MODULE_TYPE_ALPHANUMERIC;
break;
case MODULE_TYPE_REMOTE_SNMP_PROC:
case MODULE_TYPE_GENERIC_PROC:
$module_type = MODULE_TYPE_BOOLEAN;
break;
default:
$module_type = MODULE_TYPE_NUMERIC;
break;
}
if (empty($query_filter) === false) {
$query_filter = json_decode($query_filter, true);
}
$component_group_list = network_components_get_groups();
// List of server plugins related with Wizard SNMP.
$server_plugin_data = [];
$server_plugin_list = [];
$plugins = db_get_all_rows_sql(
'SELECT id, description, execute, name, macros, parameters FROM tplugin'
);
foreach ($plugins as $plugin) {
$server_plugin_list[$plugin['id']] = $plugin['name'];
$server_plugin_data[$plugin['id']] = [
'description' => $plugin['description'],
'name' => $plugin['name'],
'parameters' => $plugin['parameters'],
'macros' => array_reverse(json_decode($plugin['macros'], true)),
'execute' => $plugin['execute'],
'macrosElement' => base64_encode(json_encode(io_safe_output(json_decode($macros, true)))),
];
}
// Store the plugin data for JS managing in JSON format.
$hiddenPluginServers = '';
foreach ($server_plugin_data as $index => $plugin) {
// Description can have special chars that would crash Javascript.
$plugin['description'] = mb_strimwidth(io_safe_output($plugin['description']), 0, 80, '...');
$hiddenPluginServers .= html_print_input_hidden(
'server_plugin_data_'.$index,
json_encode(io_safe_input($plugin))
);
}
// Generate needed OID macros.
$extra_fields_names = [];
foreach ($extra_fields as $k => $field) {
$extra_fields_names[$k] = $module_protocol === 'snmp' ? '_oid_'.$k.'_' : $k;
}
// Convert the string DB format of macros to JSON.
$macros = json_decode($macros);
// Only for extra field generate purposes.
if (empty($macros) === true) {
$macros = ['extra_field_1' => ''];
}
//
// Construction of form.
//
$table->id = 'network_component';
$table->width = '100%';
$table->class = 'databox';
$table->style = [];
$table->style[0] = 'font-weight: bold';
$table->style[2] = 'font-weight: bold';
$table->colspan = [];
if (!enterprise_installed()) {
$table->colspan[0][1] = 3;
}
$table->data = [];
$data = [];
$data[0] = __('Enabled');
$data[1] = html_print_checkbox_switch(
'enabled',
1,
$enabled,
true,
false,
'',
false
);
$data[2] = __('Add by default');
$data[3] = html_print_checkbox_switch(
'module_enabled',
1,
$module_enabled,
true,
false,
'',
false
);
push_table_row($data, 'module-enable-row');
$data = [];
$data[0] = __('Module name');
$data[1] = html_print_input_text_extended(
'name',
$name,
'name',
'',
50,
255,
'',
'',
'',
true
);
$data[2] = __('Module protocol');
$data[3] = html_print_select(
$module_protocol_list,
'module_protocol',
$module_protocol,
'manageVisibleFields()',
'',
'',
true,
false,
false,
''
).'&nbsp;'.html_print_image(
'images/'.$module_protocol.'.png',
true,
[
'title' => strtoupper($module_protocol).'&nbsp;'.__('Protocol'),
'class' => 'add_comments_button',
'style' => 'width: 18px;',
'id' => 'module_protocol_symbol',
]
);
$type = 4;
$data[4] = html_print_input_hidden('type', $type, true);
push_table_row($data, 'module-name-type-row');
$data = [];
$data[0] = __('Name OID');
$data[1] = html_print_input_text('name_oid', $name_oid, '', 50, 255, true);
$data[2] = __('Manufacturer ID');
$data[3] = html_print_select_from_sql(
'SELECT manufacturer as `id`, manufacturer FROM tpen GROUP BY manufacturer',
'manufacturer_id',
$manufacturer_id,
'',
'All',
'',
true,
false,
false,
''
);
push_table_row($data, 'manufacturer-nameOID-snmpRow-row');
$data = [];
$data[0] = __('Module type');
$data[1] = html_print_select(
$module_type_list,
'module_type',
$module_type,
'changeModuleType()',
'',
'',
true,
false,
false,
''
);
$data[2] = __('Component Group');
$data[3] = html_print_select(
$component_group_list,
'id_group',
$id_group,
'',
'',
'',
true,
false,
false,
''
);
push_table_row($data, 'moduleType-blockName-row');
$data = [];
$data[0] = __('Module unit');
$data[1] = html_print_extended_select_for_unit(
'unit',
$unit,
'',
'',
'0',
false,
true,
false,
false
);
push_table_row($data, 'moduleUnit-blockName-row');
$data = [];
$data[0] = __('Warning');
// Warning interval values.
$data[1] = '<span class="minmax_values" id="warning_minmax_values">';
$data[1] .= '<em>'.__('Min.').'</em>&nbsp;';
$data[1] .= html_print_input_text('min_warning', $min_warning, '', 5, 15, true);
$data[1] .= '<br /><em>'.__('Max.').'</em>&nbsp;';
$data[1] .= html_print_input_text('max_warning', $max_warning, '', 5, 15, true);
$data[1] .= '</span>';
// Warning string values.
$data[1] .= '<span class="string_values" id="warning_string_values"><em>'.__('String').' </em>&nbsp;';
$data[1] .= html_print_input_text('str_warning', $str_warning, '', 5, 1024, true).'</span>';
// Warning inverse values.
$data[1] .= '<br /><em>'.__('Inverse interval').'</em>&nbsp;';
$data[1] .= html_print_checkbox('warning_inverse', 1, $warning_inverse, true);
$data[2] = '<svg id="svg_dinamic" width="500" height="300"> </svg>';
$table->colspan['warning-svg-row'][2] = 2;
$table->rowspan['warning-svg-row'][2] = 3;
push_table_row($data, 'warning-svg-row');
$data = [];
$data[0] = __('Critical');
// Critical interval values.
$data[1] = '<span class="minmax_values" id="critical_minmax_values">';
$data[1] .= '<em>'.__('Min.').'</em>&nbsp;';
$data[1] .= html_print_input_text(
'min_critical',
$min_critical,
'',
5,
15,
true
);
$data[1] .= '<br /><em>'.__('Max.').'</em>&nbsp;';
$data[1] .= html_print_input_text(
'max_critical',
$max_critical,
'',
5,
15,
true
);
$data[1] .= '</span>';
// Critical string values.
$data[1] .= '<span class="string_values" id="critical_string_values"><em>'.__('String').' </em>&nbsp;';
$data[1] .= html_print_input_text('str_critical', $str_critical, '', 5, 1024, true).'</span>';
// Critical inverse values.
$data[1] .= '<br /><em>'.__('Inverse interval').'</em>&nbsp;';
$data[1] .= html_print_checkbox('critical_inverse', 1, $critical_inverse, true);
push_table_row($data, 'critical-row');
$data = [];
$data[0] = __('Description');
$data[1] = html_print_textarea('description', 2, 65, $description, '', true);
$table->colspan['module-description-row'][1] = 3;
push_table_row($data, 'module-description-row');
$data = [];
$data[0] = __('Scan Type');
$data[1] = html_print_select(
$scan_type_list,
'scan_type',
$scan_type,
'',
'',
'',
true,
false,
false,
''
);
$data[2] = __('Execution type');
$data[3] = html_print_select(
$execution_type_list,
'execution_type',
$execution_type,
'manageVisibleFields()',
'',
'',
true,
false,
false,
''
);
push_table_row($data, 'scan-execution-row');
//
// SNMP rows.
//
$data = [];
$data[0] = __('Value OID');
$data[1] = html_print_input_text_extended(
'value_oid',
(string) $value,
'value_oid',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['value-oid-networkRow-snmpRow'][1] = 3;
push_table_row($data, 'value-oid-networkRow-snmpRow');
$data = [];
$data[0] = __('Macros OID');
push_table_row($data, 'title-oid-macros-pluginRow-snmpRow');
// Generation of extra fields needed.
generateExtraFields($macros, 'snmp');
$data = [];
$data[0] = __('Value operation');
$data[1] = html_print_input_text_extended(
'value_operation_snmp',
$macros->value_operation,
'value_operation_snmp',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['value-operation-pluginRow-snmpRow'][1] = 3;
push_table_row($data, 'value-operation-pluginRow-snmpRow');
$data = [];
$data[0] = __('Satellite execution');
$data[1] = html_print_input_text_extended(
'satellite_execution_snmp',
$macros->satellite_execution,
'satellite_execution_snmp',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['satellite-execution-pluginRow-snmpRow'][1] = 3;
push_table_row($data, 'satellite-execution-pluginRow-snmpRow');
$data = [];
$data[0] = __('Server plugin');
$data[1] = html_print_select(
$server_plugin_list,
'server_plugin_snmp',
$macros->server_plugin,
'changePlugin()',
'',
'',
true,
false,
false,
''
).'&nbsp;&nbsp;&nbsp;<span id="selected_plugin_description_snmp"></span>';
push_table_row($data, 'server-plugin-pluginRow-snmpRow');
// The creation of this fields will be dynamically.
$data = [];
$data[0] = 'field0';
$data[1] = html_print_input_text_extended(
'field0_snmp_field',
'',
'field0_snmp_fields',
'',
30,
255,
'',
'',
'',
true
);
push_table_row($data, 'plugin-snmp-fields-dynamicMacroRow-pluginRow-snmpRow-0');
//
// WMI Fields.
//
$data = [];
$data[0] = __('WMI class');
$data[1] = html_print_input_text_extended(
'wmi_class',
$wmi_class,
'wmi_class',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['wmi-class-wmiRow'][1] = 3;
push_table_row($data, 'wmi-class-wmiRow');
$data = [];
$data[0] = __('Query key field').'&nbsp;(_field_wmi_0_)';
$data[1] = html_print_input_text_extended(
'query_key_field',
$query_key_field,
'query_key_field',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['query-key-field-wmiRow'][1] = 3;
push_table_row($data, 'query-key-field-wmiRow');
$data = [];
$data[0] = __('Query extra fields');
push_table_row($data, 'title-extra-field-wmiRow');
// Generation of extra fields needed.
generateExtraFields($macros, 'wmi');
$data = [];
$data[0] = __('Query filters');
$table->style[0] = 'font-weight: bold;';
push_table_row($data, 'title-query-filters-wmiRow');
$data = [];
$data[0] = '<div style="text-align: right;">'.__('Scan').'</div>';
$data[1] = html_print_input_text_extended(
'query_filter_scan',
$query_filter['scan'],
'query_filter_scan',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['query-filter-scan-wmiRow'][1] = 3;
push_table_row($data, 'query-filter-scan-wmiRow');
if ($execution_type == EXECUTION_TYPE_NETWORK) {
$data = [];
$data[0] = '<div style="text-align: right;">'.__('Execution').'</div>';
$data[1] = html_print_input_text_extended(
'query_filter_execution',
$query_filter['execution'],
'query_filter_execution',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['query-filter-execution-wmiRow'][1] = 3;
push_table_row($data, 'query-filter-execution-wmiRow');
}
$data = [];
$data[0] = __('Field value');
$data[1] = html_print_input_number(
[
'name' => 'field_value_filter',
'value' => $query_filter['field'],
'id' => 'field_value_filter',
'min' => 0,
'return' => true,
]
);
$data[2] = __('Key string');
$data[3] = html_print_input_text_extended(
'key_string_filter',
$query_filter['key_string'],
'key_string_filter',
'',
30,
255,
'',
'',
'',
true
);
push_table_row($data, 'filters-list-fields-networkRow-wmiRow');
$data = [];
$data[0] = __('Value operation');
$data[1] = html_print_input_text_extended(
'value_operation_wmi',
$macros->value_operation,
'value_operation_wmi',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['value-operation-pluginRow-wmiRow'][1] = 3;
push_table_row($data, 'value-operation-pluginRow-wmiRow');
$data = [];
$data[0] = __('Satellite execution');
$data[1] = html_print_input_text_extended(
'satellite_execution_wmi',
$macros->satellite_execution,
'satellite_execution_wmi',
'',
100,
10000,
'',
'',
'',
true
);
$table->colspan['satellite-execution-pluginRow-wmiRow'][1] = 3;
push_table_row($data, 'satellite-execution-pluginRow-wmiRow');
$data = [];
$data[0] = __('Server plugin');
$data[1] = html_print_select(
$server_plugin_list,
'server_plugin_wmi',
$macros->server_plugin,
'changePlugin()',
'',
'',
true,
false,
false,
''
).'&nbsp;&nbsp;&nbsp;<span id="selected_plugin_description_wmi"></span>';
push_table_row($data, 'server-plugin-pluginRow-wmiRow');
// The creation of this fields will be dynamically.
$data = [];
$data[0] = 'field0';
$data[1] = html_print_input_text_extended(
'field0_wmi_field',
'',
'field0_wmi_fields',
'',
30,
255,
'',
'',
'',
true
);
push_table_row($data, 'plugin-wmi-fields-dynamicMacroRow-pluginRow-wmiRow-0');
?>
<script type="text/javascript">
// Definition of constants
const EXECUTION_TYPE_NETWORK =
<?php
echo '"'.EXECUTION_TYPE_NETWORK.'"';
?>
;
const EXECUTION_TYPE_PLUGIN =
<?php
echo '"'.EXECUTION_TYPE_PLUGIN.'"';
?>
;
const MODULE_TYPE_NUMERIC =
<?php
echo '"'.MODULE_TYPE_NUMERIC.'"';
?>
;
const MODULE_TYPE_INCREMENTAL =
<?php
echo '"'.MODULE_TYPE_INCREMENTAL.'"';
?>
;
const MODULE_TYPE_BOOLEAN =
<?php
echo '"'.MODULE_TYPE_BOOLEAN.'"';
?>
;
const MODULE_TYPE_ALPHANUMERIC =
<?php
echo '"'.MODULE_TYPE_ALPHANUMERIC.'"';
?>
;
const MODULE_TYPE_REMOTE_SNMP =
<?php
echo '"'.MODULE_TYPE_REMOTE_SNMP.'"';
?>
;
const MODULE_TYPE_REMOTE_SNMP_INC =
<?php
echo '"'.MODULE_TYPE_REMOTE_SNMP_INC.'"';
?>
;
const MODULE_TYPE_REMOTE_SNMP_STRING =
<?php
echo '"'.MODULE_TYPE_REMOTE_SNMP_STRING.'"';
?>
;
const MODULE_TYPE_REMOTE_SNMP_PROC =
<?php
echo '"'.MODULE_TYPE_REMOTE_SNMP_PROC.'"';
?>
;
const MODULE_TYPE_GENERIC_DATA =
<?php
echo '"'.MODULE_TYPE_GENERIC_DATA.'"';
?>
;
const MODULE_TYPE_GENERIC_PROC =
<?php
echo '"'.MODULE_TYPE_GENERIC_PROC.'"';
?>
;
const MODULE_TYPE_GENERIC_DATA_STRING =
<?php
echo '"'.MODULE_TYPE_GENERIC_DATA_STRING.'"';
?>
;
const MODULE_TYPE_GENERIC_DATA_INC =
<?php
echo '"'.MODULE_TYPE_GENERIC_DATA_INC.'"';
?>
;
$(document).ready(function(){
// Show the needed fields.
manageVisibleFields();
// Show the proper module type
changeModuleType();
$(
"#network_component-plugin-snmp-fields-dynamicMacroRow-pluginRow-snmpRow-0"
).attr("style", "display: none;");
// Change plugin values and macros.
changePlugin();
});
</script>

View File

@ -484,6 +484,16 @@ switch ($action) {
$period = $item['period'];
break;
case 'last_value':
$description = $item['description'];
$idAgentModule = $item['id_agent_module'];
$idAgent = db_get_value_filter(
'id_agente',
'tagente_modulo',
['id_agente_modulo' => $idAgentModule]
);
break;
case 'alert_report_module':
$description = $item['description'];
$idAgentModule = $item['id_agent_module'];
@ -744,6 +754,7 @@ switch ($action) {
case 'historical_data':
case 'sumatory':
case 'database_serialized':
case 'last_value':
case 'monitor_report':
case 'min_value':
case 'max_value':
@ -3843,6 +3854,7 @@ $(document).ready (function () {
case 'min_value':
case 'monitor_report':
case 'database_serialized':
case 'last_value':
case 'sumatory':
case 'historical_data':
case 'agent_configuration':
@ -3884,6 +3896,7 @@ $(document).ready (function () {
case 'max_value':
case 'min_value':
case 'database_serialized':
case 'last_value':
case 'sumatory':
case 'historical_data':
case 'increment':
@ -3964,6 +3977,7 @@ $(document).ready (function () {
case 'min_value':
case 'monitor_report':
case 'database_serialized':
case 'last_value':
case 'sumatory':
case 'historical_data':
case 'agent_configuration':
@ -4003,6 +4017,7 @@ $(document).ready (function () {
case 'max_value':
case 'min_value':
case 'database_serialized':
case 'last_value':
case 'sumatory':
case 'historical_data':
case 'increment':
@ -5142,6 +5157,12 @@ function chooseType() {
$("#row_historical_db_check").hide();
break;
case 'last_value':
$("#row_description").show();
$("#row_agent").show();
$("#row_module").show();
break;
case 'alert_report_module':
$("#row_description").show();
$("#row_agent").show();

View File

@ -83,9 +83,9 @@ foreach ($osList as $os) {
}
if (isset($data)) {
ui_pagination($count_osList, false, $offset);
ui_pagination($count_osList, ui_get_url_refresh(['message' => false]), $offset);
html_print_table($table);
ui_pagination($count_osList, false, $offset, 0, false, 'offset', true, 'pagination-bottom');
ui_pagination($count_osList, ui_get_url_refresh(['message' => false]), $offset, 0, false, 'offset', true, 'pagination-bottom');
} else {
ui_print_info_message(['no_close' => true, 'message' => __('There are no defined operating systems') ]);
}

View File

@ -24,6 +24,7 @@ if (! check_acl($config['id_user'], 0, 'PM') && ! is_user_admin($config['id_user
$action = get_parameter('action', 'new');
$idOS = get_parameter('id_os', 0);
$id_message = get_parameter('message', 0);
if (is_metaconsole()) {
$tab = get_parameter('tab2', 'list');
} else {
@ -50,6 +51,7 @@ switch ($action) {
$textButton = __('Create');
$classButton = 'class="sub next"';
break;
case 'edit':
$actionHidden = 'update';
$textButton = __('Update');
@ -71,15 +73,22 @@ switch ($action) {
}
if ($resultOrId === false) {
$message = ui_print_error_message(__('Fail creating OS'), '', true);
$message = 2;
$tab = 'builder';
$actionHidden = 'save';
$textButton = __('Create');
$classButton = 'class="sub next"';
} else {
$message = ui_print_success_message(__('Success creating OS'), '', true);
$tab = 'list';
$message = 1;
}
if (is_metaconsole()) {
header('Location:'.$config['homeurl'].'index.php?sec=advanced&sec2=advanced/component_management&tab=os_manage&tab2='.$tab.'&message='.$message);
} else {
header('Location:'.$config['homeurl'].'index.php?sec=gsetup&sec2=godmode/setup/os&tab='.$tab.'&message='.$message);
}
break;
case 'update':
@ -100,10 +109,11 @@ switch ($action) {
$result = db_process_sql_update('tconfig_os', $values, ['id_os' => $idOS]);
}
$message = ui_print_result_message($result, __('Success updatng OS'), __('Error updating OS'), '', true);
if ($result !== false) {
$message = 3;
$tab = 'list';
} else {
$message = 4;
$tab = 'builder';
$os = db_get_row_filter('tconfig_os', ['id_os' => $idOS]);
$name = $os['name'];
@ -112,6 +122,11 @@ switch ($action) {
$actionHidden = 'update';
$textButton = __('Update');
$classButton = 'class="sub upd"';
if (is_metaconsole()) {
header('Location:'.$config['homeurl'].'index.php?sec=advanced&sec2=advanced/component_management&tab=os_manage&tab2='.$tab.'&message='.$message);
} else {
header('Location:'.$config['homeurl'].'index.php?sec=gsetup&sec2=godmode/setup/os&tab='.$tab.'&message='.$message);
}
break;
case 'delete':
@ -120,11 +135,20 @@ switch ($action) {
$count = $count[0]['count'];
if ($count > 0) {
$message = ui_print_error_message(__('There are agents with this OS.'), '', true);
$message = 5;
} else {
$result = (bool) db_process_sql_delete('tconfig_os', ['id_os' => $idOS]);
if ($result) {
$message = 6;
} else {
$message = 7;
}
}
$message = ui_print_result_message($result, __('Success deleting'), __('Error deleting'), '', true);
if (is_metaconsole()) {
header('Location:'.$config['homeurl'].'index.php?sec=advanced&sec2=advanced/component_management&tab=os_manage&tab2='.$tab.'&message='.$message);
} else {
header('Location:'.$config['homeurl'].'index.php?sec=gsetup&sec2=godmode/setup/os&tab='.$tab.'&message='.$message);
}
break;
}
@ -143,11 +167,45 @@ $buttons = [
$buttons[$tab]['active'] = true;
if (!is_metaconsole()) {
// Header
// Header.
ui_print_page_header(__('Edit OS'), '', false, '', true, $buttons);
}
echo $message;
if (!empty($id_message)) {
switch ($id_message) {
case 1:
echo ui_print_success_message(__('Success creating OS'), '', true);
break;
case 2:
echo ui_print_error_message(__('Fail creating OS'), '', true);
break;
case 3:
echo ui_print_success_message(__('Success updating OS'), '', true);
break;
case 4:
echo ui_print_error_message(__('Error updating OS'), '', true);
break;
case 5:
echo ui_print_error_message(__('There are agents with this OS.'), '', true);
break;
case 6:
echo ui_print_success_message(__('Success deleting'), '', true);
break;
case 7:
echo ui_print_error_message(__('Error deleting'), '', true);
break;
default:
// Default.
break;
}
}
switch ($tab) {
case 'list':

View File

@ -332,15 +332,18 @@ $table->data[$i++][1] = html_print_input_text(
$table->data[$i][0] = __('Include agents manually disabled');
$table->data[$i++][1] = html_print_checkbox_switch('include_agents', 1, $config['include_agents'], true);
$table->data[$i][0] = __('Audit log directory');
$table->data[$i++][1] = html_print_input_text('auditdir', io_safe_output($config['auditdir']), '', 30, 100, true);
$table->data[$i][0] = __('Set alias as name by default in agent creation');
$table->data[$i++][1] = html_print_checkbox_switch('alias_as_name', 1, $config['alias_as_name'], true);
$table->data[$i][0] = __('Unique IP');
$table->data[$i++][1] = html_print_checkbox_switch('unique_ip', 1, $config['unique_ip'], true);
$table->data[$i][0] = __('Enable console log').ui_print_help_tip(__('Log location').': pandora_console/log/console.log', true);
$table->data[$i++][1] = html_print_checkbox_switch('console_log_enabled', 1, $config['console_log_enabled'], true);
$table->data[$i][0] = __('Enable audit log').ui_print_help_tip(__('Log location').': pandora_console/log/audit.log', true);
$table->data[$i++][1] = html_print_checkbox_switch('audit_log_enabled', 1, $config['audit_log_enabled'], true);
echo '<form id="form_setup" method="post" action="index.php?sec=gsetup&sec2=godmode/setup/setup&amp;section=general&amp;pure='.$config['pure'].'">';
echo '<fieldset>';

View File

@ -1065,8 +1065,12 @@ $row++;
}
}
// Logo
$table_report->data['custom_report_front-logo'][0] = __('Custom report front').' - '.__('Custom logo');
// Logo.
$table_report->data['custom_report_front-logo'][0] = __('Custom report front').' - '.__('Custom logo').ui_print_help_tip(
__("The dir of custom logos is in your www Console in 'images/custom_logo'. You can upload more files (ONLY JPEG AND PNG) in upload tool in console."),
true
);
$table_report->data['custom_report_front-logo'][1] = html_print_select(
$customLogos,
'custom_report_front_logo',
@ -1076,7 +1080,7 @@ $row++;
'',
true
);
// Preview
// Preview.
$table_report->data['custom_report_front-preview'][0] = __('Custom report front').' - '.'Preview';
if (empty($config['custom_report_front_logo'])) {
$config['custom_report_front_logo'] = 'images/pandora_logo_white.jpg';
@ -1084,23 +1088,32 @@ $row++;
$table_report->data['custom_report_front-preview'][1] = '<span id="preview_image">'.html_print_image($config['custom_report_front_logo'], true).'</span>';
// Header
// Header.
$table_report->data['custom_report_front-header'][0] = __('Custom report front').' - '.__('Header');
// Do not remove io_safe_output in textarea. TinyMCE avoids XSS injection.
$table_report->data['custom_report_front-header'][1] = html_print_textarea(
'custom_report_front_header',
5,
15,
$config['custom_report_front_header'],
io_safe_output($config['custom_report_front_header']),
'style="width: 38em;"',
true
);
// First page
// First page.
// Do not remove io_safe_output in textarea. TinyMCE avoids XSS injection.
if ($config['custom_report_front']) {
$firstpage_content = $config['custom_report_front_firstpage'];
} else {
$firstpage_content = io_safe_output($config['custom_report_front_firstpage']);
}
$table_report->data['custom_report_front-first_page'][0] = __('Custom report front').' - '.__('First page');
$custom_report_front_firstpage = str_replace(
'(_URLIMAGE_)',
ui_get_full_url(false, true, false, false),
$config['custom_report_front_firstpage']
io_safe_output($firstpage_content)
);
$table_report->data['custom_report_front-first_page'][1] = html_print_textarea(
'custom_report_front_firstpage',
@ -1111,13 +1124,15 @@ $row++;
true
);
// Footer
// Footer.
$table_report->data['custom_report_front-footer'][0] = __('Custom report front').' - '.__('Footer');
// Do not remove io_safe_output in textarea. TinyMCE avoids XSS injection.
$table_report->data['custom_report_front-footer'][1] = html_print_textarea(
'custom_report_front_footer',
5,
15,
$config['custom_report_front_footer'],
io_safe_output($config['custom_report_front_footer']),
'style="width: 38em;"',
true
);

View File

@ -865,16 +865,16 @@ if (check_login()) {
$table->align[8] = 'center';
$table->align[9] = 'right';
$table->headstyle[2] = 'min-width: 85px';
$table->headstyle[3] = 'min-width: 130px';
$table->size[3] = '30%';
$table->headstyle[2] = 'min-width: 65px';
$table->headstyle[3] = 'min-width: 80px';
$table->size[3] = '25%';
$table->style[3] = 'max-width: 28em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;';
$table->size[4] = '30%';
$table->headstyle[5] = 'min-width: 85px';
$table->headstyle[6] = 'min-width: 125px; text-align: center;';
$table->headstyle[7] = 'min-width: 125px;';
$table->headstyle[8] = 'min-width: 100px; text-align: center;';
$table->headstyle[9] = 'min-width: 120px; text-align: right;';
$table->size[4] = '25%';
$table->headstyle[5] = 'min-width: 65px';
$table->headstyle[6] = 'min-width: 80px; text-align: center;';
$table->headstyle[7] = 'min-width: 80px;';
$table->headstyle[8] = 'min-width: 70px; text-align: center;';
$table->headstyle[9] = 'min-width: 100px; text-align: right;';
$last_modulegroup = 0;
$rowIndex = 0;

View File

@ -13,6 +13,7 @@
// GNU General Public License for more details.
require_once $config['homedir'].'/include/functions_config.php';
require_once $config['homedir'].'/include/functions_snmp_browser.php';
require_once $config['homedir'].'/include/functions_snmp.php';
require_once $config['homedir'].'/include/functions_network_components.php';
@ -112,6 +113,17 @@ if (is_ajax()) {
$output .= '</div>';
$output .= '</div>';
// Dialog no agent selected.
$output .= '<div id="dialog_no_agents_selected" style="display:none" title="'.__('SNMP modules').'">';
$output .= '<div>';
$output .= "<div style='width:25%; float:left'><img style='padding-left:20px; padding-top:20px;' src='images/icono_error_mr.png'></div>";
$output .= "<div style='width:75%; float:left;'><h3><strong style='font-family:Verdana; font-size:13pt;'>ERROR</strong></h3>";
$output .= "<p style='font-family:Verdana; font-size:12pt;margin-bottom: 0px'>".__('Module must be applied to an agent or a policy').'</p>';
$output .= "<p id='error_text' style='font-family:Verdana; font-size:12pt;'></p>";
$output .= '</div>';
$output .= '</div>';
$output .= '</div>';
echo $output;
}
@ -158,6 +170,11 @@ if (is_ajax()) {
$id_target = explode(',', $id_items[0]);
}
if (empty($id_items[0])) {
echo json_encode([0 => -1]);
exit;
}
$snmp_extradata = get_parameter('snmp_extradata', '');
if (!is_array($snmp_extradata)) {

File diff suppressed because it is too large Load Diff

View File

@ -226,6 +226,19 @@ class ConsoleSupervisor
* NOTIF.HAMASTER.MESSAGE
*/
$this->checkHaStatus();
/*
* Check if the Pandora Console log
* file remains in old location.
*/
$this->checkPandoraConsoleLogOldLocation();
/*
* Check if the audit log file
* remains in old location.
*/
$this->checkAuditLogOldLocation();
}
@ -463,6 +476,17 @@ class ConsoleSupervisor
$this->checkHaStatus();
}
/*
* Check if the audit log file
* remains in old location.
*/
$this->checkAuditLogOldLocation();
/*
Check if AllowOverride is None or All.
*/
$this->checkAllowOverrideEnabled();
}
@ -1363,7 +1387,7 @@ class ConsoleSupervisor
$this->cleanNotifications('NOTIF.PHP.INPUT_TIME');
}
if ($PHPmax_execution_time !== '0') {
if ((int) $PHPmax_execution_time !== 0) {
$url = 'http://php.net/manual/en/info.configuration.php#ini.max-execution-time';
if ($config['language'] == 'es') {
$url = 'http://php.net/manual/es/info.configuration.php#ini.max-execution-time';
@ -2255,8 +2279,8 @@ class ConsoleSupervisor
ui_get_full_url(false)
);
$message_conf_cron .= ENTERPRISE_DIR.'/'.EXTENSIONS_DIR;
$message_conf_cron .= '/cron/cron.php &gt;&gt; ';
$message_conf_cron .= $config['homedir'].'/pandora_console.log</pre>';
$message_conf_cron .= '/cron/cron.php &gt;&gt; </pre>';
$message_conf_cron .= $config['homedir'].'/log/cron.log</pre>';
}
if (isset($config['cron_last_run']) === true) {
@ -2485,4 +2509,77 @@ class ConsoleSupervisor
}
/*
* Check if Pandora console log file remains in old location.
*
* @return void
*/
public function checkPandoraConsoleLogOldLocation()
{
global $config;
if (file_exists($config['homedir'].'/pandora_console.log')) {
$title_pandoraconsole_old_log = __(
'Pandora FMS console log file changed location',
$config['homedir']
);
$message_pandoraconsole_old_log = __(
'Pandora FMS console log file has been moved to new location %s/log. Currently you have an outdated and inoperative version of this file at %s. Please, consider deleting it.',
$config['homedir'],
$config['homedir']
);
$url = 'https://wiki.pandorafms.com/index.php?title=Pandora:QuickGuides_EN:General_Quick_Guide#Solving_problems._Where_to_look_and_who_to_ask';
if ($config['language'] == 'es') {
$url = 'https://wiki.pandorafms.com/index.php?title=Pandora:QuickGuides_ES:Guia_Rapida_General#Soluci.C3.B3n_de_problemas._D.C3.B3nde_mirar.2C_a_qui.C3.A9n_preguntar';
}
$this->notify(
[
'type' => 'NOTIF.PANDORACONSOLE.LOG.OLD',
'title' => __($title_pandoraconsole_old_log),
'message' => __($message_pandoraconsole_old_log),
'url' => $url,
]
);
} else {
$this->cleanNotifications('NOTIF.PANDORACONSOLE.LOG.OLD');
}
}
/**
* Check if audit log file remains in old location.
*
* @return void
*/
public function checkAuditLogOldLocation()
{
global $config;
if (file_exists($config['homedir'].'/audit.log')) {
$title_audit_old_log = __(
'Pandora FMS audit log file changed location',
$config['homedir']
);
$message_audit_old_log = __(
'Pandora FMS audit log file has been moved to new location %s/log. Currently you have an outdated and inoperative version of this file at %s. Please, consider deleting it.',
$config['homedir'],
$config['homedir']
);
$this->notify(
[
'type' => 'NOTIF.AUDIT.LOG.OLD',
'title' => __($title_audit_old_log),
'message' => __($message_audit_old_log),
'url' => '#',
]
);
} else {
$this->cleanNotifications('NOTIF.AUDIT.LOG.OLD');
}
}
}

View File

@ -1008,7 +1008,7 @@ class Diagnostics extends Wizard
$pathErrLogs = '/var/log/pandora/pandora_server.error';
$errors = $this->getLogInfo($pathErrLogs);
$pathConsoleLogs = $config['homedir'].'/pandora_console.log';
$pathConsoleLogs = $config['homedir'].'/log/console.log';
$console = $this->getLogInfo($pathConsoleLogs);
$result = [
@ -2079,7 +2079,7 @@ class Diagnostics extends Wizard
],
'text' => [
ui_print_error_message(__('Invalid cron task'), '', true),
ui_print_success_message(__('Cron task generated'), '', true),
ui_print_success_message(__('Sending of information has been processed'), '', true),
],
];

View File

@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
$build_version = 'PC200623';
$build_version = 'PC200701';
$pandora_version = 'v7.0NG.746';
// Do not overwrite default timezone set if defined.
@ -51,8 +51,6 @@ if ($develop_bypass != 1) {
}
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', $config['homedir'].'/pandora_console.log');
} else {
// Develop mode, show all notices and errors on Console (and log it)
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
@ -62,8 +60,6 @@ if ($develop_bypass != 1) {
}
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', $config['homedir'].'/pandora_console.log');
}
// Check if mysqli is available

View File

@ -50,7 +50,9 @@ define('EVENT_NO_VALIDATED', 3);
define('AGENT_ENABLED', 0);
define('AGENT_DISABLED', 1);
// Module disabled status.
define('MODULE_ENABLED', 0);
define('MODULE_DISABLED', 1);
// Error report codes.
define('NOERR', 11111);
@ -347,6 +349,7 @@ define('MODULE_PREDICTION', 5);
define('MODULE_WMI', 6);
define('MODULE_WEB', 7);
define('MODULE_WUX', 8);
define('MODULE_WIZARD', 9);
// Type of Modules of Prediction.
define('MODULE_PREDICTION_SERVICE', 2);
@ -674,3 +677,54 @@ define('W_CREATE_MODULE', 3);
define('W_CREATE_ALERT', 4);
define('W_CREATE_TASK', 5);
define('WELCOME_FINISHED', -1);
// Fixed tnetwork_component values.
define('MODULE_TYPE_NUMERIC', 1);
define('MODULE_TYPE_INCREMENTAL', 2);
define('MODULE_TYPE_BOOLEAN', 3);
define('MODULE_TYPE_ALPHANUMERIC', 4);
define('SCAN_TYPE_FIXED', 1);
define('SCAN_TYPE_DYNAMIC', 2);
define('EXECUTION_TYPE_NETWORK', 1);
define('EXECUTION_TYPE_PLUGIN', 2);
// Id of component type.
define('COMPONENT_TYPE_NETWORK', 2);
define('COMPONENT_TYPE_PLUGIN', 4);
define('COMPONENT_TYPE_WMI', 6);
define('COMPONENT_TYPE_WIZARD', 9);
// Wizard Internal Plugins.
define('PLUGIN_WIZARD_SNMP_MODULE', 1);
define('PLUGIN_WIZARD_SNMP_PROCESS', 2);
define('PLUGIN_WIZARD_WMI_MODULE', 3);
// Module Types.
define('MODULE_TYPE_GENERIC_DATA', 1);
define('MODULE_TYPE_GENERIC_PROC', 2);
define('MODULE_TYPE_GENERIC_DATA_STRING', 3);
define('MODULE_TYPE_GENERIC_DATA_INC', 4);
define('MODULE_TYPE_GENERIC_DATA_INC_ABS', 5);
define('MODULE_TYPE_REMOTE_ICMP_PROC', 6);
define('MODULE_TYPE_REMOTE_ICMP', 7);
define('MODULE_TYPE_REMOTE_TCP', 8);
define('MODULE_TYPE_REMOTE_TCP_PROC', 9);
define('MODULE_TYPE_REMOTE_TCP_STRING', 10);
define('MODULE_TYPE_REMOTE_TCP_INC', 11);
define('MODULE_TYPE_REMOTE_SNMP', 15);
define('MODULE_TYPE_REMOTE_SNMP_INC', 16);
define('MODULE_TYPE_REMOTE_SNMP_STRING', 17);
define('MODULE_TYPE_REMOTE_SNMP_PROC', 18);
define('MODULE_TYPE_ASYNC_PROC', 21);
define('MODULE_TYPE_ASYNC_DATA', 22);
define('MODULE_TYPE_ASYNC_STRING', 23);
define('MODULE_TYPE_WEB_ANALYSIS', 25);
define('MODULE_TYPE_WEB_DATA', 30);
define('MODULE_TYPE_WEB_PROC', 31);
define('MODULE_TYPE_WEB_CONTENT_DATA', 32);
define('MODULE_TYPE_WEB_CONTENT_STRING', 33);
define('MODULE_TYPE_REMOTE_CMD', 34);
define('MODULE_TYPE_REMOTE_CMD_PROC', 35);
define('MODULE_TYPE_REMOTE_CMD_STRING', 36);
define('MODULE_TYPE_REMOTE_CMD_INC', 37);
define('MODULE_TYPE_KEEP_ALIVE', 100);

View File

@ -4011,7 +4011,7 @@ function generate_hash_to_api()
* @param string Key to identify the profiler run.
* @param string Way to display the result
* "link" (default): Click into word "Performance" to display the profilling info.
* "console": Display with a message in pandora_console.log.
* "console": Display with a message in console.log.
*/
function pandora_xhprof_display_result($key='', $method='link')
{

View File

@ -1631,8 +1631,10 @@ function agents_get_alias($id_agent, $case='none')
}
// Check cache.
if (isset($cache[$case][$id_agent])) {
return $cache[$case][$id_agent];
if (!is_metaconsole()) {
if (isset($cache[$case][$id_agent])) {
return $cache[$case][$id_agent];
}
}
$alias = (string) db_get_value(
@ -1656,7 +1658,61 @@ function agents_get_alias($id_agent, $case='none')
break;
}
$cache[$case][$id_agent] = $alias;
if (!is_metaconsole()) {
$cache[$case][$id_agent] = $alias;
}
return $alias;
}
/**
* Get alias of an agent in metaconsole (cached function).
*
* @param integer $id_agent Agent id.
* @param string $case Case (upper, lower, none).
* @param integer $id_server server id.
*
* @return string Alias of the given agent.
*/
function agents_get_alias_metaconsole($id_agent, $case='none', $id_server=false)
{
global $config;
// Prepare cache.
static $cache = [];
if (empty($case)) {
$case = 'none';
}
// Check cache.
if (isset($cache[$case][$id_server][$id_agent])) {
return $cache[$case][$id_server][$id_agent];
}
$alias = (string) db_get_value_filter(
'alias',
'tmetaconsole_agent',
[
'id_tagente' => $id_agent,
'id_tmetaconsole_setup' => $id_server,
]
);
switch ($case) {
case 'upper':
$alias = mb_strtoupper($alias, 'UTF-8');
break;
case 'lower':
$alias = mb_strtolower($alias, 'UTF-8');
break;
default:
// Not posible.
break;
}
$cache[$case][$id_server][$id_agent] = $alias;
return $alias;
}

View File

@ -10723,7 +10723,7 @@ function get_events_with_user($trash1, $trash2, $other, $returnType, $user_in_db
$data['type'] = 'array';
$data['data'] = $result;
// returnData($returnType, $data, $separator);
returnData($returnType, $data, $separator);
if (empty($result)) {
return false;
}
@ -10840,6 +10840,8 @@ function api_get_events($trash1, $trash2, $other, $returnType, $user_in_db=null)
returnError('ERROR_API_PANDORAFMS', $returnType);
}
}
return;
}
if ($other['type'] == 'string') {

View File

@ -323,8 +323,12 @@ function config_update_config()
$error_update[] = __('alias_as_name');
}
if (!config_update_value('auditdir', get_parameter('auditdir'))) {
$error_update[] = __('Audit log directory');
if (!config_update_value('console_log_enabled', get_parameter('console_log_enabled'))) {
$error_update[] = __('Console log enabled');
}
if (!config_update_value('audit_log_enabled', get_parameter('audit_log_enabled'))) {
$error_update[] = __('Audit log enabled');
}
if (!config_update_value('unique_ip', get_parameter('unique_ip'))) {
@ -1930,14 +1934,12 @@ function config_process_config()
config_update_value('alias_as_name', 0);
}
if (!isset($config['auditdir'])) {
$auditdir = '/var/www/html/pandora_console';
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// Windows.
$auditdir = $config['homedir'];
}
if (!isset($config['console_log_enabled'])) {
config_update_value('console_log_enabled', 0);
}
config_update_value('auditdir', $auditdir);
if (!isset($config['audit_log_enabled'])) {
config_update_value('audit_log_enabled', 0);
}
if (!isset($config['elasticsearch_ip'])) {

View File

@ -251,10 +251,8 @@ function db_pandora_audit($accion, $descripcion, $user_id=false, $ip=true, $info
$valor = ''.$values['fecha'].' - '.io_safe_output($id).' - '.io_safe_output($accion).' - '.$ip.' - '.io_safe_output($descripcion)."\n";
if (empty($config['auditdir'])) {
file_put_contents($config['homedir'].'/audit.log', $valor, FILE_APPEND);
} else {
file_put_contents($config['auditdir'].'/audit.log', $valor, FILE_APPEND);
if ($config['audit_log_enabled']) {
file_put_contents($config['homedir'].'/log/audit.log', $valor, FILE_APPEND);
}
enterprise_include_once('include/functions_audit.php');

View File

@ -1797,6 +1797,7 @@ function html_print_div($options, $return=false)
'id',
'style',
'class',
'title',
];
if (isset($options['hidden'])) {
@ -2224,21 +2225,36 @@ function html_print_input_image($name, $src, $value, $style='', $return=false, $
*
* The element will have an id like: "hidden-$name"
*
* @param string $name Input name.
* @param string $value Input value.
* @param boolean $return Whether to return an output string or echo now (optional, echo by default).
* @param string $class Set the class of input.
* @param string $name Input name.
* @param string $value Input value.
* @param boolean $return Whether to return an output string or echo now
* (optional, echo by default).
* @param string $class Set the class of input.
* @param string $attributes String with the needed attributes to add.
* @param string $id Specific id.
*
* @return string HTML code if return parameter is true.
*/
function html_print_input_hidden($name, $value, $return=false, $class=false)
{
function html_print_input_hidden(
$name,
$value,
$return=false,
$class=false,
$attributes=false,
$id=''
) {
if ($class !== false) {
$classText = 'class="'.$class.'"';
} else {
$classText = '';
}
if ($attributes !== false) {
$otherAttributes = $attributes;
} else {
$otherAttributes = '';
}
$separator = '"';
if (is_string($value)) {
@ -2247,7 +2263,12 @@ function html_print_input_hidden($name, $value, $return=false, $class=false)
}
}
$output = '<input id="hidden-'.$name.'" '.'name="'.$name.'" '.'type="hidden" '.$classText.' '.'value='.$separator.$value.$separator.' />';
$idInput = 'hidden-'.$name;
if (empty($id) === false) {
$idInput = $id;
}
$output = '<input id="'.$idInput.'" name="'.$name.'" type="hidden" '.$classText.' value='.$separator.$value.$separator.' '.$otherAttributes.'/>';
if ($return) {
return $output;
@ -3042,34 +3063,53 @@ function html_print_checkbox(
/**
* Render a checkbox button input switch type. Extended version, use html_print_checkbox_switch() to simplify.
* Render a checkbox button input switch type.
* Extended version, use html_print_checkbox_switch() to simplify.
*
* @param string Input name.
* @param string Input value.
* @param string Set the button to be marked (optional, unmarked by default).
* @param bool Disable the button (optional, button enabled by default).
* @param string Script to execute when onClick event is triggered (optional).
* @param string Optional HTML attributes. It's a free string which will be
* @param bool Whether to return an output string or echo now (optional, echo by default).
* @param string $name Input name.
* @param integer $value Input value.
* @param integer $checked Input checked.
* @param boolean $disabled Disable the button (optional,
* button enabled by default).
* @param string $script Script to execute when onClick event
* is triggered (optional).
* @param string $attributes Optional HTML attributes.
* It's a free string which will be.
* @param boolean $return Whether to return an output string or echo now
* (optional, echo by default).
* @param string $id Input id.
* @param string $classParent Class for label.
*
* @return string HTML code if return parameter is true.
* @return string Input html.
*/
function html_print_checkbox_switch_extended($name, $value, $checked, $disabled, $script, $attributes, $return=false, $id='')
{
function html_print_checkbox_switch_extended(
$name,
$value,
$checked,
$disabled=false,
$script='',
$attributes='',
$return=false,
$id='',
$classParent=''
) {
static $idcounter = [];
// If duplicate names exist, it will start numbering. Otherwise it won't
// If duplicate names exist, it will start numbering. Otherwise it won't.
if (isset($idcounter[$name])) {
$idcounter[$name]++;
} else {
$idcounter[$name] = 0;
}
$id_aux = preg_replace('/[^a-z0-9\:\;\-\_]/i', '', $name.($idcounter[$name] ? $idcounter[$name] : ''));
$id_aux = preg_replace(
'/[^a-z0-9\:\;\-\_]/i',
'',
$name.($idcounter[$name] ? $idcounter[$name] : '')
);
$output = '<label class="p-switch"><input name="'.$name.'" type="checkbox" value="'.$value.'" '.($checked ? 'checked="checked"' : '');
$output = '<label class="p-switch '.$classParent.'">';
$output .= '<input name="'.$name.'" type="checkbox" value="'.$value.'" '.($checked ? 'checked="checked"' : '');
if ($id == '') {
$output .= ' id="checkbox-'.$id_aux.'"';
} else {
@ -3621,16 +3661,21 @@ function html_print_timezone_select($name, $selected='')
* Enclose a text into a result_div
*
* @param string Text to enclose
* @param boolean Return formatted text without html tags.
*
* @return string Text inside the result_div
*/
function html_print_result_div($text)
function html_print_result_div($text, $text_only)
{
$text = preg_replace('/</', '&lt;', $text);
$text = preg_replace('/>/', '&gt;', $text);
$text = preg_replace('/\n/i', '<br>', $text);
$text = preg_replace('/\s/i', '&nbsp;', $text);
if ($text_only) {
return $text;
}
$enclose = "<div id='result_div' style='width: 100%; height: 100%; overflow: auto; padding: 10px; font-size: 14px; line-height: 16px; font-family: mono,monospace; text-align: left'>";
$enclose .= $text;
$enclose .= '</div>';
@ -3898,7 +3943,9 @@ function html_print_input($data, $wrapper='div', $input_only=false)
$data['name'],
$data['value'],
((isset($data['return']) === true) ? $data['return'] : false),
((isset($data['class']) === true) ? $data['class'] : false)
((isset($data['class']) === true) ? $data['class'] : false),
false,
((isset($data['id']) === true) ? $data['id'] : '')
);
break;
@ -3999,6 +4046,21 @@ function html_print_input($data, $wrapper='div', $input_only=false)
);
break;
case 'select_for_unit':
$output .= html_print_extended_select_for_unit(
$data['name'],
((isset($data['selected']) === true) ? $data['selected'] : ''),
((isset($data['script']) === true) ? $data['script'] : ''),
((isset($data['nothing']) === true) ? $data['nothing'] : ''),
((isset($data['nothing_value']) === true) ? $data['nothing_value'] : '0'),
((isset($data['size']) === true) ? $data['size'] : false),
((isset($data['return']) === true) ? $data['return'] : false),
((isset($data['select_style']) === true) ? $data['select_style'] : false),
((isset($data['unique_name']) === true) ? $data['unique_name'] : true),
((isset($data['disabled']) === true) ? $data['disabled'] : false),
((isset($data['disabled']) === true) ? $data['disabled'] : 0)
);
case 'submit':
$width = (isset($data['width']) === true) ? 'width: '.$data['width'] : 'width: 100%';
$output .= '<'.$wrapper.' class="action-buttons" style="'.$width.'">'.html_print_submit_button(

View File

@ -217,8 +217,8 @@ function io_safe_output_array(&$item, $key=false, $utf8=true)
* plain ascii file, to render to console, or to put in any kind of data field
* who doesn't make the HTML render by itself.
*
* @param mixed String or array of strings to be cleaned.
* @param boolean $utf8 Flag, set the output encoding in utf8, by default true.
* @param string|array $value String or array of strings to be cleaned.
* @param boolean $utf8 Flag, set the output encoding in utf8, by default true.
*
* @return unknown_type
*/

View File

@ -3436,7 +3436,7 @@ function get_module_realtime_link_graph($module)
'agent_alias' => urlencode(modules_get_agentmodule_agent_alias($module['id_agente_modulo'])),
'module_name' => urlencode($module['nombre']),
'snmp_address' => $module['ip_target'],
'snmp_community' => $module['snmp_community'],
'snmp_community' => urlencode($module['snmp_community']),
'snmp_oid' => $module['snmp_oid'],
'snmp_ver' => $module['tcp_send'],
'hide_header' => 1,

View File

@ -769,7 +769,7 @@ function netflow_get_relationships_raw_data(
$command = netflow_get_command($options, $filter);
// Execute nfdump.
#$command .= ' -q -o csv -n 10000 -s record/bytes -t '.date($nfdump_date_format, $start_date).'-'.date($nfdump_date_format, $end_date);
// $command .= ' -q -o csv -n 10000 -s record/bytes -t '.date($nfdump_date_format, $start_date).'-'.date($nfdump_date_format, $end_date);
exec($command, $result);
if (! is_array($result)) {

View File

@ -687,6 +687,13 @@ function reporting_make_reporting_data(
);
break;
case 'last_value':
$report['contents'][] = reporting_last_value(
$report,
$content
);
break;
case 'group_report':
$report['contents'][] = reporting_group_report(
$report,
@ -3350,7 +3357,7 @@ function reporting_database_serialized($report, $content)
);
// Adds string data if there is no numeric data.
if ((count($result) < 0) || (!$result)) {
if ($result === false) {
// This query gets information from the default and the historic database.
$result = db_get_all_rows_sql(
'SELECT *
@ -3430,6 +3437,77 @@ function reporting_database_serialized($report, $content)
}
/**
* Show last value and state of module.
*
* @param array $report Data report.
* @param array $content Content report.
*
* @return array
*/
function reporting_last_value($report, $content)
{
global $config;
$return['type'] = 'last_value';
if (empty($content['name'])) {
$content['name'] = __('Last Value');
}
if (is_metaconsole()) {
$id_meta = metaconsole_get_id_server($content['server_name']);
$server = metaconsole_get_connection_by_id($id_meta);
if (metaconsole_connect($server) != NOERR) {
$result = [];
return reporting_check_structure_content($result);
}
}
$id_agent = agents_get_module_id(
$content['id_agent_module']
);
$agent_alias = agents_get_alias($id_agent);
$module_name = modules_get_agentmodule_name(
$content['id_agent_module']
);
$return['title'] = $content['name'];
$return['landscape'] = $content['landscape'];
$return['pagebreak'] = $content['pagebreak'];
$return['subtitle'] = $agent_alias.' - '.$module_name;
$return['description'] = $content['description'];
$return['date'] = reporting_get_date_text($report, $content);
$return['agent_name_db'] = agents_get_name($id_agent);
$return['agent_name'] = $agent_alias;
$return['module_name'] = $module_name;
$sql = sprintf(
'SELECT *
FROM tagente_estado
WHERE id_agente_modulo = %s',
$content['id_agent_module']
);
$result = db_get_row_sql($sql);
if ($result === false) {
$result = [];
}
$result['agent_name'] = $agent_alias;
$result['module_name'] = $module_name;
$return['data'] = $result;
if (is_metaconsole()) {
metaconsole_restore_db();
}
return reporting_check_structure_content($return);
}
function reporting_group_configuration($report, $content)
{
global $config;

View File

@ -335,6 +335,10 @@ function reporting_html_print_report($report, $mini=false, $report_info=1)
reporting_html_database_serialized($table, $item);
break;
case 'last_value':
reporting_html_last_value($table, $item);
break;
case 'group_report':
reporting_html_group_report($table, $item);
break;
@ -2155,10 +2159,19 @@ function reporting_html_historical_data($table, $item, $pdf=0)
];
}
} else {
$row = [
$data[__('Date')],
$data[__('Data')],
];
// Command line snapshot.
if (is_text_to_black_string($data[__('Data')])) {
$table1->style[1] = 'text-align: left; font-family: monospace, mono';
$row = [
$data[__('Date')],
'<pre>'.$data[__('Data')].'</pre>',
];
} else {
$row = [
$data[__('Date')],
$data[__('Data')],
];
}
}
} else {
$row = [
@ -2177,15 +2190,16 @@ function reporting_html_historical_data($table, $item, $pdf=0)
$table1,
true
);
return html_print_table($table, true);
} else {
$table1->title = $item['title'];
$table1->titleclass = 'title_table_pdf';
$table1->titlestyle = 'text-align:left;';
return html_print_table(
$table1,
true
);
return html_print_table($table1, true);
}
}
@ -2230,6 +2244,11 @@ function reporting_html_database_serialized($table, $item, $pdf=0)
} else {
$data_unserialized[$key] = wordwrap(io_safe_input($data_value), 60, "<br>\n", true);
}
} else if (is_text_to_black_string($data_unserialized[$key])) {
$table1->style[1] = 'white-space: pre-wrap;';
$table1->style[1] .= 'font-family: monospace, mono; ';
$table1->style[1] .= 'text-align: left';
$data_unserialized[$key] = '<pre>'.$data_value.'</pre>';
}
}
@ -2257,6 +2276,159 @@ function reporting_html_database_serialized($table, $item, $pdf=0)
}
/**
* Show last value and state of module.
*
* @param object $table Head table or false if it comes from pdf.
* @param array $item Items data.
* @param boolean $pdf If it comes from pdf.
*
* @return html
*/
function reporting_html_last_value($table, $item, $pdf=0)
{
global $config;
if (empty($item['data']) === false) {
$table_data = new stdClass();
$table_data->width = '100%';
$table_data->headstyle = [];
$table_data->headstyle[0] = 'text-align: left;';
$table_data->style = [];
$table_data->style[0] = 'text-align: left;';
$table_data->head = [
__('Name'),
__('Date'),
__('Data'),
__('Status'),
];
$table_data->data = [];
$table_data->data[1][0] = $item['data']['agent_name'];
$table_data->data[1][0] .= ' / ';
$table_data->data[1][0] .= $item['data']['module_name'];
$table_data->data[1][1] = date(
'Y-m-d H:i:s',
$item['data']['utimestamp']
);
$table_data->data[1][2] = remove_right_zeros(
number_format(
$item['data']['datos'],
$config['graph_precision']
)
);
switch ($item['data']['estado']) {
case AGENT_MODULE_STATUS_CRITICAL_BAD:
$img_status = ui_print_status_image(
'module_critical.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
case AGENT_MODULE_STATUS_WARNING:
$img_status = ui_print_status_image(
'module_warning.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
case AGENT_MODULE_STATUS_UNKNOWN:
$img_status = ui_print_status_image(
'module_unknown.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
case AGENT_MODULE_STATUS_NORMAL_ALERT:
case AGENT_MODULE_STATUS_WARNING_ALERT:
case AGENT_MODULE_STATUS_CRITICAL_ALERT:
$img_status = ui_print_status_image(
'module_alertsfired.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
case 4:
$img_status = ui_print_status_image(
'module_no_data.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
default:
case AGENT_MODULE_STATUS_NORMAL:
$img_status = ui_print_status_image(
'module_ok.png',
$item['data']['datos'],
true,
[
'width' => '50px',
'height' => '20px',
'style' => 'border-radius:5px;',
],
'images/status_sets/default/'
);
break;
}
$table_data->data[1][3] = $img_status;
if ($pdf === 0) {
$table->colspan['last_value']['cell'] = 3;
$table->cellstyle['last_value']['cell'] = 'text-align: center;';
$table->data['last_value']['cell'] = html_print_table(
$table_data,
true
);
} else {
return html_print_table(
$table_data,
true
);
}
} else {
// TODO:XXX
}
}
/**
* Shows the data of a group and the agents that are part of them.
*

View File

@ -746,6 +746,10 @@ function reports_get_report_types($template=false, $not_editor=false)
'optgroup' => __('Modules'),
'name' => __('Increment'),
];
$types['last_value'] = [
'optgroup' => __('Modules'),
'name' => __('Last value'),
];
$types['general'] = [
'optgroup' => __('Grouped'),

View File

@ -455,3 +455,61 @@ function print_snmp_tags_active_filters($filter_resume=[])
ui_print_tags_view($title, $tags_set);
}
}
/**
* Retunr module type for snmp data type
*
* @param [type] $snmp_data_type
* @return void
*/
function snmp_module_get_type(string $snmp_data_type)
{
if (preg_match('/INTEGER/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/Integer32/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/octect string/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/bits/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/object identifier/i', $snmp_data_type)) {
$type = 'remote_snmp_string';
} else if (preg_match('/IpAddress/i', $snmp_data_type)) {
$type = 'remote_snmp_string';
} else if (preg_match('/Counter/i', $snmp_data_type)) {
$type = 'remote_snmp_inc';
} else if (preg_match('/Counter32/i', $snmp_data_type)) {
$type = 'remote_snmp_inc';
} else if (preg_match('/Gauge/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/Gauge32/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/Gauge64/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/Unsigned32/i', $snmp_data_type)) {
$type = 'remote_snmp_inc';
} else if (preg_match('/TimeTicks/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/Opaque/i', $snmp_data_type)) {
$type = 'remote_snmp_string';
} else if (preg_match('/Counter64/i', $snmp_data_type)) {
$type = 'remote_snmp_inc';
} else if (preg_match('/UInteger32/i', $snmp_data_type)) {
$type = 'remote_snmp';
} else if (preg_match('/BIT STRING/i', $snmp_data_type)) {
$type = 'remote_snmp_string';
} else if (preg_match('/STRING/i', $snmp_data_type)) {
$type = 'remote_snmp_string';
} else {
$type = 'remote_snmp_string';
}
if (!$type) {
$type = 'remote_snmp';
}
$type_id = modules_get_type_id($type);
return $type_id;
}

View File

@ -301,7 +301,7 @@ function snmp_browser_get_tree(
$snmp3_auth_pass,
$snmp3_privacy_method,
$snmp3_privacy_pass,
$community,
'',
$snmp3_context_engine_id
);
}
@ -945,6 +945,12 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
$description = io_safe_input(preg_replace('/\s+/', ' ', $oid['description']));
}
if (!empty($oid['type'])) {
$module_type = snmp_module_get_type($oid['type']);
} else {
$module_type = 17;
}
if ($module_target == 'network_component') {
$name_check = db_get_value(
'name',
@ -956,7 +962,7 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
if (!$name_check) {
$id = network_components_create_network_component(
$oid['oid'],
17,
$module_type,
1,
[
'description' => $description,
@ -1009,12 +1015,13 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
'min_ff_event_critical' => 0,
'ff_type' => 0,
'each_ff' => 0,
'history_data' => 1,
]
);
}
} else if ($module_target == 'agent') {
$values = [
'id_tipo_modulo' => 17,
'id_tipo_modulo' => $module_type,
'descripcion' => $description,
'module_interval' => 300,
'max' => 0,
@ -1065,6 +1072,7 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
'ff_type' => 0,
'each_ff' => 0,
'ip_target' => $target_ip,
'history_data' => 1,
];
foreach ($id_target as $agent) {
$ids[] = modules_create_agent_module($agent, $oid['oid'], $values);
@ -1073,7 +1081,7 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
// Policies only in enterprise version.
if (enterprise_installed()) {
$values = [
'id_tipo_modulo' => 17,
'id_tipo_modulo' => $module_type,
'description' => $description,
'module_interval' => 300,
'max' => 0,
@ -1123,6 +1131,7 @@ function snmp_browser_create_modules_snmp(string $module_target, array $snmp_val
'each_ff' => 0,
'ip_target' => $target_ip,
'configuration_data' => '',
'history_data' => 1,
];
enterprise_include_once('include/functions_policies.php');

View File

@ -321,7 +321,7 @@ function ui_print_message($message, $class='', $attributes='', $return=false, $t
$output = '<table cellspacing="0" cellpadding="0" id="'.$id.'" '.$attributes.'
class="info_box '.$id.' '.$class.' textodialogo" style="'.$force_style.'">
<tr>
<td class="icon" rowspan="2" style="padding-right: 10px; padding-top: 3px;">'.html_print_image($icon_image, true, false, false, false, false).'</td>
<td class="icon" rowspan="2" style="padding-right: 10px; padding-top: 3px; vertical-align: top;">'.html_print_image($icon_image, true, false, false, false, false).'</td>
<td class="title" style="text-transform: uppercase; padding-top: 10px;"><b>'.$text_title.'</b></td>
<td class="icon" style="text-align: right; padding-right: 3px;">';
if (!$no_close_bool) {
@ -3749,13 +3749,27 @@ function ui_toggle(
$main_class='box-shadow white_table_graph',
$img_a='images/arrow_down_green.png',
$img_b='images/arrow_right_green.png',
$clean=false
$clean=false,
$reverseImg=false,
$switch=false,
$attributes_switch=''
) {
// Generate unique Id.
$uniqid = uniqid('');
$image_a = html_print_image($img_a, true, [ 'style' => 'object-fit: contain;' ], true);
$image_b = html_print_image($img_b, true, [ 'style' => 'object-fit: contain;' ], true);
$image_a = html_print_image(
$img_a,
true,
[ 'style' => 'object-fit: contain;' ],
true
);
$image_b = html_print_image(
$img_b,
true,
[ 'style' => 'object-fit: contain;' ],
true
);
// Options.
if ($hidden_default) {
$style = 'display:none';
@ -3775,18 +3789,71 @@ function ui_toggle(
// Link to toggle.
$output = '<div class="'.$main_class.'" id="'.$id.'">';
$output .= '<div class="'.$header_class.'" style="cursor: pointer;" id="tgl_ctrl_'.$uniqid.'">'.html_print_image(
$original,
true,
[
'style' => 'object-fit: contain;',
'title' => $title,
'id' => 'image_'.$uniqid,
]
).'&nbsp;&nbsp;<b>'.$name.'</b></div>';
// $output .= '<br />';
// if (!defined("METACONSOLE"))
// $output .= '<br />';
$output .= '<div class="'.$header_class.'" style="cursor: pointer;" id="tgl_ctrl_'.$uniqid.'">';
if ($reverseImg === false) {
if ($switch === true) {
$output .= html_print_div(
[
'class' => 'float-left',
'content' => html_print_checkbox_switch_extended(
'box_enable_toggle'.$uniqid,
1,
($hidden_default === true) ? 0 : 1,
false,
'',
$attributes_switch,
true
),
],
true
);
} else {
$output .= html_print_image(
$original,
true,
[
'style' => 'object-fit: contain; float:right; margin-right:10px;',
'title' => $title,
'id' => 'image_'.$uniqid,
]
);
}
$output .= '&nbsp;&nbsp';
$output .= '<b>'.$name.'</b>';
} else {
$output .= $name;
if ($switch === true) {
$output .= html_print_div(
[
'class' => 'float-left',
'content' => html_print_checkbox_switch_extended(
'box_enable_toggle'.$uniqid,
1,
($hidden_default === true) ? 0 : 1,
false,
'',
'',
true
),
],
true
);
} else {
$output .= html_print_image(
$original,
true,
[
'style' => 'object-fit: contain; float:right; margin-right:10px;',
'title' => $title,
'id' => 'image_'.$uniqid,
]
);
}
}
$output .= '</div>';
// Code into a div
$output .= "<div id='tgl_div_".$uniqid."' style='".$style.";margin-top: -1px;' class='".$toggle_class."'>\n";
$output .= '<div class="'.$container_class.'">';
@ -3799,16 +3866,28 @@ function ui_toggle(
$output .= ' var hide_tgl_ctrl_'.$uniqid.' = '.(int) $hidden_default.";\n";
$output .= ' /* <![CDATA[ */'."\n";
$output .= " $(document).ready (function () {\n";
$output .= " $('#checkbox-box_enable_toggle".$uniqid."').click(function() {\n";
$output .= ' if (hide_tgl_ctrl_'.$uniqid.") {\n";
$output .= ' hide_tgl_ctrl_'.$uniqid." = 0;\n";
$output .= " $('#tgl_div_".$uniqid."').toggle();\n";
$output .= " }\n";
$output .= " else {\n";
$output .= ' hide_tgl_ctrl_'.$uniqid." = 1;\n";
$output .= " $('#tgl_div_".$uniqid."').toggle();\n";
$output .= " }\n";
$output .= " });\n";
$output .= " $('#tgl_ctrl_".$uniqid."').click(function() {\n";
$output .= ' if (hide_tgl_ctrl_'.$uniqid.") {\n";
$output .= ' hide_tgl_ctrl_'.$uniqid." = 0;\n";
$output .= " $('#tgl_div_".$uniqid."').toggle();\n";
$output .= " $('#image_".$uniqid."').attr({src: '".$image_a."'});\n";
$output .= " $('#checkbox-box_enable_toggle".$uniqid."').prop('checked', true);\n";
$output .= " }\n";
$output .= " else {\n";
$output .= ' hide_tgl_ctrl_'.$uniqid." = 1;\n";
$output .= " $('#tgl_div_".$uniqid."').toggle();\n";
$output .= " $('#image_".$uniqid."').attr({src: '".$image_b."'});\n";
$output .= " $('#checkbox-box_enable_toggle".$uniqid."').prop('checked', false);\n";
$output .= " }\n";
$output .= " });\n";
$output .= " });\n";

View File

@ -3220,13 +3220,9 @@ function visual_map_get_image_status_element($layoutData, $status=false)
switch ($status) {
case 1:
// Critical (BAD).
$img .= '_bad.png';
break;
case 4:
// Critical (ALERT).
$img = '4'.$img.'_bad.png';
// Critical or critical alert (BAD).
$img .= '_bad.png';
break;
case 0:
@ -3235,13 +3231,9 @@ function visual_map_get_image_status_element($layoutData, $status=false)
break;
case 2:
// Warning.
$img .= '_warning.png';
break;
case 10:
// Warning (ALERT).
$img = '4'.$img.'_warning.png';
// Warning or warning alert.
$img .= '_warning.png';
break;
case 3:
@ -4075,6 +4067,7 @@ function visual_map_get_layout_status($layout_id, $status_data=[], $depth=0)
case 'default':
$num_items_critical_alert = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT];
$num_items_critical = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD];
$num_items_warning_alert = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT];
$num_items_warning = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING];
$num_items_unknown = $num_elements_by_status[VISUAL_MAP_STATUS_UNKNOWN];
@ -4082,6 +4075,8 @@ function visual_map_get_layout_status($layout_id, $status_data=[], $depth=0)
return VISUAL_MAP_STATUS_CRITICAL_ALERT;
} else if ($num_items_critical > 0) {
return VISUAL_MAP_STATUS_CRITICAL_BAD;
} else if ($num_items_warning_alert > 0) {
return VISUAL_MAP_STATUS_WARNING_ALERT;
} else if ($num_items_warning > 0) {
return VISUAL_MAP_STATUS_WARNING;
} else if ($num_items_unknown > 0) {
@ -4095,17 +4090,18 @@ function visual_map_get_layout_status($layout_id, $status_data=[], $depth=0)
$num_items = count($valid_layout_items);
$num_items_critical_alert = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT];
$num_items_critical = $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD];
$num_items_warning_alert = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT];
$num_items_warning = $num_elements_by_status[VISUAL_MAP_STATUS_WARNING];
$num_items_unknown = $num_elements_by_status[VISUAL_MAP_STATUS_UNKNOWN];
if ($num_items_critical > 0
if (($num_items_critical > 0 || $num_items_critical_alert > 0)
&& ((($num_items_critical_alert + $num_items_critical) * 100) / $num_items) >= $weight
) {
return ($num_items_critical_alert > 0) ? VISUAL_MAP_STATUS_CRITICAL_ALERT : VISUAL_MAP_STATUS_CRITICAL_BAD;
} else if ($num_items_warning > 0
&& (($num_items_warning * 100) / $num_items) >= $weight
} else if (($num_items_warning > 0 || $num_items_warning_alert > 0)
&& (($num_items_warning_alert + $num_items_warning * 100) / $num_items) >= $weight
) {
return VISUAL_MAP_STATUS_WARNING;
return ($num_items_warning_alert > 0) ? VISUAL_MAP_STATUS_WARNING_ALERT : VISUAL_MAP_STATUS_WARNING;
} else if ($num_items_unknown > 0
&& (($num_items_unknown * 100) / $num_items) >= $weight
) {
@ -4119,9 +4115,12 @@ function visual_map_get_layout_status($layout_id, $status_data=[], $depth=0)
$num_items_critical = ($num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_BAD] + $num_elements_by_status[VISUAL_MAP_STATUS_CRITICAL_ALERT]);
$critical_percentage = (($num_items_critical * 100) / count($valid_layout_items));
if ($critical_percentage >= $status_data['linked_layout_status_as_service_critical']) {
$num_items_warning = ($num_elements_by_status[VISUAL_MAP_STATUS_WARNING] + $num_elements_by_status[VISUAL_MAP_STATUS_WARNING_ALERT]);
$warning_percentage = (($num_items_warning * 100) / count($valid_layout_items));
if ($critical_percentage >= $status_data['linked_layout_status_as_service_critical'] && $critical_percentage !== 0) {
return VISUAL_MAP_STATUS_CRITICAL_BAD;
} else if ($critical_percentage >= $status_data['linked_layout_status_as_service_warning']) {
} else if ($critical_percentage >= $status_data['linked_layout_status_as_service_warning'] && $warning_percentage !== 0) {
return VISUAL_MAP_STATUS_WARNING;
} else {
return VISUAL_MAP_STATUS_NORMAL;

View File

@ -139,7 +139,13 @@ function flot_area_graph(
}
// Parent layer.
$return = "<div class='parent_graph' style='width: ".$params['width'].'px;'.$background_style."'>";
if (strpos($params['width'], '%') === false) {
$width = 'width: '.$params['width'].'px;';
} else {
$width = 'width: '.$params['width'].';';
}
$return = "<div class='parent_graph' style='".$width.$background_style."'>";
if ($params['title'] === true && empty($params['title']) === false) {
$return .= '<p style="text-align:center;">'.$params['title'].'</p>';

View File

@ -1322,3 +1322,308 @@ function filterByText(selectbox, textbox, textNoData) {
});
});
}
// Manage network component oid field generation.
function manageComponentFields(action, type) {
var fieldLines = $("tr[id*=network_component-" + type + "]").length;
var protocol = $("#module_protocol").val();
if (action === "add") {
let lineNumber = fieldLines + 1;
let textForAdd =
type === "oid-list-pluginRow-snmpRow"
? "_oid_" + lineNumber + "_"
: lineNumber;
$("#network_component-manage-" + type).before(
$("#network_component-" + type + "-row-1")
.clone()
.attr("id", "network_component-" + type + "-row-" + lineNumber)
);
$("#network_component-" + type + "-row-" + lineNumber + " input")
.attr("name", "extra_field_" + protocol + "_" + lineNumber)
.attr("id", "extra_field_" + protocol + "_" + lineNumber);
$("#network_component-" + type + "-row-" + lineNumber + " td div").html(
textForAdd
);
$("#del_field_button")
.attr("style", "opacity: 1;")
.addClass("clickable");
} else if (action === "del") {
if (fieldLines >= 2) {
$("#network_component-" + type + "-row-" + fieldLines).remove();
}
if (fieldLines == 2) {
$("#del_field_button")
.attr("style", "opacity: 0.5;")
.removeClass("clickable");
}
}
}
// Change module type and show/hide the fields needed.
function changeModuleType() {
var executionType = $("#execution_type").val();
var moduleSelected = $("#module_type").val();
var moduleProtocol = $("#module_protocol").val();
var typeField, toNone, toBlock;
switch (moduleSelected) {
case MODULE_TYPE_NUMERIC:
typeField =
executionType === EXECUTION_TYPE_PLUGIN || moduleProtocol === "wmi"
? MODULE_TYPE_GENERIC_DATA
: MODULE_TYPE_REMOTE_SNMP;
toNone = "string_values";
toBlock = "minmax_values";
break;
case MODULE_TYPE_INCREMENTAL:
typeField =
executionType === EXECUTION_TYPE_PLUGIN || moduleProtocol === "wmi"
? MODULE_TYPE_GENERIC_DATA_INC
: MODULE_TYPE_REMOTE_SNMP_INC;
toNone = "string_values";
toBlock = "minmax_values";
break;
case MODULE_TYPE_BOOLEAN:
typeField =
executionType === EXECUTION_TYPE_PLUGIN || moduleProtocol === "wmi"
? MODULE_TYPE_GENERIC_PROC
: MODULE_TYPE_REMOTE_SNMP_PROC;
toNone = "string_values";
toBlock = "minmax_values";
break;
case MODULE_TYPE_ALPHANUMERIC:
typeField =
executionType === EXECUTION_TYPE_PLUGIN || moduleProtocol === "wmi"
? MODULE_TYPE_GENERIC_DATA_STRING
: MODULE_TYPE_REMOTE_SNMP_STRING;
toNone = "minmax_values";
toBlock = "string_values";
break;
default:
typeField = "";
toNone = "string_values";
toBlock = "minmax_values";
break;
}
// Show and hide the proper fields.
$("." + toNone).css("display", "none");
$("." + toBlock).css("display", "block");
// Set value to module type.
$("#hidden-type").val(typeField);
}
// Manage of the visibility fields for various options
// for remote components wizard
function manageVisibleFields() {
var executionType = $("#execution_type").val();
var protocolSelected = $("#module_protocol").val();
var symbolName = $("#module_protocol_symbol")
.attr("src")
.split("/")
.pop();
var changePath = $("#module_protocol_symbol")
.attr("src")
.replace(symbolName, protocolSelected + ".png");
$("#module_protocol_symbol")
.attr("src", changePath)
.attr("data-title", protocolSelected.toUpperCase() + " protocol");
// Visibility of protocol type.
if (protocolSelected === "wmi") {
$("tr[id*=wmiRow]").css("display", "table-row");
$("tr[id*=snmpRow]").css("display", "none");
} else if (protocolSelected === "snmp") {
$("tr[id*=wmiRow]").css("display", "none");
$("tr[id*=snmpRow]").css("display", "table-row");
}
// Visibility of execution type.
if (executionType === EXECUTION_TYPE_NETWORK) {
$("tr[id*=networkRow-" + protocolSelected + "]").css(
"display",
"table-row"
);
$("tr[id*=pluginRow]").css("display", "none");
} else if (executionType === EXECUTION_TYPE_PLUGIN) {
$("tr[id*=networkRow]").css("display", "none");
$("tr[id*=pluginRow-" + protocolSelected + "]").css("display", "table-row");
// Only row WMI type execution plugin.
$("tr#network_component-query-filter-execution-wmiRow").css(
"display",
"none"
);
}
// Must update the module type.
changeModuleType();
// Must update the plugin macros.
changePlugin();
}
// Plugin managing for wizard components.
function changePlugin() {
var moduleProtocol = $("#module_protocol").val();
var executionType = $("#execution_type").val();
var pluginSelected = $("#server_plugin_" + moduleProtocol).val();
var pluginAllData = JSON.parse(
$("#hidden-server_plugin_data_" + pluginSelected).val()
);
var pluginDescription = pluginAllData.description;
var pluginMacros = pluginAllData.macros;
console.log(pluginAllData.macrosElement);
var pluginMacrosElement = JSON.parse(atob(pluginAllData.macrosElement));
console.log(pluginMacrosElement);
var displayShow = "none";
if (executionType == EXECUTION_TYPE_NETWORK) {
displayShow = "none";
} else {
displayShow = "table-row";
}
var cntMacrosToGo = 4;
var cntMacrosLine = 0;
var thisIdLine = "";
// Clear older macros rows.
$("tr[id*=dynamicMacroRow-pluginRow-" + moduleProtocol + "Row-N-]").remove();
// Hide the template.
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-0"
).attr("style", "display: none;");
// For each macro.
$.each(pluginMacros, function() {
let description = this.desc;
let macro = this.macro;
let value = this.value;
if (pluginMacrosElement["server_plugin"] == pluginSelected) {
if (pluginMacrosElement[macro + "_" + moduleProtocol + "_field"]) {
value = pluginMacrosElement[macro + "_" + moduleProtocol + "_field"];
}
}
if (
typeof description == "undefined" ||
description === null ||
description == ""
) {
description = "unknown";
}
if (cntMacrosToGo == 4) {
cntMacrosToGo = 0;
cntMacrosLine++;
thisIdLine =
"network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-N-" +
cntMacrosLine;
$(
"#network_component-server-plugin-pluginRow-" + moduleProtocol + "Row"
).after(
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-0"
)
.clone()
.attr("id", thisIdLine)
.css("display", displayShow)
);
// Clear the template.
$("#" + thisIdLine).empty();
}
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-0-0"
)
.clone()
.attr(
"id",
"network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-N-" +
cntMacrosLine +
"-" +
cntMacrosToGo
)
.html(description)
.appendTo("#" + thisIdLine);
cntMacrosToGo++;
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-0-1"
)
.clone()
.attr(
"id",
"network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-N-" +
cntMacrosLine +
"-" +
cntMacrosToGo
)
.appendTo("#" + thisIdLine);
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-N-" +
cntMacrosLine +
"-" +
cntMacrosToGo
)
.children("input")
.val(value);
$(
"#network_component-plugin-" +
moduleProtocol +
"-fields-dynamicMacroRow-pluginRow-" +
moduleProtocol +
"Row-N-" +
cntMacrosLine +
"-" +
cntMacrosToGo
)
.children("#field0_" + moduleProtocol + "_fields")
.attr("id", this.macro + "_" + moduleProtocol + "_fields")
.attr("name", this.macro + "_" + moduleProtocol + "_field");
cntMacrosToGo++;
});
$("#selected_plugin_description_" + moduleProtocol).html(pluginDescription);
}

View File

@ -229,27 +229,26 @@ function snmpGet(oid) {
custom_action = "";
}
// Prepare the AJAX call
var params = [
"target_ip=" + target_ip,
"community=" + community,
"oid=" + oid,
"snmp_browser_version=" + snmp_version,
"snmp3_browser_auth_user=" + snmp3_auth_user,
"snmp3_browser_security_level=" + snmp3_security_level,
"snmp3_browser_auth_method=" + snmp3_auth_method,
"snmp3_browser_auth_pass=" + snmp3_auth_pass,
"snmp3_browser_privacy_method=" + snmp3_privacy_method,
"snmp3_browser_privacy_pass=" + snmp3_privacy_pass,
"server_to_exec=" + server_to_exec,
"action=" + "snmpget",
"custom_action=" + custom_action,
"page=include/ajax/snmp_browser.ajax"
];
var params = {};
params["target_ip"] = target_ip;
params["community"] = community;
params["oid"] = oid;
params["snmp_browser_version"] = snmp_version;
params["snmp3_browser_auth_user"] = snmp3_auth_user;
params["snmp3_browser_security_level"] = snmp3_security_level;
params["snmp3_browser_auth_method"] = snmp3_auth_method;
params["snmp3_browser_auth_pass"] = snmp3_auth_pass;
params["snmp3_browser_privacy_method"] = snmp3_privacy_method;
params["snmp3_browser_privacy_pass"] = snmp3_privacy_pass;
params["server_to_exec"] = server_to_exec;
params["action"] = "snmpget";
params["custom_action"] = custom_action;
params["page"] = "include/ajax/snmp_browser.ajax";
// SNMP get!
jQuery.ajax({
data: params.join("&"),
data: params,
type: "POST",
url: (action = ajax_url),
async: true,
@ -625,6 +624,20 @@ function snmp_browser_create_modules(module_target, return_post = true) {
);
$("input[name=create_modules_" + module_target + "]").addClass("sub spinn");
$("#dialog_error").on("dialogclose", function(event) {
$("input[name=create_modules_" + module_target + "]").removeClass(
"sub spinn"
);
$("input[name=create_modules_" + module_target + "]").addClass("sub add");
});
$("#dialog_success").on("dialogclose", function(event) {
$("input[name=create_modules_" + module_target + "]").removeClass(
"sub spinn"
);
$("input[name=create_modules_" + module_target + "]").addClass("sub add");
});
$.ajax({
method: "post",
url: "ajax.php",

View File

@ -390,15 +390,31 @@ function load_modal(settings) {
function confirmDialog(settings) {
var randomStr = uniqId();
$("body").append(
'<div id="confirm_' + randomStr + '">' + settings.message + "</div>"
);
if (settings.size == undefined) {
settings.size = 350;
}
if (settings.maxHeight == undefined) {
settings.maxHeight = 1000;
}
if (typeof settings.message == "function") {
$("body").append(
'<div id="confirm_' + randomStr + '">' + settings.message() + "</div>"
);
} else {
$("body").append(
'<div id="confirm_' + randomStr + '">' + settings.message + "</div>"
);
}
$("#confirm_" + randomStr);
$("#confirm_" + randomStr)
.dialog({
title: settings.title,
close: false,
width: 350,
width: settings.size,
maxHeight: settings.maxHeight,
modal: true,
buttons: [
{
@ -417,8 +433,8 @@ function confirmDialog(settings) {
"ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next",
click: function() {
$(this).dialog("close");
$(this).remove();
if (typeof settings.onAccept == "function") settings.onAccept();
$(this).remove();
}
}
]

View File

@ -30,6 +30,9 @@
// Begin.
namespace PandoraFMS;
use PandoraFMS\ModuleType;
/**
* PandoraFMS agent entity.
*/
@ -43,6 +46,28 @@ class Module extends Entity
*/
private $status;
/**
* Module type matching id_tipo_modulo.
*
* @var PandoraFMS\ModuleType
*/
private $moduleType;
/**
* Configuration data (only local modules).
*
* @var string
*/
private $configurationData;
/**
* Configuration data (before updates) (only local modules).
* Compatibility with classic functions.
*
* @var string
*/
private $configurationDataOld;
/**
* Search a module in db.
@ -123,6 +148,24 @@ class Module extends Entity
// Customize certain fields.
$obj->status = new ModuleStatus($obj->id_agente_modulo());
$obj->moduleType = new ModuleType($obj->id_tipo_modulo());
// Include some enterprise dependencies.
enterprise_include_once('include/functions_config_agents.php');
// Load configuration data from agent configuration if available.
$obj->configuration_data(
\enterprise_hook(
'config_agents_get_module_from_conf',
[
$obj->id_agente(),
\io_safe_output($obj->nombre()),
]
)
);
// Classic compat.
$obj->configurationDataOld = $obj->configurationData;
return $obj;
}
@ -153,6 +196,144 @@ class Module extends Entity
// Customize certain fields.
$this->status = new ModuleStatus($this->fields['id_agente_modulo']);
$this->moduleType = new ModuleType($this->id_tipo_modulo());
// Include some enterprise dependencies.
enterprise_include_once('include/functions_config_agents.php');
// Load configuration data from agent configuration if available.
$this->configuration_data(
\enterprise_hook(
'config_agents_get_module_from_conf',
[
$this->id_agente(),
\io_safe_output($this->nombre()),
]
)
);
// Backup. Classic compat.
$this->configurationDataOld = $this->configurationData;
}
/**
* Dynamically call methods in this object.
*
* @param string $methodName Name of target method or attribute.
* @param array $params Arguments for target method.
*
* @return mixed Return of method.
* @throws \Exception On error.
*/
public function __call(string $methodName, ?array $params=null)
{
// Prioritize written methods over dynamic ones.
if (method_exists($this, $methodName) === true) {
return $this->{$methodName}($params);
}
if (array_key_exists($methodName, $this->fields) === true) {
if (empty($params) === false) {
if ($this->is_local() === true) {
$keyName = $methodName;
if ($methodName === 'nombre') {
$keyName = 'name';
}
if ($methodName === 'descripcion') {
$keyName = 'description';
}
if ($methodName === 'post_process') {
$keyName = 'postprocess';
}
if ($methodName === 'max_timeout') {
$keyName = 'timeout';
}
if ($methodName === 'max_retries') {
$keyName = 'retries';
}
if (in_array(
'module_'.$keyName,
[
'module_name',
'module_description',
'module_type',
'module_max',
'module_min',
'module_postprocess',
'module_interval',
'module_timeout',
'module_retries',
'module_min_critical',
'module_max_critical',
'module_min_warning',
'module_max_warning',
]
) === true
) {
$this->updateConfigurationData(
'module_'.$methodName,
$params[0]
);
}
}
$this->fields[$methodName] = $params[0];
return null;
} else {
return $this->fields[$methodName];
}
}
throw new \Exception(
get_class($this).' error, method '.$methodName.' does not exist'
);
}
/**
* Sets or retrieves value of id_tipo_modulo (complex).
*
* @param integer|null $id_tipo_modulo Id module type.
*
* @return PandoraFMS\ModuleType corresponding to this module type.
* @throws \Exception On error.
*/
public function moduleType(?int $id_tipo_modulo=null)
{
if ($id_tipo_modulo === null) {
return $this->moduleType;
}
if (is_numeric($id_tipo_modulo) === true && $id_tipo_modulo > 0) {
$this->moduleType = new ModuleType($id_tipo_modulo);
$this->fields['id_tipo_modulo'] = $this->moduleType->id_tipo();
} else {
throw new \Exception('Invalid id_tipo_modulo '.$id_tipo_modulo);
}
}
/**
* Sets or retrieves value of id_tipo_modulo (complex).
*
* @param integer|null $id_tipo_modulo Id module type.
*
* @return integer corresponding to this module type.
* @throws \Exception On error.
*/
public function id_tipo_modulo(?int $id_tipo_modulo=null)
{
if ($id_tipo_modulo === null) {
return $this->fields['id_tipo_modulo'];
}
return $this->moduleType($id_tipo_modulo);
}
@ -187,10 +368,14 @@ class Module extends Entity
);
}
// Include some enterprise dependencies.
enterprise_include_once('include/functions_config_agents.php');
$updates = $this->fields;
$updates['id_tipo_modulo'] = $this->moduleType()->id_tipo();
if ($this->fields['id_agente_modulo'] > 0) {
// Update.
$updates = $this->fields;
$rs = \db_process_sql_update(
'tagente_modulo',
$updates,
@ -203,10 +388,20 @@ class Module extends Entity
__METHOD__.' error: '.$config['dbconnection']->error
);
}
// Save configuration data if needed.
if ($this->configurationData !== null) {
\enterprise_hook(
'config_agents_update_module_in_conf',
[
$this->id_agente(),
$this->configurationDataOld,
$this->configurationData,
]
);
}
} else {
// Creation.
$updates = $this->fields;
// Clean null fields.
foreach ($updates as $k => $v) {
if ($v === null) {
@ -220,20 +415,139 @@ class Module extends Entity
$updates
);
if ($rs === false) {
if ($rs === false || $rs < 0) {
global $config;
if ($rs === ERR_EXIST) {
throw new \Exception(
__METHOD__.': '.__(
'Module already exists: "%s"',
$updates['nombre']
)
);
}
throw new \Exception(
__METHOD__.' error: '.$config['dbconnection']->error
);
}
$this->fields['id_agente_modulo'] = $rs;
\enterprise_hook(
'config_agents_add_module_in_conf',
[
$this->id_agente(),
$this->configurationData,
]
);
}
return true;
}
/**
* Verifies if module is local or not.
*
* @return boolean Is local, or not (false).
*/
public function is_local()
{
if ($this->moduleType()->is_local_datatype() === true) {
if ($this->fields['id_modulo'] === MODULE_DATA) {
return true;
}
}
return false;
}
/**
* Transforms configuration data into an array.
*
* @return array Configuration data in array format.
*/
protected function configurationDataToArray()
{
$rr = explode("\n", $this->configurationData);
$configuration = [];
foreach ($rr as $line) {
if (empty($line) === true) {
continue;
}
if (preg_match('/module_begin/', $line) === 1) {
continue;
}
if (preg_match('/module_end/', $line) === 1) {
break;
}
$_tmp = explode(' ', $line, 2);
$key = $_tmp[0];
$value = $_tmp[1];
$configuration[$key] = $value;
}
return $configuration;
}
/**
* Updates remote configuration.
*
* @param string $key Left side (module_XXX).
* @param string $value Value, could be empty.
*
* @return boolean True - configurationData updated, false if not.
*/
public function updateConfigurationData(string $key, ?string $value=null)
{
if ($this->is_local() !== true) {
return false;
}
$cnf = $this->configurationDataToArray();
$cnf[$key] = $value;
$str = "module_begin\n";
foreach ($cnf as $k => $v) {
$str .= $k.' '.$v."\n";
}
$str .= "module_end\n";
$this->configuration_data($str);
return true;
}
/**
* Get/set configuration data for current module.
*
* @param string|null $conf Configuration data (block).
*
* @return mixed Content or void if set.
*/
public function configuration_data(?string $conf=null)
{
if ($conf === null) {
return $this->configurationData;
}
$this->configurationData = $conf;
}
/**
* Erases this module.
*

View File

@ -0,0 +1,94 @@
<?php
// phpcs:disable Squiz.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Module Type entity class.
*
* @category Class
* @package Pandora FMS
* @subpackage OpenSource
* @version 1.0.0
* @license See below
*
* ______ ___ _______ _______ ________
* | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2019 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation for version 2.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* ============================================================================
*/
// Begin.
namespace PandoraFMS;
/**
* PandoraFMS agent entity.
*/
class ModuleType extends Entity
{
/**
* Builds a PandoraFMS\ModuleType object from given id.
*
* @param integer $id_tipo_modulo Id tipo modulo.
*/
public function __construct(?int $id_tipo_modulo=null)
{
if (is_numeric($id_tipo_modulo) === true
&& $id_tipo_modulo > 0
) {
parent::__construct(
'ttipo_modulo',
['id_tipo' => $id_tipo_modulo]
);
} else {
// Create empty skel.
parent::__construct('ttipo_modulo');
}
}
/**
* Verifies if module type is local or not.
* Beware, plugins also use this kind of modules..
*
* @return boolean Is a local candidate! or not (false).
*/
public function is_local_datatype()
{
if ((int) $this->id_tipo() === MODULE_TYPE_GENERIC_DATA
|| (int) $this->id_tipo() === MODULE_TYPE_GENERIC_PROC
|| (int) $this->id_tipo() === MODULE_TYPE_GENERIC_DATA_STRING
|| (int) $this->id_tipo() === MODULE_TYPE_GENERIC_DATA_INC
|| (int) $this->id_tipo() === MODULE_TYPE_GENERIC_DATA_INC_ABS
) {
return true;
}
return false;
}
/**
* Saves current definition to database.
*
* @return void No return.
* @throws \Exception On error.
*/
public function save()
{
throw new \Exception('Read only component');
}
}

View File

@ -4571,6 +4571,7 @@ div#dialog_messages table th:last-child {
display: inline-block;
width: 30px;
height: 17px;
margin-right: 1em;
}
.p-switch input {
@ -6040,3 +6041,29 @@ form#modal_form_feedback ul.wizard li > textarea {
#controls_table > tbody > tr > td input {
margin-left: 3px;
}
form#form-filter-interfaces {
margin-left: -30px;
}
form#form-filter-interfaces ul {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
flex-wrap: wrap;
width: 100%;
}
form#form-filter-interfaces ul li {
display: flex;
align-items: center;
flex-direction: row;
justify-content: flex-start;
max-width: 35%;
}
form#form-filter-interfaces ul li.select-interfaces {
flex-direction: row-reverse;
justify-content: flex-end;
}

View File

@ -1,7 +1,6 @@
/*
* Discovery > Wizard css global style
*/
#main > form.discovery.wizard > .white_box {
min-width: 1024px;
}

View File

@ -141,6 +141,14 @@ if ((! file_exists('include/config.php'))
require_once 'include/config.php';
require_once 'include/functions_config.php';
if (isset($config['console_log_enabled']) && $config['console_log_enabled'] == 1) {
ini_set('log_errors', 1);
ini_set('error_log', $config['homedir'].'/log/console.log');
} else {
ini_set('log_errors', 0);
ini_set('error_log', 0);
}
if (isset($config['error'])) {
$login_screen = $config['error'];
include 'general/error_screen.php';

View File

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

View File

@ -0,0 +1,6 @@
# pandora disable log access
<Files ~ "\.log$">
Order Allow,Deny
Deny from All
</Files>

View File

@ -349,16 +349,6 @@ switch ($action) {
$agent = new Agent();
$agent->show();
break;
case 'visualmaps':
$visualmaps = new Visualmaps();
$visualmaps->show();
break;
case 'visualmap':
$visualmap = new Visualmap();
$visualmap->show();
break;
}
break;
}

View File

@ -80,14 +80,8 @@ class Home
'menu_item' => true,
'icon' => 'modules',
];
$items['visualmaps'] = [
'name' => __('Visual consoles'),
'filename' => 'visualmaps.php',
'menu_item' => true,
'icon' => 'visual_console',
];
// Not in home
// Not in home.
$items['agent'] = [
'name' => __('Agent'),
'filename' => 'agent.php',
@ -100,12 +94,6 @@ class Home
'menu_item' => false,
'icon' => '',
];
$items['visualmap'] = [
'name' => __('Visualmap'),
'filename' => 'visualmap.php',
'menu_item' => false,
'icon' => '',
];
}
$this->pagesItems = $items;

View File

@ -241,20 +241,41 @@ function snmp_show_result_message(data) {
if (dato.length !== 0) {
$("#error_text").text("");
dato.forEach(function (valor, indice, array) {
$("#error_text").append("<br/>" + valor);
});
$("#dialog_error").dialog({
resizable: true,
draggable: true,
modal: true,
height: 300,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
}
});
if (dato[0] === -1) {
$("#dialog_no_agents_selected").dialog({
resizable: true,
draggable: true,
modal: true,
height: 300,
width: 500,
close: function(e, ui) {
$("input[name=create_modules_network_component]").removeClass("sub spinn");
$("input[name=create_modules_network_component]").addClass("sub add");
},
overlay: {
opacity: 0.5,
background: "black"
}
});
} else {
$("#error_text").text("");
dato.forEach(function (valor, indice, array) {
$("#error_text").append("<br/>" + valor);
});
$("#dialog_error").dialog({
resizable: true,
draggable: true,
modal: true,
height: 300,
width: 500,
overlay: {
opacity: 0.5,
background: "black"
}
});
}
} else {
$("#dialog_success").dialog({
resizable: true,

View File

@ -196,7 +196,6 @@ $ignored_params['refr'] = '';
$('body').css('background-color','<?php echo $layout['background_color']; ?>');
$('body').css('margin','0');
$('body').css('overflow','hidden');
$(".module_graph .menu_graph").css('display','none');
$(".parent_graph").each(function(){

View File

@ -257,7 +257,6 @@ if ($config['pure']) {
body.pure {
min-height: 100px;
margin: 0px;
overflow: hidden;
height: 100%;
<?php
echo 'background-color: '.$layout['background_color'].';';

View File

@ -373,7 +373,6 @@ if ($pure === true) {
body.pure {
min-height: 100px;
margin: 0px;
overflow: hidden;
height: 100%;
background-color: <?php echo $visualConsoleData['backgroundColor']; ?>;
}

View File

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

View File

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

View File

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

View File

@ -1,5 +1,7 @@
# Centos, Redhat, Fedora
/var/www/html/pandora_console/pandora_console.log {
/var/www/html/pandora_console/log/audit.log
/var/www/html/pandora_console/log/cron.log
/var/www/html/pandora_console/log/console.log {
weekly
missingok
size 100000

View File

@ -1,5 +1,7 @@
# OpenSUSE, SLES
/srv/www/htdocs/pandora_console/pandora_console.log {
/srv/www/htdocs/pandora_console/log/audit.log
/srv/www/htdocs/pandora_console/log/cron.log
/srv/www/htdocs/pandora_console/log/console.log {
weekly
missingok
size 100000

View File

@ -1,5 +1,7 @@
# DEBIAN / UBUNTU
/var/www/pandora_console/pandora_console.log {
/var/www/pandora_console/log/audit.log
/var/www/pandora_console/log/cron.log
/var/www/pandora_console/log/console.log {
weekly
missingok
size 100000

View File

@ -31,7 +31,7 @@ fi
export WS_ENGINE="/var/www/html/pandora_console/ws.php"
export PHP=/usr/bin/php
export WS_LOG="/var/www/html/pandora_console/pandora_console.log"
export WS_LOG="/var/log/pandora/web_socket.log"
export GOTTY="/tmp/"
# Environment variables

View File

@ -6,13 +6,13 @@ After=syslog.target network.target
User=apache
Type=simple
ExecStart=php /var/www/html/pandora_console/ws.php >> /var/www/html/pandora_console/pandora_console.log 2>&1
ExecStart=php /var/www/html/pandora_console/ws.php >> /var/log/pandora/web_socket.log 2>&1
TimeoutStopSec=20
KillMode=process
Restart=always
RestartSec=2
StandardOutput=file:/var/www/html/pandora_console/pandora_console.log
StandardError=file:/var/www/html/pandora_console/pandora_console.log
StandardOutput=file:/var/log/pandora/web_socket.log
StandardError=file:/var/log/pandora/web_socket.log
[Install]
WantedBy=multi-user.target

View File

@ -923,6 +923,20 @@ CREATE TABLE IF NOT EXISTS `tnetwork_component` (
`dynamic_min` int(4) default '0',
`dynamic_next` bigint(20) NOT NULL default '0',
`dynamic_two_tailed` tinyint(1) unsigned default '0',
`module_type` tinyint(1) unsigned NOT NULL DEFAULT 1,
`protocol` tinytext NOT NULL,
`manufacturer_id` varchar(200) NOT NULL,
`execution_type` tinyint(1) unsigned NOT NULL DEFAULT 1,
`scan_type` tinyint(1) unsigned NOT NULL DEFAULT 1,
`value` text NOT NULL,
`value_operations` text NOT NULL,
`module_enabled` tinyint(1) unsigned DEFAULT 0,
`name_oid` varchar(255) NOT NULL,
`query_class` varchar(200) NOT NULL,
`query_key_field` varchar(200) NOT NULL,
`scan_filters` text NOT NULL,
`query_filters` text NOT NULL,
`enabled` tinyint(1) UNSIGNED DEFAULT 1,
PRIMARY KEY (`id_nc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

File diff suppressed because it is too large Load Diff

View File

@ -344,6 +344,9 @@ return array(
'PandoraFMS\\Dashboard\\WuxWidget' => $baseDir . '/include/lib/Dashboard/Widgets/wux_transaction.php',
'PandoraFMS\\Entity' => $baseDir . '/include/lib/Entity.php',
'PandoraFMS\\Group' => $baseDir . '/include/lib/Group.php',
'PandoraFMS\\Module' => $baseDir . '/include/lib/Module.php',
'PandoraFMS\\ModuleStatus' => $baseDir . '/include/lib/ModuleStatus.php',
'PandoraFMS\\ModuleType' => $baseDir . '/include/lib/ModuleType.php',
'PandoraFMS\\User' => $baseDir . '/include/lib/User.php',
'PandoraFMS\\View' => $baseDir . '/include/lib/View.php',
'PandoraFMS\\WebSockets\\WSManager' => $baseDir . '/include/lib/WSManager.php',

View File

@ -426,6 +426,9 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa
'PandoraFMS\\Dashboard\\WuxWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/wux_transaction.php',
'PandoraFMS\\Entity' => __DIR__ . '/../..' . '/include/lib/Entity.php',
'PandoraFMS\\Group' => __DIR__ . '/../..' . '/include/lib/Group.php',
'PandoraFMS\\Module' => __DIR__ . '/../..' . '/include/lib/Module.php',
'PandoraFMS\\ModuleStatus' => __DIR__ . '/../..' . '/include/lib/ModuleStatus.php',
'PandoraFMS\\ModuleType' => __DIR__ . '/../..' . '/include/lib/ModuleType.php',
'PandoraFMS\\User' => __DIR__ . '/../..' . '/include/lib/User.php',
'PandoraFMS\\View' => __DIR__ . '/../..' . '/include/lib/View.php',
'PandoraFMS\\WebSockets\\WSManager' => __DIR__ . '/../..' . '/include/lib/WSManager.php',

View File

@ -124,12 +124,12 @@ if (substr($os, 0, 3) !== 'win') {
// Launch gotty - SSH.
$cmd = $base_cmd.' --port '.$config['gotty_ssh_port'];
$cmd .= ' ssh >> '.__DIR__.'/pandora_console.log 2>&1 &';
$cmd .= ' ssh >> /var/log/pandora/web_socket.log 2>&1 &';
shell_exec($cmd);
// Launch gotty - telnet.
$cmd = $base_cmd.' --port '.$config['gotty_telnet_port'];
$cmd .= ' telnet >> '.__DIR__.'/pandora_console.log 2>&1 &';
$cmd .= ' telnet >> /var/log/pandora/web_socket.log 2>&1 &';
shell_exec($cmd);
}
}

View File

@ -1,5 +1,5 @@
package: pandorafms-server
Version: 7.0NG.746-200623
Version: 7.0NG.746-200701
Architecture: all
Priority: optional
Section: admin

View File

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

View File

@ -384,8 +384,8 @@ webserver 1
web_threads 1
# Uncomment to perform web checks with CURL instead of LWP.
#web_engine curl
# Uncomment to perform web checks with LWP instead of CURL.
#web_engine lwp
# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY).

View File

@ -376,8 +376,8 @@ webserver 1
web_threads 1
# Uncomment to perform web checks with CURL instead of LWP.
#web_engine curl
# Uncomment to perform web checks with LWP instead of CURL.
#web_engine lwp
# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY).

View File

@ -433,8 +433,8 @@ web_threads 1
web_timeout 60
# Uncomment to perform web checks with CURL instead of LWP.
#web_engine curl
# Uncomment to perform web checks with LWP instead of CURL.
#web_engine lwp
# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY).

View File

@ -374,8 +374,8 @@ webserver 1
web_threads 1
# Uncomment to perform web checks with CURL instead of LWP.
#web_engine curl
# Uncomment to perform web checks with LWP instead of CURL.
#web_engine lwp
# Enable (1) or disable (0) Pandora FMS Inventory Server (PANDORA FMS ENTERPRISE ONLY).

View File

@ -45,7 +45,7 @@ our @EXPORT = qw(
# version: Defines actual version of Pandora Server for this module only
my $pandora_version = "7.0NG.746";
my $pandora_build = "200623";
my $pandora_build = "200701";
our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash
@ -299,7 +299,7 @@ sub pandora_load_config {
$pa_config->{"inventory_threads"} = 2; # 2.1
$pa_config->{"export_threads"} = 1; # 3.0
$pa_config->{"web_threads"} = 1; # 3.0
$pa_config->{"web_engine"} = 'lwp'; # 5.1
$pa_config->{"web_engine"} = 'curl'; # 5.1
$pa_config->{"activate_gis"} = 0; # 3.1
$pa_config->{"location_error"} = 50; # 3.1
$pa_config->{"recon_reverse_geolocation_file"} = ''; # 3.1

View File

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

View File

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

View File

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

View File

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

View File

@ -35,7 +35,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB;
# version: define current version
my $version = "7.0NG.746 PS200623";
my $version = "7.0NG.746 PS200701";
# Pandora server configuration
my %conf;
@ -478,7 +478,7 @@ sub pandora_compactdb ($$) {
$limit_utime = $conf->{'_last_compact'};
}
if ($start_utime <= $limit_utime) {
if ($start_utime <= $limit_utime || ( defined ($conf->{'_last_compact'}) && (($conf->{'_last_compact'} + 24 * 60 * 60) > $start_utime))) {
log_message ('COMPACT', "Data already compacted.");
return;
}
@ -512,7 +512,7 @@ sub pandora_compactdb ($$) {
next unless defined ($module_type);
# Mark proc modules.
if ($module_type == 2 || $module_type == 6 || $module_type == 9 || $module_type == 18 || $module_type == 21 || $module_type == 31) {
if ($module_type == 2 || $module_type == 6 || $module_type == 9 || $module_type == 18 || $module_type == 21 || $module_type == 31 || $module_type == 35 || $module_type == 100) {
$module_proc_hash{$id_module} = 1;
}
else {
@ -537,7 +537,9 @@ sub pandora_compactdb ($$) {
}
# Delete interval from the database
db_do ($dbh, 'DELETE FROM tagente_datos WHERE utimestamp < ? AND utimestamp >= ?', $start_utime, $stop_utime);
db_do ($dbh, 'DELETE ad FROM tagente_datos ad
INNER JOIN tagente_modulo am ON ad.id_agente_modulo = am.id_agente_modulo AND am.id_tipo_modulo NOT IN (2,6,9,18,21,31,35,100)
WHERE ad.utimestamp < ? AND ad.utimestamp >= ?', $start_utime, $stop_utime);
# Insert interval average value
foreach my $key (keys(%value_hash)) {

View File

@ -1,5 +1,6 @@
/var/log/pandora/pandora_agent.log
/var/log/pandora/pandora_server.log
/var/log/pandora/web_socket.log
/var/log/pandora/pandora_server.error {
weekly
missingok
@ -12,7 +13,7 @@
}
# DEBIAN / UBUNTU
/var/www/pandora_console/pandora_console.log {
/var/www/pandora_console/log/console.log {
weekly
missingok
size 100000
@ -24,7 +25,7 @@
}
# OpenSUSE, SLES
/srv/www/htdocs/pandora_console/pandora_console.log {
/srv/www/htdocs/pandora_console/log/console.log {
weekly
missingok
size 100000
@ -36,7 +37,7 @@
}
# Centos, Redhat, Fedora
/var/www/html/pandora_console/pandora_console.log {
/var/www/html/pandora_console/log/console.log {
weekly
missingok
size 100000

View File

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

View File

@ -24,6 +24,7 @@ use Encode;
use Encode::Locale;
use Getopt::Long;
use Net::SNMP;
use Net::SNMP::Security::USM;
my $HELP=<<EO_HELP;

View File

@ -24,6 +24,7 @@ use Encode;
use Encode::Locale;
use Getopt::Long;
use Net::SNMP;
use Net::SNMP::Security::USM;
my $HELP=<<EO_HELP;