Merge remote-tracking branch 'origin/develop' into ent-6070-10321-cambio-en-el-plugin-grep_log-para-orlando

This commit is contained in:
jose.almendros 2020-08-11 11:18:36 +02:00
commit 014a094644
190 changed files with 76110 additions and 65133 deletions

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, AIX version # Version 7.0NG.748, AIX version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, FreeBSD Version # Version 7.0NG.748, FreeBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, HP-UX Version # Version 7.0NG.748, HP-UX Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, GNU/Linux # Version 7.0NG.748, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, GNU/Linux # Version 7.0NG.748, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, Solaris Version # Version 7.0NG.748, Solaris Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent # Base config file for Pandora FMS Windows Agent
# (c) 2006-2010 Artica Soluciones Tecnologicas # (c) 2006-2010 Artica Soluciones Tecnologicas
# Version 7.0NG.746 # Version 7.0NG.748
# This program is Free Software, you can redistribute it and/or modify it # This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software # under the terms of the GNU General Public Licence as published by the Free Software

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.746, AIX version # Version 7.0NG.748, AIX version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.746 # Version 7.0NG.748
# FreeBSD/IPSO version # FreeBSD/IPSO version
# Licenced under GPL licence, 2003-2007 Sancho Lerena # Licenced under GPL licence, 2003-2007 Sancho Lerena

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.746, HPUX Version # Version 7.0NG.748, HPUX Version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746 # Version 7.0NG.748
# Licensed under GPL license v2, # Licensed under GPL license v2,
# (c) 2003-2010 Artica Soluciones Tecnologicas # (c) 2003-2010 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746 # Version 7.0NG.748
# Licensed under GPL license v2, # Licensed under GPL license v2,
# (c) 2003-2009 Artica Soluciones Tecnologicas # (c) 2003-2009 Artica Soluciones Tecnologicas
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746 # Version 7.0NG.748
# Licensed under GPL license v2, # Licensed under GPL license v2,
# please visit http://pandora.sourceforge.net # please visit http://pandora.sourceforge.net

View File

@ -1,6 +1,6 @@
# Fichero de configuracion base de agentes de Pandora # Fichero de configuracion base de agentes de Pandora
# Base config file for Pandora agents # Base config file for Pandora agents
# Version 7.0NG.746, Solaris version # Version 7.0NG.748, Solaris version
# General Parameters # General Parameters
# ================== # ==================

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, AIX version # Version 7.0NG.748, AIX version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

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

View File

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

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, GNU/Linux # Version 7.0NG.748, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2012 Artica Soluciones Tecnologicas # Copyright (c) 2003-2012 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, FreeBSD Version # Version 7.0NG.748, FreeBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2016 Artica Soluciones Tecnologicas # Copyright (c) 2003-2016 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, HP-UX Version # Version 7.0NG.748, HP-UX Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, GNU/Linux # Version 7.0NG.748, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2014 Artica Soluciones Tecnologicas # Copyright (c) 2003-2014 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, GNU/Linux # Version 7.0NG.748, GNU/Linux
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, NetBSD Version # Version 7.0NG.748, NetBSD Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2010 Artica Soluciones Tecnologicas # Copyright (c) 2003-2010 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -1,5 +1,5 @@
# Base config file for Pandora FMS agents # Base config file for Pandora FMS agents
# Version 7.0NG.746, Solaris Version # Version 7.0NG.748, Solaris Version
# Licensed under GPL license v2, # Licensed under GPL license v2,
# Copyright (c) 2003-2009 Artica Soluciones Tecnologicas # Copyright (c) 2003-2009 Artica Soluciones Tecnologicas
# http://www.pandorafms.com # http://www.pandorafms.com

View File

@ -54,8 +54,8 @@ my $Sem = undef;
# Semaphore used to control the number of threads # Semaphore used to control the number of threads
my $ThreadSem = undef; my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.746'; use constant AGENT_VERSION => '7.0NG.748';
use constant AGENT_BUILD => '200630'; use constant AGENT_BUILD => '200811';
# Agent log default file size maximum and instances # Agent log default file size maximum and instances
use constant DEFAULT_MAX_LOG_SIZE => 600000; use constant DEFAULT_MAX_LOG_SIZE => 600000;

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent #Pandora FMS Linux Agent
# #
%define name pandorafms_agent_unix %define name pandorafms_agent_unix
%define version 7.0NG.746 %define version 7.0NG.748
%define release 200630 %define release 200811
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -2,8 +2,8 @@
#Pandora FMS Linux Agent #Pandora FMS Linux Agent
# #
%define name pandorafms_agent_unix %define name pandorafms_agent_unix
%define version 7.0NG.746 %define version 7.0NG.748
%define release 200630 %define release 200811
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -9,8 +9,8 @@
# Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license. # Please see http://www.pandorafms.org. This code is licensed under GPL 2.0 license.
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.746" PI_VERSION="7.0NG.748"
PI_BUILD="200630" PI_BUILD="200811"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -1,6 +1,6 @@
# Base config file for Pandora FMS Windows Agent # Base config file for Pandora FMS Windows Agent
# (c) 2006-2017 Artica Soluciones Tecnologicas # (c) 2006-2017 Artica Soluciones Tecnologicas
# Version 7.0NG.746 # Version 7.0NG.748
# This program is Free Software, you can redistribute it and/or modify it # This program is Free Software, you can redistribute it and/or modify it
# under the terms of the GNU General Public Licence as published by the Free Software # under the terms of the GNU General Public Licence as published by the Free Software

View File

@ -3,7 +3,7 @@ AllowLanguageSelection
{Yes} {Yes}
AppName AppName
{Pandora FMS Windows Agent v7.0NG.746} {Pandora FMS Windows Agent v7.0NG.748}
ApplicationID ApplicationID
{17E3D2CF-CA02-406B-8A80-9D31C17BD08F} {17E3D2CF-CA02-406B-8A80-9D31C17BD08F}
@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{200630} {200811}
ViewReadme ViewReadme
{Yes} {Yes}

View File

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

View File

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

View File

@ -5,4 +5,3 @@ Options -Indexes
Order Allow,Deny Order Allow,Deny
Deny from All Deny from All
</Files> </Files>

View File

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

View File

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

View File

@ -27,6 +27,8 @@
*/ */
// Begin. // Begin.
require 'vendor/autoload.php';
define('AJAX', true); define('AJAX', true);
if (!defined('__PAN_XHPROF__')) { if (!defined('__PAN_XHPROF__')) {
@ -39,7 +41,9 @@ if (__PAN_XHPROF__ === 1) {
} }
} }
if ((! file_exists('include/config.php')) || (! is_readable('include/config.php'))) { if ((! file_exists('include/config.php'))
|| (! is_readable('include/config.php'))
) {
exit; exit;
} }
@ -50,13 +54,25 @@ require_once 'include/functions.php';
require_once 'include/functions_db.php'; require_once 'include/functions_db.php';
require_once 'include/auth/mysql.php'; require_once 'include/auth/mysql.php';
// Hash login process if (isset($config['console_log_enabled']) === true
if (isset($_GET['loginhash'])) { && $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);
}
// Hash login process.
if (isset($_GET['loginhash']) === true) {
$loginhash_data = get_parameter('loginhash_data', ''); $loginhash_data = get_parameter('loginhash_data', '');
$loginhash_user = str_rot13(get_parameter('loginhash_user', '')); $loginhash_user = str_rot13(get_parameter('loginhash_user', ''));
if ($config['loginhash_pwd'] != '' if ($config['loginhash_pwd'] != ''
&& $loginhash_data == md5($loginhash_user.io_output_password($config['loginhash_pwd'])) && $loginhash_data == md5(
$loginhash_user.io_output_password($config['loginhash_pwd'])
)
) { ) {
db_logon($loginhash_user, $_SERVER['REMOTE_ADDR']); db_logon($loginhash_user, $_SERVER['REMOTE_ADDR']);
$_SESSION['id_usuario'] = $loginhash_user; $_SESSION['id_usuario'] = $loginhash_user;
@ -65,14 +81,38 @@ if (isset($_GET['loginhash'])) {
include_once 'general/login_page.php'; include_once 'general/login_page.php';
db_pandora_audit('Logon Failed (loginhash', '', 'system'); db_pandora_audit('Logon Failed (loginhash', '', 'system');
while (@ob_end_flush()) { while (@ob_end_flush()) {
// Dumping...
continue;
} }
exit('</html>'); exit('</html>');
} }
} }
$auth_class = io_safe_output(
get_parameter('auth_class', 'PandoraFMS\Dashboard\Manager')
);
$public_hash = get_parameter('auth_hash', false);
$public_login = false;
// Check user. // Check user.
check_login(); if (class_exists($auth_class) === false || $public_hash === false) {
check_login();
} else {
if ($auth_class::validatePublicHash($public_hash) === false) {
db_pandora_audit(
'Invalid public hash',
'Trying to access public dashboard'
);
include 'general/noaccess.php';
exit;
}
// OK. Simulated user log in. If you want to use your own auth_class
// remember to set $config['force_instant_logout'] to true to avoid
// persistent user login.
}
ob_start();
// Enterprise support. // Enterprise support.
if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) { if (file_exists(ENTERPRISE_DIR.'/load_enterprise.php')) {
@ -87,7 +127,10 @@ $page .= '.php';
$config['id_user'] = $_SESSION['id_usuario']; $config['id_user'] = $_SESSION['id_usuario'];
$isFunctionSkins = enterprise_include_once('include/functions_skins.php'); $isFunctionSkins = enterprise_include_once('include/functions_skins.php');
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
$config['relative_path'] = enterprise_hook('skins_set_image_skin_path', [$config['id_user']]); $config['relative_path'] = enterprise_hook(
'skins_set_image_skin_path',
[$config['id_user']]
);
} }
if (is_metaconsole()) { if (is_metaconsole()) {
@ -104,3 +147,29 @@ if (file_exists($page)) {
if (__PAN_XHPROF__ === 1) { if (__PAN_XHPROF__ === 1) {
pandora_xhprof_display_result('ajax', 'console'); pandora_xhprof_display_result('ajax', 'console');
} }
if ($config['force_instant_logout'] === true) {
// Force user logout.
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$iduser = $_SESSION['id_usuario'];
$_SESSION = [];
session_destroy();
header_remove('Set-Cookie');
setcookie(session_name(), $_COOKIE[session_name()], (time() - 4800), '/');
if ($config['auth'] == 'saml') {
include_once $config['saml_path'].'simplesamlphp/lib/_autoload.php';
$as = new SimpleSAML_Auth_Simple('PandoraFMS');
$as->logout();
}
}
while (@ob_end_flush()) {
// Dumping...
continue;
}

View File

@ -7,5 +7,3 @@
Deny from all Deny from all
Allow from localhost Allow from localhost
</FilesMatch> </FilesMatch>
php_flag engine off

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,15 @@
START TRANSACTION;
UPDATE `talert_commands` SET name='Monitoring&#x20;Event' WHERE name='Pandora FMS Event';
ALTER TABLE `tservice_element` ADD COLUMN `rules` text;
ALTER TABLE `tservice` ADD COLUMN `unknown_as_critical` tinyint(1) NOT NULL default 0 AFTER `warning`;
ALTER TABLE `tserver` MODIFY COLUMN `version` varchar(25) NOT NULL DEFAULT '';
UPDATE `tservice` SET `auto_calculate`=0;
UPDATE `tservice` SET `cps`= `cps` - 1 WHERE `cps` > 0;
UPDATE `tagente` SET `cps`= `cps` - 1 WHERE `cps` > 0;
UPDATE `tagente_modulo` SET `cps`= `cps` - 1 WHERE `cps` > 0;
COMMIT;

File diff suppressed because it is too large Load Diff

View File

@ -165,7 +165,12 @@ if (check_login()) {
break; break;
case 'monitorcheckmodal': case 'monitorcheckmodal':
echo __('This system has too many modules per agent. OpenSource version could manage thousands of modules, but is not recommended to have more than 40 modules per agent. This configuration has B/A modules per agent. Checkout the Enterprise Version for a professional supported system.'); // Get agent/module average.
$agentCount = db_get_value_sql('SELECT count(*) FROM tagente');
$modulesCount = db_get_value_sql('SELECT count(*) FROM tagente_modulo');
$average = ($modulesCount / $agentCount);
echo __('This system has too many modules per agent. OpenSource version could manage thousands of modules, but is not recommended to have more than 100 modules per agent. This configuration has %d modules per agent. Checkout the Enterprise Version for a professional supported system.', $average);
break; break;
case 'remotemodulesmodal': case 'remotemodulesmodal':

View File

@ -53,8 +53,8 @@ ui_print_info_message(['no_close' => true, 'message' => __('There are no HA clus
<?php <?php
if (check_acl($config['id_user'], 0, 'PM')) { if (check_acl($config['id_user'], 0, 'PM')) {
echo "<div id='create_master_window'></div>"; echo "<div id='create_master_window' style='display:none;'></div>";
echo "<div id='msg'></div>"; echo "<div id='msg' style='display:none;'></div>";
?> ?>
<input style="margin-bottom:20px;" onclick="show_create_ha_cluster();" type="submit" class="button_task" value="<?php echo __('Add new node'); ?>" /> <input style="margin-bottom:20px;" onclick="show_create_ha_cluster();" type="submit" class="button_task" value="<?php echo __('Add new node'); ?>" />
<?php <?php

View File

@ -106,7 +106,7 @@ img.modalclose {
<span class='modalheadertex'> <span class='modalheadertex'>
<?php echo __('Database error'); ?> <?php echo __('Database error'); ?>
</span> </span>
<img class='modalclose' src='<?php echo $config['homeurl']; ?>images/icono_cerrar.png'> <img class='modalclose' src='<?php echo $config['homeurl']; ?>/images/icono_cerrar.png'>
</div> </div>
<div class='modalconten'> <div class='modalconten'>

View File

@ -1,66 +1,67 @@
<?php <?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 // Begin.
// ==================================================
// 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; global $config;
// Require needed class.
check_login(); require_once $config['homedir'].'/include/class/AgentWizard.class.php';
// This page.
$wizard_section = get_parameter('wizard_section', 'snmp_interfaces_explorer'); $ajaxPage = 'godmode/agentes/agent_wizard';
$idAgent = (int) get_parameter('id_agente', 0); $pageName = '[AgentWizard]';
$ipAgent = db_get_value('direccion', 'tagente', 'id_agente', $idAgent); // Control call flow.
try {
switch ($wizard_section) { // User access and validation is being processed on class constructor.
case 'snmp_interfaces_explorer': $obj = new AgentWizard($ajaxPage);
$snmp_interfaces_explorer_style = 'font-weight: bold;'; } catch (Exception $e) {
$wmi_explorer_style = ''; if (is_ajax()) {
break; echo json_encode(['error' => $pageName.$e->getMessage() ]);
exit;
case 'wmi_explorer': } else {
$snmp_interfaces_explorer_style = ''; echo $pageName.$e->getMessage();
$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();
} }
// 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'); $ip_target = (string) get_parameter('ip_target');
// No autofill if the module is a webserver module. // No autofill if the module is a webserver module.
if ($ip_target == '' if ($ip_target == ''
&& $id_module_type < MODULE_WEBSERVER_CHECK_LATENCY && $id_module_type < MODULE_TYPE_WEB_DATA
&& $id_module_type > MODULE_WEBSERVER_RETRIEVE_STRING_DATA && $id_module_type > MODULE_TYPE_WEB_CONTENT_STRING
) { ) {
$ip_target = 'auto'; $ip_target = 'auto';
} }

View File

@ -24,7 +24,16 @@ require_once $config['homedir'].'/include/functions_modules.php';
require_once $config['homedir'].'/include/functions_agents.php'; require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_servers.php'; require_once $config['homedir'].'/include/functions_servers.php';
$search_string = io_safe_output(urldecode(trim(get_parameter('search_string', '')))); $search_string = io_safe_output(
urldecode(
trim(
get_parameter(
'search_string',
''
)
)
)
);
global $policy_page; global $policy_page;
@ -32,17 +41,27 @@ if (!isset($policy_page)) {
$policy_page = false; $policy_page = false;
} }
// Search string filter form
echo '<form id="create_module_type" method="post" action="'.$url.'">';
echo '<table width="100%" cellpadding="2" cellspacing="2" class="databox filters" >';
echo "<tr><td class='datos' style='width:20%; font-weight: bold;'>";
echo __('Search').' '.html_print_input_text(
'search_string',
$search_string,
'',
15,
255,
true
);
html_print_input_hidden('search', 1);
// Search string filter form.
if (($policy_page) || (isset($agent))) { if (($policy_page) || (isset($agent))) {
echo '<form id="" method="post" action="">'; echo '<form id="" method="post" action="">';
} else { } else {
echo '<form id="create_module_type" method="post" action="'.$url.'">'; echo '<form id="create_module_type" method="post" action="'.$url.'">';
} }
echo '<table width="100%" cellpadding="2" cellspacing="2" class="databox filters" >';
echo "<tr><td class='datos' style='width:20%; font-weight: bold;'>";
echo __('Search').' '.html_print_input_text('search_string', $search_string, '', 15, 255, true);
html_print_input_hidden('search', 1);
echo '</td>'; echo '</td>';
echo "<td class='datos' style='width:10%'>"; echo "<td class='datos' style='width:10%'>";
html_print_submit_button(__('Filter'), 'filter', false, 'class="sub search"'); html_print_submit_button(__('Filter'), 'filter', false, 'class="sub search"');
@ -50,38 +69,38 @@ echo '</td>';
echo "<td class='datos' style='width:10%'></td>"; echo "<td class='datos' style='width:10%'></td>";
echo '</form>'; echo '</form>';
// Check if there is at least one server of each type available to assign that // Check if there is at least one server of each type available to assign that
// kind of modules. If not, do not show server type in combo // kind of modules. If not, do not show server type in combo.
$network_available = db_get_sql( $network_available = db_get_sql(
'SELECT count(*) 'SELECT count(*)
FROM tserver FROM tserver
WHERE server_type = 1' WHERE server_type = 1'
); );
// POSTGRESQL AND ORACLE COMPATIBLE // POSTGRESQL AND ORACLE COMPATIBLE.
$wmi_available = db_get_sql( $wmi_available = db_get_sql(
'SELECT count(*) 'SELECT count(*)
FROM tserver FROM tserver
WHERE server_type = 6' WHERE server_type = 6'
); );
// POSTGRESQL AND ORACLE COMPATIBLE // POSTGRESQL AND ORACLE COMPATIBLE.
$plugin_available = db_get_sql( $plugin_available = db_get_sql(
'SELECT count(*) 'SELECT count(*)
FROM tserver FROM tserver
WHERE server_type = 4' WHERE server_type = 4'
); );
// POSTGRESQL AND ORACLE COMPATIBLE // POSTGRESQL AND ORACLE COMPATIBLE.
$prediction_available = db_get_sql( $prediction_available = db_get_sql(
'SELECT count(*) 'SELECT count(*)
FROM tserver FROM tserver
WHERE server_type = 5' WHERE server_type = 5'
); );
// POSTGRESQL AND ORACLE COMPATIBLE // POSTGRESQL AND ORACLE COMPATIBLE.
// Development mode to use all servers // Development mode to use all servers.
if ($develop_bypass || is_metaconsole()) { if ($develop_bypass || is_metaconsole()) {
$network_available = 1; $network_available = 1;
$wmi_available = 1; $wmi_available = 1;
$plugin_available = 1; $plugin_available = 1;
// FIXME when prediction predictions server modules can be configured // FIXME when prediction predictions server modules can be configured.
// on metaconsole // on metaconsole.
$prediction_available = is_metaconsole() ? 0 : 1; $prediction_available = is_metaconsole() ? 0 : 1;
} }
@ -140,7 +159,7 @@ if (($policy_page) || (isset($agent))) {
} }
if ($show_creation) { if ($show_creation) {
// Create module/type combo // Create module/type combo.
echo '<form id="create_module_type" method="post" action="'.$url.'">'; echo '<form id="create_module_type" method="post" action="'.$url.'">';
if (!$policy_page) { if (!$policy_page) {
echo '<td class="datos" style="font-weight: bold; width:20%;">'; echo '<td class="datos" style="font-weight: bold; width:20%;">';
@ -151,13 +170,33 @@ if (($policy_page) || (isset($agent))) {
$checked = false; $checked = false;
} }
html_print_checkbox('status_hierachy_mode', '', $checked, false, false, 'onChange=change_mod_filter();'); html_print_checkbox(
'status_hierachy_mode',
'',
$checked,
false,
false,
'onChange=change_mod_filter();'
);
echo '</td>'; echo '</td>';
} }
echo '<td class="datos" style="font-weight: bold; width:20%;">'; echo '<td class="datos" style="font-weight: bold; width:20%;">';
echo __('<p>Type</p>'); echo __('<p>Type</p>');
html_print_select($modules, 'moduletype', '', '', '', '', false, false, false, '', false, 'max-width:300px;'); html_print_select(
$modules,
'moduletype',
'',
'',
'',
'',
false,
false,
false,
'',
false,
'max-width:300px;'
);
html_print_input_hidden('edit_module', 1); html_print_input_hidden('edit_module', 1);
echo '</td>'; echo '</td>';
echo '<td class="datos" style="width:10%;">'; echo '<td class="datos" style="width:10%;">';
@ -212,7 +251,13 @@ if ($multiple_delete) {
} }
enterprise_include_once('include/functions_config_agents.php'); enterprise_include_once('include/functions_config_agents.php');
enterprise_hook('config_agents_delete_module_in_conf', [modules_get_agentmodule_agent($id_agent_module_del), modules_get_agentmodule_name($id_agent_module_del)]); enterprise_hook(
'config_agents_delete_module_in_conf',
[
modules_get_agentmodule_agent($id_agent_module_del),
modules_get_agentmodule_name($id_agent_module_del),
]
);
$error = 0; $error = 0;
@ -220,7 +265,12 @@ if ($multiple_delete) {
// error. NOTICE that we don't delete all data here, just marking for deletion // error. NOTICE that we don't delete all data here, just marking for deletion
// and delete some simple data. // and delete some simple data.
$status = ''; $status = '';
$agent_id_of_module = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', (int) $id_agent_module_del); $agent_id_of_module = db_get_value(
'id_agente',
'tagente_modulo',
'id_agente_modulo',
(int) $id_agent_module_del
);
if (db_process_sql( if (db_process_sql(
"UPDATE tagente_modulo "UPDATE tagente_modulo
@ -235,7 +285,7 @@ if ($multiple_delete) {
) { ) {
$error++; $error++;
} else { } else {
// Set flag to update module status count // Set flag to update module status count.
if ($agent_id_of_module !== false) { if ($agent_id_of_module !== false) {
db_process_sql( db_process_sql(
'UPDATE tagente 'UPDATE tagente
@ -286,32 +336,48 @@ if ($multiple_delete) {
break; break;
} }
// Trick to detect if we are deleting a synthetic module (avg or arithmetic) // Trick to detect if we are deleting a synthetic module (avg or arithmetic).
// If result is empty then module doesn't have this type of submodules // If result is empty then module doesn't have this type of submodules.
$ops_json = enterprise_hook('modules_get_synthetic_operations', [$id_agent_module_del]); $ops_json = enterprise_hook(
'modules_get_synthetic_operations',
[$id_agent_module_del]
);
$result_ops_synthetic = json_decode($ops_json); $result_ops_synthetic = json_decode($ops_json);
if (!empty($result_ops_synthetic)) { if (!empty($result_ops_synthetic)) {
$result = enterprise_hook('modules_delete_synthetic_operations', [$id_agent_module_del]); $result = enterprise_hook(
'modules_delete_synthetic_operations',
[$id_agent_module_del]
);
if ($result === false) { if ($result === false) {
$error++; $error++;
} }
} //end if } else {
else { $result_components = enterprise_hook(
$result_components = enterprise_hook('modules_get_synthetic_components', [$id_agent_module_del]); 'modules_get_synthetic_components',
[$id_agent_module_del]
);
$count_components = 1; $count_components = 1;
if (!empty($result_components)) { if (!empty($result_components)) {
// Get number of components pending to delete to know when it's needed to update orders // Get number of components pending to delete to know when it's needed to update orders.
$num_components = count($result_components); $num_components = count($result_components);
$last_target_module = 0; $last_target_module = 0;
foreach ($result_components as $id_target_module) { foreach ($result_components as $id_target_module) {
// Detects change of component or last component to update orders // Detects change of component or last component to update orders.
if (($count_components == $num_components) or ($last_target_module != $id_target_module)) { if (($count_components == $num_components) || ($last_target_module != $id_target_module)
) {
$update_orders = true; $update_orders = true;
} else { } else {
$update_orders = false; $update_orders = false;
} }
$result = enterprise_hook('modules_delete_synthetic_operations', [$id_target_module, $id_agent_module_del, $update_orders]); $result = enterprise_hook(
'modules_delete_synthetic_operations',
[
$id_target_module,
$id_agent_module_del,
$update_orders,
]
);
if ($result === false) { if ($result === false) {
$error++; $error++;
} }
@ -323,7 +389,7 @@ if ($multiple_delete) {
} }
// Check for errors // Check for errors.
if ($error != 0) { if ($error != 0) {
} else { } else {
$count_correct_delete_modules++; $count_correct_delete_modules++;
@ -509,7 +575,7 @@ switch ($sortField) {
} }
// Build the order sql // Build the order sql.
if (!empty($order)) { if (!empty($order)) {
$order_sql = ' ORDER BY '; $order_sql = ' ORDER BY ';
} }
@ -525,7 +591,7 @@ foreach ($order as $ord) {
$order_sql .= $ord['field'].' '.$ord['order']; $order_sql .= $ord['field'].' '.$ord['order'];
} }
// Get limit and offset parameters // Get limit and offset parameters.
$limit = (int) $config['block_size']; $limit = (int) $config['block_size'];
$offset = (int) get_parameter('offset'); $offset = (int) get_parameter('offset');
@ -559,9 +625,15 @@ $where = sprintf('delete_pending = 0 AND id_agente = %s', $id_agente);
$search_string_entities = io_safe_input($search_string); $search_string_entities = io_safe_input($search_string);
$basic_where = sprintf("(nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND", $search_string, $search_string_entities, $search_string, $search_string_entities); $basic_where = sprintf(
"(nombre LIKE '%%%s%%' OR nombre LIKE '%%%s%%' OR descripcion LIKE '%%%s%%' OR descripcion LIKE '%%%s%%') AND",
$search_string,
$search_string_entities,
$search_string,
$search_string_entities
);
// Tags acl // Tags acl.
$agent_tags = tags_get_user_applied_agent_tags($id_agente); $agent_tags = tags_get_user_applied_agent_tags($id_agente);
if ($agent_tags !== true) { if ($agent_tags !== true) {
$where_tags = ' AND ttag_module.id_tag IN ('.implode(',', $agent_tags).')'; $where_tags = ' AND ttag_module.id_tag IN ('.implode(',', $agent_tags).')';
@ -619,7 +691,7 @@ if ($modules === false) {
return; return;
} }
// Prepare pagination // Prepare pagination.
$url = '?'.'sec=gagente&'.'tab=module&'.'sec2=godmode/agentes/configurar_agente&'.'id_agente='.$id_agente.'&'.'sort_field='.$sortField.'&'.'&sort='.$sort.'&'.'search_string='.urlencode($search_string); $url = '?'.'sec=gagente&'.'tab=module&'.'sec2=godmode/agentes/configurar_agente&'.'id_agente='.$id_agente.'&'.'sort_field='.$sortField.'&'.'&sort='.$sort.'&'.'search_string='.urlencode($search_string);
if ($paginate_module) { if ($paginate_module) {
@ -635,17 +707,48 @@ $table = new stdClass();
$table->width = '100%'; $table->width = '100%';
$table->class = 'info_table'; $table->class = 'info_table';
$table->head = []; $table->head = [];
$table->head['checkbox'] = html_print_checkbox('all_delete', 0, false, true, false); $table->head['checkbox'] = html_print_checkbox(
$table->head[0] = __('Name').ui_get_sorting_arrows($url_name.'up', $url_name.'down', $selectNameUp, $selectNameDown); 'all_delete',
0,
false,
true,
false
);
$table->head[0] = __('Name').ui_get_sorting_arrows(
$url_name.'up',
$url_name.'down',
$selectNameUp,
$selectNameDown
);
// The access to the policy is granted only with AW permission // The access to the policy is granted only with AW permission.
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK && check_acl($config['id_user'], $agent['id_grupo'], 'AW')) { if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK && check_acl(
$config['id_user'],
$agent['id_grupo'],
'AW'
)
) {
$table->head[1] = "<span title='".__('Policy')."'>".__('P.').'</span>'; $table->head[1] = "<span title='".__('Policy')."'>".__('P.').'</span>';
} }
$table->head[2] = "<span title='".__('Server')."'>".__('S.').'</span>'.ui_get_sorting_arrows($url_server.'up', $url_server.'down', $selectServerUp, $selectServerDown); $table->head[2] = "<span title='".__('Server')."'>".__('S.').'</span>'.ui_get_sorting_arrows(
$table->head[3] = __('Type').ui_get_sorting_arrows($url_type.'up', $url_type.'down', $selectTypeUp, $selectTypeDown); $url_server.'up',
$table->head[4] = __('Interval').ui_get_sorting_arrows($url_interval.'up', $url_interval.'down', $selectIntervalUp, $selectIntervalDown); $url_server.'down',
$selectServerUp,
$selectServerDown
);
$table->head[3] = __('Type').ui_get_sorting_arrows(
$url_type.'up',
$url_type.'down',
$selectTypeUp,
$selectTypeDown
);
$table->head[4] = __('Interval').ui_get_sorting_arrows(
$url_interval.'up',
$url_interval.'down',
$selectIntervalUp,
$selectIntervalDown
);
$table->head[5] = __('Description'); $table->head[5] = __('Description');
$table->head[6] = __('Status'); $table->head[6] = __('Status');
$table->head[7] = __('Warn'); $table->head[7] = __('Warn');
@ -690,7 +793,16 @@ if ($checked) {
} }
foreach ($modules as $module) { foreach ($modules as $module) {
if (! check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') && ! check_acl_one_of_groups($config['id_user'], $all_groups, 'AD')) { if (! check_acl_one_of_groups(
$config['id_user'],
$all_groups,
'AW'
) && ! check_acl_one_of_groups(
$config['id_user'],
$all_groups,
'AD'
)
) {
continue; continue;
} }
@ -712,7 +824,9 @@ foreach ($modules as $module) {
if (!$checked) { if (!$checked) {
if ($module['id_module_group'] != $last_modulegroup) { if ($module['id_module_group'] != $last_modulegroup) {
$last_modulegroup = $module['id_module_group']; $last_modulegroup = $module['id_module_group'];
$data[0] = '<strong>'.modules_get_modulegroup_name($last_modulegroup).'</strong>'; $data[0] = '<strong>'.modules_get_modulegroup_name(
$last_modulegroup
).'</strong>';
$i = array_push($table->data, $data); $i = array_push($table->data, $data);
$table->rowstyle[($i - 1)] = 'text-align: center'; $table->rowstyle[($i - 1)] = 'text-align: center';
$table->rowclass[($i - 1)] = 'datos3'; $table->rowclass[($i - 1)] = 'datos3';
@ -727,14 +841,23 @@ foreach ($modules as $module) {
} }
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
$data['checkbox'] = html_print_checkbox('id_delete[]', $module['id_agente_modulo'], false, true); $data['checkbox'] = html_print_checkbox(
'id_delete[]',
$module['id_agente_modulo'],
false,
true
);
} }
$data[0] = ''; $data[0] = '';
if (isset($module['deep']) && ($module['deep'] != 0)) { if (isset($module['deep']) && ($module['deep'] != 0)) {
$data[0] .= str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $module['deep']); $data[0] .= str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $module['deep']);
$data[0] .= html_print_image('images/icono_escuadra.png', true, ['style' => 'padding-bottom: inherit;']).'&nbsp;&nbsp;'; $data[0] .= html_print_image(
'images/icono_escuadra.png',
true,
['style' => 'padding-bottom: inherit;']
).'&nbsp;&nbsp;';
} }
if ($module['quiet']) { if ($module['quiet']) {
@ -754,17 +877,38 @@ foreach ($modules as $module) {
} }
if ($module['disabled']) { if ($module['disabled']) {
$data[0] .= '<em class="disabled_module">'.ui_print_truncate_text($module['nombre'], 'module_medium', false, true, true, '[&hellip;]', 'font-size: 7.2pt').'</em>'; $data[0] .= '<em class="disabled_module">'.ui_print_truncate_text(
$module['nombre'],
'module_medium',
false,
true,
true,
'[&hellip;]',
'font-size: 7.2pt'
).'</em>';
} else { } else {
$data[0] .= ui_print_truncate_text($module['nombre'], 'module_medium', false, true, true, '[&hellip;]', 'font-size: 7.2pt'); $data[0] .= ui_print_truncate_text(
$module['nombre'],
'module_medium',
false,
true,
true,
'[&hellip;]',
'font-size: 7.2pt'
);
} }
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
$data[0] .= '</a>'; $data[0] .= '</a>';
} }
// The access to the policy is granted only with AW permission // The access to the policy is granted only with AW permission.
if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK && check_acl($config['id_user'], $agent['id_grupo'], 'AW')) { if ($isFunctionPolicies !== ENTERPRISE_NOT_HOOK && check_acl(
$config['id_user'],
$agent['id_grupo'],
'AW'
)
) {
$policyInfo = policies_info_module_policy($module['id_agente_modulo']); $policyInfo = policies_info_module_policy($module['id_agente_modulo']);
if ($policyInfo === false) { if ($policyInfo === false) {
$data[1] = ''; $data[1] = '';
@ -798,17 +942,27 @@ foreach ($modules as $module) {
} }
} }
// Module type (by server type ) // Module type (by server type ).
$data[2] = ''; $data[2] = '';
if ($module['id_modulo'] > 0) { if ($module['id_modulo'] > 0) {
$data[2] = servers_show_type($module['id_modulo']); $data[2] = servers_show_type($module['id_modulo']);
} }
$module_status = db_get_row('tagente_estado', 'id_agente_modulo', $module['id_agente_modulo']); $module_status = db_get_row(
'tagente_estado',
'id_agente_modulo',
$module['id_agente_modulo']
);
modules_get_status($module['id_agente_modulo'], $module_status['estado'], $module_status['datos'], $status, $title); modules_get_status(
$module['id_agente_modulo'],
$module_status['estado'],
$module_status['datos'],
$status,
$title
);
// This module is initialized ? (has real data) // This module is initialized ? (has real data).
if ($status == STATUS_MODULE_NO_DATA) { if ($status == STATUS_MODULE_NO_DATA) {
$data[2] .= html_print_image( $data[2] .= html_print_image(
'images/error.png', 'images/error.png',
@ -817,13 +971,13 @@ foreach ($modules as $module) {
); );
} }
// Module type (by data type) // Module type (by data type).
$data[3] = ''; $data[3] = '';
if ($type) { if ($type) {
$data[3] = ui_print_moduletype_icon($type, true); $data[3] = ui_print_moduletype_icon($type, true);
} }
// Module interval // Module interval.
if ($module['module_interval']) { if ($module['module_interval']) {
$data[4] = human_time_description_raw($module['module_interval']); $data[4] = human_time_description_raw($module['module_interval']);
} else { } else {
@ -831,12 +985,23 @@ foreach ($modules as $module) {
} }
if ($module['id_modulo'] == MODULE_DATA && $module['id_policy_module'] != 0) { if ($module['id_modulo'] == MODULE_DATA && $module['id_policy_module'] != 0) {
$data[4] .= ui_print_help_tip(__('The policy modules of data type will only update their intervals when policy is applied.'), true); $data[4] .= ui_print_help_tip(
__('The policy modules of data type will only update their intervals when policy is applied.'),
true
);
} }
$data[5] = ui_print_truncate_text($module['descripcion'], 'description', false); $data[5] = ui_print_truncate_text(
$module['descripcion'],
'description',
false
);
$data[6] = ui_print_status_image($status, htmlspecialchars($title), true); $data[6] = ui_print_status_image(
$status,
htmlspecialchars($title),
true
);
// MAX / MIN values. // MAX / MIN values.
if ($module['id_tipo_modulo'] != 25) { if ($module['id_tipo_modulo'] != 25) {
@ -884,7 +1049,7 @@ foreach ($modules as $module) {
); );
$data[8] .= '</a> '; $data[8] .= '</a> ';
// Make a data normalization // Make a data normalization.
if (isset($numericModules[$type])) { if (isset($numericModules[$type])) {
if ($numericModules[$type] === true) { if ($numericModules[$type] === true) {
$data[8] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module&fix_module='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; $data[8] .= '<a href="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module&fix_module='.$module['id_agente_modulo'].'" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">';
@ -904,7 +1069,7 @@ foreach ($modules as $module) {
$data[8] .= '&nbsp;&nbsp;'; $data[8] .= '&nbsp;&nbsp;';
} }
// create network component action // Create network component action.
if ((is_user_admin($config['id_user'])) if ((is_user_admin($config['id_user']))
&& ($module['id_modulo'] == MODULE_NETWORK) && ($module['id_modulo'] == MODULE_NETWORK)
) { ) {
@ -927,7 +1092,7 @@ foreach ($modules as $module) {
} }
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
// Delete module // Delete module.
$data[9] = '<a href="index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$module['id_agente_modulo'].'" $data[9] = '<a href="index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$module['id_agente_modulo'].'"
onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">';
$data[9] .= html_print_image( $data[9] .= html_print_image(
@ -959,7 +1124,12 @@ html_print_table($table);
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) { if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
echo '<div class="action-buttons" style="width: '.$table->width.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_input_hidden('multiple_delete', 1); html_print_input_hidden('multiple_delete', 1);
html_print_submit_button(__('Delete'), 'multiple_delete', false, 'class="sub delete"'); html_print_submit_button(
__('Delete'),
'multiple_delete',
false,
'class="sub delete"'
);
echo '</div>'; echo '</div>';
echo '</form>'; echo '</form>';
} }

View File

@ -1290,7 +1290,7 @@ ui_require_jquery_file('json');
<script type="text/javascript"> <script type="text/javascript">
/* <![CDATA[ */ /* <![CDATA[ */
$(document).ready (function () { $(document).ready (function () {
var disabledBecauseInPolicy = '<?php echo $disabledBecauseInPolicy; ?>'; var disabledBecauseInPolicy = <?php echo '\''.(empty($disabledBecauseInPolicy) === true ? '0' : '1').'\''; ?>;
$("#right").click (function () { $("#right").click (function () {
jQuery.each($("select[name='id_tag_available[]'] option:selected"), function (key, value) { jQuery.each($("select[name='id_tag_available[]'] option:selected"), function (key, value) {
tag_name = $(value).html(); tag_name = $(value).html();
@ -1551,7 +1551,10 @@ $(document).ready (function () {
//readonly and add class input //readonly and add class input
function disabled_status (disabledBecauseInPolicy) { function disabled_status (disabledBecauseInPolicy) {
if($('#dynamic_interval_select').val() != 0 && $('#dynamic_interval').val() != 0){ var dynamic_interval_select_value = $('#dynamic_interval_select').val();
var dynamic_interval_value = $('#dynamic_interval_select').val();
if(typeof dynamic_interval_select_value != "undefined" && typeof dynamic_interval_value != "undefined"
&& dynamic_interval_select_value != 0 && dynamic_interval_value != 0){
$('#text-min_warning').prop('readonly', true); $('#text-min_warning').prop('readonly', true);
$('#text-min_warning').addClass('readonly'); $('#text-min_warning').addClass('readonly');
$('#text-max_warning').prop('readonly', true); $('#text-max_warning').prop('readonly', true);

View File

@ -464,6 +464,8 @@ $data[1] = html_print_select(
$disabledBecauseInPolicy $disabledBecauseInPolicy
); );
$data[1] .= '<br> <br><a class="info_cell" href="'.ui_get_full_url('index.php?sec=gagente&sec2=godmode/groups/group_list&tab=credbox').'">'.__('Manage credentials').'</a>';
$array_os = [ $array_os = [
'inherited' => __('Inherited'), 'inherited' => __('Inherited'),
'linux' => __('SSH'), 'linux' => __('SSH'),

View File

@ -171,6 +171,11 @@ if ($delete_action) {
); );
} }
if (is_central_policies_on_node() === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
$search_string = (string) get_parameter('search_string', ''); $search_string = (string) get_parameter('search_string', '');
$group = (int) get_parameter('group', 0); $group = (int) get_parameter('group', 0);
@ -224,8 +229,11 @@ $table->data = [];
$table->head = []; $table->head = [];
$table->head[0] = __('Name'); $table->head[0] = __('Name');
$table->head[1] = __('Group'); $table->head[1] = __('Group');
$table->head[2] = __('Copy'); if (is_central_policies_on_node() === false) {
$table->head[3] = __('Delete'); $table->head[2] = __('Copy');
$table->head[3] = __('Delete');
}
$table->style = []; $table->style = [];
$table->style[0] = 'font-weight: bold'; $table->style[0] = 'font-weight: bold';
$table->size = []; $table->size = [];
@ -292,7 +300,9 @@ foreach ($actions as $action) {
); );
} }
if (check_acl($config['id_user'], $action['id_group'], 'LM')) { if (is_central_policies_on_node() === false
&& check_acl($config['id_user'], $action['id_group'], 'LM')
) {
$table->cellclass[] = [ $table->cellclass[] = [
2 => 'action_buttons', 2 => 'action_buttons',
3 => 'action_buttons', 3 => 'action_buttons',
@ -318,12 +328,14 @@ if (isset($data)) {
ui_print_info_message(['no_close' => true, 'message' => __('No alert actions configured') ]); ui_print_info_message(['no_close' => true, 'message' => __('No alert actions configured') ]);
} }
echo '<div class="action-buttons" style="width: '.$table->width.'">'; if (is_central_policies_on_node() === false) {
echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_action&pure='.$pure.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"'); echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_action&pure='.$pure.'">';
html_print_input_hidden('create_alert', 1); html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
echo '</form>'; html_print_input_hidden('create_alert', 1);
echo '</div>'; echo '</form>';
echo '</div>';
}
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');
?> ?>

View File

@ -46,6 +46,8 @@ if (is_ajax()) {
$id = (int) get_parameter('id', 0); $id = (int) get_parameter('id', 0);
$get_recovery_fields = (int) get_parameter('get_recovery_fields', 1); $get_recovery_fields = (int) get_parameter('get_recovery_fields', 1);
$is_central_policies_on_node = is_central_policies_on_node();
// If command ID is not provided, check for action id. // If command ID is not provided, check for action id.
if ($id == 0) { if ($id == 0) {
$id_action = (int) get_parameter('id_action'); $id_action = (int) get_parameter('id_action');
@ -124,40 +126,142 @@ if (is_ajax()) {
// HTML type. // HTML type.
if (preg_match('/^_html_editor_$/i', $field_value)) { if (preg_match('/^_html_editor_$/i', $field_value)) {
$editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>'; $editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>';
$editor_type_chkbx .= __('Basic').ui_print_help_tip(__('For sending emails, text must be HTML format, if you want to use plain text, type it between the following labels: <pre></pre>'), true); $editor_type_chkbx .= __('Basic');
$editor_type_chkbx .= html_print_radio_button_extended('editor_type_value_'.$i, 0, '', false, false, "removeTinyMCE('textarea_field".$i."_value')", '', true); $editor_type_chkbx .= ui_print_help_tip(
__('For sending emails, text must be HTML format, if you want to use plain text, type it between the following labels: <pre></pre>'),
true
);
$editor_type_chkbx .= html_print_radio_button_extended(
'editor_type_value_'.$i,
0,
'',
false,
$is_central_policies_on_node,
"removeTinyMCE('textarea_field".$i."_value')",
'',
true
);
$editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;'; $editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$editor_type_chkbx .= __('Advanced').'&nbsp;&nbsp;'; $editor_type_chkbx .= __('Advanced').'&nbsp;&nbsp;';
$editor_type_chkbx .= html_print_radio_button_extended('editor_type_value_'.$i, 0, '', true, false, "addTinyMCE('textarea_field".$i."_value')", '', true); $editor_type_chkbx .= html_print_radio_button_extended(
'editor_type_value_'.$i,
0,
'',
true,
$is_central_policies_on_node,
"addTinyMCE('textarea_field".$i."_value')",
'',
true
);
$editor_type_chkbx .= '</small></b></div>'; $editor_type_chkbx .= '</small></b></div>';
$ffield = $editor_type_chkbx; $ffield = $editor_type_chkbx;
$ffield .= html_print_textarea('field'.$i.'_value', 1, 1, '', 'class="fields"', true); $ffield .= html_print_textarea(
'field'.$i.'_value',
1,
1,
'',
'class="fields"',
true,
'',
$is_central_policies_on_node
);
$editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>'; $editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>';
$editor_type_chkbx .= __('Basic').'&nbsp;&nbsp;'; $editor_type_chkbx .= __('Basic').'&nbsp;&nbsp;';
$editor_type_chkbx .= html_print_radio_button_extended('editor_type_recovery_value_'.$i, 0, '', false, false, "removeTinyMCE('textarea_field".$i."_recovery_value')", '', true); $editor_type_chkbx .= html_print_radio_button_extended(
'editor_type_recovery_value_'.$i,
0,
'',
false,
$is_central_policies_on_node,
"removeTinyMCE('textarea_field".$i."_recovery_value')",
'',
true
);
$editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;'; $editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$editor_type_chkbx .= __('Advanced').'&nbsp;&nbsp;'; $editor_type_chkbx .= __('Advanced').'&nbsp;&nbsp;';
$editor_type_chkbx .= html_print_radio_button_extended('editor_type_recovery_value_'.$i, 0, '', true, false, "addTinyMCE('textarea_field".$i."_recovery_value')", '', true); $editor_type_chkbx .= html_print_radio_button_extended(
'editor_type_recovery_value_'.$i,
0,
'',
true,
$is_central_policies_on_node,
"addTinyMCE('textarea_field".$i."_recovery_value')",
'',
true
);
$editor_type_chkbx .= '</small></b></div>'; $editor_type_chkbx .= '</small></b></div>';
$rfield = $editor_type_chkbx; $rfield = $editor_type_chkbx;
$rfield .= html_print_textarea('field'.$i.'_recovery_value', 1, 1, '', 'class="fields_recovery"', true); $rfield .= html_print_textarea(
'field'.$i.'_recovery_value',
1,
1,
'',
'class="fields_recovery"',
true,
'',
$is_central_policies_on_node
);
} else if (preg_match('/^_content_type_$/i', $field_value)) { } else if (preg_match('/^_content_type_$/i', $field_value)) {
$editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>'; $editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>';
$editor_type_chkbx .= __('Text/plain').ui_print_help_tip(__('For sending emails only text plain'), true); $editor_type_chkbx .= __('Text/plain');
$editor_type_chkbx .= html_print_radio_button_extended('field'.$i.'_value', 'text/plain', '', '', false, '', '', true); $editor_type_chkbx .= ui_print_help_tip(
__('For sending emails only text plain'),
true
);
$editor_type_chkbx .= html_print_radio_button_extended(
'field'.$i.'_value',
'text/plain',
'',
'',
$is_central_policies_on_node,
'',
'',
true
);
$editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;'; $editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$editor_type_chkbx .= __('Text/html').'&nbsp;&nbsp;'; $editor_type_chkbx .= __('Text/html').'&nbsp;&nbsp;';
$editor_type_chkbx .= html_print_radio_button_extended('field'.$i.'_value', 'text/html', '', 'text/html', false, '', '', true); $editor_type_chkbx .= html_print_radio_button_extended(
'field'.$i.'_value',
'text/html',
'',
'text/html',
$is_central_policies_on_node,
'',
'',
true
);
$editor_type_chkbx .= '</small></b></div>'; $editor_type_chkbx .= '</small></b></div>';
$ffield = $editor_type_chkbx; $ffield = $editor_type_chkbx;
$editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>'; $editor_type_chkbx = '<div style="padding: 4px 0px;"><b><small>';
$editor_type_chkbx .= __('Text/plain').ui_print_help_tip(__('For sending emails only text plain'), true); $editor_type_chkbx .= __('Text/plain');
$editor_type_chkbx .= html_print_radio_button_extended('field'.$i.'_recovery_value', 'text/plain', '', '', false, '', '', true); $editor_type_chkbx .= ui_print_help_tip(
__('For sending emails only text plain'),
true
);
$editor_type_chkbx .= html_print_radio_button_extended(
'field'.$i.'_recovery_value',
'text/plain',
'',
'',
$is_central_policies_on_node,
'',
'',
true
);
$editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;'; $editor_type_chkbx .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$editor_type_chkbx .= __('Text/html').'&nbsp;&nbsp;'; $editor_type_chkbx .= __('Text/html').'&nbsp;&nbsp;';
$editor_type_chkbx .= html_print_radio_button_extended('field'.$i.'_recovery_value', 'text/html', '', 'text/html', false, '', '', true); $editor_type_chkbx .= html_print_radio_button_extended(
'field'.$i.'_recovery_value',
'text/html',
'',
'text/html',
$is_central_policies_on_node,
'',
'',
true
);
$editor_type_chkbx .= '</small></b></div>'; $editor_type_chkbx .= '</small></b></div>';
$rfield = $editor_type_chkbx; $rfield = $editor_type_chkbx;
// Select type. // Select type.
@ -192,7 +296,8 @@ if (is_ajax()) {
true, true,
false, false,
false, false,
'fields' 'fields',
$is_central_policies_on_node
); );
$rfield = html_print_select( $rfield = html_print_select(
$fields_value_select, $fields_value_select,
@ -204,7 +309,8 @@ if (is_ajax()) {
true, true,
false, false,
false, false,
'fields_recovery' 'fields_recovery',
$is_central_policies_on_node
); );
} else { } else {
$ffield = html_print_textarea( $ffield = html_print_textarea(
@ -213,7 +319,9 @@ if (is_ajax()) {
1, 1,
$fv[0], $fv[0],
'style="min-height:40px; '.$style.'" class="fields"', 'style="min-height:40px; '.$style.'" class="fields"',
true true,
'',
$is_central_policies_on_node
); );
$rfield = html_print_textarea( $rfield = html_print_textarea(
'field'.$i.'_recovery_value', 'field'.$i.'_recovery_value',
@ -221,7 +329,9 @@ if (is_ajax()) {
1, 1,
$fv[0], $fv[0],
'style="min-height:40px; '.$style.'" class="fields_recovery', 'style="min-height:40px; '.$style.'" class="fields_recovery',
true true,
'',
$is_central_policies_on_node
); );
} }
} }
@ -232,7 +342,9 @@ if (is_ajax()) {
1, 1,
'', '',
'style="min-height:40px; '.$style.'" class="fields"', 'style="min-height:40px; '.$style.'" class="fields"',
true true,
'',
$is_central_policies_on_node
); );
$rfield = html_print_textarea( $rfield = html_print_textarea(
'field'.$i.'_recovery_value', 'field'.$i.'_recovery_value',
@ -240,7 +352,9 @@ if (is_ajax()) {
1, 1,
'', '',
'style="min-height:40px; '.$style.'" class="fields_recovery"', 'style="min-height:40px; '.$style.'" class="fields_recovery"',
true true,
'',
$is_central_policies_on_node
); );
} }
@ -404,6 +518,15 @@ if ($copy_command) {
} }
} }
$is_central_policies_on_node = is_central_policies_on_node();
if ($is_central_policies_on_node === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
$table = new stdClass;
$table->width = '100%'; $table->width = '100%';
$table->class = 'info_table'; $table->class = 'info_table';
@ -457,7 +580,7 @@ foreach ($commands as $command) {
); );
$data['action'] = ''; $data['action'] = '';
$table->cellclass[]['action'] = 'action_buttons'; $table->cellclass[]['action'] = 'action_buttons';
if (! $command['internal']) { if ($is_central_policies_on_node === false && !$command['internal']) {
$data['action'] = '<span style="display: inline-flex">'; $data['action'] = '<span style="display: inline-flex">';
$data['action'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/alert_commands&amp;copy_command=1&id='.$command['id'].'&pure='.$pure.'" $data['action'] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/alert_commands&amp;copy_command=1&id='.$command['id'].'&pure='.$pure.'"
onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/copy.png', true).'</a>'; onClick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/copy.png', true).'</a>';
@ -475,11 +598,13 @@ if (count($table->data) > 0) {
ui_print_info_message(['no_close' => true, 'message' => __('No alert commands configured') ]); ui_print_info_message(['no_close' => true, 'message' => __('No alert commands configured') ]);
} }
echo '<div class="action-buttons" style="width: '.$table->width.'">'; if ($is_central_policies_on_node === false) {
echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_command&pure='.$pure.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"'); echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_command&pure='.$pure.'">';
html_print_input_hidden('create_alert', 1); html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
echo '</form>'; html_print_input_hidden('create_alert', 1);
echo '</div>'; echo '</form>';
echo '</div>';
}
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');

View File

@ -203,7 +203,7 @@ if ($searchFlag) {
} }
if ($actionID != -1 && $actionID != '') { if ($actionID != -1 && $actionID != '') {
$where .= ' AND talert_template_modules.id IN (SELECT id_alert_template_module FROM talert_template_module_actions WHERE id_alert_action = '.$actionID.')'; $where .= ' AND talert_template_modules.id IN (SELECT id_alert_template_module FROM talert_template_module_actions WHERE id_alert_action = '.$actionID.') OR talert_template_modules.id IN (SELECT id FROM talert_template_modules ttm WHERE ttm.id_alert_template IN (SELECT tat.id FROM talert_templates tat WHERE tat.id_alert_action = '.$actionID.'))';
} }
if ($enabledisable != -1 && $enabledisable != '') { if ($enabledisable != -1 && $enabledisable != '') {

View File

@ -125,13 +125,13 @@ if (defined('METACONSOLE')) {
$sec = 'galertas'; $sec = 'galertas';
} }
// This prevents to duplicate the header in case delete_templete action is performed // This prevents to duplicate the header in
// case delete_templete action is performed.
if (!$delete_template) { if (!$delete_template) {
// Header // Header.
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
alerts_meta_print_header(); alerts_meta_print_header();
} else { } else {
// ~ ui_print_page_header (__('Alerts')." &raquo; ". __('Alert templates'), "images/gm_alerts.png", false, "alerts_config", true);
ui_print_page_header( ui_print_page_header(
__('Alerts').' &raquo; '.__('Alert templates'), __('Alerts').' &raquo; '.__('Alert templates'),
'images/gm_alerts.png', 'images/gm_alerts.png',
@ -142,7 +142,6 @@ if (!$delete_template) {
} }
} }
if ($update_template) { if ($update_template) {
$id = (int) get_parameter('id'); $id = (int) get_parameter('id');
@ -151,7 +150,7 @@ if ($update_template) {
$fields_recovery = []; $fields_recovery = [];
for ($i = 1; $i <= 10; $i++) { for ($i = 1; $i <= 10; $i++) {
$values['field'.$i] = (string) get_parameter('field'.$i); $values['field'.$i] = (string) get_parameter('field'.$i);
$values['field'.$i.'_recovery'] = $recovery_notify ? (string) get_parameter('field'.$i.'_recovery') : ''; $values['field'.$i.'_recovery'] = ($recovery_notify) ? (string) get_parameter('field'.$i.'_recovery') : '';
} }
$values['recovery_notify'] = $recovery_notify; $values['recovery_notify'] = $recovery_notify;
@ -164,13 +163,15 @@ if ($update_template) {
); );
} }
// If user tries to delete a template with group=ALL then must have "PM" access privileges // If user tries to delete a template with group=ALL
// then must have "PM" access privileges.
if ($delete_template) { if ($delete_template) {
$id = get_parameter('id'); $id = get_parameter('id');
$al_template = alerts_get_alert_template($id); $al_template = alerts_get_alert_template($id);
if ($al_template !== false) { if ($al_template !== false) {
// If user tries to delete a template with group=ALL then must have "PM" access privileges // If user tries to delete a template with group=ALL
// then must have "PM" access privileges.
if ($al_template['id_group'] == 0) { if ($al_template['id_group'] == 0) {
if (! check_acl($config['id_user'], 0, 'PM')) { if (! check_acl($config['id_user'], 0, 'PM')) {
db_pandora_audit( db_pandora_audit(
@ -192,8 +193,7 @@ if ($delete_template) {
); );
} }
} }
} //end if } else {
else {
$own_info = get_user_info($config['id_user']); $own_info = get_user_info($config['id_user']);
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) {
$own_groups = array_keys(users_get_groups($config['id_user'], 'LM')); $own_groups = array_keys(users_get_groups($config['id_user'], 'LM'));
@ -202,7 +202,7 @@ if ($delete_template) {
} }
$is_in_group = in_array($al_template['id_group'], $own_groups); $is_in_group = in_array($al_template['id_group'], $own_groups);
// Then template group have to be is his own groups // Then template group have to be is his own groups.
if ($is_in_group) { if ($is_in_group) {
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
alerts_meta_print_header(); alerts_meta_print_header();
@ -241,9 +241,15 @@ if ($delete_template) {
$result = alerts_delete_alert_template($id); $result = alerts_delete_alert_template($id);
if ($result) { if ($result) {
db_pandora_audit('Template alert management', 'Delete alert template #'.$id); db_pandora_audit(
'Template alert management',
'Delete alert template #'.$id
);
} else { } else {
db_pandora_audit('Template alert management', 'Fail try to delete alert template #'.$id); db_pandora_audit(
'Template alert management',
'Fail try to delete alert template #'.$id
);
} }
ui_print_result_message( ui_print_result_message(
@ -253,6 +259,11 @@ if ($delete_template) {
); );
} }
if (is_central_policies_on_node() === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
$search_string = (string) get_parameter('search_string'); $search_string = (string) get_parameter('search_string');
$search_type = (string) get_parameter('search_type'); $search_type = (string) get_parameter('search_type');
@ -269,7 +280,7 @@ $url = ui_get_url_refresh(
$table = new stdClass(); $table = new stdClass();
$table->width = '100%'; $table->width = '100%';
$table->class = 'databox filters'; $table->class = 'databox filters';
if (defined('METACONSOLE')) { if (is_metaconsole() === true) {
$table->cellspacing = 0; $table->cellspacing = 0;
$table->cellpadding = 0; $table->cellpadding = 0;
} }
@ -313,7 +324,7 @@ $table->data[0][4] .= html_print_submit_button(
); );
$table->data[0][4] .= '</div>'; $table->data[0][4] .= '</div>';
if (defined('METACONSOLE')) { if (is_metaconsole() === true) {
$filter = '<form class="" method="post" action="'.$url.'">'; $filter = '<form class="" method="post" action="'.$url.'">';
$filter .= html_print_table($table, true); $filter .= html_print_table($table, true);
$filter .= '</form>'; $filter .= '</form>';
@ -394,18 +405,34 @@ foreach ($templates as $template) {
$data[1] = ui_print_group_icon($template['id_group'], true); $data[1] = ui_print_group_icon($template['id_group'], true);
$data[3] = alerts_get_alert_templates_type_name($template['type']); $data[3] = alerts_get_alert_templates_type_name($template['type']);
if (check_acl($config['id_user'], $template['id_group'], 'LM')) { if (is_central_policies_on_node() === false
&& check_acl($config['id_user'], $template['id_group'], 'LM')
) {
$table->cellclass[][4] = 'action_buttons'; $table->cellclass[][4] = 'action_buttons';
$data[4] = '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_template&pure='.$pure.'" style="display: inline; float: left">'; $data[4] = '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_template&pure='.$pure.'" style="display: inline; float: left">';
$data[4] .= html_print_input_hidden('duplicate_template', 1, true); $data[4] .= html_print_input_hidden('duplicate_template', 1, true);
$data[4] .= html_print_input_hidden('source_id', $template['id'], true); $data[4] .= html_print_input_hidden('source_id', $template['id'], true);
$data[4] .= html_print_input_image('dup', 'images/copy.png', 1, '', true, ['title' => __('Duplicate')]); $data[4] .= html_print_input_image(
'dup',
'images/copy.png',
1,
'',
true,
['title' => __('Duplicate')]
);
$data[4] .= '</form> '; $data[4] .= '</form> ';
$data[4] .= '<form method="post" style="display: inline; float: right" onsubmit="if (!confirm(\''.__('Are you sure?').'\')) return false;">'; $data[4] .= '<form method="post" style="display: inline; float: right" onsubmit="if (!confirm(\''.__('Are you sure?').'\')) return false;">';
$data[4] .= html_print_input_hidden('delete_template', 1, true); $data[4] .= html_print_input_hidden('delete_template', 1, true);
$data[4] .= html_print_input_hidden('id', $template['id'], true); $data[4] .= html_print_input_hidden('id', $template['id'], true);
$data[4] .= html_print_input_image('del', 'images/cross.png', 1, '', true, ['title' => __('Delete')]); $data[4] .= html_print_input_image(
'del',
'images/cross.png',
1,
'',
true,
['title' => __('Delete')]
);
$data[4] .= '</form> '; $data[4] .= '</form> ';
} else { } else {
$data[4] = ''; $data[4] = '';
@ -415,18 +442,34 @@ foreach ($templates as $template) {
} }
ui_pagination($total_templates, $url); ui_pagination($total_templates, $url);
if (isset($data)) { if (isset($data) === true) {
html_print_table($table); html_print_table($table);
ui_pagination($total_templates, $url, 0, 0, false, 'offset', true, 'pagination-bottom'); ui_pagination(
$total_templates,
$url,
0,
0,
false,
'offset',
true,
'pagination-bottom'
);
} else { } else {
ui_print_info_message(['no_close' => true, 'message' => __('No alert templates defined') ]); ui_print_info_message(
[
'no_close' => true,
'message' => __('No alert templates defined'),
]
);
} }
echo '<div class="action-buttons" style="width: '.$table->width.'">'; if (is_central_policies_on_node() === false) {
echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_template&pure='.$pure.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_submit_button(__('Create'), 'create', false, 'class="sub next"'); echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_template&pure='.$pure.'">';
html_print_input_hidden('create_alert', 1); html_print_submit_button(__('Create'), 'create', false, 'class="sub next"');
echo '</form>'; html_print_input_hidden('create_alert', 1);
echo '</div>'; echo '</form>';
echo '</div>';
}
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');

View File

@ -60,7 +60,7 @@ if ($al_action !== false) {
__('Alerts').' &raquo; '.__('Configure alert action'), __('Alerts').' &raquo; '.__('Configure alert action'),
'images/gm_alerts.png', 'images/gm_alerts.png',
false, false,
'', 'alert_config',
true true
); );
} }
@ -73,19 +73,27 @@ if ($al_action !== false) {
__('Alerts').' &raquo; '.__('Configure alert action'), __('Alerts').' &raquo; '.__('Configure alert action'),
'images/gm_alerts.png', 'images/gm_alerts.png',
false, false,
'', 'alert_config',
true true
); );
} }
} }
$is_central_policies_on_node = is_central_policies_on_node();
if ($is_central_policies_on_node === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
$name = ''; $name = '';
$id_command = ''; $id_command = '';
$group = 0; $group = 0;
// All group is 0
$action_threshold = 0; $action_threshold = 0;
// All group is 0 // All group is 0.
if ($id) { if ($id) {
$action = alerts_get_alert_action($id); $action = alerts_get_alert_action($id);
$name = $action['name']; $name = $action['name'];
@ -95,7 +103,7 @@ if ($id) {
$action_threshold = $action['action_threshold']; $action_threshold = $action['action_threshold'];
} }
// Hidden div with help hint to fill with javascript // Hidden div with help hint to fill with javascript.
html_print_div( html_print_div(
[ [
'id' => 'help_alert_macros_hint', 'id' => 'help_alert_macros_hint',
@ -126,7 +134,26 @@ $table->size = [];
$table->size[0] = '20%'; $table->size[0] = '20%';
$table->data = []; $table->data = [];
$table->data[0][0] = __('Name'); $table->data[0][0] = __('Name');
$table->data[0][1] = html_print_input_text('name', $name, '', 35, 255, true); $table->data[0][1] = html_print_input_text(
'name',
$name,
'',
35,
255,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
);
if (io_safe_output($name) == 'Monitoring Event') { if (io_safe_output($name) == 'Monitoring Event') {
$table->data[0][1] .= '&nbsp;&nbsp;'.ui_print_help_tip( $table->data[0][1] .= '&nbsp;&nbsp;'.ui_print_help_tip(
__('This action may stop working, if you change its name.'), __('This action may stop working, if you change its name.'),
@ -141,7 +168,21 @@ $table->data[1][0] = __('Group');
$own_info = get_user_info($config['id_user']); $own_info = get_user_info($config['id_user']);
$table->data[1][1] = html_print_select_groups(false, 'LW', true, 'group', $group, '', '', 0, true); $table->data[1][1] = html_print_select_groups(
false,
'LW',
true,
'group',
$group,
'',
'',
0,
true,
false,
true,
'',
$is_central_policies_on_node
);
$table->colspan[1][1] = 2; $table->colspan[1][1] = 2;
$table->data[2][0] = __('Command'); $table->data[2][0] = __('Command');
@ -163,10 +204,15 @@ $table->data[2][1] = html_print_select_from_sql(
'', '',
__('None'), __('None'),
0, 0,
true true,
false,
false,
$is_central_policies_on_node
); );
$table->data[2][1] .= ' '; $table->data[2][1] .= ' ';
if (check_acl($config['id_user'], 0, 'PM')) { if ($is_central_policies_on_node === false
&& check_acl($config['id_user'], 0, 'PM')
) {
$table->data[2][1] .= __('Create Command'); $table->data[2][1] .= __('Create Command');
$table->data[2][1] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_command&pure='.$pure.'">'; $table->data[2][1] .= '<a href="index.php?sec='.$sec.'&sec2=godmode/alerts/configure_alert_command&pure='.$pure.'">';
$table->data[2][1] .= html_print_image('images/add.png', true); $table->data[2][1] .= html_print_image('images/add.png', true);
@ -188,7 +234,7 @@ $table->data[3][1] = html_print_extended_select_for_time(
false, false,
true, true,
'', '',
false, $is_central_policies_on_node,
false, false,
'', '',
false, false,
@ -237,12 +283,12 @@ for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
// Store the value in a hidden to keep it on first execution // Store the value in a hidden to keep it on first execution
$table->data['field'.$i][1] .= html_print_input_hidden( $table->data['field'.$i][1] .= html_print_input_hidden(
'field'.$i.'_value', 'field'.$i.'_value',
!empty($action['field'.$i]) ? $action['field'.$i] : '', (!empty($action['field'.$i]) || $action['field'.$i] == 0) ? $action['field'.$i] : '',
true true
); );
$table->data['field'.$i][2] .= html_print_input_hidden( $table->data['field'.$i][2] .= html_print_input_hidden(
'field'.$i.'_recovery_value', 'field'.$i.'_recovery_value',
!empty($action['field'.$i.'_recovery']) ? $action['field'.$i.'_recovery'] : '', (!empty($action['field'.$i.'_recovery']) || $action['field'.$i] == 0) ? $action['field'.$i.'_recovery'] : '',
true true
); );
} }
@ -251,46 +297,44 @@ for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
echo '<form method="post" action="'.'index.php?sec='.$sec.'&'.'sec2=godmode/alerts/alert_actions&'.'pure='.$pure.'">'; echo '<form method="post" action="'.'index.php?sec='.$sec.'&'.'sec2=godmode/alerts/alert_actions&'.'pure='.$pure.'">';
$table_html = html_print_table($table, true); $table_html = html_print_table($table, true);
//
// Hack to hook the bubble dialog of clippy in any place, the intro.js
// fails with new elements in the dom from javascript code
// ----------------------------------------------------------------------
/*
$table_html = str_replace(
"</table>",
"</div>",
$table_html);
$table_html = str_replace(
'<tr id="table_macros-field1" style="" class="datos2">',
"</tbody></table>
<div id=\"clippy_fields\">
<table>
<tbody>
<tr id=\"table_macros-field1\" class=\"datos\">",
$table_html);
*/
//
echo $table_html; echo $table_html;
if ($is_central_policies_on_node === false) {
echo '<div class="action-buttons" style="width: '.$table->width.'">'; echo '<div class="action-buttons" style="width: '.$table->width.'">';
if ($id) { if ($id) {
html_print_input_hidden('id', $id); html_print_input_hidden('id', $id);
if ($al_action['id_group'] == 0) { if ($al_action['id_group'] == 0) {
// then must have "PM" access privileges // Then must have "PM" access privileges.
if (check_acl($config['id_user'], 0, 'PM')) { if (check_acl($config['id_user'], 0, 'PM')) {
html_print_input_hidden('update_action', 1);
html_print_submit_button(
__('Update'),
'create',
false,
'class="sub upd"'
);
}
} else {
html_print_input_hidden('update_action', 1); html_print_input_hidden('update_action', 1);
html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"'); html_print_submit_button(
__('Update'),
'create',
false,
'class="sub upd"'
);
} }
} else { } else {
html_print_input_hidden('update_action', 1); html_print_input_hidden('create_action', 1);
html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"'); html_print_submit_button(
__('Create'),
'create',
false,
'class="sub wand"'
);
} }
} else {
html_print_input_hidden('create_action', 1); echo '</div>';
html_print_submit_button(__('Create'), 'create', false, 'class="sub wand"');
} }
echo '</div>';
echo '</form>'; echo '</form>';
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');

View File

@ -36,7 +36,7 @@ $pure = get_parameter('pure', 0);
$alert = []; $alert = [];
// Header. // Header.
if (defined('METACONSOLE')) { if (is_metaconsole() === true) {
alerts_meta_print_header(); alerts_meta_print_header();
} else { } else {
ui_print_page_header( ui_print_page_header(
@ -135,30 +135,39 @@ if ($id) {
$fields_hidden = $alert['fields_hidden']; $fields_hidden = $alert['fields_hidden'];
} }
if (!empty($fields_descriptions)) { if (empty($fields_descriptions) === false) {
$fields_descriptions = json_decode($fields_descriptions, true); $fields_descriptions = json_decode($fields_descriptions, true);
} }
if (!empty($fields_values)) { if (empty($fields_values) === false) {
$fields_values = json_decode($fields_values, true); $fields_values = json_decode($fields_values, true);
} }
if (!empty($fields_hidden)) { if (empty($fields_hidden) === false) {
$fields_hidden = json_decode($fields_hidden, true); $fields_hidden = json_decode($fields_hidden, true);
} }
$is_central_policies_on_node = is_central_policies_on_node();
if ($is_central_policies_on_node === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
$table = new stdClass(); $table = new stdClass();
$table->width = '100%'; $table->width = '100%';
$table->class = 'databox filters'; $table->class = 'databox filters';
if (defined('METACONSOLE')) { if (is_metaconsole() === true) {
$table->head[0] = ($id) ? __('Update Command') : __('Create Command'); $table->head[0] = ($id) ? __('Update Command') : __('Create Command');
$table->head_colspan[0] = 4; $table->head_colspan[0] = 4;
$table->headstyle[0] = 'text-align: center'; $table->headstyle[0] = 'text-align: center';
} }
$table->style = []; $table->style = [];
if (!defined('METACONSOLE')) { if (is_metaconsole() === false) {
$table->style[0] = 'font-weight: bold'; $table->style[0] = 'font-weight: bold';
$table->style[2] = 'font-weight: bold'; $table->style[2] = 'font-weight: bold';
$table->style[4] = 'font-weight: bold'; $table->style[4] = 'font-weight: bold';
@ -170,11 +179,38 @@ $table->data = [];
$table->colspan['name'][1] = 3; $table->colspan['name'][1] = 3;
$table->data['name'][0] = __('Name'); $table->data['name'][0] = __('Name');
$table->data['name'][2] = html_print_input_text('name', $name, '', 35, 255, true); $table->data['name'][2] = html_print_input_text(
'name',
$name,
'',
35,
255,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
);
$table->colspan['command'][1] = 3; $table->colspan['command'][1] = 3;
$table->data['command'][0] = __('Command'); $table->data['command'][0] = __('Command');
$table->data['command'][1] = html_print_textarea('command', 8, 30, $command, '', true); $table->data['command'][1] = html_print_textarea(
'command',
8,
30,
$command,
'',
true,
'',
$is_central_policies_on_node
);
$table->colspan['group'][1] = 3; $table->colspan['group'][1] = 3;
$table->data['group'][0] = __('Group'); $table->data['group'][0] = __('Group');
@ -187,60 +223,124 @@ $table->data['group'][1] = html_print_select_groups(
false, false,
'', '',
0, 0,
true true,
false,
true,
'',
$is_central_policies_on_node
); );
$table->colspan['description'][1] = 3; $table->colspan['description'][1] = 3;
$table->data['description'][0] = __('Description'); $table->data['description'][0] = __('Description');
$table->data['description'][1] = html_print_textarea('description', 10, 30, $description, '', true); $table->data['description'][1] = html_print_textarea(
'description',
10,
30,
$description,
'',
true,
'',
$is_central_policies_on_node
);
for ($i = 1; $i <= $config['max_macro_fields']; $i++) { for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
$table->data['field'.$i][0] = sprintf(__('Field %s description'), $i); $table->data['field'.$i][0] = sprintf(__('Field %s description'), $i);
if (!empty($fields_descriptions)) { if (empty($fields_descriptions) === false) {
$field_description = $fields_descriptions[($i - 1)]; $field_description = $fields_descriptions[($i - 1)];
} else { } else {
$field_description = ''; $field_description = '';
} }
$table->data['field'.$i][1] = html_print_input_text('field'.$i.'_description', $field_description, '', 30, 255, true); $table->data['field'.$i][1] = html_print_input_text(
'field'.$i.'_description',
$field_description,
'',
30,
255,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
);
$table->data['field'.$i][2] = sprintf(__('Field %s values'), $i).ui_print_help_tip(__('value1,tag1;value2,tag2;value3,tag3'), true); $table->data['field'.$i][2] = sprintf(__('Field %s values'), $i);
$table->data['field'.$i][2] .= ui_print_help_tip(
__('value1,tag1;value2,tag2;value3,tag3'),
true
);
if (!empty($fields_values)) { if (empty($fields_values) === false) {
$field_values = $fields_values[($i - 1)]; $field_values = $fields_values[($i - 1)];
} else { } else {
$field_values = ''; $field_values = '';
} }
if (!empty($fields_hidden)) { if (empty($fields_hidden) === false) {
$selected = (bool) $fields_hidden[($i - 1)]; $selected = (bool) $fields_hidden[($i - 1)];
} else { } else {
$selected = false; $selected = false;
} }
$table->data['field'.$i][3] = html_print_input_text('field'.$i.'_values', $field_values, '', 55, 255, true, false, false, '', 'field_value'); $table->data['field'.$i][3] = html_print_input_text(
'field'.$i.'_values',
$field_values,
'',
55,
255,
true,
false,
false,
'',
'field_value',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
);
$table->data['field'.$i][4] = __('Hide'); $table->data['field'.$i][4] = __('Hide');
$table->data['field'.$i][5] = html_print_checkbox_extended('field'.$i.'_hide', 1, $selected, false, 'cursor: \'pointer\'', 'class="hide_inputs"', true); $table->data['field'.$i][5] = html_print_checkbox_extended(
'field'.$i.'_hide',
1,
$selected,
$is_central_policies_on_node,
'cursor: \'pointer\'',
'class="hide_inputs"',
true
);
} }
echo '<form method="post" action="index.php?sec=galertas&sec2=godmode/alerts/alert_commands&pure='.$pure.'">'; echo '<form method="post" action="index.php?sec=galertas&sec2=godmode/alerts/alert_commands&pure='.$pure.'">';
html_print_table($table); html_print_table($table);
echo '<div class="action-buttons" style="width: '.$table->width.'">'; if ($is_central_policies_on_node === false) {
if ($id) { echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_input_hidden('id', $id); if ($id) {
html_print_input_hidden('update_command', 1); html_print_input_hidden('id', $id);
html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"'); html_print_input_hidden('update_command', 1);
} else { html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"');
html_print_input_hidden('create_command', 1); } else {
html_print_submit_button(__('Create'), 'create', false, 'class="sub wand"'); html_print_input_hidden('create_command', 1);
html_print_submit_button(__('Create'), 'create', false, 'class="sub wand"');
}
echo '</div>';
} }
echo '</div>';
echo '</form>'; echo '</form>';
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');

View File

@ -363,7 +363,15 @@ function update_template($step)
} }
// We set here the number of steps $is_central_policies_on_node = is_central_policies_on_node();
if ($is_central_policies_on_node === true) {
ui_print_warning_message(
__('This node is configured with centralized mode. All alerts templates information is read only. Go to metaconsole to manage it.')
);
}
// We set here the number of steps.
define('LAST_STEP', 3); define('LAST_STEP', 3);
$step = (int) get_parameter('step', 1); $step = (int) get_parameter('step', 1);
@ -579,27 +587,74 @@ if ($step == 2) {
$show_matches = false; $show_matches = false;
} }
// Firing conditions and events // Firing conditions and events.
$table->colspan = []; $table->colspan = [];
// $table->colspan[4][1] = 1;
$table->data[0][0] = __('Days of week'); $table->data[0][0] = __('Days of week');
$table->data[0][1] = __('Mon'); $table->data[0][1] = __('Mon');
$table->data[0][1] .= html_print_checkbox('monday', 1, $monday, true); $table->data[0][1] .= html_print_checkbox(
'monday',
1,
$monday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Tue'); $table->data[0][1] .= __('Tue');
$table->data[0][1] .= html_print_checkbox('tuesday', 1, $tuesday, true); $table->data[0][1] .= html_print_checkbox(
'tuesday',
1,
$tuesday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Wed'); $table->data[0][1] .= __('Wed');
$table->data[0][1] .= html_print_checkbox('wednesday', 1, $wednesday, true); $table->data[0][1] .= html_print_checkbox(
'wednesday',
1,
$wednesday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Thu'); $table->data[0][1] .= __('Thu');
$table->data[0][1] .= html_print_checkbox('thursday', 1, $thursday, true); $table->data[0][1] .= html_print_checkbox(
'thursday',
1,
$thursday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Fri'); $table->data[0][1] .= __('Fri');
$table->data[0][1] .= html_print_checkbox('friday', 1, $friday, true); $table->data[0][1] .= html_print_checkbox(
'friday',
1,
$friday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Sat'); $table->data[0][1] .= __('Sat');
$table->data[0][1] .= html_print_checkbox('saturday', 1, $saturday, true); $table->data[0][1] .= html_print_checkbox(
'saturday',
1,
$saturday,
true,
$is_central_policies_on_node
);
$table->data[0][1] .= __('Sun'); $table->data[0][1] .= __('Sun');
$table->data[0][1] .= html_print_checkbox('sunday', 1, $sunday, true); $table->data[0][1] .= html_print_checkbox(
'sunday',
1,
$sunday,
true,
$is_central_policies_on_node
);
$table->data[0][2] = __('Use special days list'); $table->data[0][2] = __('Use special days list');
$table->data[0][3] = html_print_checkbox('special_day', 1, $special_day, true); $table->data[0][3] = html_print_checkbox(
'special_day',
1,
$special_day,
true,
$is_central_policies_on_node
);
$table->data[1][0] = __('Time from'); $table->data[1][0] = __('Time from');
$table->data[1][1] = html_print_input_text( $table->data[1][1] = html_print_input_text(
@ -608,7 +663,18 @@ if ($step == 2) {
'', '',
7, 7,
8, 8,
true true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
); );
$table->data[1][2] = __('Time to'); $table->data[1][2] = __('Time to');
$table->data[1][3] = html_print_input_text( $table->data[1][3] = html_print_input_text(
@ -617,7 +683,18 @@ if ($step == 2) {
'', '',
7, 7,
8, 8,
true true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
); );
$table->colspan['threshold'][1] = 3; $table->colspan['threshold'][1] = 3;
@ -629,7 +706,11 @@ if ($step == 2) {
'', '',
'', '',
false, false,
true true,
false,
true,
'',
$is_central_policies_on_node
); );
$table->data[3][0] = __('Min. number of alerts'); $table->data[3][0] = __('Min. number of alerts');
@ -639,11 +720,32 @@ if ($step == 2) {
'', '',
5, 5,
7, 7,
true true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
); );
$table->data[3][2] = __('Reset counter for non-sustained alerts').ui_print_help_tip(__('Enable this option if you want the counter to be reset when the alert is not being fired consecutively, even if it\'s within the time threshold'), true); $table->data[3][2] = __('Reset counter for non-sustained alerts');
$table->data[3][3] = html_print_checkbox('min_alerts_reset_counter', 1, $min_alerts_reset_counter, true); $table->data[3][2] .= ui_print_help_tip(
__('Enable this option if you want the counter to be reset when the alert is not being fired consecutively, even if it\'s within the time threshold'),
true
);
$table->data[3][3] = html_print_checkbox(
'min_alerts_reset_counter',
1,
$min_alerts_reset_counter,
true,
$is_central_policies_on_node
);
$table->data[4][0] = __('Max. number of alerts'); $table->data[4][0] = __('Max. number of alerts');
$table->data[4][1] = html_print_input_text( $table->data[4][1] = html_print_input_text(
@ -652,39 +754,43 @@ if ($step == 2) {
'', '',
5, 5,
7, 7,
true true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
); );
$table->data[4][2] = __('Disable event'); $table->data[4][2] = __('Disable event');
$table->data[4][3] = html_print_checkbox('disable_event', 1, $disable_event, true); $table->data[4][3] = html_print_checkbox(
'disable_event',
1,
$disable_event,
true,
$is_central_policies_on_node
);
$table->data[5][0] = __('Default action'); $table->data[5][0] = __('Default action');
$usr_groups = implode(',', array_keys(users_get_groups($config['id_user'], 'LM', true))); $usr_groups = implode(
switch ($config['dbtype']) { ',',
case 'mysql': array_keys(users_get_groups($config['id_user'], 'LM', true))
case 'postgresql': );
$sql_query = sprintf(
'
SELECT id, name
FROM talert_actions
WHERE id_group IN (%s)
ORDER BY name',
$usr_groups
);
break;
case 'oracle': $sql_query = sprintf(
$sql_query = sprintf( '
' SELECT id, name
SELECT id, FROM talert_actions
dbms_lob.substr(name,4000,1) AS nombre WHERE id_group IN (%s)
FROM talert_actions ORDER BY name',
WHERE id_group IN (%s) $usr_groups
ORDER BY dbms_lob.substr(name,4000,1)', );
$usr_groups
);
break;
}
$table->data[5][1] = html_print_select_from_sql( $table->data[5][1] = html_print_select_from_sql(
$sql_query, $sql_query,
@ -696,11 +802,12 @@ if ($step == 2) {
true, true,
false, false,
false, false,
false, $is_central_policies_on_node,
false, false,
false, false,
0 0
).ui_print_help_tip( );
$table->data[5][1] .= ui_print_help_tip(
__('Unless they\'re left blank, the fields from the action will override those set on the template.'), __('Unless they\'re left blank, the fields from the action will override those set on the template.'),
true true
); );
@ -715,7 +822,9 @@ if ($step == 2) {
0, 0,
true, true,
false, false,
false false,
'',
$is_central_policies_on_node
); );
$table->data[6][1] .= '<span id="matches_value" '.($show_matches ? '' : 'style="display: none"').'>'; $table->data[6][1] .= '<span id="matches_value" '.($show_matches ? '' : 'style="display: none"').'>';
$table->data[6][1] .= '&nbsp;'.html_print_checkbox('matches_value', 1, $matches, true); $table->data[6][1] .= '&nbsp;'.html_print_checkbox('matches_value', 1, $matches, true);
@ -760,7 +869,7 @@ if ($step == 2) {
$table->data['value'][1] .= '</span>'; $table->data['value'][1] .= '</span>';
$table->colspan['value'][1] = 3; $table->colspan['value'][1] = 3;
// Min first, then max, that's more logical // Min first, then max, that's more logical.
$table->data['min'][0] = __('Min.'); $table->data['min'][0] = __('Min.');
$table->data['min'][1] = html_print_input_text( $table->data['min'][1] = html_print_input_text(
'min', 'min',
@ -798,25 +907,12 @@ if ($step == 2) {
$table->size[1] = '45%'; $table->size[1] = '45%';
$table->size[2] = '45%'; $table->size[2] = '45%';
// Alert recover // Alert recover.
if (! $recovery_notify) { if (! $recovery_notify) {
$table->cellstyle['label_fields'][2] = 'display:none;'; $table->cellstyle['label_fields'][2] = 'display:none;';
for ($i = 1; $i <= $config['max_macro_fields']; $i++) { for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
$table->cellstyle['field'.$i][2] = 'display:none;'; $table->cellstyle['field'.$i][2] = 'display:none;';
} }
/*
$table->cellstyle['field1'][2] = 'display:none;';
$table->cellstyle['field2'][2] = 'display:none;';
$table->cellstyle['field3'][2] = 'display:none;';
$table->cellstyle['field4'][2] = 'display:none;';
$table->cellstyle['field5'][2] = 'display:none;';
$table->cellstyle['field6'][2] = 'display:none;';
$table->cellstyle['field7'][2] = 'display:none;';
$table->cellstyle['field8'][2] = 'display:none;';
$table->cellstyle['field9'][2] = 'display:none;';
$table->cellstyle['field10'][2] = 'display:none;';
*/
} }
$table->data[0][0] = __('Alert recovery'); $table->data[0][0] = __('Alert recovery');
@ -833,7 +929,9 @@ if ($step == 2) {
'', '',
true, true,
false, false,
false false,
'',
$is_central_policies_on_node
); );
$table->colspan[0][1] = 2; $table->colspan[0][1] = 2;
@ -842,45 +940,98 @@ if ($step == 2) {
$table->data['label_fields'][2] = __('Recovery fields'); $table->data['label_fields'][2] = __('Recovery fields');
for ($i = 1; $i <= $config['max_macro_fields']; $i++) { for ($i = 1; $i <= $config['max_macro_fields']; $i++) {
if (isset($template[$name])) { if (isset($template[$name]) === true) {
$value = $template[$name]; $value = $template[$name];
} else { } else {
$value = ''; $value = '';
} }
// $table->rowclass['field'.$i] = 'row_field';
$table->data['field'.$i][0] = sprintf(__('Field %s'), $i); $table->data['field'.$i][0] = sprintf(__('Field %s'), $i);
// TinyMCE // TinyMCE.
// triggering fields // triggering fields.
// basic // Basic.
$table->data['field'.$i][1] = '<div style="padding: 4px 0px;"><b><small>'; $table->data['field'.$i][1] = '<div style="padding: 4px 0px;"><b><small>';
$table->data['field'.$i][1] .= __('Basic').'&nbsp;&nbsp;'; $table->data['field'.$i][1] .= __('Basic').'&nbsp;&nbsp;';
$table->data['field'.$i][1] .= html_print_radio_button_extended('editor_type_value_'.$i, 0, '', false, false, "removeTinyMCE('textarea_field".$i."')", '', true); $table->data['field'.$i][1] .= html_print_radio_button_extended(
// Advanced 'editor_type_value_'.$i,
$table->data['field'.$i][1] .= '&nbsp;&nbsp;&nbsp;&nbsp;'; 0,
$table->data['field'.$i][1] .= __('Advanced').'&nbsp;&nbsp;'; '',
$table->data['field'.$i][1] .= html_print_radio_button_extended('editor_type_value_'.$i, 0, '', true, false, "addTinyMCE('textarea_field".$i."')", '', true); false,
$table->data['field'.$i][1] .= '</small></b></div>'; $is_central_policies_on_node,
"removeTinyMCE('textarea_field".$i."')",
'',
true
);
// Advanced.
$table->data['field'.$i][1] .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$table->data['field'.$i][1] .= __('Advanced').'&nbsp;&nbsp;';
$table->data['field'.$i][1] .= html_print_radio_button_extended(
'editor_type_value_'.$i,
0,
'',
true,
$is_central_policies_on_node,
"addTinyMCE('textarea_field".$i."')",
'',
true
);
$table->data['field'.$i][1] .= '</small></b></div>';
// Texarea // Texarea.
$table->data['field'.$i][1] .= html_print_textarea('field'.$i, 1, 1, isset($fields[$i]) ? $fields[$i] : '', 'style="min-height:40px;" class="fields"', true); $table->data['field'.$i][1] .= html_print_textarea(
'field'.$i,
1,
1,
isset($fields[$i]) ? $fields[$i] : '',
'style="min-height:40px;" class="fields"',
true,
'',
$is_central_policies_on_node
);
// Recovery // Recovery.
// basic // Basic.
$table->data['field'.$i][2] = '<div style="padding: 4px 0px;"><b><small>'; $table->data['field'.$i][2] = '<div style="padding: 4px 0px;"><b><small>';
$table->data['field'.$i][2] .= __('Basic').'&nbsp;&nbsp;'; $table->data['field'.$i][2] .= __('Basic').'&nbsp;&nbsp;';
$table->data['field'.$i][2] .= html_print_radio_button_extended('editor_type_recovery_value_'.$i, 0, '', false, false, "removeTinyMCE('textarea_field".$i."_recovery')", '', true); $table->data['field'.$i][2] .= html_print_radio_button_extended(
// advanced 'editor_type_recovery_value_'.$i,
$table->data['field'.$i][2] .= '&nbsp;&nbsp;&nbsp;&nbsp;'; 0,
$table->data['field'.$i][2] .= __('Advanced').'&nbsp;&nbsp;'; '',
$table->data['field'.$i][2] .= html_print_radio_button_extended('editor_type_recovery_value_'.$i, 0, '', true, false, "addTinyMCE('textarea_field".$i."_recovery')", '', true); false,
$table->data['field'.$i][2] .= '</small></b></div>'; $is_central_policies_on_node,
"removeTinyMCE('textarea_field".$i."_recovery')",
'',
true
);
// Advanced.
$table->data['field'.$i][2] .= '&nbsp;&nbsp;&nbsp;&nbsp;';
$table->data['field'.$i][2] .= __('Advanced').'&nbsp;&nbsp;';
$table->data['field'.$i][2] .= html_print_radio_button_extended(
'editor_type_recovery_value_'.$i,
0,
'',
true,
$is_central_policies_on_node,
"addTinyMCE('textarea_field".$i."_recovery')",
'',
true
);
$table->data['field'.$i][2] .= '</small></b></div>';
// Texarea // Texarea.
$table->data['field'.$i][2] .= html_print_textarea('field'.$i.'_recovery', 1, 1, isset($fields_recovery[$i]) ? $fields_recovery[$i] : '', 'style="min-height:40px" class="fields"', true); $table->data['field'.$i][2] .= html_print_textarea(
'field'.$i.'_recovery',
1,
1,
isset($fields_recovery[$i]) ? $fields_recovery[$i] : '',
'style="min-height:40px" class="fields"',
true,
'',
$is_central_policies_on_node
);
} }
} else { } else {
// Step 1 by default // Step 1 by default.
$table->size = []; $table->size = [];
$table->size[0] = '20%'; $table->size[0] = '20%';
$table->data = []; $table->data = [];
@ -916,20 +1067,53 @@ if ($step == 2) {
} }
$table->data[0][0] = __('Name'); $table->data[0][0] = __('Name');
$table->data[0][1] = html_print_input_text('name', $name, '', 35, 255, true); $table->data[0][1] = html_print_input_text(
'name',
$name,
'',
35,
255,
true,
false,
false,
'',
'',
'',
'',
false,
'',
'',
'',
$is_central_policies_on_node
);
$table->data[0][1] .= '&nbsp;&nbsp;'.__('Group'); $table->data[0][1] .= '&nbsp;&nbsp;'.__('Group');
$groups = users_get_groups(); $groups = users_get_groups();
$own_info = get_user_info($config['id_user']); $own_info = get_user_info($config['id_user']);
// Only display group "All" if user is administrator or has "PM" privileges // Only display group "All" if user is administrator or has "PM" privileges.
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) {
$display_all_group = true; $display_all_group = true;
} else { } else {
$display_all_group = false; $display_all_group = false;
} }
$table->data[0][1] .= '&nbsp;'.html_print_select_groups(false, 'AR', $display_all_group, 'id_group', $id_group, '', '', 0, true); $table->data[0][1] .= '&nbsp;';
$table->data[0][1] .= html_print_select_groups(
false,
'AR',
$display_all_group,
'id_group',
$id_group,
'',
'',
0,
true,
false,
true,
'',
$is_central_policies_on_node
);
$table->data[1][0] = __('Description'); $table->data[1][0] = __('Description');
@ -939,7 +1123,9 @@ if ($step == 2) {
30, 30,
$description, $description,
'', '',
true true,
'',
$is_central_policies_on_node
); );
$table->data[2][0] = __('Priority'); $table->data[2][0] = __('Priority');
@ -952,7 +1138,9 @@ if ($step == 2) {
0, 0,
true, true,
false, false,
false false,
'',
$is_central_policies_on_node
); );
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
@ -1000,25 +1188,32 @@ if (!$create_alert && !$create_template) {
} }
if (!$disabled) { if (!$disabled) {
if ($step >= LAST_STEP) { if ($is_central_policies_on_node === false) {
html_print_submit_button(__('Finish'), 'finish', false, 'class="sub upd"'); if ($step >= LAST_STEP) {
} else {
html_print_input_hidden('step', ($step + 1));
if ($step == 2) {
// Javascript onsubmit to avoid min = 0 and max = 0
html_print_submit_button( html_print_submit_button(
__('Next'), __('Finish'),
'next', 'finish',
false, false,
'class="sub next" onclick="return check_fields_step2();"' 'class="sub upd"'
); );
} else { } else {
html_print_submit_button( html_print_input_hidden('step', ($step + 1));
__('Next'), if ($step == 2) {
'next', // Javascript onsubmit to avoid min = 0 and max = 0
false, html_print_submit_button(
'class="sub next"' __('Next'),
); 'next',
false,
'class="sub next" onclick="return check_fields_step2();"'
);
} else {
html_print_submit_button(
__('Next'),
'next',
false,
'class="sub next"'
);
}
} }
} }
} }
@ -1041,7 +1236,7 @@ var matches_not = <?php echo '"'.__("The alert would fire when the value doesn\'
var is = <?php echo "'".__('The alert would fire when the value is <span id="value"></span>')."'"; ?>; var is = <?php echo "'".__('The alert would fire when the value is <span id="value"></span>')."'"; ?>;
var is_not = <?php echo "'".__('The alert would fire when the value is not <span id="value"></span>')."'"; ?>; var is_not = <?php echo "'".__('The alert would fire when the value is not <span id="value"></span>')."'"; ?>;
var between = <?php echo "'".__('The alert would fire when the value is between <span id="min"></span> and <span id="max"></span>')."'"; ?>; var between = <?php echo "'".__('The alert would fire when the value is between <span id="min"></span> and <span id="max"></span>')."'"; ?>;
var between_not = <?php echo '"'.__("The alert would fire when the value is not between <span id=\'min\'></span> and <span id=\'max\'></span>").'"'; ?>; var between_not = <?php echo '"'.__('The alert would fire when the value is not between <span id=min></span> and <span id=max></span>').'"'; ?>;
var under = <?php echo "'".__('The alert would fire when the value is below <span id="min"></span>')."'"; ?>; var under = <?php echo "'".__('The alert would fire when the value is below <span id="min"></span>')."'"; ?>;
var over = <?php echo "'".__('The alert would fire when the value is above <span id="max"></span>')."'"; ?>; var over = <?php echo "'".__('The alert would fire when the value is above <span id="max"></span>')."'"; ?>;
var warning = <?php echo "'".__('The alert would fire when the module is in warning status')."'"; ?>; var warning = <?php echo "'".__('The alert would fire when the module is in warning status')."'"; ?>;

View File

@ -35,12 +35,15 @@ global $config;
check_login(); check_login();
enterprise_hook('open_meta_frame');
require_once $config['homedir'].'/include/functions_groups.php'; require_once $config['homedir'].'/include/functions_groups.php';
require_once $config['homedir'].'/include/functions_agents.php'; require_once $config['homedir'].'/include/functions_agents.php';
require_once $config['homedir'].'/include/functions_users.php'; require_once $config['homedir'].'/include/functions_users.php';
enterprise_include_once('meta/include/functions_agents_meta.php');
if (is_metaconsole()) {
enterprise_include_once('include/functions_metaconsole.php');
enterprise_include_once('meta/include/functions_agents_meta.php');
enterprise_hook('open_meta_frame');
}
if (is_ajax()) { if (is_ajax()) {
if (! check_acl($config['id_user'], 0, 'AR')) { if (! check_acl($config['id_user'], 0, 'AR')) {
@ -714,7 +717,12 @@ if ($tab == 'tree') {
foreach ($groups as $key => $group) { foreach ($groups as $key => $group) {
$url = 'index.php?sec=gagente&sec2=godmode/groups/configure_group&id_group='.$group['id_grupo']; $url = 'index.php?sec=gagente&sec2=godmode/groups/configure_group&id_group='.$group['id_grupo'];
$url_delete = 'index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group='.$group['id_grupo']; if (is_metaconsole()) {
$url_delete = 'index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group='.$group['id_grupo'].'&tab=groups';
} else {
$url_delete = 'index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group='.$group['id_grupo'];
}
$table->data[$key][0] = $group['id_grupo']; $table->data[$key][0] = $group['id_grupo'];
$table->data[$key][1] = '<a href="'.$url.'">'.$group['nombre'].'</a>'; $table->data[$key][1] = '<a href="'.$url.'">'.$group['nombre'].'</a>';
if ($group['icon'] != '') { if ($group['icon'] != '') {

View File

@ -92,6 +92,12 @@ if ($satellite_options != ENTERPRISE_NOT_HOOK) {
$options_satellite = array_merge($options_satellite, $satellite_options); $options_satellite = array_merge($options_satellite, $satellite_options);
} }
$options_services = enterprise_hook('massive_services_options');
if ($options_services === ENTERPRISE_NOT_HOOK) {
$options_services = [];
}
if (in_array($option, array_keys($options_alerts))) { if (in_array($option, array_keys($options_alerts))) {
$tab = 'massive_alerts'; $tab = 'massive_alerts';
} else if (in_array($option, array_keys($options_agents))) { } else if (in_array($option, array_keys($options_agents))) {
@ -108,6 +114,8 @@ if (in_array($option, array_keys($options_alerts))) {
$tab = 'massive_satellite'; $tab = 'massive_satellite';
} else if (in_array($option, array_keys($options_plugins))) { } else if (in_array($option, array_keys($options_plugins))) {
$tab = 'massive_plugins'; $tab = 'massive_plugins';
} else if (in_array($option, array_keys($options_services))) {
$tab = 'massive_services';
} }
if ($tab == 'massive_agents' && $option == '') { if ($tab == 'massive_agents' && $option == '') {
@ -173,6 +181,10 @@ switch ($tab) {
$options = $options_plugins; $options = $options_plugins;
break; break;
case 'massive_services':
$options = $options_services;
break;
default: default:
// Default. // Default.
break; break;
@ -241,6 +253,11 @@ if ($satellitetab == ENTERPRISE_NOT_HOOK) {
$satellitetab = ''; $satellitetab = '';
} }
$servicestab = enterprise_hook('massive_services_tab');
if ($servicestab == ENTERPRISE_NOT_HOOK) {
$servicestab = '';
}
$onheader = []; $onheader = [];
$onheader['massive_agents'] = $agentstab; $onheader['massive_agents'] = $agentstab;
@ -254,6 +271,7 @@ $onheader['massive_alerts'] = $alertstab;
$onheader['policies'] = $policiestab; $onheader['policies'] = $policiestab;
$onheader['snmp'] = $snmptab; $onheader['snmp'] = $snmptab;
$onheader['satellite'] = $satellitetab; $onheader['satellite'] = $satellitetab;
$onheader['services'] = $servicestab;
/* /*
Hello there! :) Hello there! :)

View File

@ -189,6 +189,7 @@ if (check_acl($config['id_user'], 0, 'AW')) {
enterprise_hook('massivepolicies_submenu'); enterprise_hook('massivepolicies_submenu');
enterprise_hook('massivesnmp_submenu'); enterprise_hook('massivesnmp_submenu');
enterprise_hook('massivesatellite_submenu'); enterprise_hook('massivesatellite_submenu');
enterprise_hook('massiveservices_submenu');
$sub['gmassive']['sub2'] = $sub2; $sub['gmassive']['sub2'] = $sub2;
} }

View File

@ -46,14 +46,15 @@ if (defined('METACONSOLE')) {
$sec = 'gmodules'; $sec = 'gmodules';
} }
if (is_management_allowed() === true) {
$create = (bool) get_parameter('create'); $create = (bool) get_parameter('create');
$update = (bool) get_parameter('update'); $update = (bool) get_parameter('update');
$delete = (bool) get_parameter('delete'); $delete = (bool) get_parameter('delete');
$new = (bool) get_parameter('new'); $new = (bool) get_parameter('new');
$id = (int) get_parameter('id'); $id = (int) get_parameter('id');
$multiple_delete = (bool) get_parameter('multiple_delete', 0); $multiple_delete = (bool) get_parameter('multiple_delete', 0);
$pure = get_parameter('pure', 0); $pure = get_parameter('pure', 0);
}
if ($create) { if ($create) {
$name = (string) get_parameter('name'); $name = (string) get_parameter('name');
@ -186,7 +187,7 @@ if ($multiple_delete) {
); );
} }
if (($id || $new) && !$delete && !$multiple_delete) { if (($id || $new) && !$delete && !$multiple_delete && is_management_allowed() === true) {
include_once 'manage_nc_groups_form.php'; include_once 'manage_nc_groups_form.php';
return; return;
} }
@ -229,7 +230,10 @@ $table->class = 'info_table';
$table->head = []; $table->head = [];
$table->head['checkbox'] = html_print_checkbox('all_delete', 0, false, true, false); $table->head['checkbox'] = html_print_checkbox('all_delete', 0, false, true, false);
$table->head[0] = __('Name'); $table->head[0] = __('Name');
$table->head[1] = __('Action'); if (is_management_allowed() === true) {
$table->head[1] = __('Action');
}
$table->style = []; $table->style = [];
$table->style[0] = 'font-weight: bold'; $table->style[0] = 'font-weight: bold';
$table->align = []; $table->align = [];
@ -258,31 +262,42 @@ foreach ($groups as $group) {
} }
$table->cellclass[][1] = 'action_buttons'; $table->cellclass[][1] = 'action_buttons';
$data[1] = "<a onclick='if(confirm(\"".__('Are you sure?')."\")) return true; else return false;' if (is_management_allowed() === true) {
$data[1] = "<a onclick='if(confirm(\"".__('Are you sure?')."\")) return true; else return false;'
href='index.php?sec=".$sec.'&sec2=godmode/modules/manage_nc_groups&delete=1&id='.$group['id_sg']."&offset=0'>".html_print_image('images/cross.png', true, ['title' => __('Delete')]).'</a>'; href='index.php?sec=".$sec.'&sec2=godmode/modules/manage_nc_groups&delete=1&id='.$group['id_sg']."&offset=0'>".html_print_image('images/cross.png', true, ['title' => __('Delete')]).'</a>';
}
array_push($table->data, $data); array_push($table->data, $data);
} }
if (is_management_allowed() === false) {
ui_print_warning_message(__('This node is configured with centralized mode. This page is for read only. Go to metaconsole to manage the component groups.'));
}
if (isset($data)) { if (isset($data)) {
echo "<form method='post' action='index.php?sec=".$sec."&sec2=godmode/modules/manage_nc_groups'>"; echo "<form method='post' action='index.php?sec=".$sec."&sec2=godmode/modules/manage_nc_groups'>";
html_print_input_hidden('multiple_delete', 1); html_print_input_hidden('multiple_delete', 1);
html_print_table($table); html_print_table($table);
echo "<div style='padding-left: 10px; float: right;'>"; if (is_management_allowed() === true) {
html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete"'); echo "<div style='padding-left: 10px; float: right;'>";
echo '</div>'; html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete"');
echo '</div>';
}
echo '</form>'; echo '</form>';
} else { } else {
ui_print_info_message(['no_close' => true, 'message' => __('There are no defined component groups') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no defined component groups') ]);
} }
if (is_management_allowed() === true) {
echo '<form method="post" action='.$url.'>';
echo '<div class="" style="float:right;">';
html_print_input_hidden('new', 1);
html_print_submit_button(__('Create'), 'crt', false, 'class="sub next"');
echo '</div>';
echo '</form>';
}
echo '<form method="post" action='.$url.'>';
echo '<div class="" style="float:right;">';
html_print_input_hidden('new', 1);
html_print_submit_button(__('Create'), 'crt', false, 'class="sub next"');
echo '</div>';
echo '</form>';
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');
?> ?>

View File

@ -47,6 +47,39 @@ require_once $config['homedir'].'/include/functions_categories.php';
enterprise_include_once('meta/include/functions_components_meta.php'); enterprise_include_once('meta/include/functions_components_meta.php');
require_once $config['homedir'].'/include/functions_component_groups.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'); $type = (int) get_parameter('type');
$name = (string) get_parameter('name'); $name = (string) get_parameter('name');
$description = (string) get_parameter('description'); $description = (string) get_parameter('description');
@ -180,6 +213,68 @@ if ($duplicate_network_component) {
$id = 0; $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_1 = '';
$custom_string_2 = ''; $custom_string_2 = '';
$custom_string_3 = ''; $custom_string_3 = '';
@ -210,7 +305,7 @@ if (defined('METACONSOLE')) {
$sec = 'gmodules'; $sec = 'gmodules';
} }
if ($type >= 15 && $type <= 18) { if ($type >= MODULE_TYPE_REMOTE_SNMP && $type <= MODULE_TYPE_REMOTE_SNMP_PROC) {
// New support for snmp v3. // New support for snmp v3.
$tcp_send = $snmp_version; $tcp_send = $snmp_version;
$plugin_user = $snmp3_auth_user; $plugin_user = $snmp3_auth_user;
@ -219,7 +314,7 @@ if ($type >= 15 && $type <= 18) {
$custom_string_1 = $snmp3_privacy_method; $custom_string_1 = $snmp3_privacy_method;
$custom_string_2 = $snmp3_privacy_pass; $custom_string_2 = $snmp3_privacy_pass;
$custom_string_3 = $snmp3_security_level; $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; $tcp_send = $command_text;
$custom_string_1 = $command_credential_identifier; $custom_string_1 = $command_credential_identifier;
$custom_string_2 = $command_os; $custom_string_2 = $command_os;
@ -275,7 +370,6 @@ if ($create_component) {
'post_process' => $post_process, 'post_process' => $post_process,
'unit' => $unit, 'unit' => $unit,
'wizard_level' => $wizard_level, 'wizard_level' => $wizard_level,
'macros' => $macros,
'critical_instructions' => $critical_instructions, 'critical_instructions' => $critical_instructions,
'warning_instructions' => $warning_instructions, 'warning_instructions' => $warning_instructions,
'unknown_instructions' => $unknown_instructions, 'unknown_instructions' => $unknown_instructions,
@ -289,6 +383,17 @@ if ($create_component) {
'min_ff_event_critical' => $ff_event_critical, 'min_ff_event_critical' => $ff_event_critical,
'ff_type' => $ff_type, 'ff_type' => $ff_type,
'each_ff' => $each_ff, '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 { } else {
@ -298,9 +403,17 @@ if ($create_component) {
if ($id === false || !$id) { if ($id === false || !$id) {
db_pandora_audit( db_pandora_audit(
'Module management', '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'; include_once 'godmode/modules/manage_network_components_form.php';
return; return;
} }
@ -356,7 +469,6 @@ if ($update_component) {
'post_process' => $post_process, 'post_process' => $post_process,
'unit' => $unit, 'unit' => $unit,
'wizard_level' => $wizard_level, 'wizard_level' => $wizard_level,
'macros' => $macros,
'critical_instructions' => $critical_instructions, 'critical_instructions' => $critical_instructions,
'warning_instructions' => $warning_instructions, 'warning_instructions' => $warning_instructions,
'unknown_instructions' => $unknown_instructions, 'unknown_instructions' => $unknown_instructions,
@ -370,6 +482,17 @@ if ($update_component) {
'min_ff_event_critical' => $ff_event_critical, 'min_ff_event_critical' => $ff_event_critical,
'ff_type' => $ff_type, 'ff_type' => $ff_type,
'each_ff' => $each_ff, '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 { } 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( $table->data[0][1] = html_print_select(
@ -665,14 +783,16 @@ $table->head['checkbox'] = html_print_checkbox(
false false
); );
$table->head[0] = __('Module name'); $table->head[0] = __('Module name');
$table->head[1] = __('Type'); $table->head[1] = __('Server');
$table->head[2] = __('Type');
$table->head[3] = __('Description'); $table->head[3] = __('Description');
$table->head[4] = __('Group'); $table->head[4] = __('Group');
$table->head[5] = __('Max/Min'); $table->head[5] = __('Max/Min');
$table->head[6] = __('Action'); $table->head[6] = __('Action');
$table->size = []; $table->size = [];
$table->size['checkbox'] = '20px'; $table->size['checkbox'] = '20px';
$table->size[1] = '75px'; $table->size[1] = '40px';
$table->size[2] = '50px';
$table->size[6] = '80px'; $table->size[6] = '80px';
$table->align[6] = 'left'; $table->align[6] = 'left';
$table->data = []; $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] = '<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] .= io_safe_output($component['name']);
$data[0] .= '</a>'; $data[0] .= '</a>';
$data[1] = ui_print_moduletype_icon($component['type'], true);
switch ($component['id_modulo']) { switch ($component['id_modulo']) {
case MODULE_NETWORK: case MODULE_NETWORK:
$data[1] .= html_print_image( $data[1] .= html_print_image(
@ -724,11 +843,20 @@ foreach ($components as $component) {
); );
break; break;
case MODULE_WIZARD:
$data[1] .= html_print_image(
'images/wand.png',
true,
['title' => __('Wizard module')]
);
break;
default: default:
// Not possible. // Not possible.
break; 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[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[4] = network_components_get_group_name($component['id_group']);
$data[5] = $component['max'].' / '.$component['min']; $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_input_hidden('new_component', 1);
html_print_select( html_print_select(
[ [
2 => __('Create a new network component'), COMPONENT_TYPE_NETWORK => __('Create a new network component'),
4 => __('Create a new plugin component'), COMPONENT_TYPE_PLUGIN => __('Create a new plugin component'),
6 => __('Create a new WMI component'), COMPONENT_TYPE_WMI => __('Create a new WMI component'),
COMPONENT_TYPE_WIZARD => __('Create a new wizard component'),
], ],
'id_component_type', 'id_component_type',
'', '',

View File

@ -110,56 +110,69 @@ if ($create_network_from_module) {
if (isset($id)) { if (isset($id)) {
$component = network_components_get_network_component((int) $id); $component = network_components_get_network_component((int) $id);
if ($component !== false) { if ($component !== false) {
$id_component_type = $component['id_modulo']; $id_component_type = $component['id_modulo'];
$name = $component['name']; $name = $component['name'];
$type = $component['type']; $type = $component['type'];
$description = $component['description']; $description = $component['description'];
$max = $component['max']; $max = $component['max'];
$min = $component['min']; $min = $component['min'];
$module_interval = $component['module_interval']; $module_interval = $component['module_interval'];
$tcp_port = $component['tcp_port']; $tcp_port = $component['tcp_port'];
$tcp_rcv = $component['tcp_rcv']; $tcp_rcv = $component['tcp_rcv'];
$tcp_send = $component['tcp_send']; $tcp_send = $component['tcp_send'];
$snmp_community = $component['snmp_community']; $snmp_community = $component['snmp_community'];
$snmp_oid = $component['snmp_oid']; $snmp_oid = $component['snmp_oid'];
$id_module_group = $component['id_module_group']; $id_module_group = $component['id_module_group'];
$id_group = $component['id_group']; $id_group = $component['id_group'];
$id_plugin = $component['id_plugin']; $id_plugin = $component['id_plugin'];
$plugin_user = $component['plugin_user']; $plugin_user = $component['plugin_user'];
$plugin_pass = io_output_password($component['plugin_pass']); $plugin_pass = io_output_password($component['plugin_pass']);
$plugin_parameter = $component['plugin_parameter']; $plugin_parameter = $component['plugin_parameter'];
$macros = $component['macros']; $macros = $component['macros'];
$max_timeout = $component['max_timeout']; $max_timeout = $component['max_timeout'];
$max_retries = $component['max_retries']; $max_retries = $component['max_retries'];
$dynamic_interval = $component['dynamic_interval']; $dynamic_interval = $component['dynamic_interval'];
$dynamic_max = $component['dynamic_max']; $dynamic_max = $component['dynamic_max'];
$dynamic_min = $component['dynamic_min']; $dynamic_min = $component['dynamic_min'];
$dynamic_two_tailed = $component['dynamic_two_tailed']; $dynamic_two_tailed = $component['dynamic_two_tailed'];
$min_warning = $component['min_warning']; $min_warning = $component['min_warning'];
$max_warning = $component['max_warning']; $max_warning = $component['max_warning'];
$str_warning = $component['str_warning']; $str_warning = $component['str_warning'];
$max_critical = $component['max_critical']; $max_critical = $component['max_critical'];
$min_critical = $component['min_critical']; $min_critical = $component['min_critical'];
$str_critical = $component['str_critical']; $str_critical = $component['str_critical'];
$ff_event = $component['min_ff_event']; $ff_event = $component['min_ff_event'];
$history_data = $component['history_data']; $history_data = $component['history_data'];
$post_process = $component['post_process']; $post_process = $component['post_process'];
$unit = $component['unit']; $unit = $component['unit'];
$wizard_level = $component['wizard_level']; $wizard_level = $component['wizard_level'];
$critical_instructions = $component['critical_instructions']; $critical_instructions = $component['critical_instructions'];
$warning_instructions = $component['warning_instructions']; $warning_instructions = $component['warning_instructions'];
$unknown_instructions = $component['unknown_instructions']; $unknown_instructions = $component['unknown_instructions'];
$critical_inverse = $component['critical_inverse']; $critical_inverse = $component['critical_inverse'];
$warning_inverse = $component['warning_inverse']; $warning_inverse = $component['warning_inverse'];
$id_category = $component['id_category']; $id_category = $component['id_category'];
$tags = $component['tags']; $tags = $component['tags'];
$ff_event_normal = $component['min_ff_event_normal']; $ff_event_normal = $component['min_ff_event_normal'];
$ff_event_warning = $component['min_ff_event_warning']; $ff_event_warning = $component['min_ff_event_warning'];
$ff_event_critical = $component['min_ff_event_critical']; $ff_event_critical = $component['min_ff_event_critical'];
$ff_type = $component['ff_type']; $ff_type = $component['ff_type'];
$each_ff = $component['each_ff']; $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. // New support for snmp v3.
$snmp_version = $component['tcp_send']; $snmp_version = $component['tcp_send'];
$snmp3_auth_user = $component['plugin_user']; $snmp3_auth_user = $component['plugin_user'];
@ -170,7 +183,7 @@ if (isset($id)) {
$component['custom_string_2'] $component['custom_string_2']
); );
$snmp3_security_level = $component['custom_string_3']; $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_text = $component['tcp_send'];
$command_credential_identifier = $component['custom_string_1']; $command_credential_identifier = $component['custom_string_1'];
$command_os = $component['custom_string_2']; $command_os = $component['custom_string_2'];
@ -192,7 +205,7 @@ if (isset($id)) {
$tcp_send = ''; $tcp_send = '';
$snmp_community = ''; $snmp_community = '';
$id_module_group = ''; $id_module_group = '';
if ($id_component_type == 6) { if ($id_component_type == COMPONENT_TYPE_WMI) {
$id_group = 14; $id_group = 14;
} else { } else {
$id_group = ''; $id_group = '';
@ -238,28 +251,67 @@ if (isset($id)) {
$command_text = ''; $command_text = '';
$command_os = 'inherited'; $command_os = 'inherited';
$command_credential_identifier = ''; $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(); $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 = [ $categories = [
0, 0,
1, 1,
2, 2,
]; ];
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php'; include $remote_components_path.'manage_network_components_form_common.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_wmi.php'; include $remote_components_path.'manage_network_components_form_wmi.php';
} else if ($id_component_type == 4) { } else if ($id_component_type == COMPONENT_TYPE_PLUGIN) {
$categories = [ $categories = [
0, 0,
1, 1,
2, 2,
]; ];
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php'; include $remote_components_path.'manage_network_components_form_common.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_plugin.php'; include $remote_components_path.'manage_network_components_form_plugin.php';
} else if ($id_component_type == 2 || $create_network_from_module) { } else if ($id_component_type == COMPONENT_TYPE_WIZARD) {
$categories = [ $categories = [
3, 3,
4, 4,
@ -269,8 +321,19 @@ if ($id_component_type == 6) {
$categories[] = 10; $categories[] = 10;
} }
include $config['homedir'].'/godmode/modules/manage_network_components_form_common.php'; include $remote_components_path.'manage_network_components_form_wizard.php';
include $config['homedir'].'/godmode/modules/manage_network_components_form_network.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 { } else {
return; return;
} }
@ -291,15 +354,10 @@ if (defined('METACONSOLE')) {
$table->headstyle[0] = 'text-align: center'; $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); html_print_table($table);
echo '<div class="action-buttons" style="width: '.$table->width.'">'; 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); html_print_input_hidden('id_component_type', $id_component_type);
if ($id) { if ($id) {
html_print_input_hidden('update_component', 1); 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; 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->id = 'network_component';
$table->width = '100%'; $table->width = '100%';
$table->class = 'databox'; $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->data[12][1] = html_print_textarea('unknown_instructions', 2, 65, $unknown_instructions, '', true);
$table->colspan[12][1] = 3; $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')) { if (check_acl($config['id_user'], 0, 'PM')) {
$table->data[$next_row][0] = __('Category'); $table->data[$next_row][0] = __('Category');

View File

@ -180,15 +180,28 @@ $data[1] = html_print_extended_select_for_post_process(
'post_process', 'post_process',
$post_process, $post_process,
'', '',
__('Empty'), '',
'0', '0',
false, false,
true, true,
false, false,
true 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'); push_table_row($data, 'field_process');
// Advanced stuff. // 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

@ -190,8 +190,20 @@ if ($editGraph) {
$weights = implode(',', $weight_array); $weights = implode(',', $weight_array);
} }
$count_module_array = count($module_array);
if ($count_module_array > 10) {
ui_print_warning_message(
__(
'The maximum number of items in a chart is 10. You have %s elements, only first 10 will be displayed.',
$count_module_array
)
);
}
// Modules table. // Modules table.
if (count($module_array) > 0) { if ($count_module_array > 0) {
echo "<table width='100%' cellpadding=4 cellpadding=4 class='databox filters'>"; echo "<table width='100%' cellpadding=4 cellpadding=4 class='databox filters'>";
echo '<tr> echo '<tr>
<th>'.__('P.').'</th> <th>'.__('P.').'</th>
@ -202,7 +214,7 @@ if (count($module_array) > 0) {
<th>'.__('Delete').'</th> <th>'.__('Delete').'</th>
<th>'.__('Sort').'</th>'; <th>'.__('Sort').'</th>';
$color = 0; $color = 0;
for ($a = 0; $a < count($module_array); $a++) { for ($a = 0; $a < $count_module_array; $a++) {
// Calculate table line color. // Calculate table line color.
if ($color == 1) { if ($color == 1) {
$tdcolor = 'datos'; $tdcolor = 'datos';

View File

@ -164,9 +164,9 @@ echo '</div></td></tr>';
echo "<tr><td class='datos2'><b>".__('Percentil').'</b></td>'; echo "<tr><td class='datos2'><b>".__('Percentil').'</b></td>';
echo "<td class='datos2'>".html_print_checkbox('percentil', 1, $percentil, true).'</td>'; echo "<td class='datos2'>".html_print_checkbox('percentil', 1, $percentil, true).'</td>';
echo "<td class='datos2'><div id='thresholdDiv' name='thresholdDiv'><b>".__('Equalize maximum thresholds').'</b>'; echo "<td class='datos2 thresholdDiv'><b>".__('Equalize maximum thresholds').'</b></td>';
html_print_checkbox('threshold', CUSTOM_GRAPH_BULLET_CHART_THRESHOLD, $check, false, false, '', false); echo "<td class='datos2 thresholdDiv'>".html_print_checkbox('threshold', CUSTOM_GRAPH_BULLET_CHART_THRESHOLD, $check, true, false, '', false);
echo '</div></td></tr>'; echo '</td></tr>';
echo "<tr><td class='datos2'><b>".__('Add summatory series').'</b></td>'; echo "<tr><td class='datos2'><b>".__('Add summatory series').'</b></td>';
echo "<td class='datos2'>".html_print_checkbox('summatory_series', 1, $summatory_series, true)."</td> echo "<td class='datos2'>".html_print_checkbox('summatory_series', 1, $summatory_series, true)."</td>
<td class='datos2'><b>".__('Add average series').'</b></td>'; <td class='datos2'><b>".__('Add average series').'</b></td>';
@ -175,6 +175,7 @@ echo "<tr><td class='datos2'><b>".__('Modules and series').'</b></td>';
echo "<td class='datos2'>".html_print_checkbox('modules_series', 1, $modules_series, true).'</td>'; echo "<td class='datos2'>".html_print_checkbox('modules_series', 1, $modules_series, true).'</td>';
echo "<td class='datos2'><b>".__('Show full scale graph (TIP)').'</td>'; echo "<td class='datos2'><b>".__('Show full scale graph (TIP)').'</td>';
echo "<td class='datos2'>".html_print_checkbox('fullscale', 1, $fullscale, true).'</td>';
echo '</tr>'; echo '</tr>';
echo '</table>'; echo '</table>';
@ -190,9 +191,9 @@ echo '</form>';
echo '<script type="text/javascript"> echo '<script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
if ($("#stacked").val() == '.CUSTOM_GRAPH_BULLET_CHART.') { if ($("#stacked").val() == '.CUSTOM_GRAPH_BULLET_CHART.') {
$("#thresholdDiv").show(); $(".thresholdDiv").show();
}else{ }else{
$("#thresholdDiv").hide(); $(".thresholdDiv").hide();
} }
if(!$("#checkbox-summatory_series").is(":checked") && !$("#checkbox-average_series").is(":checked")){ if(!$("#checkbox-summatory_series").is(":checked") && !$("#checkbox-average_series").is(":checked")){
@ -207,16 +208,16 @@ echo '<script type="text/javascript">
$("[name=threshold]").prop("checked", false); $("[name=threshold]").prop("checked", false);
$(".stacked").hide(); $(".stacked").hide();
$("input[name=\'width\']").hide(); $("input[name=\'width\']").hide();
$("#thresholdDiv").hide(); $(".thresholdDiv").hide();
} else if ($(this).val() == '.CUSTOM_GRAPH_BULLET_CHART.') { } else if ($(this).val() == '.CUSTOM_GRAPH_BULLET_CHART.') {
$("#thresholdDiv").show(); $(".thresholdDiv").show();
$(".stacked").show(); $(".stacked").show();
$("input[name=\'width\']").show(); $("input[name=\'width\']").show();
} else { } else {
$("[name=threshold]").prop("checked", false); $("[name=threshold]").prop("checked", false);
$(".stacked").show(); $(".stacked").show();
$("input[name=\'width\']").show(); $("input[name=\'width\']").show();
$("#thresholdDiv").hide(); $(".thresholdDiv").hide();
} }
}); });

View File

@ -71,12 +71,6 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
'active' => false, 'active' => false,
'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image('images/wand.png', true, ['title' => __('Visual Console Template Wizard')]).'</a>', 'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image('images/wand.png', true, ['title' => __('Visual Console Template Wizard')]).'</a>',
]; ];
if ($is_metaconsole) {
$buttons['visual_console_manager'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_manager.'">'.html_print_image('images/builder.png', true, ['title' => __('Visual Console Manager')]).'</a>',
];
}
} }
if (!$is_metaconsole) { if (!$is_metaconsole) {

View File

@ -170,6 +170,7 @@ if ($schedule_report != '') {
$parameters[4] = get_parameter('report_type', ''); $parameters[4] = get_parameter('report_type', '');
$parameters['first_execution'] = strtotime($date.' '.$time); $parameters['first_execution'] = strtotime($date.' '.$time);
$values = [ $values = [
'id_usuario' => $config['id_user'], 'id_usuario' => $config['id_user'],
'id_user_task' => $id_user_task, 'id_user_task' => $id_user_task,
@ -180,9 +181,11 @@ if ($schedule_report != '') {
$result = db_process_sql_insert('tuser_task_scheduled', $values); $result = db_process_sql_insert('tuser_task_scheduled', $values);
$report_type = $parameters[4];
ui_print_result_message( ui_print_result_message(
$result, $result,
__('Your report has been planned, and the system will email you a PDF with the report as soon as its finished'), __('Your report has been planned, and the system will email you a '.$report_type.' file with the report as soon as its finished'),
__('An error has ocurred') __('An error has ocurred')
); );
echo '<br>'; echo '<br>';

View File

@ -64,13 +64,6 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
'active' => false, 'active' => false,
'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image('images/wand.png', true, ['title' => __('Visual Console Template Wizard')]).'</a>', 'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image('images/wand.png', true, ['title' => __('Visual Console Template Wizard')]).'</a>',
]; ];
if ($is_metaconsole) {
$buttons['visual_console_manager'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_manager.'">'.html_print_image('images/builder.png', true, ['title' => __('Visual Console Manager')]).'</a>',
];
}
} }
if (!$is_metaconsole) { if (!$is_metaconsole) {

View File

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

View File

@ -88,7 +88,6 @@ switch ($action) {
} else { } else {
header('Location:'.$config['homeurl'].'index.php?sec=gsetup&sec2=godmode/setup/os&tab='.$tab.'&message='.$message); header('Location:'.$config['homeurl'].'index.php?sec=gsetup&sec2=godmode/setup/os&tab='.$tab.'&message='.$message);
} }
break; break;
case 'update': case 'update':

View File

@ -276,6 +276,9 @@ $table->data[$i++][1] = html_print_checkbox_switch('event_storm_protection', 1,
$table->data[$i][0] = __('Command Snapshot'); $table->data[$i][0] = __('Command Snapshot');
$table->data[$i++][1] = html_print_checkbox_switch('command_snapshot', 1, $config['command_snapshot'], true); $table->data[$i++][1] = html_print_checkbox_switch('command_snapshot', 1, $config['command_snapshot'], true);
$table->data[$i][0] = __('Change remote config encoding');
$table->data[$i++][1] = html_print_checkbox_switch('use_custom_encoding', 1, $config['use_custom_encoding'], true);
$table->data[$i][0] = __('Server logs directory'); $table->data[$i][0] = __('Server logs directory');
$table->data[$i++][1] = html_print_input_text( $table->data[$i++][1] = html_print_input_text(
'server_log_dir', 'server_log_dir',

View File

@ -870,8 +870,8 @@ $row++;
$table_chars->data[$row][0] = __('Show only average'); $table_chars->data[$row][0] = __('Show only average');
$options_soft_graphs = []; $options_soft_graphs = [];
$options_soft_graphs[0] = __('Standard mode'); $options_soft_graphs[0] = __('Show only average by default');
$options_soft_graphs[1] = __('Classic mode'); $options_soft_graphs[1] = __('Show MAX/AVG/MIN by default');
$table_chars->data[$row][1] = html_print_select($options_soft_graphs, 'type_mode_graph', $config['type_mode_graph'], '', '', 0, true, false, false); $table_chars->data[$row][1] = html_print_select($options_soft_graphs, 'type_mode_graph', $config['type_mode_graph'], '', '', 0, true, false, false);
$row++; $row++;
@ -1342,6 +1342,15 @@ $row++;
$row++; $row++;
$decimal_separator = [
'.' => '.',
',' => ',',
];
$table_other->data[$row][0] = __('CSV decimal separator').ui_print_help_tip(__('Only for csv reports'), true);
$table_other->data[$row][1] = html_print_select($decimal_separator, 'csv_decimal_separator', $config['csv_decimal_separator'], '', '', '', true, false, false);
$row++;
$table_other->data[$row][0] = __('Data multiplier to use in graphs/data'); $table_other->data[$row][0] = __('Data multiplier to use in graphs/data');
$options_data_multiplier = []; $options_data_multiplier = [];
$options_data_multiplier[0] = __('Use 1024 when module unit are bytes'); $options_data_multiplier[0] = __('Use 1024 when module unit are bytes');

View File

@ -117,7 +117,7 @@ if ($save_alert || $modify_alert) {
$al_field7 = (string) get_parameter_post('field7_value'); $al_field7 = (string) get_parameter_post('field7_value');
$al_field8 = (string) get_parameter_post('field8_value'); $al_field8 = (string) get_parameter_post('field8_value');
$al_field9 = (string) get_parameter_post('field9_value'); $al_field9 = (string) get_parameter_post('field9_value');
$al_field10 = (string) get_parameter_post('al_field10'); $al_field10 = (string) get_parameter_post('field10_value');
$al_field11 = (string) get_parameter_post('field11_value'); $al_field11 = (string) get_parameter_post('field11_value');
$al_field12 = (string) get_parameter_post('field12_value'); $al_field12 = (string) get_parameter_post('field12_value');
$al_field13 = (string) get_parameter_post('field13_value'); $al_field13 = (string) get_parameter_post('field13_value');

View File

@ -35,6 +35,10 @@ if ($delete != 0 && is_metaconsole()) {
open_meta_frame(); open_meta_frame();
} }
if ($tag_name != '' && is_metaconsole()) {
open_meta_frame();
}
// Metaconsole nodes // Metaconsole nodes
$servers = false; $servers = false;
if (is_metaconsole()) { if (is_metaconsole()) {
@ -182,7 +186,7 @@ $row[] = $filter_button;
$table->data[] = $row; $table->data[] = $row;
$filter_form = '<form method="POST" action="index.php?sec='.$sec.'&sec2=godmode/tag/tag&delete_tag=0">'; $filter_form = '<form method="POST" action="index.php?sec='.$sec.'&sec2=godmode/tag/tag&tag_name="'.$tag_name.'>';
$filter_form .= html_print_table($table, true); $filter_form .= html_print_table($table, true);
$filter_form .= '</form>'; $filter_form .= '</form>';
// End of filter form // End of filter form

View File

@ -112,14 +112,88 @@ if (! check_acl($config['id_user'], 0, 'UM')) {
return; return;
} }
/* if (is_ajax()) {
* Disabled at the moment. $delete_profile = (bool) get_parameter('delete_profile');
if (!check_referer()) { if ($delete_profile) {
require ("general/noaccess.php"); $id2 = (string) get_parameter('id_user');
$id_up = (int) get_parameter('id_user_profile');
return; $perfilUser = db_get_row('tusuario_perfil', 'id_up', $id_up);
$id_perfil = $perfilUser['id_perfil'];
$perfil = db_get_row('tperfil', 'id_perfil', $id_perfil);
db_pandora_audit(
'User management',
'Deleted profile for user '.io_safe_input($id2),
false,
false,
'The profile with id '.$id_perfil.' in the group '.$perfilUser['id_grupo']
);
$return = profile_delete_user_profile($id2, $id_up);
ui_print_result_message(
$return,
__('Successfully deleted'),
__('Could not be deleted')
);
$has_profile = db_get_row('tusuario_perfil', 'id_usuario', $id2);
if ($has_profile == false) {
$result = delete_user($id2);
if ($result) {
db_pandora_audit(
'User management',
__('Deleted user %s', io_safe_input($id_user))
);
}
ui_print_result_message(
$result,
__('Successfully deleted'),
__('There was a problem deleting the user')
);
// Delete the user in all the consoles
if (defined('METACONSOLE')) {
$servers = metaconsole_get_servers();
foreach ($servers as $server) {
// Connect to the remote console
metaconsole_connect($server);
// Delete the user
$result = delete_user($id_user);
if ($result) {
db_pandora_audit(
'User management',
__('Deleted user %s from metaconsole', io_safe_input($id_user))
);
}
// Restore the db connection
metaconsole_restore_db();
// Log to the metaconsole too
if ($result) {
db_pandora_audit(
'User management',
__('Deleted user %s from %s', io_safe_input($id_user), io_safe_input($server['server_name']))
);
}
ui_print_result_message(
$result,
__('Successfully deleted from %s', io_safe_input($server['server_name'])),
__('There was a problem deleting the user from %s', io_safe_input($server['server_name']))
);
}
}
}
return;
} }
*/ }
$tab = get_parameter('tab', 'user'); $tab = get_parameter('tab', 'user');
@ -168,9 +242,9 @@ if ($config['user_can_update_info']) {
$new_user = (bool) get_parameter('new_user'); $new_user = (bool) get_parameter('new_user');
$create_user = (bool) get_parameter('create_user'); $create_user = (bool) get_parameter('create_user');
$add_profile = (bool) get_parameter('add_profile'); $add_profile = (bool) get_parameter('add_profile');
$delete_profile = (bool) get_parameter('delete_profile');
$update_user = (bool) get_parameter('update_user'); $update_user = (bool) get_parameter('update_user');
$status = get_parameter('status', -1); $status = get_parameter('status', -1);
$json_profile = get_parameter('json_profile', '');
// Reset status var if current action is not update_user // Reset status var if current action is not update_user
if ($new_user || $create_user || $add_profile if ($new_user || $create_user || $add_profile
@ -372,6 +446,41 @@ if ($create_user) {
$user_info = get_user_info($id); $user_info = get_user_info($id);
$new_user = false; $new_user = false;
if (!empty($json_profile)) {
$json_profile = json_decode(io_safe_output($json_profile), true);
foreach ($json_profile as $key => $profile) {
if (!empty($profile)) {
$group2 = $profile['group'];
$profile2 = $profile['profile'];
$tags = $profile['tags'];
foreach ($tags as $k => $tag) {
if (empty($tag)) {
unset($tags[$k]);
}
}
$tags = implode(',', $tags);
$no_hierarchy = $profile['hierarchy'];
db_pandora_audit(
'User management',
'Added profile for user '.io_safe_input($id2),
false,
false,
'Profile: '.$profile2.' Group: '.$group2.' Tags: '.$tags
);
$result_profile = profile_create_user_profile($id, $profile2, $group2, false, $tags, $no_hierarchy);
ui_print_result_message(
$result_profile,
__('Profile added successfully'),
__('Profile cannot be added')
);
}
}
}
} else { } else {
$user_info = $values; $user_info = $values;
$new_user = true; $new_user = true;
@ -598,7 +707,7 @@ if ($status != -1) {
); );
} }
if ($add_profile) { if ($add_profile && empty($json_profile)) {
$id2 = (string) get_parameter('id'); $id2 = (string) get_parameter('id');
$group2 = (int) get_parameter('assign_group'); $group2 = (int) get_parameter('assign_group');
$profile2 = (int) get_parameter('assign_profile'); $profile2 = (int) get_parameter('assign_profile');
@ -628,34 +737,38 @@ if ($add_profile) {
); );
} }
if ($delete_profile) {
$id2 = (string) get_parameter('id_user');
$id_up = (int) get_parameter('id_user_profile');
$perfilUser = db_get_row('tusuario_perfil', 'id_up', $id_up);
$id_perfil = $perfilUser['id_perfil'];
$perfil = db_get_row('tperfil', 'id_perfil', $id_perfil);
db_pandora_audit(
'User management',
'Deleted profile for user '.io_safe_input($id2),
false,
false,
'The profile with id '.$id_perfil.' in the group '.$perfilUser['id_grupo']
);
$return = profile_delete_user_profile($id2, $id_up);
ui_print_result_message(
$return,
__('Successfully deleted'),
__('Could not be deleted')
);
}
if ($values) { if ($values) {
$user_info = $values; $user_info = $values;
} }
if (!users_is_admin() && $config['id_user'] != $id && !$new_user) {
$group_um = users_get_groups_UM($config['id_user']);
if (isset($group_um[0])) {
$group_um_string = implode(',', array_keys(users_get_groups($config['id_user'], 'um', true)));
} else {
$group_um_string = implode(',', array_keys($group_um));
}
$sql = sprintf(
"SELECT tusuario_perfil.* FROM tusuario_perfil
INNER JOIN tperfil ON tperfil.id_perfil = tusuario_perfil.id_perfil
WHERE id_usuario like '%s' AND id_grupo IN (%s) AND user_management = 0",
$id,
$group_um_string
);
$result = db_get_all_rows_sql($sql);
if ($result == false || $user_info['is_admin']) {
db_pandora_audit(
'ACL Violation',
'Trying to access User Management'
);
include 'general/noaccess.php';
return;
}
}
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
if ($id) { if ($id) {
echo '<div class="user_form_title">'.__('Update User').'</div>'; echo '<div class="user_form_title">'.__('Update User').'</div>';
@ -762,19 +875,22 @@ if ($config['user_can_update_password']) {
$own_info = get_user_info($config['id_user']); $own_info = get_user_info($config['id_user']);
$global_profile = '<div class="label_select_simple user_global_profile" ><span class="input_label" style="margin:0;">'.__('Global Profile').'</span>'; $global_profile = '<div class="label_select_simple user_global_profile" ><span class="input_label" style="margin:0;">'.__('Global Profile').'</span>';
$global_profile .= '<div class="switch_radio_button">'; $global_profile .= '<div class="switch_radio_button">';
$global_profile .= html_print_radio_button_extended( if (users_is_admin()) {
'is_admin', $global_profile .= html_print_radio_button_extended(
1, 'is_admin',
[ 1,
'label' => __('Administrator'), [
'help_tip' => __('This user has permissions to manage all. An admin user should not requiere additional group permissions, except for using Enterprise ACL.'), 'label' => __('Administrator'),
], 'help_tip' => __('This user has permissions to manage all. An admin user should not requiere additional group permissions, except for using Enterprise ACL.'),
$user_info['is_admin'], ],
false, $user_info['is_admin'],
'', false,
'', '',
true '',
); true
);
}
$global_profile .= html_print_radio_button_extended( $global_profile .= html_print_radio_button_extended(
'is_admin', 'is_admin',
0, 0,
@ -1027,7 +1143,7 @@ if ($meta) {
$metaconsole_access_node .= html_print_checkbox('metaconsole_access_node', 1, $user_info['metaconsole_access_node'], true).'</div>'; $metaconsole_access_node .= html_print_checkbox('metaconsole_access_node', 1, $user_info['metaconsole_access_node'], true).'</div>';
} }
echo '<form method="post" autocomplete="off">'; echo '<form id="user_profile_form" method="post" autocomplete="off">';
if (!$id) { if (!$id) {
@ -1067,14 +1183,19 @@ if (!is_metaconsole()) {
echo $search_custom_fields_view.$metaconsole_agents_manager.$metaconsole_assigned_server.$metaconsole_access_node; echo $search_custom_fields_view.$metaconsole_agents_manager.$metaconsole_assigned_server.$metaconsole_access_node;
} }
echo '</div> echo '</div>
</div> </div>
<div class="user_edit_third_row white_box"> <div class="user_edit_third_row white_box">
<div class="edit_user_comments">'.$comments.'</div> <div class="edit_user_comments">'.$comments.'</div>
</div>
<div class="user_edit_third_row white_box">'.$ehorus.'</div>
</div>'; </div>';
if (!empty($ehorus)) {
echo '<div class="user_edit_third_row white_box">'.$ehorus.'</div>';
}
echo '</div>';
profile_print_profile_table($id);
echo '<div style="width: 100%" class="action-buttons">'; echo '<div style="width: 100%" class="action-buttons">';
if ($config['admin_can_add_user']) { if ($config['admin_can_add_user']) {
@ -1088,16 +1209,15 @@ if ($config['admin_can_add_user']) {
} }
} }
html_print_input_hidden('json_profile', '');
echo '</div>'; echo '</div>';
echo '</form>'; echo '</form>';
echo '<br />'; echo '<br />';
// Don't show anything else if we're creating an user
if (!empty($id) && !$new_user) {
profile_print_profile_table($id);
}
enterprise_hook('close_meta_frame'); enterprise_hook('close_meta_frame');
$delete_image = html_print_input_image('del', 'images/cross.png', 1, '', true, ['onclick' => 'delete_profile(event, this)']);
if (!is_metaconsole()) { if (!is_metaconsole()) {
?> ?>
@ -1132,6 +1252,7 @@ if (!is_metaconsole()) {
?> ?>
<script type="text/javascript"> <script type="text/javascript">
var json_profile = $('#hidden-json_profile');
/* <![CDATA[ */ /* <![CDATA[ */
$(document).ready (function () { $(document).ready (function () {
$('input:radio[name="is_admin"]').change(function() { $('input:radio[name="is_admin"]').change(function() {
@ -1167,8 +1288,105 @@ $(document).ready (function () {
}); });
$('#checkbox-ehorus_user_level_enabled').trigger('change'); $('#checkbox-ehorus_user_level_enabled').trigger('change');
var img_delete = '<?php echo $delete_image; ?>';
var id_user = '<?php echo $id; ?>';
var data = [];
$('input:image[name="add"]').click(function (e) {
e.preventDefault();
var profile = $('#assign_profile').val();
var profile_text = $('#assign_profile option:selected').text();
var group = $('#assign_group').val();
var group_text = $('#assign_group option:selected').text();
var tags = $('#assign_tags').val();
var tags_text = $('#assign_tags option:selected').toArray().map(item => item.text).join();
if ( $('#checkbox-no_hierarchy').is(':checked')) {
var hierarchy = 1;
var hierarchy_text = '<?php echo __('yes'); ?>';
} else {
var hierarchy = 0;
var hierarchy_text = '<?php echo __('no'); ?>';
}
if (profile === '0' || group === '-1') {
alert('<?php echo __('please select profile and group'); ?>');
return;
}
if (id_user === '') {
let new_json = `{"profile":${profile},"group":${group},"tags":[${tags}],"hierarchy":${hierarchy}}`;
data.push(new_json);
json_profile.val('['+data+']');
$('#table_profiles tr:last').before(
`<tr>
<td>${profile_text}</td>
<td>${group_text}</td>
<td>${tags_text}</td>
<td>${hierarchy_text}</td>
<td>${img_delete}</td>
</tr>`
);
} else {
this.form.submit();
}
});
$('input:image[name="del"]').click(function (e) {
e.preventDefault();
var rows = $("#table_profiles tr").length;
if (rows <= 3) {
if (!confirm('<?php echo __('Deleting last profile'); ?>' + '. ' + '<?php echo __('Are you sure?'); ?>')) {
return;
}
}
var id_user_profile = $(this).siblings();
id_user_profile = id_user_profile[1].value;
var row = $(this).closest('tr');
var params = [];
params.push("delete_profile=1");
params.push("id_user=" + id_user);
params.push("id_user_profile=" + id_user_profile);
params.push("page=godmode/users/configure_user");
jQuery.ajax ({
data: params.join ("&"),
type: 'POST',
url: action="<?php echo ui_get_full_url('ajax.php', false, false, false); ?>",
success: function (data) {
row.remove();
var rows = $("#table_profiles tr").length;
if (rows <= 2) {
window.location.replace("<?php echo ui_get_full_url('index.php?sec=gusuarios&sec2=godmode/users/user_list&tab=user&pure=0', false, false, false); ?>");
}
}
});
});
$('#submit-crtbutton').click(function (e) {
e.preventDefault();
var rows = $("#table_profiles tr").length;
if (rows <= 2) {
alert('<?php echo __('please add a profile'); ?>');
} else {
this.form.submit();
}
});
}); });
function delete_profile(event, btn) {
event.preventDefault();
var row = btn.parentNode.parentNode;
var position = row.rowIndex;
row.parentNode.removeChild(row);
var json = json_profile.val();
var test = JSON.parse(json);
delete test[position-1];
json_profile.val(JSON.stringify(test));
}
function show_data_section () { function show_data_section () {
section = $("#section").val(); section = $("#section").val();

View File

@ -356,10 +356,23 @@ if (!defined('METACONSOLE')) {
$table->valign[6] = 'top'; $table->valign[6] = 'top';
} }
$group_um = users_get_groups_UM($config['id_user']);
if (isset($group_um[0])) {
$group_um_string = implode(',', array_keys(users_get_groups($config['id_user'], 'um', true)));
} else {
$group_um_string = implode(',', array_keys($group_um));
}
$info1 = []; $info1 = [];
// Is admin or has group permissions all.
$info1 = get_users($order); if (users_is_admin() || isset($group_um[0])) {
$info1 = get_users($order);
} else {
foreach ($group_um as $group => $value) {
$info1 = array_merge($info1, users_get_users_by_group($group, $value));
}
}
// Filter the users // Filter the users
if ($search) { if ($search) {
@ -400,33 +413,7 @@ if ($search) {
} }
} }
// ~ $info = $info1;
// ~ $filter_group
// ~ $filter_search
// ~
$info = [];
$own_info = get_user_info($config['id_user']);
$own_groups = users_get_groups($config['id_user'], 'AR', $own_info['is_admin']);
if ($own_info['is_admin']) {
$info = $info1;
}
// If user is not admin then don't display admin users and user of others groups.
else {
foreach ($info1 as $key => $usr) {
$u = get_user_info($key);
$g = users_get_groups($key, false, $u['is_admin']);
$result = array_intersect($g, $own_groups);
// Show users without profile too.
if (!empty($result) || (db_get_all_rows_field_filter('tusuario_perfil', 'id_usuario', $usr['id_user']) === false)) {
$info[$key] = $usr;
}
unset($u);
unset($g);
}
}
// Prepare pagination // Prepare pagination
ui_pagination(count($info)); ui_pagination(count($info));
@ -438,9 +425,41 @@ $rowPair = true;
$iterator = 0; $iterator = 0;
$cont = 0; $cont = 0;
foreach ($info as $user_id => $user_info) { foreach ($info as $user_id => $user_info) {
if (!users_is_admin() && $user_info['is_admin']) {
// If user is not admin then don't display admin users.
continue;
}
// User profiles.
if (users_is_admin() || $user_id == $config['id_user']) {
$user_profiles = db_get_all_rows_field_filter('tusuario_perfil', 'id_usuario', $user_id);
} else {
$user_profiles_aux = users_get_user_profile($user_id);
$user_profiles = [];
foreach ($group_um as $key => $value) {
if (isset($user_profiles_aux[$key])) {
$user_profiles[$key] = $user_profiles_aux[$key];
if ($user_profiles_aux[$key]['user_management'] == 1) {
$user_info['edit'] = 0;
} else {
$user_info['edit'] = 1;
}
unset($user_profiles_aux[$key]);
}
}
if (!empty($user_profiles_aux)) {
$user_info['not_delete'] = 1;
}
if ($user_profiles == false) {
continue;
}
}
$cont++; $cont++;
//
// Manual pagination due the complicated process of the ACL data // Manual pagination due the complicated process of the ACL data
if ($cont <= $offset) { if ($cont <= $offset) {
continue; continue;
@ -464,12 +483,14 @@ foreach ($info as $user_id => $user_info) {
$iterator++; $iterator++;
$data[0] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_user&pure='.$pure.'&amp;id='.$user_id.'">'.$user_id.'</a>'; if (users_is_admin() || $config['id_user'] == $user_info['id_user'] || (!$user_info['is_admin'] && (!isset($user_info['edit']) || (isset($user_info['edit']) && $user_info['edit'])))) {
$data[0] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_user&pure='.$pure.'&amp;id='.$user_id.'">'.$user_id.'</a>';
} else {
$data[0] = $user_id;
}
$data[1] = '<ul style="margin-top: 0 !important; margin-left: auto !important; padding-left: 10px !important; list-style-type: none !important;">'; $data[1] = '<ul style="margin-top: 0 !important; margin-left: auto !important; padding-left: 10px !important; list-style-type: none !important;">';
$data[1] .= '<li>'.$user_info['fullname'].'</li>'; $data[1] .= '<li>'.$user_info['fullname'].'</li>';
/*
$data[1] .= '<li><b>' . __('First name') . ':</b> ' . $user_info["firstname"] . '</li>';
$data[1] .= '<li><b>' . __('Last name') . ':</b> ' . $user_info["lastname"] . '</li>';*/
$data[1] .= '<li>'.$user_info['phone'].'</li>'; $data[1] .= '<li>'.$user_info['phone'].'</li>';
$data[1] .= '<li>'.$user_info['email'].'</li>'; $data[1] .= '<li>'.$user_info['email'].'</li>';
$data[1] .= '</ul>'; $data[1] .= '</ul>';
@ -485,20 +506,14 @@ foreach ($info as $user_id => $user_info) {
] ]
).'&nbsp;'; ).'&nbsp;';
} else { } else {
/*
$data[3] = html_print_image ("images/user_green.png", true,
array ("alt" => __('User'),
"title" => __('Standard User'))) . '&nbsp;';
*/
$data[3] = ''; $data[3] = '';
} }
$data[4] = ''; $data[4] = '';
$result = db_get_all_rows_field_filter('tusuario_perfil', 'id_usuario', $user_id); if ($user_profiles !== false) {
if ($result !== false) {
if (defined('METACONSOLE')) { if (defined('METACONSOLE')) {
$data[4] .= "<div width='100%'>"; $data[4] .= "<div width='100%'>";
foreach ($result as $row) { foreach ($user_profiles as $row) {
$data[4] .= "<div style='float:left;'>"; $data[4] .= "<div style='float:left;'>";
$data[4] .= profile_get_name($row['id_perfil']); $data[4] .= profile_get_name($row['id_perfil']);
$data[4] .= ' / </div>'; $data[4] .= ' / </div>';
@ -512,7 +527,7 @@ foreach ($info as $user_id => $user_info) {
$data[4] .= '</div>'; $data[4] .= '</div>';
} else { } else {
$data[4] .= "<table width='100%'>"; $data[4] .= "<table width='100%'>";
foreach ($result as $row) { foreach ($user_profiles as $row) {
$data[4] .= '<tr>'; $data[4] .= '<tr>';
$data[4] .= '<td>'; $data[4] .= '<td>';
$data[4] .= profile_get_name($row['id_perfil']); $data[4] .= profile_get_name($row['id_perfil']);
@ -531,21 +546,26 @@ foreach ($info as $user_id => $user_info) {
$data[5] = ui_print_string_substr($user_info['comments'], 24, true); $data[5] = ui_print_string_substr($user_info['comments'], 24, true);
$table->cellclass[][6] = 'action_buttons'; $table->cellclass[][6] = 'action_buttons';
if ($user_info['disabled'] == 0) { $data[6] = '';
$data[6] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/user_list&amp;disable_user=1&pure='.$pure.'&amp;id='.$user_info['id_user'].'">'.html_print_image('images/lightbulb.png', true, ['title' => __('Disable')]).'</a>'; if (users_is_admin() || $config['id_user'] == $user_info['id_user'] || (!$user_info['is_admin'] && (!isset($user_info['edit']) || (isset($user_info['edit']) && $user_info['edit'])))) {
} else { if (!isset($user_info['not_delete'])) {
$data[6] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/user_list&amp;disable_user=0&pure='.$pure.'&amp;id='.$user_info['id_user'].'">'.html_print_image('images/lightbulb_off.png', true, ['title' => __('Enable')]).'</a>'; if ($user_info['disabled'] == 0) {
} $data[6] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/user_list&amp;disable_user=1&pure='.$pure.'&amp;id='.$user_info['id_user'].'">'.html_print_image('images/lightbulb.png', true, ['title' => __('Disable')]).'</a>';
} else {
$data[6] .= '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_user&pure='.$pure.'&amp;id='.$user_id.'">'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'</a>'; $data[6] = '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/user_list&amp;disable_user=0&pure='.$pure.'&amp;id='.$user_info['id_user'].'">'.html_print_image('images/lightbulb_off.png', true, ['title' => __('Enable')]).'</a>';
if ($config['admin_can_delete_user'] && $user_info['id_user'] != $config['id_user']) { }
$data[6] .= "<a href='index.php?sec=".$sec.'&sec2=godmode/users/user_list&user_del=1&pure='.$pure.'&delete_user='.$user_info['id_user']."'>".html_print_image('images/cross.png', true, ['title' => __('Delete'), 'onclick' => "if (! confirm ('".__('Deleting User').' '.$user_info['id_user'].'. '.__('Are you sure?')."')) return false"]).'</a>'; }
if (defined('METACONSOLE')) {
$data[6] .= "<a href='index.php?sec=".$sec.'&sec2=godmode/users/user_list&user_del=1&pure='.$pure.'&delete_user='.$user_info['id_user']."&delete_all=1'>".html_print_image('images/cross_double.png', true, ['title' => __('Delete from all consoles'), 'onclick' => "if (! confirm ('".__('Deleting User %s from all consoles', $user_info['id_user']).'. '.__('Are you sure?')."')) return false"]).'</a>'; $data[6] .= '<a href="index.php?sec='.$sec.'&amp;sec2=godmode/users/configure_user&pure='.$pure.'&amp;id='.$user_id.'">'.html_print_image('images/config.png', true, ['title' => __('Edit')]).'</a>';
if ($config['admin_can_delete_user'] && $user_info['id_user'] != $config['id_user'] && !isset($user_info['not_delete'])) {
$data[6] .= "<a href='index.php?sec=".$sec.'&sec2=godmode/users/user_list&user_del=1&pure='.$pure.'&delete_user='.$user_info['id_user']."'>".html_print_image('images/cross.png', true, ['title' => __('Delete'), 'onclick' => "if (! confirm ('".__('Deleting User').' '.$user_info['id_user'].'. '.__('Are you sure?')."')) return false"]).'</a>';
if (defined('METACONSOLE')) {
$data[6] .= "<a href='index.php?sec=".$sec.'&sec2=godmode/users/user_list&user_del=1&pure='.$pure.'&delete_user='.$user_info['id_user']."&delete_all=1'>".html_print_image('images/cross_double.png', true, ['title' => __('Delete from all consoles'), 'onclick' => "if (! confirm ('".__('Deleting User %s from all consoles', $user_info['id_user']).'. '.__('Are you sure?')."')) return false"]).'</a>';
}
} else {
$data[6] .= '';
// Delete button not in this mode
} }
} else {
$data[6] .= '';
// Delete button not in this mode
} }
array_push($table->data, $data); array_push($table->data, $data);

View File

@ -1,5 +1,4 @@
#pandora disable phpexec #pandora disable phpexec
<Files *.php> <FilesMatch "\.(php)$">
Deny from all Deny from all
</Files> </FilesMatch>
php_flag engine off

View File

@ -871,6 +871,11 @@ if ($get_response_description) {
} }
if ($get_response_params) { if ($get_response_params) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = get_parameter('response_id'); $response_id = get_parameter('response_id');
$params = db_get_value('params', 'tevent_response', 'id', $response_id); $params = db_get_value('params', 'tevent_response', 'id', $response_id);
@ -885,6 +890,11 @@ if ($get_response_params) {
} }
if ($get_response_target) { if ($get_response_target) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = (int) get_parameter('response_id'); $response_id = (int) get_parameter('response_id');
$event_id = (int) get_parameter('event_id'); $event_id = (int) get_parameter('event_id');
$server_id = (int) get_parameter('server_id'); $server_id = (int) get_parameter('server_id');
@ -901,6 +911,11 @@ if ($get_response_target) {
} }
if ($get_response) { if ($get_response) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = get_parameter('response_id'); $response_id = get_parameter('response_id');
$event_response = db_get_row('tevent_response', 'id', $response_id); $event_response = db_get_row('tevent_response', 'id', $response_id);
@ -917,6 +932,11 @@ if ($get_response) {
if ($perform_event_response) { if ($perform_event_response) {
global $config; global $config;
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = get_parameter('response_id'); $response_id = get_parameter('response_id');
$event_id = (int) get_parameter('event_id'); $event_id = (int) get_parameter('event_id');
$server_id = (int) get_parameter('server_id', 0); $server_id = (int) get_parameter('server_id', 0);
@ -1011,6 +1031,11 @@ if ($perform_event_response) {
if ($dialogue_event_response) { if ($dialogue_event_response) {
global $config; global $config;
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$event_id = get_parameter('event_id'); $event_id = get_parameter('event_id');
$response_id = get_parameter('response_id'); $response_id = get_parameter('response_id');
$command = get_parameter('target'); $command = get_parameter('target');

View File

@ -25,7 +25,7 @@ if (is_ajax()) {
$method = (string) get_parameter('method', ''); $method = (string) get_parameter('method', '');
$action = (string) get_parameter('action', ''); $action = (string) get_parameter('action', '');
$target_ip = (string) get_parameter('target_ip', ''); $target_ip = (string) get_parameter('target_ip', '');
$community = (string) get_parameter('community', ''); $community = (string) io_safe_output((get_parameter('community', '')));
$snmp_version = (string) get_parameter('snmp_browser_version', ''); $snmp_version = (string) get_parameter('snmp_browser_version', '');
$snmp3_auth_user = io_safe_output(get_parameter('snmp3_browser_auth_user')); $snmp3_auth_user = io_safe_output(get_parameter('snmp3_browser_auth_user'));
$snmp3_security_level = get_parameter('snmp3_browser_security_level'); $snmp3_security_level = get_parameter('snmp3_browser_security_level');

View File

@ -40,6 +40,7 @@ if (is_ajax()) {
$id = get_parameter('id', -1); $id = get_parameter('id', -1);
$rootID = get_parameter('rootID', -1); $rootID = get_parameter('rootID', -1);
$serverID = get_parameter('serverID', false); $serverID = get_parameter('serverID', false);
$metaID = (int) get_parameter('metaID', 0);
$childrenMethod = get_parameter('childrenMethod', 'on_demand'); $childrenMethod = get_parameter('childrenMethod', 'on_demand');
$default_filters = [ $default_filters = [
@ -98,7 +99,16 @@ if (is_ajax()) {
break; break;
case 'services': case 'services':
$tree = new TreeService($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access); $tree = new TreeService(
$type,
$rootType,
$id,
$rootID,
$serverID,
$childrenMethod,
$access,
$metaID
);
break; break;
default: default:

View File

@ -29,7 +29,7 @@
// Begin. // Begin.
require_once 'config.php'; require_once 'config.php';
require_once 'functions_api.php'; require_once 'functions_api.php';
require '../vendor/autoload.php';
global $config; global $config;
define('DEBUG', 0); define('DEBUG', 0);

View File

@ -189,6 +189,7 @@ if (file_exists('languages/'.$user_language.'.mo') === true) {
echo '<div>'; echo '<div>';
switch ($type_graph_pdf) { switch ($type_graph_pdf) {
case 'combined': case 'combined':
$params['pdf'] = true;
echo graphic_combined_module( echo graphic_combined_module(
$module_list, $module_list,
$params, $params,

File diff suppressed because it is too large Load Diff

View File

@ -1221,6 +1221,9 @@ class ConsoleSupervisor
// At this point there's no servers with issues. // At this point there's no servers with issues.
$this->cleanNotifications('NOTIF.SERVER.STATUS%'); $this->cleanNotifications('NOTIF.SERVER.STATUS%');
return; return;
} else {
// Clean notifications. Only show notif for down servers.
$this->cleanNotifications('NOTIF.SERVER.STATUS%');
} }
foreach ($servers as $server) { foreach ($servers as $server) {

View File

@ -764,8 +764,10 @@ class HTML
$output_head .= $data['pre-content']; $output_head .= $data['pre-content'];
} }
$output_head .= '<form id="'.$form['id'].'" class="discovery '.$form['class'].'" onsubmit="'.$form['onsubmit'].'" enctype="'.$form['enctype'].'" action="'.$form['action'].'" method="'.$form['method']; if (isset($data['form']) === true) {
$output_head .= '" '.$form['extra'].'>'; $output_head .= '<form name="'.$form['name'].'" id="'.$form['id'].'" class="discovery '.$form['class'].'" onsubmit="'.$form['onsubmit'].'" enctype="'.$form['enctype'].'" action="'.$form['action'].'" method="'.$form['method'];
$output_head .= '" '.$form['extra'].'>';
}
if ($return === false) { if ($return === false) {
echo $output_head; echo $output_head;

View File

@ -64,14 +64,22 @@ class Tree
const TV_DEFAULT_AGENT_STATUS = -1; const TV_DEFAULT_AGENT_STATUS = -1;
public function __construct($type, $rootType='', $id=-1, $rootID=-1, $serverID=false, $childrenMethod='on_demand', $access='AR') public function __construct(
{ $type,
$rootType='',
$id=-1,
$rootID=-1,
$serverID=false,
$childrenMethod='on_demand',
$access='AR',
$id_meta_server=0
) {
$this->type = $type; $this->type = $type;
$this->rootType = !empty($rootType) ? $rootType : $type; $this->rootType = !empty($rootType) ? $rootType : $type;
$this->id = $id; $this->id = $id;
$this->rootID = !empty($rootID) ? $rootID : $id; $this->rootID = !empty($rootID) ? $rootID : $id;
$this->serverID = $serverID; $this->serverID = $serverID;
if (is_metaconsole()) { if (is_metaconsole() && $id_meta_server == 0) {
$this->serverName = metaconsole_get_server_by_id($serverID); $this->serverName = metaconsole_get_server_by_id($serverID);
} }
@ -90,7 +98,7 @@ class Tree
include_once $config['homedir'].'/include/functions_tags.php'; include_once $config['homedir'].'/include/functions_tags.php';
enterprise_include_once('include/functions_agents.php'); enterprise_include_once('include/functions_agents.php');
if (is_metaconsole()) { if (is_metaconsole() && $id_meta_server == 0) {
enterprise_include_once('meta/include/functions_ui_meta.php'); enterprise_include_once('meta/include/functions_ui_meta.php');
} }
} }

View File

@ -1,32 +1,112 @@
<?php <?php
// Pandora FMS- http://pandorafms.com /**
// ================================================== * Service tree view.
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas *
// Please see http://pandorafms.org for full contribution list * @category Class
// This program is free software; you can redistribute it and/or * @package Pandora FMS
// modify it under the terms of the GNU Lesser General Public License * @subpackage Enterprise
// as published by the Free Software Foundation; version 2 * @version 1.0.0
// This program is distributed in the hope that it will be useful, * @license See below
// 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. * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __|
* | __/| _ | | _ || _ | _| _ | | ___| |__ |
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* 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.
global $config; global $config;
require_once $config['homedir'].'/include/class/Tree.class.php'; require_once $config['homedir'].'/include/class/Tree.class.php';
use PandoraFMS\Enterprise\Service;
/**
* Class to handle service tree view.
*/
class TreeService extends Tree class TreeService extends Tree
{ {
/**
* Some definitions.
*
* @var boolean
*/
protected $propagateCounters = true; protected $propagateCounters = true;
/**
* Some definitions.
*
* @var boolean
*/
protected $displayAllGroups = false; protected $displayAllGroups = false;
/**
* If element is stored on remote node, this value will be greater than 0.
*
* @var integer
*/
public $metaID = 0;
public function __construct($type, $rootType='', $id=-1, $rootID=-1, $serverID=false, $childrenMethod='on_demand', $access='AR') /**
{ * Flag to avoid double connection to node.
*
* @var boolean
*/
private $connectedToNode = false;
/**
* Builder.
*
* @param mixed $type Type.
* @param string $rootType RootType.
* @param integer $id Id.
* @param integer $rootID RootID.
* @param boolean $serverID ServerID.
* @param string $childrenMethod ChildrenMethod.
* @param string $access Access.
* @param integer $id_server_meta Id_server_meta.
*/
public function __construct(
$type,
$rootType='',
$id=-1,
$rootID=-1,
$serverID=false,
$childrenMethod='on_demand',
$access='AR',
$id_server_meta=0
) {
global $config; global $config;
parent::__construct($type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access); if ($id_server_meta > 0) {
$this->metaID = $id_server_meta;
$this->serverID = $id_server_meta;
}
parent::__construct(
$type,
$rootType,
$id,
$rootID,
$serverID,
$childrenMethod,
$access,
$id_server_meta
);
$this->L1fieldName = 'id_group'; $this->L1fieldName = 'id_group';
$this->L1extraFields = [ $this->L1extraFields = [
@ -41,25 +121,60 @@ class TreeService extends Tree
$this->L2inner = 'LEFT JOIN tservice_element tse $this->L2inner = 'LEFT JOIN tservice_element tse
ON tse.id_agent = ta.id_agente'; ON tse.id_agent = ta.id_agente';
$this->L2condition = 'AND tse.id_service='.$this->id; $this->L2condition = sprintf(
' AND tse.id_service=%d AND tse.id_server_meta=0 ',
$this->id
);
} }
/**
* Setter (propagate counters).
*
* @param boolean $value Set.
*
* @return void
*/
public function setPropagateCounters($value) public function setPropagateCounters($value)
{ {
$this->propagateCounters = (bool) $value; $this->propagateCounters = (bool) $value;
} }
/**
* Set display all groups.
*
* @param boolean $value Set.
*
* @return void
*/
public function setDisplayAllGroups($value) public function setDisplayAllGroups($value)
{ {
$this->displayAllGroups = (bool) $value; $this->displayAllGroups = (bool) $value;
} }
/**
* Generates tree data.
*
* @return void
*/
protected function getData() protected function getData()
{ {
if (is_metaconsole() === true && $this->metaID > 0) {
// Impersonate node.
\enterprise_include_once('include/functions_metaconsole.php');
\enterprise_hook(
'metaconsole_connect',
[
null,
$this->metaID,
]
);
$this->connectedToNode = true;
}
if ($this->id == -1) { if ($this->id == -1) {
$this->getFirstLevel(); $this->getFirstLevel();
} else if ($this->type == 'services') { } else if ($this->type == 'services') {
@ -67,9 +182,19 @@ class TreeService extends Tree
} else if ($this->type == 'agent') { } else if ($this->type == 'agent') {
$this->getThirdLevel(); $this->getThirdLevel();
} }
if (is_metaconsole() === true && $this->metaID > 0) {
// Restore connection.
\enterprise_hook('metaconsole_restore_db');
}
} }
/**
* Generates first level data.
*
* @return void
*/
protected function getFirstLevel() protected function getFirstLevel()
{ {
global $config; global $config;
@ -118,10 +243,13 @@ class TreeService extends Tree
} }
/**
* Retrieve root services.
*
* @return array Of root services.
*/
protected function getProcessedServices() protected function getProcessedServices()
{ {
$fields = $this->getFirstLevelFields();
$is_favourite = $this->getServiceFavouriteFilter(); $is_favourite = $this->getServiceFavouriteFilter();
if (users_can_manage_group_all('AR')) { if (users_can_manage_group_all('AR')) {
@ -131,29 +259,32 @@ class TreeService extends Tree
} }
$sql = sprintf( $sql = sprintf(
"SELECT t1.* 'SELECT
FROM tservice_element tss ts.id,
RIGHT JOIN ts.id_agent_module,
(SELECT ts.id, ts.id_agent_module, ts.name, ts.name AS `alias`, ts.id AS `rootID`, ts.name,
'services' AS rootType, 'services' AS type, ts.name as `alias`,
0 AS quiet, ts.id as `rootID`,
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`, "services" as `rootType`,
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`, "services" as `type`,
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services` ts.quiet,
FROM tservice ts SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
LEFT JOIN tservice_element tse SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
ON ts.id=tse.id_service SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`,
WHERE SUM(if((tse.rules != ""), 1, 0)) AS `total_dynamic`
1=1 FROM tservice ts
%s LEFT JOIN tservice_element tse
%s ON tse.id_service = ts.id
GROUP BY id WHERE ts.id NOT IN (
) as t1 SELECT DISTINCT id_service_child
ON tss.id_service_child = t1.id FROM tservice_element
WHERE tss.id_service_child IS NULL WHERE id_server_meta = 0
", )
$groups_acl, %s
$is_favourite %s
GROUP BY ts.id',
$is_favourite,
$groups_acl
); );
$stats = db_get_all_rows_sql($sql); $stats = db_get_all_rows_sql($sql);
@ -161,8 +292,13 @@ class TreeService extends Tree
$services = []; $services = [];
foreach ($stats as $service) { foreach ($stats as $service) {
$services[$service['id']] = $this->getProcessedItem($services[$service['id']]); $services[$service['id']] = $this->getProcessedItem(
if (($service['total_services'] + $service['total_agents'] + $service['total_modules']) > 0) { $services[$service['id']]
);
$n_items = ($service['total_services'] + $service['total_agents']);
$n_items += ($service['total_modules'] + $service['total_dynamic']);
if ($n_items > 0) {
$services[$service['id']]['searchChildren'] = 1; $services[$service['id']]['searchChildren'] = 1;
} else { } else {
$services[$service['id']]['searchChildren'] = 0; $services[$service['id']]['searchChildren'] = 0;
@ -182,6 +318,13 @@ class TreeService extends Tree
} }
/**
* Retrieve first level fields.
*
* @deprecated 746.
*
* @return string With a first level fields.
*/
protected function getFirstLevelFields() protected function getFirstLevelFields()
{ {
$fields = []; $fields = [];
@ -190,187 +333,349 @@ class TreeService extends Tree
} }
/**
* Retrieves elements (second level) from selected rootID.
*
* @return void
*/
protected function getSecondLevel() protected function getSecondLevel()
{ {
$data = []; $service = new Service($this->id, true);
$data_agents = [];
$data_modules = [];
$data_services = [];
$sql = $this->getSecondLevelSql(); $output = [];
$data_agents = db_process_sql($sql); foreach ($service->children() as $item) {
$tmp = [];
if (empty($data_agents)) { if ($this->metaID > 0) {
$data_agents = []; $tmp['metaID'] = $this->metaID;
} } else if ($item->id_server_meta() !== 0) {
$tmp['metaID'] = $item->id_server_meta();
$this->processAgents($data_agents);
foreach ($data_agents as $key => $agent) {
$data_agents[$key]['showEventsBtn'] = 1;
$data_agents[$key]['eventAgent'] = $agent['id'];
}
$sql = $this->getSecondLevelModulesSql();
$data_modules = db_process_sql($sql);
if (empty($data_modules)) {
$data_modules = [];
} else {
foreach ($data_modules as $key => $module) {
switch ($module['estado']) {
case '0':
$module_status = 'ok';
$module_title = 'NORMAL';
break;
case '1':
$module_status = 'critical';
$module_title = 'CRITICAL';
break;
case '2':
$module_status = 'warning';
$module_title = 'WARNING';
break;
case '3':
$module_status = 'down';
$module_title = 'UNKNOWN';
break;
case '4':
$module_status = 'no_data';
$module_title = 'NOT INITIALIZED';
break;
default:
$module_status = 'down';
$module_title = 'UNKNOWN';
break;
}
$data_modules[$key]['statusImageHTML'] = '<img src="images/status_sets/default/agent_'.$module_status.'_ball.png" data-title="'.$module_title.' status." data-use_title_for_force_title="1" class="forced_title" alt="'.$module_title.' status." />';
$data_modules[$key]['showEventsBtn'] = 1;
$data_modules[$key]['eventModule'] = $module['id_agente_modulo'];
}
}
$sql = $this->getSecondLevelServicesSql();
$data_services = db_process_sql($sql);
$service_stats = [];
foreach ($data_services as $service) {
$service_stats[$service['id']]['id'] = (int) $service['id'];
$service_stats[$service['id']]['name'] = $service['name'];
$service_stats[$service['id']]['alias'] = $service['name'];
if (($service['total_services'] + $service['total_agents'] + $service['total_modules']) > 0) {
$service_stats[$service['id']]['searchChildren'] = 1;
} else {
$services[$service['id']]['searchChildren'] = 0;
} }
$service_stats[$service['id']]['rootID'] = $service['rootID']; $tmp['serverID'] = $tmp['metaID'];
$service_stats[$service['id']]['rootType'] = $service['rootType'];
$service_stats[$service['id']]['type'] = 'services';
$service_stats[$service['id']]['children'] = [];
$service_stats[$service['id']]['serviceDetail'] = 'index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.(int) $service['id'];
$service_stats[$service['id']]['counters'] = [
'total_services' => $service['total_services'],
'total_agents' => $service['total_agents'],
'total_modules' => $service['total_modules'],
];
}
$own_info = get_user_info($config['id_user']); switch ($item->type()) {
case SERVICE_ELEMENT_AGENT:
if ($item->agent() === null) {
// Skip item.
continue 2;
}
if ($own_info['is_admin'] || check_acl($config['id_user'], 0, 'PM')) { $tmp['id'] = $item->agent()->id_agente();
$display_all_services = true; $tmp['name'] = $item->agent()->nombre();
} else { $tmp['alias'] = $item->agent()->alias();
$display_all_services = false; $tmp['fired_count'] = $item->agent()->fired_count();
} $tmp['normal_count'] = $item->agent()->normal_count();
$tmp['warning_count'] = $item->agent()->warning_count();
$tmp['critical_count'] = $item->agent()->critical_count();
$tmp['unknown_count'] = $item->agent()->unknown_count();
$tmp['notinit_count'] = $item->agent()->notinit_count();
$tmp['total_count'] = $item->agent()->total_count();
$services = services_get_services($filter, false, $display_all_services); if ($item->agent()->quiet() > 0
|| $item->agent()->cps() > 0
) {
$tmp['quiet'] = 1;
} else {
$tmp['quiet'] = 0;
}
foreach ($services as $row) { $tmp['state_critical'] = $tmp['critical_count'];
if (!array_key_exists($row['id'], $service_stats)) { $tmp['state_warning'] = $tmp['warning_count'];
continue; $tmp['state_unknown'] = $tmp['unknown_count'];
} $tmp['state_notinit'] = $tmp['notinit_count'];
$tmp['state_normal'] = $tmp['normal_count'];
$tmp['state_total'] = $tmp['total_count'];
$tmp['type'] = SERVICE_ELEMENT_AGENT;
$tmp['rootID'] = $this->rootID;
$tmp['rootType'] = $this->rootType;
$tmp['counters'] = [
'alerts' => $item->agent()->fired_count(),
'ok' => $item->agent()->normal_count(),
'warning' => $item->agent()->warning_count(),
'critical' => $item->agent()->critical_count(),
'unknown' => $item->agent()->unknown_count(),
'not_init' => $item->agent()->notinit_count(),
'total' => $item->agent()->total_count(),
];
$status = services_get_status($row, true); switch ($item->agent()->lastStatus()) {
case AGENT_STATUS_NORMAL:
$tmp['statusImageHTML'] = '<img src="images/status_sets/default/agent_ok_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="NORMAL status." />';
break;
switch ($status) { case AGENT_STATUS_CRITICAL:
case SERVICE_STATUS_NORMAL: case AGENT_STATUS_ALERT_FIRED:
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_ok_ball.png" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="NORMAL status." />'; $tmp['statusImageHTML'] = '<img src="images/status_sets/default/agent_critical_ball.png" data-title="CRITICAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />';
break;
case AGENT_STATUS_WARNING:
$tmp['statusImageHTML'] = '<img src="images/status_sets/default/agent_warning_ball.png" data-title="WARNING status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />';
break;
case AGENT_STATUS_UNKNOWN:
default:
$tmp['statusImageHTML'] = '<img src="images/status_sets/default/agent_no_data_ball.png" data-title="UNKNOWN status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />';
break;
}
$tmp['children'] = [];
$tmp['searchChildren'] = 1;
$tmp['showEventsBtn'] = 1;
$tmp['eventAgent'] = $item->agent()->id_agente();
break; break;
case SERVICE_STATUS_CRITICAL: case SERVICE_ELEMENT_MODULE:
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_critical_ball.png" data-title="CRITICAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />'; if ($item->module() === null) {
// Skip item.
continue 2;
}
$tmp['id'] = $item->module()->id_agente_modulo();
$tmp['name'] = $item->module()->nombre();
$tmp['id_tipo_modulo'] = $item->module()->id_tipo_modulo();
$tmp['id_modulo'] = $item->module()->id_modulo();
$tmp['estado'] = $item->module()->lastStatus();
$tmp['datos'] = $item->module()->lastValue();
$tmp['parent'] = $item->module()->parent_module_id();
$alerts = alerts_get_alerts_module_name(
$item->module()->id_agente_modulo()
);
if ($alerts !== false) {
// Seems to be used as 'flag'.
$tmp['alerts'] = $alerts[0]['id'];
}
$tmp['unit'] = $item->module()->unit();
$tmp['type'] = SERVICE_ELEMENT_MODULE;
$tmp['id_module_type'] = $item->module()->id_tipo_modulo();
$tmp['server_type'] = $tmp['id_module_type'];
$tmp['status'] = $item->module()->lastStatus();
$tmp['value'] = modules_get_agentmodule_data_for_humans(
array_merge(
$item->module()->toArray(),
[ 'datos' => $item->module()->lastValue() ]
)
);
$title = $item->module()->lastStatusTitle();
if (is_numeric($item->module()->lastValue())) {
$divisor = get_data_multiplier($item->module()->unit());
$title .= ' : '.format_for_graph(
$item->module()->lastValue(),
1,
'.',
',',
$divisor
);
} else {
$title .= ' : '.substr(
io_safe_output(
$item->module()->lastValue()
),
0,
42
);
}
$tmp['serverName'] = $item->module()->agent()->server_name();
$tmp['serverID'] = $tmp['metaID'];
$tmp['statusText'] = $item->module()->lastStatusText();
$tmp['showGraphs'] = 1;
$tmp['showEventsBtn'] = 1;
$tmp['eventAgent'] = $item->module()->id_agente();
$html = '<img src="';
$html .= ui_get_full_url(
'/images/status_sets/default/'.$item->module()->lastStatusImage()
);
$html .= '" data-title="'.$title;
$html .= '" data-use_title_for_force_title="1" ';
$html .= 'class="forced_title" alt="';
$html .= $item->module()->lastStatusTitle().'" />';
$tmp['statusImageHTML'] = $html;
$tmp = array_merge(
$tmp,
$this->getModuleGraphLinks(
$tmp
)
);
break; break;
case SERVICE_STATUS_WARNING: case SERVICE_ELEMENT_SERVICE:
$service_stats[$row['id']][$key]['statusImageHTML'] = '<img src="images/status_sets/default/agent_warning_ball.png" data-title="WARNING status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />'; if ($item->service() === null) {
// Skip item.
continue 2;
}
$tmp['id'] = (int) $item->service()->id();
$tmp['name'] = $item->service()->name();
$tmp['alias'] = $item->service()->name();
if ($this->connectedToNode === false
&& is_metaconsole() === true
&& $tmp['metaID'] > 0
) {
// Impersonate node.
\enterprise_include_once('include/functions_metaconsole.php');
\enterprise_hook(
'metaconsole_connect',
[
null,
$tmp['metaID'],
]
);
}
$grandchildren = $item->service()->children();
if ($this->connectedToNode === false
&& is_metaconsole() === true
&& $tmp['metaID'] > 0
) {
// Restore connection.
\enterprise_hook('metaconsole_restore_db');
}
$counters = [
'total_modules' => 0,
'total_agents' => 0,
'total_services' => 0,
'total_dynamic' => 0,
'total' => 0,
];
if (is_array($grandchildren) === true) {
$counters = array_reduce(
$grandchildren,
function ($carry, $item) {
if ($item->type() === SERVICE_ELEMENT_MODULE) {
$carry['total_modules']++;
} else if ($item->type() === SERVICE_ELEMENT_AGENT) {
$carry['total_agents']++;
} else if ($item->type() === SERVICE_ELEMENT_SERVICE) {
$carry['total_services']++;
} else if ($item->type() === SERVICE_ELEMENT_DYNAMIC) {
$carry['total_dynamic']++;
}
$carry['total']++;
return $carry;
},
$counters
);
}
if ($counters['total'] > 0) {
$tmp['searchChildren'] = 1;
}
$tmp['type'] = 'services';
$tmp['rootType'] = 'services';
$tmp['children'] = [];
$tmp['serviceDetail'] = ui_get_full_url(
'index.php?sec=network&sec2=enterprise/operation/services/services&tab=service_map&id_service='.$item->service()->id()
);
$tmp['counters'] = $counters;
$tmp['rootID'] = $this->rootID;
switch ($item->service()->lastStatus()) {
case SERVICE_STATUS_NORMAL:
$tmp['statusImageHTML'] = '<img src="';
$tmp['statusImageHTML'] .= ui_get_full_url(
'images/status_sets/default/agent_ok_ball.png'
);
$tmp['statusImageHTML'] .= '" data-title="NORMAL status." data-use_title_for_force_title="1" class="forced_title" alt="NORMAL status." />';
break;
case SERVICE_STATUS_CRITICAL:
$tmp['statusImageHTML'] = '<img src="';
$tmp['statusImageHTML'] .= ui_get_full_url(
'images/status_sets/default/agent_critical_ball.png'
);
$tmp['statusImageHTML'] .= '" data-title="CRITICAL status." data-use_title_for_force_title="1" class="forced_title" alt="CRITICAL status." />';
break;
case SERVICE_STATUS_WARNING:
$tmp['statusImageHTML'] = '<img src="';
$tmp['statusImageHTML'] .= ui_get_full_url(
'images/status_sets/default/agent_warning_ball.png'
);
$tmp['statusImageHTML'] .= '" data-title="WARNING status." data-use_title_for_force_title="1" class="forced_title" alt="WARNING status." />';
break;
case SERVICE_STATUS_UNKNOWN:
default:
$tmp['statusImageHTML'] = '<img src="';
$tmp['statusImageHTML'] .= ui_get_full_url(
'images/status_sets/default/agent_no_data_ball.png'
);
$tmp['statusImageHTML'] .= '" data-title="UNKNOWN status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />';
break;
}
break; break;
case SERVICE_STATUS_UNKNOWN:
default: default:
$service_stats[$row['id']]['statusImageHTML'] = '<img src="images/status_sets/default/agent_no_data_ball.png" data-title="UNKNOWN status." data-use_title_for_force_title="1" class="forced_title" alt="UNKNOWN status." />'; // Unknown type.
break; continue 2;
} }
$output[] = $tmp;
} }
$data_services = array_values($service_stats); $this->tree = $output;
$data = array_merge($data_services, $data_agents, $data_modules);
if (empty($data)) {
$this->tree = [];
return;
}
$this->tree = $data;
} }
/**
* SQL query to retrieve second level items.
*
* @return string SQL.
*/
protected function getSecondLevelServicesSql() protected function getSecondLevelServicesSql()
{ {
$group_acl = $this->getGroupAclCondition(); $group_acl = $this->getGroupAclCondition();
$sql = "SELECT ts.id, ts.name, tse1.id_service AS `rootID`, 'services' AS rootType, 'services' AS type, 0 AS quiet, SUM(if((tse2.id_agent<>0), 1, 0)) AS `total_agents`, SUM(if((tse2.id_agente_modulo<>0), 1, 0)) AS `total_modules`, SUM(if((tse2.id_service_child<>0), 1, 0)) AS `total_services`, 0 AS fired_count, 0 AS normal_count, 0 AS warning_count, 0 AS critical_count, 0 AS unknown_count, 0 AS notinit_count, 0 AS state_critical, 0 AS state_warning, 0 AS state_unknown, 0 AS state_notinit, 0 AS state_normal, 0 AS state_total, '' AS statusImageHTML, '' AS alertImageHTML $sql = sprintf(
FROM tservice_element tse1 'SELECT
LEFT JOIN tservice_element tse2 ON tse1.id_service_child=tse2.id_service ts.id,
LEFT JOIN tservice ts ON tse1.id_service_child=ts.id ts.id_agent_module,
WHERE tse1.id_service=$this->id AND tse1.id_service_child<>0 ts.name,
GROUP BY tse1.id_service_child ts.name as `alias`,
"; tse.id_service as `rootID`,
"services" as `rootType`,
"services" as `type`,
ts.quiet,
tse.id_server_meta,
SUM(if((tse.id_agent<>0), 1, 0)) AS `total_agents`,
SUM(if((tse.id_agente_modulo<>0), 1, 0)) AS `total_modules`,
SUM(if((tse.id_service_child<>0), 1, 0)) AS `total_services`
FROM tservice ts
INNER JOIN tservice_element tse
ON tse.id_service_child = ts.id
WHERE
tse.id_service = %d
%s
GROUP BY ts.id',
$this->id,
$group_acl
);
return $sql; return $sql;
} }
protected function getSecondLevelModulesSql() /**
{ * Retrieve SQL filter for current filte.r
$sql = "SELECT tse.id_agente_modulo, nombre AS `name`, nombre AS `alias`, tse.id_service AS `rootID`, 'services' AS `rootType`, 'modules' AS `type`, estado *
FROM tservice_element tse * @return string SQL filter.
INNER JOIN tagente_modulo tam ON tse.id_agente_modulo=tam.id_agente_modulo */
INNER JOIN tagente_estado tae ON tam.id_agente_modulo=tae.id_agente_estado
WHERE tse.id_service=$this->id AND tse.id_agente_modulo<>0
";
return $sql;
}
protected function getAgentStatusFilter($status=self::TV_DEFAULT_AGENT_STATUS)
{
return '';
}
protected function getServiceFavouriteFilter() protected function getServiceFavouriteFilter()
{ {
if (isset($this->filter['is_favourite']) && !empty($this->filter['is_favourite'])) { if (isset($this->filter['is_favourite']) === true
&& empty($this->filter['is_favourite']) === false
) {
return ' AND is_favourite = 1'; return ' AND is_favourite = 1';
} }
@ -378,4 +683,70 @@ class TreeService extends Tree
} }
/**
* Overwrites partial functionality of general Tree.class.
*
* @param array $module Data of given module.
*
* @return array Complementary information.
*/
protected function getModuleGraphLinks(array $module)
{
$graphType = return_graphtype($module['id_module_type']);
$url = ui_get_full_url(
'operation/agentes/stat_win.php',
false,
false,
false
);
$winHandle = dechex(crc32($module['id'].$module['name']));
$graph_params = [
'type' => $graphType,
'period' => SECONDS_1DAY,
'id' => $module['id'],
'refresh' => SECONDS_10MINUTES,
];
if (is_metaconsole() === true) {
// Set the server id.
$graph_params['server'] = $module['serverID'];
}
$graph_params_str = http_build_query($graph_params);
$moduleGraphURL = $url.'?'.$graph_params_str;
return [
'moduleGraph' => [
'url' => $moduleGraphURL,
'handle' => $winHandle,
],
'snapshot' => ui_get_snapshot_link(
[
'id_module' => $module['id'],
'interval' => $module['current_interval'],
'module_name' => $module['name'],
'id_node' => (($module['serverID'] > 0) ? $module['serverID'] : 0),
],
true
),
];
}
/**
* Needs to be defined to maintain Tree view functionality.
*
* @param integer $status Status.
*
* @return string Fixed string.
*/
protected function getAgentStatusFilter(
$status=self::TV_DEFAULT_AGENT_STATUS
) {
return '';
}
} }

View File

@ -20,8 +20,8 @@
/** /**
* Pandora build version and version * Pandora build version and version
*/ */
$build_version = 'PC200630'; $build_version = 'PC200811';
$pandora_version = 'v7.0NG.746'; $pandora_version = 'v7.0NG.748';
// Do not overwrite default timezone set if defined. // Do not overwrite default timezone set if defined.
$script_tz = @date_default_timezone_get(); $script_tz = @date_default_timezone_get();

View File

@ -50,7 +50,9 @@ define('EVENT_NO_VALIDATED', 3);
define('AGENT_ENABLED', 0); define('AGENT_ENABLED', 0);
define('AGENT_DISABLED', 1); define('AGENT_DISABLED', 1);
// Module disabled status.
define('MODULE_ENABLED', 0);
define('MODULE_DISABLED', 1);
// Error report codes. // Error report codes.
define('NOERR', 11111); define('NOERR', 11111);
@ -259,17 +261,27 @@ define('SERVICE_STATUS_NORMAL', 0);
define('SERVICE_STATUS_CRITICAL', 1); define('SERVICE_STATUS_CRITICAL', 1);
define('SERVICE_STATUS_WARNING', 2); define('SERVICE_STATUS_WARNING', 2);
define('SERVICE_STATUS_ALERT', 4); define('SERVICE_STATUS_ALERT', 4);
// Default weights. // Default service weights.
define('SERVICE_WEIGHT_CRITICAL', 1); define('SERVICE_WEIGHT_CRITICAL', 1);
define('SERVICE_WEIGHT_WARNING', 0.5); define('SERVICE_WEIGHT_WARNING', 0.5);
define('SERVICE_SMART_WEIGHT_CRITICAL', 50);
define('SERVICE_SMART_WEIGHT_WARNING', 30);
// Default service element weights.
define('SERVICE_ELEMENT_WEIGHT_CRITICAL', 1); define('SERVICE_ELEMENT_WEIGHT_CRITICAL', 1);
define('SERVICE_ELEMENT_WEIGHT_WARNING', 0.5); define('SERVICE_ELEMENT_WEIGHT_WARNING', 0.5);
define('SERVICE_ELEMENT_WEIGHT_OK', 0); define('SERVICE_ELEMENT_WEIGHT_OK', 0);
define('SERVICE_ELEMENT_WEIGHT_UNKNOWN', 0); define('SERVICE_ELEMENT_WEIGHT_UNKNOWN', 0);
define('SERVICE_ELEMENT_SMART_CRITICAL', 100);
define('SERVICE_ELEMENT_SMART_WARNING', 50);
// Service element types.
define('SERVICE_ELEMENT_AGENT', 'agent');
define('SERVICE_ELEMENT_MODULE', 'module');
define('SERVICE_ELEMENT_SERVICE', 'service');
define('SERVICE_ELEMENT_DYNAMIC', 'dynamic');
// Modes. // Modes.
define('SERVICE_MODE_MANUAL', 0); define('SERVICE_MODE_MANUAL', 0);
define('SERVICE_MODE_AUTO', 1); define('SERVICE_MODE_SMART', 1);
define('SERVICE_MODE_SIMPLE', 2);
@ -347,6 +359,7 @@ define('MODULE_PREDICTION', 5);
define('MODULE_WMI', 6); define('MODULE_WMI', 6);
define('MODULE_WEB', 7); define('MODULE_WEB', 7);
define('MODULE_WUX', 8); define('MODULE_WUX', 8);
define('MODULE_WIZARD', 9);
// Type of Modules of Prediction. // Type of Modules of Prediction.
define('MODULE_PREDICTION_SERVICE', 2); define('MODULE_PREDICTION_SERVICE', 2);
@ -674,3 +687,54 @@ define('W_CREATE_MODULE', 3);
define('W_CREATE_ALERT', 4); define('W_CREATE_ALERT', 4);
define('W_CREATE_TASK', 5); define('W_CREATE_TASK', 5);
define('WELCOME_FINISHED', -1); 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

@ -3209,7 +3209,7 @@ function get_refresh_time_array()
} }
function date2strftime_format($date_format) function date2strftime_format($date_format, $timestamp=null)
{ {
$replaces_list = [ $replaces_list = [
'D' => '%a', 'D' => '%a',
@ -3232,11 +3232,14 @@ function date2strftime_format($date_format)
'A' => '%p', 'A' => '%p',
'i' => '%M', 'i' => '%M',
's' => '%S', 's' => '%S',
'u' => '%s',
'O' => '%z', 'O' => '%z',
'T' => '%Z', 'T' => '%Z',
'%' => '%%', '%' => '%%',
'G' => '%k', 'G' => '%k',
'z' => '%j',
'U' => '%s',
'c' => '%FT%T%z',
'r' => '%d %b %Y %H:%M:%S %z',
]; ];
$return = ''; $return = '';
@ -3249,7 +3252,30 @@ function date2strftime_format($date_format)
if (isset($replaces_list[$c])) { if (isset($replaces_list[$c])) {
$return .= $replaces_list[$c]; $return .= $replaces_list[$c];
} else { } else {
$return .= $c; // Check extra formats.
switch ($date_format) {
default: $return .= date($date_format, $timestamp);
break;
case 'n':
if (stristr(PHP_OS, 'win')) {
$return .= '%#m';
} else {
$return .= '%-m';
}
case 'u':
if (preg_match('/^[0-9]*\\.([0-9]+)$/', $timestamp, $reg)) {
$decimal = substr(str_pad($reg[1], 6, '0'), 0, 6);
} else {
$decimal = '000000';
}
$return .= $decimal;
break;
break;
}
} }
} }
@ -3623,6 +3649,14 @@ function color_graph_array()
} }
/**
* Label graph Sparse.
*
* @param array $data Data chart.
* @param array $show_elements_graph Data visual styles chart.
*
* @return array Array label.
*/
function series_type_graph_array($data, $show_elements_graph) function series_type_graph_array($data, $show_elements_graph)
{ {
global $config; global $config;
@ -3645,7 +3679,13 @@ function series_type_graph_array($data, $show_elements_graph)
$color_series = color_graph_array(); $color_series = color_graph_array();
if ($show_elements_graph['id_widget_dashboard']) { if ($show_elements_graph['id_widget_dashboard']) {
$opcion = unserialize(db_get_value_filter('options', 'twidget_dashboard', ['id' => $show_elements_graph['id_widget_dashboard']])); $opcion = unserialize(
db_get_value_filter(
'options',
'twidget_dashboard',
['id' => $show_elements_graph['id_widget_dashboard']]
)
);
if ($show_elements_graph['graph_combined']) { if ($show_elements_graph['graph_combined']) {
foreach ($show_elements_graph['modules_id'] as $key => $value) { foreach ($show_elements_graph['modules_id'] as $key => $value) {
$color_series[$key] = [ $color_series[$key] = [
@ -3674,13 +3714,15 @@ function series_type_graph_array($data, $show_elements_graph)
if (strpos($key, 'summatory') !== false) { if (strpos($key, 'summatory') !== false) {
$data_return['series_type'][$key] = $type_graph; $data_return['series_type'][$key] = $type_graph;
$data_return['legend'][$key] = __('Summatory series').' '.$str; $data_return['legend'][$key] = __('Summatory series').' '.$str;
$data_return['color'][$key] = $color_series['summatory']; $data_return['color'][$key] = $color_series['summatory'];
} else if (strpos($key, 'average') !== false) { } else if (strpos($key, 'average') !== false) {
$data_return['series_type'][$key] = $type_graph; $data_return['series_type'][$key] = $type_graph;
$data_return['legend'][$key] = __('Average series').' '.$str; $data_return['legend'][$key] = __('Average series').' '.$str;
$data_return['color'][$key] = $color_series['average']; $data_return['color'][$key] = $color_series['average'];
} else if (strpos($key, 'sum') !== false || strpos($key, 'baseline') !== false) { } else if (strpos($key, 'sum') !== false
|| strpos($key, 'baseline') !== false
) {
switch ($value['id_module_type']) { switch ($value['id_module_type']) {
case 21: case 21:
case 2: case 2:
@ -3702,28 +3744,56 @@ function series_type_graph_array($data, $show_elements_graph)
&& (count($show_elements_graph['labels']) > 0) && (count($show_elements_graph['labels']) > 0)
) { ) {
if ($show_elements_graph['unit']) { if ($show_elements_graph['unit']) {
$name_legend = $show_elements_graph['labels'][$value['agent_module_id']].' / '.__('Unit ').' '.$show_elements_graph['unit'].': '; $name_legend = $show_elements_graph['labels'][$value['agent_module_id']];
$data_return['legend'][$key] = $show_elements_graph['labels'][$value['agent_module_id']].' / '.__('Unit ').' '.$show_elements_graph['unit'].': '; $name_legend .= ' / ';
$name_legend .= __('Unit ').' ';
$name_legend .= $show_elements_graph['unit'].': ';
} else { } else {
$name_legend = $show_elements_graph['labels'][$value['agent_module_id']].': '; $name_legend = $show_elements_graph['labels'][$value['agent_module_id']].': ';
$data_return['legend'][$key] = $show_elements_graph['labels'][$value['agent_module_id']].': ';
} }
} else { } else {
if (strpos($key, 'baseline') !== false) { if (strpos($key, 'baseline') !== false) {
if ($value['unit']) { if ($value['unit']) {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].' / '.__('Unit ').' '.$value['unit'].'Baseline '; $name_legend = $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'];
$name_legend .= ' / ';
$name_legend .= __('Unit ').' ';
$name_legend .= $value['unit'].'Baseline ';
} else { } else {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].'Baseline '; $name_legend = $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'].'Baseline ';
} }
} else { } else {
$name_legend = '';
if ((int) $config['type_mode_graph'] === 1) {
$name_legend .= 'Avg: ';
}
if ($value['unit']) { if ($value['unit']) {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].' / '.__('Unit ').' '.$value['unit'].': '; $name_legend .= $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'];
$name_legend .= ' / ';
$name_legend .= __('Unit ').' ';
$name_legend .= $value['unit'].': ';
} else { } else {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].': '; $name_legend .= $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'].': ';
} }
} }
} }
if (isset($value['weight']) === true
&& empty($value['weight']) === false
) {
$name_legend .= ' ('.__('Weight');
$name_legend .= ' * '.$value['weight'].') ';
}
$data_return['legend'][$key] = $name_legend;
if ((int) $value['min'] === PHP_INT_MAX) { if ((int) $value['min'] === PHP_INT_MAX) {
$value['min'] = 0; $value['min'] = 0;
} }
@ -3749,36 +3819,63 @@ function series_type_graph_array($data, $show_elements_graph)
) )
).' '.$str; ).' '.$str;
if ($show_elements_graph['compare'] == 'overlapped' && $key == 'sum2') { if ($show_elements_graph['compare'] == 'overlapped'
&& $key == 'sum2'
) {
$data_return['color'][$key] = $color_series['overlapped']; $data_return['color'][$key] = $color_series['overlapped'];
} else { } else {
$data_return['color'][$key] = $color_series[$i]; $data_return['color'][$key] = $color_series[$i];
$i++; $i++;
} }
} else if (!$show_elements_graph['fullscale'] && strpos($key, 'min') !== false } else if (!$show_elements_graph['fullscale']
|| !$show_elements_graph['fullscale'] && strpos($key, 'max') !== false && strpos($key, 'min') !== false
|| !$show_elements_graph['fullscale']
&& strpos($key, 'max') !== false
) { ) {
$data_return['series_type'][$key] = $type_graph; $data_return['series_type'][$key] = $type_graph;
$name_legend = '';
if ((int) $config['type_mode_graph'] === 1) {
if (strpos($key, 'min') !== false) {
$name_legend .= 'Min: ';
}
if (strpos($key, 'max') !== false) {
$name_legend .= 'Max: ';
}
}
if ($show_elements_graph['unit']) { if ($show_elements_graph['unit']) {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].' / '.__('Unit ').' '.$show_elements_graph['unit'].': '; $name_legend .= $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'];
$name_legend .= ' / ';
$name_legend .= __('Unit ').' ';
$name_legend .= $show_elements_graph['unit'].': ';
} else { } else {
$name_legend = $data_return['legend'][$key] = $value['agent_alias'].' / '.$value['module_name'].': '; $name_legend .= $value['agent_alias'];
$name_legend .= ' / ';
$name_legend .= $value['module_name'].': ';
} }
$data_return['legend'][$key] = $name_legend; $data_return['legend'][$key] = $name_legend;
if ($show_elements_graph['type_mode_graph']) { if ($show_elements_graph['type_mode_graph']) {
$data_return['legend'][$key] .= __('Min:').remove_right_zeros( $data_return['legend'][$key] .= __('Min:');
$data_return['legend'][$key] .= remove_right_zeros(
number_format( number_format(
$value['min'], $value['min'],
$config['graph_precision'] $config['graph_precision']
) )
).' '.__('Max:').remove_right_zeros( );
$data_return['legend'][$key] .= ' '.__('Max:');
$data_return['legend'][$key] .= remove_right_zeros(
number_format( number_format(
$value['max'], $value['max'],
$config['graph_precision'] $config['graph_precision']
) )
).' '._('Avg:').remove_right_zeros( );
$data_return['legend'][$key] .= ' '._('Avg:');
$data_return['legend'][$key] .= remove_right_zeros(
number_format( number_format(
$value['avg'], $value['avg'],
$config['graph_precision'] $config['graph_precision']
@ -3786,7 +3883,9 @@ function series_type_graph_array($data, $show_elements_graph)
).' '.$str; ).' '.$str;
} }
if ($show_elements_graph['compare'] == 'overlapped' && $key == 'sum2') { if ($show_elements_graph['compare'] == 'overlapped'
&& $key == 'sum2'
) {
$data_return['color'][$key] = $color_series['overlapped']; $data_return['color'][$key] = $color_series['overlapped'];
} else { } else {
$data_return['color'][$key] = $color_series[$i]; $data_return['color'][$key] = $color_series[$i];

View File

@ -1666,6 +1666,57 @@ function agents_get_alias($id_agent, $case='none')
} }
/**
* 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;
}
function agents_get_alias_by_name($name, $case='none') function agents_get_alias_by_name($name, $case='none')
{ {
if (is_metaconsole()) { if (is_metaconsole()) {
@ -2016,36 +2067,33 @@ function agents_get_addresses($id_agent)
function agents_get_status_from_counts($agent) function agents_get_status_from_counts($agent)
{ {
// Check if in the data there are all the necessary values // Check if in the data there are all the necessary values
if (!isset($agent['normal_count']) if (isset($agent['normal_count']) === false
&& !isset($agent['warning_count']) && isset($agent['warning_count']) === false
&& !isset($agent['critical_count']) && isset($agent['critical_count']) === false
&& !isset($agent['unknown_count']) && isset($agent['unknown_count']) === false
&& !isset($agent['notinit_count']) && isset($agent['notinit_count']) === false
&& !isset($agent['total_count']) && isset($agent['total_count']) === false
) { ) {
return -1; return -1;
} }
// Juanma (05/05/2014) Fix: This status is not init! 0 modules or all not init // Juanma (05/05/2014) Fix: This status is not init! 0 modules or all not init.
if ($agent['notinit_count'] == $agent['total_count']) { if ($agent['notinit_count'] == $agent['total_count']) {
return AGENT_MODULE_STATUS_NOT_INIT; return AGENT_STATUS_NOT_INIT;
} }
if ($agent['critical_count'] > 0) { if ($agent['critical_count'] > 0) {
return AGENT_MODULE_STATUS_CRITICAL_BAD; return AGENT_STATUS_CRITICAL;
} else if ($agent['warning_count'] > 0) { } else if ($agent['warning_count'] > 0) {
return AGENT_MODULE_STATUS_WARNING; return AGENT_STATUS_WARNING;
} else if ($agent['unknown_count'] > 0) { } else if ($agent['unknown_count'] > 0) {
return AGENT_MODULE_STATUS_UNKNOWN; return AGENT_STATUS_UNKNOWN;
} else if ($agent['normal_count'] == $agent['total_count']) { } else if ($agent['normal_count'] == $agent['total_count']) {
return AGENT_MODULE_STATUS_NORMAL; return AGENT_STATUS_NORMAL;
} else if (($agent['normal_count'] + $agent['notinit_count']) == $agent['total_count']) { } else if (($agent['normal_count'] + $agent['notinit_count']) == $agent['total_count']) {
return AGENT_MODULE_STATUS_NORMAL; return AGENT_STATUS_NORMAL;
} }
// ~ else if($agent['notinit_count'] == $agent['total_count']) {
// ~ return AGENT_MODULE_STATUS_NORMAL;
// ~ }
return -1; return -1;
} }

View File

@ -12286,12 +12286,29 @@ function api_set_create_event($id, $trash1, $other, $returnType)
return; return;
} }
if (!empty($other['data'][17]) && is_metaconsole()) {
$id_server = db_get_row_filter('tmetaconsole_setup', ['id' => $other['data'][17]]);
if ($id_server === false) {
returnError('error_create_event', __('Server id does not exist in database.'));
return;
}
$values['server_id'] = $other['data'][17];
} else {
$values['server_id'] = 0;
}
$error_msg = ''; $error_msg = '';
if ($other['data'][2] != '') { if ($other['data'][2] != '') {
$id_agent = $other['data'][2]; $id_agent = $other['data'][2];
if (is_metaconsole()) { if (is_metaconsole()) {
// On metaconsole, connect with the node to check the permissions // On metaconsole, connect with the node to check the permissions
$agent_cache = db_get_row('tmetaconsole_agent', 'id_tagente', $id_agent); if (empty($values['server_id'])) {
$agent_cache = db_get_row('tmetaconsole_agent', 'id_tagente', $id_agent);
} else {
$agent_cache = db_get_row_filter('tmetaconsole_agent', ['id_tagente' => $id_agent, 'id_tmetaconsole_setup' => $values['server_id']]);
}
if ($agent_cache === false) { if ($agent_cache === false) {
returnError('id_not_found', 'string'); returnError('id_not_found', 'string');
return; return;
@ -12420,12 +12437,6 @@ function api_set_create_event($id, $trash1, $other, $returnType)
$values['custom_data'] = ''; $values['custom_data'] = '';
} }
if ($other['data'][17] != '') {
$values['server_id'] = $other['data'][17];
} else {
$values['server_id'] = 0;
}
if ($other['data'][18] != '') { if ($other['data'][18] != '') {
$values['id_extra'] = $other['data'][18]; $values['id_extra'] = $other['data'][18];
$sql_validation = 'SELECT id_evento FROM tevento where estado IN (0,2) and id_extra ="'.$other['data'][18].'";'; $sql_validation = 'SELECT id_evento FROM tevento where estado IN (0,2) and id_extra ="'.$other['data'][18].'";';
@ -13123,6 +13134,9 @@ function api_set_create_service($thrash1, $thrash2, $other, $thrash3)
$quiet = $other['data'][11]; $quiet = $other['data'][11];
$cascade_protection = $other['data'][12]; $cascade_protection = $other['data'][12];
$evaluate_sla = $other['data'][13]; $evaluate_sla = $other['data'][13];
$is_favourite = $other['data'][14];
$unknown_as_critical = $other['data'][15];
$server_name = $other['data'][16];
if (empty($name)) { if (empty($name)) {
returnError('error_create_service', __('Error in creation service. No name')); returnError('error_create_service', __('Error in creation service. No name'));
@ -13189,24 +13203,40 @@ function api_set_create_service($thrash1, $thrash2, $other, $thrash3)
$evaluate_sla = 0; $evaluate_sla = 0;
} }
$result = services_create_service( if (empty($is_favourite)) {
$name, $is_favourite = false;
$description, }
$id_group,
$critical, if (empty($unknown_as_critical)) {
$warning, $unknown_as_critical = false;
SECONDS_5MINUTES, }
$mode,
$id_agent, if (empty($server_name)) {
$sla_interval, $server_name = null;
$sla_limit, }
$id_warning_module_template,
$id_critical_module_template, $result = enterprise_hook(
$id_unknown_module_template, 'services_create_service',
$id_critical_module_sla, [
$quiet, $name,
$cascade_protection, $description,
$evaluate_sla $id_group,
$critical,
$warning,
false,
SECONDS_5MINUTES,
$mode,
$id_agent,
$sla_interval,
$sla_limit,
$id_warning_module_template,
$id_critical_module_template,
$id_unknown_module_template,
$id_critical_module_sla,
$quiet,
$cascade_protection,
$evaluate_sla,
]
); );
if ($result) { if ($result) {
@ -13225,7 +13255,7 @@ function api_set_create_service($thrash1, $thrash2, $other, $thrash3)
* @param array $other it's array, $other as param is <name>;<description>;<id_group>;<critical>; * @param array $other it's array, $other as param is <name>;<description>;<id_group>;<critical>;
* <warning>;<id_agent>;<sla_interval>;<sla_limit>;<id_warning_module_template_alert>; * <warning>;<id_agent>;<sla_interval>;<sla_limit>;<id_warning_module_template_alert>;
* <id_critical_module_template_alert>;<id_critical_module_sla_template_alert>;<quiet>; * <id_critical_module_template_alert>;<id_critical_module_sla_template_alert>;<quiet>;
* <cascade_protection>;<evaluate_sla>; * <cascade_protection>;<evaluate_sla>;<is_favourite>;<unknown_as_critical>;<server_name>;
* in this order and separator char (after text ; ) and separator * in this order and separator char (after text ; ) and separator
* (pass in param othermode as othermode=url_encode_separator_<separator>) * (pass in param othermode as othermode=url_encode_separator_<separator>)
* @param $thrash3 Don't use * @param $thrash3 Don't use
@ -13342,25 +13372,46 @@ function api_set_update_service($thrash1, $thrash2, $other, $thrash3)
$evaluate_sla = $service['evaluate_sla']; $evaluate_sla = $service['evaluate_sla'];
} }
$result = services_update_service( $is_favourite = $other['data'][14];
$id_service, if (empty($is_favourite)) {
$name, $is_favourite = $service['is_favourite'];
$description, }
$id_group,
$critical, $unknown_as_critical = $other['data'][15];
$warning, if (empty($unknown_as_critical)) {
SECONDS_5MINUTES, $unknown_as_critical = $service['unknown_as_critical'];
$mode, }
$id_agent,
$sla_interval, $server_name = $other['data'][16];
$sla_limit, if (empty($server_name)) {
$id_warning_module_template, $server_name = $service['server_name'];
$id_critical_module_template, }
$id_unknown_module_template,
$id_critical_module_sla, $result = enterprise_hook(
$quiet, 'services_update_service',
$cascade_protection, [
$evaluate_sla $id_service,
$name,
$description,
$id_group,
$critical,
$warning,
SECONDS_5MINUTES,
$mode,
$id_agent,
$sla_interval,
$sla_limit,
$id_warning_module_template,
$id_critical_module_template,
$id_unknown_module_template,
$id_critical_module_sla,
$quiet,
$cascade_protection,
$evaluate_sla,
$is_favourite,
$unknown_as_critical,
$server_name,
]
); );
if ($result) { if ($result) {
@ -16111,3 +16162,38 @@ function api_get_event_mcid($server_id, $console_event_id, $trash2, $returnType)
return; return;
} }
} }
/**
* Function to set events in progress status.
*
* @param [int] $event_id Id event (Node or Meta).
* @param [string] $trash2 don't use.
* @param [string] $returnType
*
* Example
* http://127.0.0.1/pandora_console/include/api.php?op=set&op2=event_in_progress&return_type=json&id=0&apipass=1234&user=admin&pass=pandora
*
* @return void
*/
function api_set_event_in_progress($event_id, $trash2, $returnType)
{
global $config;
if (is_metaconsole()) {
$table = 'tmetaconsole_event';
} else {
$table = 'tevento';
}
$event = db_process_sql_update(
$table,
['estado' => 2],
['id_evento' => $event_id]
);
if ($event !== false) {
returnData('string', ['data' => $event]);
} else {
returnError('id_not_found', 'string');
}
}

View File

@ -287,6 +287,10 @@ function config_update_config()
$error_update[] = __('Command Snapshot'); $error_update[] = __('Command Snapshot');
} }
if (!config_update_value('use_custom_encoding', get_parameter('use_custom_encoding', 0))) {
$error_update[] = __('Use custom encoding');
}
if (!config_update_value('server_log_dir', io_safe_input(strip_tags(io_safe_output(get_parameter('server_log_dir')))))) { if (!config_update_value('server_log_dir', io_safe_input(strip_tags(io_safe_output(get_parameter('server_log_dir')))))) {
$error_update[] = __('Server logs directory'); $error_update[] = __('Server logs directory');
} }
@ -1336,6 +1340,10 @@ function config_update_config()
$error_update[] = __('CSV divider'); $error_update[] = __('CSV divider');
} }
if (!config_update_value('csv_decimal_separator', (string) get_parameter('csv_decimal_separator', '.'))) {
$error_update[] = __('CSV decimal separator');
}
if (!config_update_value('use_data_multiplier', get_parameter('use_data_multiplier', '1'))) { if (!config_update_value('use_data_multiplier', get_parameter('use_data_multiplier', '1'))) {
$error_update[] = __('Use data multiplier'); $error_update[] = __('Use data multiplier');
} }
@ -2799,6 +2807,10 @@ function config_process_config()
config_update_value('event_storm_protection', 0); config_update_value('event_storm_protection', 0);
} }
if (!isset($config['use_custom_encoding'])) {
config_update_value('use_custom_encoding', 0);
}
if (!isset($config['server_log_dir'])) { if (!isset($config['server_log_dir'])) {
config_update_value('server_log_dir', ''); config_update_value('server_log_dir', '');
} }
@ -2867,6 +2879,10 @@ function config_process_config()
config_update_value('csv_divider', ';'); config_update_value('csv_divider', ';');
} }
if (!isset($config['csv_decimal_separator'])) {
config_update_value('csv_decimal_separator', '.');
}
if (!isset($config['use_data_multiplier'])) { if (!isset($config['use_data_multiplier'])) {
config_update_value('use_data_multiplier', '1'); config_update_value('use_data_multiplier', '1');
} }

View File

@ -2118,7 +2118,7 @@ function events_comment(
switch ($comments_format) { switch ($comments_format) {
case 'new': case 'new':
$comment_for_json['comment'] = $comment; $comment_for_json['comment'] = io_safe_input($comment);
$comment_for_json['action'] = $action; $comment_for_json['action'] = $action;
$comment_for_json['id_user'] = $config['id_user']; $comment_for_json['id_user'] = $config['id_user'];
$comment_for_json['utimestamp'] = time(); $comment_for_json['utimestamp'] = time();
@ -2141,7 +2141,7 @@ function events_comment(
$comment = str_replace(["\r\n", "\r", "\n"], '<br>', $comment); $comment = str_replace(["\r\n", "\r", "\n"], '<br>', $comment);
if ($comment != '') { if ($comment != '') {
$commentbox = '<div style="border:1px dotted #CCC; min-height: 10px;">'.$comment.'</div>'; $commentbox = '<div style="border:1px dotted #CCC; min-height: 10px;">'.io_safe_input($comment).'</div>';
} else { } else {
$commentbox = ''; $commentbox = '';
} }
@ -3377,7 +3377,7 @@ function events_page_responses($event, $childrens_ids=[])
); );
if ($strict_user) { if ($strict_user) {
$user_name = db_get_value( $user_name = db_get_value(
'fullname', 'id_user',
'tusuario', 'tusuario',
'id_user', 'id_user',
$config['id_user'] $config['id_user']
@ -3395,14 +3395,14 @@ function events_page_responses($event, $childrens_ids=[])
} }
foreach ($users as $u) { foreach ($users as $u) {
$owners[$u['id_user']] = $u['fullname']; $owners[$u['id_user']] = $u['id_user'];
} }
if ($event['owner_user'] == '') { if ($event['owner_user'] == '') {
$owner_name = __('None'); $owner_name = __('None');
} else { } else {
$owner_name = db_get_value( $owner_name = db_get_value(
'fullname', 'id_user',
'tusuario', 'tusuario',
'id_user', 'id_user',
$event['owner_user'] $event['owner_user']
@ -3424,7 +3424,7 @@ function events_page_responses($event, $childrens_ids=[])
'owner_button', 'owner_button',
false, false,
'event_change_owner();', 'event_change_owner();',
'class="sub next"', 'class="sub next w70p"',
true true
); );
@ -3504,7 +3504,7 @@ function events_page_responses($event, $childrens_ids=[])
'status_button', 'status_button',
false, false,
'event_change_status(\''.$event['similar_ids'].'\');', 'event_change_status(\''.$event['similar_ids'].'\');',
'class="sub next"', 'class="sub next w70p"',
true true
); );
} }
@ -3520,7 +3520,7 @@ function events_page_responses($event, $childrens_ids=[])
'comment_button', 'comment_button',
false, false,
'$(\'#link_comments\').trigger(\'click\');', '$(\'#link_comments\').trigger(\'click\');',
'class="sub next"', 'class="sub next w70p"',
true true
); );
@ -3544,7 +3544,7 @@ function events_page_responses($event, $childrens_ids=[])
'delete_button', 'delete_button',
false, false,
'if(!confirm(\''.__('Are you sure?').'\')) { return false; } this.form.submit();', 'if(!confirm(\''.__('Are you sure?').'\')) { return false; } this.form.submit();',
'class="sub cancel"', 'class="sub cancel w70p"',
true true
); );
$data[2] .= html_print_input_hidden('delete', 1, true); $data[2] .= html_print_input_hidden('delete', 1, true);
@ -3599,7 +3599,7 @@ function events_page_responses($event, $childrens_ids=[])
'custom_response_button', 'custom_response_button',
false, false,
'execute_response('.$event['id_evento'].','.$server_id.')', 'execute_response('.$event['id_evento'].','.$server_id.')',
"class='sub next'", "class='sub next w70p'",
true true
); );
} }

View File

@ -36,7 +36,8 @@ function forecast_projection_graph(
$prediction_period, $prediction_period,
$max_value=false, $max_value=false,
$min_value=false, $min_value=false,
$csv=false $csv=false,
$server_name=''
) { ) {
global $config; global $config;
@ -55,7 +56,7 @@ function forecast_projection_graph(
'projection' => true, 'projection' => true,
]; ];
$module_data = grafico_modulo_sparse($params); $module_data = grafico_modulo_sparse($params, $server_name);
if (empty($module_data)) { if (empty($module_data)) {
return []; return [];
@ -252,12 +253,13 @@ function forecast_prediction_date(
$module_id, $module_id,
$period=SECONDS_2MONTHS, $period=SECONDS_2MONTHS,
$max_value=0, $max_value=0,
$min_value=0 $min_value=0,
$server_name=''
) { ) {
// Checks interval // Checks interval
if ($min_value > $max_value) { if ($min_value > $max_value) {
return false; return false;
} }
return forecast_projection_graph($module_id, $period, false, $max_value, $min_value); return forecast_projection_graph($module_id, $period, false, $max_value, $min_value, false, $server_name);
} }

View File

@ -616,7 +616,7 @@ function grafico_modulo_sparse_data(
* *
* @return string html Content graphs. * @return string html Content graphs.
*/ */
function grafico_modulo_sparse($params) function grafico_modulo_sparse($params, $server_name='')
{ {
global $config; global $config;
@ -812,6 +812,12 @@ function grafico_modulo_sparse($params)
$date_array['final_date'] = $params['date']; $date_array['final_date'] = $params['date'];
$date_array['start_date'] = ($params['date'] - $params['period']); $date_array['start_date'] = ($params['date'] - $params['period']);
if (is_metaconsole()) {
$id_meta = metaconsole_get_id_server($server_name);
$server = metaconsole_get_connection_by_id($id_meta);
metaconsole_connect($server);
}
if ($agent_module_id) { if ($agent_module_id) {
$module_data = db_get_row_sql( $module_data = db_get_row_sql(
'SELECT * FROM tagente_modulo 'SELECT * FROM tagente_modulo
@ -1022,6 +1028,10 @@ function grafico_modulo_sparse($params)
} }
} }
if (is_metaconsole()) {
metaconsole_restore_db();
}
return $return; return $return;
} }
@ -1275,9 +1285,22 @@ function graphic_combined_module(
} }
if ($count_modules > 0) { if ($count_modules > 0) {
$sources = true; foreach ($module_list as $key => $value) {
$sources[$key]['id_server'] = $value['server'];
$sources[$key]['id_agent_module'] = $value['module'];
$sources[$key]['weight'] = $weights[$key];
$sources[$key]['label'] = $params_combined['labels'];
}
} }
} else { } else {
if (is_metaconsole()) {
metaconsole_restore_db();
$server = metaconsole_get_connection_by_id($params['server_id']);
if (metaconsole_connect($server) != NOERR) {
return false;
}
}
$sources = db_get_all_rows_field_filter( $sources = db_get_all_rows_field_filter(
'tgraph_source', 'tgraph_source',
'id_graph', 'id_graph',
@ -1285,8 +1308,18 @@ function graphic_combined_module(
'field_order' 'field_order'
); );
if (is_metaconsole()) {
if (isset($sources) && is_array($sources)) {
foreach ($sources as $key => $value) {
$sources[$key]['id_server'] = $params['server_id'];
}
}
}
$series = db_get_all_rows_sql( $series = db_get_all_rows_sql(
'SELECT summatory_series,average_series, modules_series 'SELECT summatory_series,
average_series,
modules_series
FROM tgraph FROM tgraph
WHERE id_graph = '.$params_combined['id_graph'] WHERE id_graph = '.$params_combined['id_graph']
); );
@ -1295,45 +1328,76 @@ function graphic_combined_module(
$average = $series[0]['average_series']; $average = $series[0]['average_series'];
$modules_series = $series[0]['modules_series']; $modules_series = $series[0]['modules_series'];
if (is_metaconsole()) {
metaconsole_restore_db();
}
}
if (isset($sources) && is_array($sources)) {
$weights = []; $weights = [];
$labels = []; $labels = [];
$modules = []; $modules = [];
foreach ($sources as $source) {
if (isset($sources) && is_array($sources)) { if (is_metaconsole() === true) {
foreach ($sources as $source) { $server = metaconsole_get_connection_by_id($source['id_server']);
array_push($modules, $source['id_agent_module']); if (metaconsole_connect($server) != NOERR) {
array_push($weights, $source['weight']); continue;
if ($source['label'] != '' || $params_combined['labels']) {
$id_agent = agents_get_module_id(
$source['id_agent_module']
);
$agent_description = agents_get_description($id_agent);
$agent_group = agents_get_agent_group($id_agent);
$agent_address = agents_get_address($id_agent);
$agent_alias = agents_get_alias($id_agent);
$module_name = modules_get_agentmodule_name(
$source['id_agent_module']
);
$module_description = modules_get_agentmodule_descripcion(
$source['id_agent_module']
);
$items_label = [
'type' => 'custom_graph',
'id_agent' => $id_agent,
'id_agent_module' => $source['id_agent_module'],
'agent_description' => $agent_description,
'agent_group' => $agent_group,
'agent_address' => $agent_address,
'agent_alias' => $agent_alias,
'module_name' => $module_name,
'module_description' => $module_description,
];
$labels[$source['id_agent_module']] = ($source['label'] != '') ? reporting_label_macro($items_label, $source['label']) : reporting_label_macro($item, $params_combined['labels']);
} }
} }
$modulepush = [
'server' => (isset($source['id_server']) === true) ? $source['id_server'] : 0,
'module' => $source['id_agent_module'],
];
array_push($modules, $modulepush);
array_push($weights, $source['weight']);
if ($source['label'] != '' || $params_combined['labels']) {
$id_agent = agents_get_module_id(
$source['id_agent_module']
);
$agent_description = agents_get_description($id_agent);
$agent_group = agents_get_agent_group($id_agent);
$agent_address = agents_get_address($id_agent);
$agent_alias = agents_get_alias($id_agent);
$module_name = modules_get_agentmodule_name(
$source['id_agent_module']
);
$module_description = modules_get_agentmodule_descripcion(
$source['id_agent_module']
);
$items_label = [
'type' => 'custom_graph',
'id_agent' => $id_agent,
'id_agent_module' => $source['id_agent_module'],
'agent_description' => $agent_description,
'agent_group' => $agent_group,
'agent_address' => $agent_address,
'agent_alias' => $agent_alias,
'module_name' => $module_name,
'module_description' => $module_description,
];
if ($source['label'] != '') {
$lab = reporting_label_macro(
$items_label,
$source['label']
);
} else {
$lab = reporting_label_macro(
$items_label,
$params_combined['labels']
);
}
$labels[$source['id_agent_module']] = $lab;
}
if (is_metaconsole() === true) {
metaconsole_restore_db();
}
} }
} }
@ -1429,15 +1493,22 @@ function graphic_combined_module(
continue; continue;
} }
if (is_metaconsole() && $params_combined['type_report'] == 'automatic_graph') { // Only 10 item for chart.
$server = metaconsole_get_connection_by_id($agent_module_id['server']); if ($i > 9) {
break;
}
if (is_metaconsole()) {
$server = metaconsole_get_connection_by_id(
$agent_module_id['server']
);
if (metaconsole_connect($server) != NOERR) { if (metaconsole_connect($server) != NOERR) {
continue; continue;
} }
$agent_module_id = $agent_module_id['module'];
} }
$agent_module_id = $agent_module_id['module'];
$module_data = db_get_row_sql( $module_data = db_get_row_sql(
'SELECT * FROM tagente_modulo 'SELECT * FROM tagente_modulo
WHERE id_agente_modulo = '.$agent_module_id WHERE id_agente_modulo = '.$agent_module_id
@ -1504,19 +1575,28 @@ function graphic_combined_module(
foreach ($value['data'] as $k => $v) { foreach ($value['data'] as $k => $v) {
if ($v[1] != false) { if ($v[1] != false) {
$array_data[$key]['data'][$k][1] = ($v[1] * $params_combined['weight_list'][$i]); $array_data[$key]['data'][$k][1] = ($v[1] * $params_combined['weight_list'][$i]);
$array_data[$key]['slice_data'][$v[0]]['avg'] *= $params_combined['weight_list'][$i];
$array_data[$key]['slice_data'][$v[0]]['min'] *= $params_combined['weight_list'][$i];
$array_data[$key]['slice_data'][$v[0]]['max'] *= $params_combined['weight_list'][$i];
} }
} }
$array_data[$key]['max'] *= $params_combined['weight_list'][$i];
$array_data[$key]['min'] *= $params_combined['weight_list'][$i];
$array_data[$key]['avg'] *= $params_combined['weight_list'][$i];
$array_data[$key]['weight'] = $params_combined['weight_list'][$i];
} }
} }
$max = $array_data['sum'.$i]['max'];
$min = $array_data['sum'.$i]['min'];
$avg = $array_data['sum'.$i]['avg'];
if ($config['fixed_graph'] == false) { if ($config['fixed_graph'] == false) {
$water_mark = [ $water_mark = [
'file' => $config['homedir'].'/images/logo_vertical_water.png', 'file' => $config['homedir'].'/images/logo_vertical_water.png',
'url' => ui_get_full_url('images/logo_vertical_water.png', false, false, false), 'url' => ui_get_full_url(
'images/logo_vertical_water.png',
false,
false,
false
),
]; ];
} }
@ -1525,9 +1605,7 @@ function graphic_combined_module(
$i++; $i++;
if (is_metaconsole() if (is_metaconsole()) {
&& $params_combined['type_report'] == 'automatic_graph'
) {
metaconsole_restore_db(); metaconsole_restore_db();
} }
} }
@ -1763,28 +1841,23 @@ function graphic_combined_module(
} }
foreach ($module_list as $module_item) { foreach ($module_list as $module_item) {
$automatic_custom_graph_meta = false; if (is_metaconsole() === true) {
if ($config['metaconsole']) {
// Automatic custom graph from the report // Automatic custom graph from the report
// template in metaconsole. // template in metaconsole.
if (is_array($module_list[$i])) { $server = metaconsole_get_connection_by_id(
$server = metaconsole_get_connection_by_id( $module_item['server']
$module_item['server'] );
);
metaconsole_connect($server); metaconsole_connect($server);
$automatic_custom_graph_meta = true;
}
}
if ($automatic_custom_graph_meta) {
$module = $module_item['module'];
} else {
$module = $module_item;
} }
$module = $module_item['module'];
$search_in_history_db = db_search_in_history_db($datelimit); $search_in_history_db = db_search_in_history_db($datelimit);
$temp[$module] = io_safe_output(modules_get_agentmodule($module)); $temp[$module] = io_safe_output(
modules_get_agentmodule($module)
);
$query_last_value = sprintf( $query_last_value = sprintf(
' '
SELECT datos SELECT datos
@ -1849,12 +1922,8 @@ function graphic_combined_module(
$temp[$module]['min'] = ($temp_min === false) ? 0 : $temp_min; $temp[$module]['min'] = ($temp_min === false) ? 0 : $temp_min;
if ($config['metaconsole']) { if (is_metaconsole() === true) {
// Automatic custom graph from the metaconsole_restore_db();
// report template in metaconsole.
if (is_array($module_list[0])) {
metaconsole_restore_db();
}
} }
} }
@ -1899,25 +1968,15 @@ function graphic_combined_module(
$i = 0; $i = 0;
$number_elements = count($module_list); $number_elements = count($module_list);
foreach ($module_list as $module_item) { foreach ($module_list as $module_item) {
$automatic_custom_graph_meta = false; if (is_metaconsole() === true) {
if ($config['metaconsole']) { $server = metaconsole_get_connection_by_id(
// Automatic custom graph from $module_item['server']
// the report template in metaconsole. );
if (is_array($module_list[$i])) {
$server = metaconsole_get_connection_by_id( metaconsole_connect($server);
$module_item['server']
);
metaconsole_connect($server);
$automatic_custom_graph_meta = true;
}
}
if ($automatic_custom_graph_meta) {
$module = $module_item['module'];
} else {
$module = $module_item;
} }
$module = $module_item['module'];
$temp[$module] = modules_get_agentmodule($module); $temp[$module] = modules_get_agentmodule($module);
$query_last_value = sprintf( $query_last_value = sprintf(
' '
@ -1973,12 +2032,8 @@ function graphic_combined_module(
$temp[$module]['gauge'] = uniqid('gauge_'); $temp[$module]['gauge'] = uniqid('gauge_');
if ($config['metaconsole']) { if (is_metaconsole() === true) {
// Automatic custom graph from the report metaconsole_restore_db();
// template in metaconsole.
if (is_array($module_list[0])) {
metaconsole_restore_db();
}
} }
$i++; $i++;
@ -2003,6 +2058,12 @@ function graphic_combined_module(
} }
} }
if (isset($params['pdf']) === true && $params['pdf'] === true) {
$transitionDuration = 0;
} else {
$transitionDuration = 500;
}
$output = stacked_gauge( $output = stacked_gauge(
$graph_values, $graph_values,
$new_width, $new_width,
@ -2018,7 +2079,8 @@ function graphic_combined_module(
$config['fontpath'], $config['fontpath'],
$fixed_font_size, $fixed_font_size,
'', '',
$homeurl $homeurl,
$transitionDuration
); );
break; break;
@ -2026,25 +2088,15 @@ function graphic_combined_module(
case CUSTOM_GRAPH_VBARS: case CUSTOM_GRAPH_VBARS:
$label = ''; $label = '';
foreach ($module_list as $module_item) { foreach ($module_list as $module_item) {
$automatic_custom_graph_meta = false;
if (is_metaconsole() === true) { if (is_metaconsole() === true) {
// Automatic custom graph from the report $server = metaconsole_get_connection_by_id(
// template in metaconsole. $module_item['server']
if (is_array($module_list[$i]) === true) { );
$server = metaconsole_get_connection_by_id(
$module_item['server'] metaconsole_connect($server);
);
metaconsole_connect($server);
$automatic_custom_graph_meta = true;
}
}
if ($automatic_custom_graph_meta === true) {
$module = $module_item['module'];
} else {
$module = $module_item;
} }
$module = $module_item['module'];
$module_data = modules_get_agentmodule($module); $module_data = modules_get_agentmodule($module);
$query_last_value = sprintf( $query_last_value = sprintf(
'SELECT datos 'SELECT datos
@ -2093,11 +2145,7 @@ function graphic_combined_module(
} }
if (is_metaconsole() === true) { if (is_metaconsole() === true) {
// Automatic custom graph from the report metaconsole_restore_db();
// template in metaconsole.
if (is_array($module_list[0]) === true) {
metaconsole_restore_db();
}
} }
} }
@ -2167,29 +2215,18 @@ function graphic_combined_module(
case CUSTOM_GRAPH_PIE: case CUSTOM_GRAPH_PIE:
$total_modules = 0; $total_modules = 0;
foreach ($module_list as $module_item) { foreach ($module_list as $module_item) {
$automatic_custom_graph_meta = false; if (is_metaconsole() === true) {
if ($config['metaconsole']) { $server = metaconsole_get_connection_by_id(
// Automatic custom graph from the report $module_item['server']
// template in metaconsole. );
if (is_array($module_list[$i])) {
$server = metaconsole_get_connection_by_id( metaconsole_connect($server);
$module_item['server']
);
metaconsole_connect($server);
$automatic_custom_graph_meta = true;
}
}
if ($automatic_custom_graph_meta) {
$module = $module_item['module'];
} else {
$module = $module_item;
} }
$module = $module_item['module'];
$data_module = modules_get_agentmodule($module); $data_module = modules_get_agentmodule($module);
$query_last_value = sprintf( $query_last_value = sprintf(
' 'SELECT datos
SELECT datos
FROM tagente_datos FROM tagente_datos
WHERE id_agente_modulo = %d WHERE id_agente_modulo = %d
AND utimestamp > %d AND utimestamp > %d
@ -2234,12 +2271,9 @@ function graphic_combined_module(
'value' => $value, 'value' => $value,
'unit' => $data_module['unit'], 'unit' => $data_module['unit'],
]; ];
if ($config['metaconsole']) {
// Automatic custom graph from the report if (is_metaconsole() === true) {
// template in metaconsole. metaconsole_restore_db();
if (is_array($module_list[0])) {
metaconsole_restore_db();
}
} }
} }

Some files were not shown because too many files have changed in this diff Show More