9987-New inventory view

This commit is contained in:
Pablo Aragon 2023-02-03 09:55:46 +01:00
commit 36fc9b2917
101 changed files with 13343 additions and 15764 deletions

View File

@ -285,11 +285,16 @@ server_dependencies=" \
java \
bind-utils \
whois \
cpanminus \
http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm \
http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm \
https://firefly.artica.es/centos7/pandorawmic-1.0.0-1.x86_64.rpm"
execute_cmd "yum install -y $server_dependencies" "Installing Pandora FMS Server dependencies"
# install cpan dependencies
execute_cmd "cpanm -i Thread::Semaphore" "Installing Thread::Semaphore"
# SDK VMware perl dependencies
vmware_dependencies=" \
http://firefly.artica.es/centos8/VMware-vSphere-Perl-SDK-6.5.0-4566394.x86_64.rpm \

View File

@ -4,7 +4,7 @@
#######################################################
## Tested versions ##
# Centos 8.4, 8.5
# Rocky 8.4, 8.5
# Rocky 8.4, 8.5, 8.6, 8.7
# Almalinuz 8.4, 8.5
# RedHat 8.5
@ -14,24 +14,25 @@ PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf
PANDORA_AGENT_CONF=/etc/pandora/pandora_agent.conf
S_VERSION='202209231'
S_VERSION='202301251'
LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log"
# define default variables
[ "$TZ" ] || TZ="Europe/Madrid"
[ "$MYVER" ] || MYVER=57
[ "$PHPVER" ] || PHPVER=8
[ "$DBHOST" ] || DBHOST=127.0.0.1
[ "$DBNAME" ] || DBNAME=pandora
[ "$DBUSER" ] || DBUSER=pandora
[ "$DBPASS" ] || DBPASS=pandora
[ "$DBPORT" ] || DBPORT=3306
[ "$TZ" ] || TZ="Europe/Madrid"
[ "$MYVER" ] || MYVER=57
[ "$PHPVER" ] || PHPVER=8
[ "$DBHOST" ] || DBHOST=127.0.0.1
[ "$DBNAME" ] || DBNAME=pandora
[ "$DBUSER" ] || DBUSER=pandora
[ "$DBPASS" ] || DBPASS=pandora
[ "$DBPORT" ] || DBPORT=3306
[ "$DBROOTUSER" ] || DBROOTUSER=root
[ "$DBROOTPASS" ] || DBROOTPASS=pandora
[ "$SKIP_PRECHECK" ] || SKIP_PRECHECK=0
[ "$SKIP_DATABASE_INSTALL" ] || SKIP_DATABASE_INSTALL=0
[ "$SKIP_DATABASE_INSTALL" ] || SKIP_DATABASE_INSTALL=0
[ "$SKIP_KERNEL_OPTIMIZATIONS" ] || SKIP_KERNEL_OPTIMIZATIONS=0
[ "$POOL_SIZE" ] || POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed "s/\\..*$/M/g")
[ "$POOL_SIZE" ] || POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed "s/\\..*$/M/g")
[ "$PANDORA_LTS" ] || PANDORA_LTS=1
[ "$PANDORA_BETA" ] || PANDORA_BETA=0
# Ansi color code variables
@ -41,7 +42,6 @@ cyan="\e[0;36m"
reset="\e[0m"
# Functions
execute_cmd () {
local cmd="$1"
local msg="$2"
@ -76,7 +76,7 @@ check_cmd_status () {
check_pre_pandora () {
echo -en "${cyan}Checking environment ... ${reset}"
rpm -qa | grep 'pandorafms_' &>> /dev/null && local fail=true
rpm -qa | grep -v "pandorawmic" | grep 'pandorafms_' &>> /dev/null && local fail=true
[ -d "$PANDORA_CONSOLE" ] && local fail=true
[ -f /usr/bin/pandora_server ] && local fail=true
@ -137,7 +137,10 @@ check_root_permissions
[ "$SKIP_PRECHECK" == 1 ] || check_pre_pandora
#advicing BETA PROGRAM
[ "$PANDORA_BETA" -ne '0' ] && echo -e "${red}BETA version enable using nightly PandoraFMS packages${reset}"
INSTALLING_VER="${green}RRR version enable using RRR PandoraFMS packages${reset}"
[ "$PANDORA_BETA" -ne '0' ] && INSTALLING_VER="${red}BETA version enable using nightly PandoraFMS packages${reset}"
[ "$PANDORA_LTS" -ne '0' ] && INSTALLING_VER="${green}LTS version enable using LTS PandoraFMS packages${reset}"
echo -e $INSTALLING_VER
# Connectivity
check_repo_connection
@ -467,6 +470,8 @@ query_cache_size = 64M
query_cache_min_res_unit = 2k
query_cache_limit = 256K
#skip-log-bin
sql_mode=""
[mysqld_safe]
@ -477,6 +482,7 @@ EO_CONFIG_F
if [ "$MYVER" -eq '80' ] ; then
sed -i -e "/query_cache.*/ s/^#*/#/g" /etc/my.cnf
sed -i -e "s/#skip-log-bin/skip-log-bin/g" /etc/my.cnf
fi
execute_cmd "systemctl restart mysqld" "Configuring database engine"
@ -485,11 +491,18 @@ fi
export MYSQL_PWD=$DBPASS
#Define packages
if [ "$PANDORA_BETA" -eq '0' ] ; then
if [ "$PANDORA_LTS" -eq '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_server-7.0NG.noarch.rpm"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_console-7.0NG.noarch.rpm"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_agent_linux-7.0NG.noarch.rpm"
elif [ "$PANDORA_LTS" -ne '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_server-7.0NG.noarch.rpm"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_console-7.0NG.noarch.rpm"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux-7.0NG.noarch.rpm"
elif [ "$PANDORA_BETA" -ne '0' ] ; then
fi
# if beta is enable
if [ "$PANDORA_BETA" -eq '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_server-latest.x86_64.rpm"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://pandorafms.com/community/community-console-rpm-beta/"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux-7.0NG.noarch.rpm"

View File

@ -16,7 +16,7 @@ PANDORA_AGENT_CONF=/etc/pandora/pandora_agent.conf
WORKDIR=/opt/pandora/deploy
S_VERSION='2022052501'
S_VERSION='202301251'
LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log"
rm -f $LOGFILE &> /dev/null # remove last log before start
@ -34,6 +34,8 @@ rm -f $LOGFILE &> /dev/null # remove last log before start
[ "$SKIP_KERNEL_OPTIMIZATIONS" ] || SKIP_KERNEL_OPTIMIZATIONS=0
[ "$POOL_SIZE" ] || POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed "s/\\..*$/M/g")
[ "$PANDORA_BETA" ] || PANDORA_BETA=0
[ "$PANDORA_LTS" ] || PANDORA_LTS=1
# Ansi color code variables
red="\e[0;91m"
@ -134,7 +136,10 @@ check_root_permissions
[ "$SKIP_PRECHECK" == 1 ] || check_pre_pandora
#advicing BETA PROGRAM
[ "$PANDORA_BETA" -ne '0' ] && echo -e "${red}BETA version enable using nightly PandoraFMS packages${reset}"
INSTALLING_VER="${green}RRR version enable using RRR PandoraFMS packages${reset}"
[ "$PANDORA_BETA" -ne '0' ] && INSTALLING_VER="${red}BETA version enable using nightly PandoraFMS packages${reset}"
[ "$PANDORA_LTS" -ne '0' ] && INSTALLING_VER="${green}LTS version enable using LTS PandoraFMS packages${reset}"
echo -e $INSTALLING_VER
# Connectivity
check_repo_connection
@ -272,14 +277,19 @@ echo -en "${cyan}Installing phantomjs...${reset}"
/usr/bin/phantomjs --version &>> "$LOGFILE"
check_cmd_status "Error Installing phanromjs"
# create symlink for fping
rm -f /usr/sbin/fping &>> "$LOGFILE"
ln -s /usr/bin/fping /usr/sbin/fping &>> "$LOGFILE"
# Chrome
rm -f /usr/bin/chromium-browser &>> "$LOGFILE"
execute_cmd "wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" "Downloading google chrome"
execute_cmd "apt install -y ./google-chrome-stable_current_amd64.deb" "Intalling google chrome"
execute_cmd "ln -s /usr/bin/google-chrome /usr/bin/chromium-browser" "Creating /usr/bin/chromium-browser Symlink"
# SDK VMware perl dependencies
vmware_dependencies=" \
lib32z1 \
vmware_dependencies="\
lib32z1 \
lib32z1 \
build-essential \
uuid uuid-dev \
@ -350,10 +360,12 @@ systemctl stop apparmor &>> "$LOGFILE"
systemctl disable apparmor &>> "$LOGFILE"
#install mysql
debconf-set-selections <<< $(echo -n "mysql-server mysql-server/root_password password $DBROOTPASS") &>> "$LOGFILE"
debconf-set-selections <<< $(echo -n "mysql-server mysql-server/root_password_again password $DBROOTPASS") &>> "$LOGFILE"
echo -en "${cyan}Installing MySql Server...${reset}"
env DEBIAN_FRONTEND=noninteractive apt install -y mysql-server &>> "$LOGFILE"
execute_cmd "curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb" "Downloading Percona repository for MySQL8"
execute_cmd "apt install -y gnupg2 lsb-release ./percona-release_latest.generic_all.deb" "Installing Percona repository for MySQL8"
execute_cmd "percona-release setup ps80" "Configuring Percona repository for MySQL8"
echo -en "${cyan}Installing Percona Server for MySQL8...${reset}"
env DEBIAN_FRONTEND=noninteractive apt install -y percona-server-server &>> "$LOGFILE"
check_cmd_status "Error Installing MySql Server"
@ -361,6 +373,10 @@ check_cmd_status "Error Installing MySql Server"
if [ "$SKIP_DATABASE_INSTALL" -eq '0' ] ; then
execute_cmd "systemctl start mysql" "Starting database engine"
echo """
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$DBROOTPASS';
""" | mysql -uroot &>> "$LOGFILE"
export MYSQL_PWD=$DBROOTPASS
echo -en "${cyan}Creating Pandora FMS database...${reset}"
echo "create database $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST
@ -399,11 +415,12 @@ max_connections = 100
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=128K
join_buffer_size=4M
skip-log-bin
sql_mode=""
log-error=/var/log/mysql/error.log
@ -417,11 +434,17 @@ execute_cmd "systemctl restart mysql" "Configuring and restarting database engin
#Define packages
if [ "$PANDORA_BETA" -eq '0' ] ; then
if [ "$PANDORA_LTS" -eq '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_server-7.0NG.tar.gz"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_console-7.0NG.tar.gz"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/LTS/pandorafms_agent_linux-7.0NG.tar.gz"
elif [ "$PANDORA_LTS" -ne '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_server-7.0NG.tar.gz"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_console-7.0NG.tar.gz"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz"
elif [ "$PANDORA_BETA" -ne '0' ] ; then
fi
if [ "$PANDORA_BETA" -eq '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_server-latest_x86_64.tar.gz"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="http://firefly.artica.es/pandora_enterprise_nightlies/pandorafms_console-latest.tar.gz"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="http://firefly.artica.es/pandorafms/latest/Tarball/pandorafms_agent_linux-7.0NG.tar.gz"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
{230124}
{230202}
ViewReadme
{Yes}

View File

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

View File

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

View File

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

View File

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

View File

@ -103,6 +103,15 @@ function api_execute(
}
}
$url_protocol = parse_url($url)['scheme'];
if ($url_protocol !== 'http' && $url_protocol !== 'https') {
return [
'url' => $url,
'result' => '',
];
}
$curlObj = curl_init($url);
if (empty($data) === false) {
$url .= http_build_query($data);

View File

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

Binary file not shown.

Binary file not shown.

View File

@ -1994,7 +1994,7 @@ if ($create_module) {
$agent = db_get_row('tagente', 'id_agente', $id_agente);
db_pandora_audit(
AUDIT_LOG_AGENT_MANAGEMENT,
"Added module '".io_safe_output($name)."' for agent ".io_safe_output($agent['alias']),
"Added module '".db_escape_string_sql($name)."' for agent ".io_safe_output($agent['alias']),
false,
true,
io_json_mb_encode($values)

View File

@ -1283,9 +1283,13 @@ foreach ($modules as $module) {
}
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
// Check module relatonships to show warning message.
$url = htmlentities('index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$module['id_agente_modulo']);
// 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'].'"
onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">';
$data[9] = '<a href="#"
onClick="get_children_modules(false, \''.$module['id_agente_modulo'].'\', \''.$url.'\')">';
$data[9] .= html_print_image(
'images/cross.png',
true,
@ -1309,8 +1313,7 @@ foreach ($modules as $module) {
}
if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
echo '<form method="post" action="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module"
onsubmit="if (! confirm (\''.__('Are you sure?').'\')) return false">';
echo '<form method="post" action="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&tab=module" id="form_multiple_delete">';
}
html_print_table($table);
@ -1344,6 +1347,8 @@ if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
false,
'class="sub next"'
);
echo '</div>';
echo '</form>';
}
@ -1353,6 +1358,17 @@ if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
$(document).ready (function () {
$("input[name=submit_modules_action]").click(function (event) {
event.preventDefault();
var module_action = $('#module_action').val();
if(module_action !== 'delete') {
$("#form_multiple_delete").submit();
} else {
get_children_modules(true);
}
});
$('[id^=checkbox-id_delete]').change(function(){
if($(this).parent().parent().hasClass('checkselected')){
$(this).parent().parent().removeClass('checkselected');
@ -1394,4 +1410,60 @@ if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW')) {
window.location = window.location + "&checked=true";
}
}
function get_children_modules(multiple, id_module, url) {
var selected_modules = [];
if(typeof(id_module) === 'undefined' && multiple === true) {
$("input[id^='checkbox-id_delete']:checked").each(function () {
selected_modules.push(this.value);
});
} else {
selected_modules = [id_module];
}
$.ajax({
type: "POST",
url: "ajax.php",
dataType: "json",
data: {
page: 'include/ajax/module',
get_children_modules: true,
parent_modulues: JSON.parse(JSON.stringify(selected_modules)),
},
success: function (data) {
delete_module_warning(data, multiple, id_module, url);
}
});
}
function delete_module_warning(children, multiple, id_module, url) {
var message = '<?php echo __('Are you sure?'); ?>';
var ret = false;
if(children != false) {
message += '<br><strong>' + '<?php echo __('This module has children modules.The following modules will also be deleted: '); ?>' + '</strong><ul>';
$.each(children, function (key, value) {
message += '<li>' + value['nombre'] + '</li>';
});
message += '</ul>';
}
confirmDialog({
title: "<?php echo __('Delete module'); ?>",
message: message,
onAccept: function() {
if(multiple === true) {
$("#form_multiple_delete").submit();
return true;
} else {
window.location.href = url;
}
}
});
return true;
}
</script>

View File

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

View File

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

View File

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

View File

@ -290,7 +290,7 @@ $search_text = (string) get_parameter('search_text');
$date_from = (string) get_parameter('date_from');
$date_to = (string) get_parameter('date_to');
$execution_type = (string) get_parameter('execution_type');
$show_archived = (bool) get_parameter('archived');
$show_archived = (bool) get_parameter_switch('archived', false);
$agent_id = (int) get_parameter('agent_id');
$agent_name = (string) ((empty($agent_id) === false) ? get_parameter('agent_name') : '');
$module_id = (int) get_parameter('module_name_hidden');
@ -313,12 +313,20 @@ $table_form = new StdClass();
$table_form->class = 'databox filters';
$table_form->width = '100%';
$table_form->rowstyle = [];
$table_form->cellstyle[0] = ['width: 100px;'];
$table_form->cellstyle[1] = ['width: 100px;'];
$table_form->cellstyle[1][2] = 'display: flex; align-items: center;';
$table_form->cellstyle[2] = ['width: 100px;'];
$table_form->cellstyle[3] = ['text-align: right;'];
$table_form->colspan[3][0] = 3;
$table_form->data = [];
$row = [];
// Search text.
$row[] = __('Search').'&nbsp;'.html_print_input_text(
$row[] = __('Search');
$row[] = html_print_input_text(
'search_text',
$search_text,
'',
@ -356,7 +364,8 @@ $execution_type_fields = [
'periodically' => __('Periodically'),
'cron' => __('Cron'),
];
$row[] = __('Execution type').'&nbsp;'.html_print_select(
$row[] = __('Execution type');
$row[] = html_print_select(
$execution_type_fields,
'execution_type',
$execution_type,
@ -368,11 +377,11 @@ $row[] = __('Execution type').'&nbsp;'.html_print_select(
false
);
// Show past downtimes.
$row[] = __('Show past downtimes').'&nbsp;'.html_print_checkbox(
'archived',
1,
$show_archived,
true
$row[] = __('Show past downtimes').'&nbsp;&nbsp;&nbsp;&nbsp;'.html_print_switch(
[
'name' => 'archived',
'value' => $show_archived,
]
);
$table_form->data[] = $row;
@ -388,8 +397,8 @@ $params['return'] = true;
$params['print_hidden_input_idagent'] = true;
$params['hidden_input_idagent_name'] = 'agent_id';
$params['hidden_input_idagent_value'] = $agent_id;
$agent_input = __('Agent').'&nbsp;'.ui_print_agent_autocomplete_input($params);
$row[] = $agent_input;
$row[] = __('Agent');
$row[] = ui_print_agent_autocomplete_input($params);
// Module.
$row[] = __('Module').'&nbsp;'.html_print_autocomplete_modules(
@ -402,6 +411,10 @@ $row[] = __('Module').'&nbsp;'.html_print_autocomplete_modules(
true
);
$table_form->data[] = $row;
$row = [];
$row[] = html_print_submit_button(
__('Search'),
'search',

View File

@ -550,7 +550,22 @@ $table->data['form_agents_3'][3] = html_print_select(
$table->data['edit0'][0] = __('Dynamic Interval');
$table->data['edit0'][1] = html_print_extended_select_for_time('dynamic_interval', '', '', 'None', '0', 10, true, 'width:150px', false);
$table->data['edit0'][1] = html_print_extended_select_for_time(
'dynamic_interval',
-2,
'',
'None',
'0',
10,
true,
'width:150px',
false,
'',
false,
false,
'',
true
);
$table->data['edit0'][2] = '<table width="100%"><tr><td><em>'.__('Dynamic Min.').'</em></td>';
$table->data['edit0'][2] .= '<td align="right">'.html_print_input_text('dynamic_min', '', '', 10, 255, true).'</td></tr>';
$table->data['edit0'][2] .= '<tr><td><em>'.__('Dynamic Max.').'</em></td>';
@ -2128,6 +2143,12 @@ function process_manage_edit($module_name, $agents_select=null, $module_status='
}
break;
case 'dynamic_interval':
if ($value !== '-2') {
$values[$field] = $value;
}
break;
case 'plugin_pass':
if ($value != '') {
$values['plugin_pass'] = io_input_password($value);

View File

@ -865,6 +865,11 @@ ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/');
var id_layout_data = $("#active_id_layout_data").val();
var label = tinyMCE.activeEditor.getContent();
$("#hidden-label_" + id_layout_data).val(label);
},
buttons: {
Save: function() {
$(this).dialog("close");
}
}
});

View File

@ -177,7 +177,7 @@ switch ($activeTab) {
$background_color = (string) get_parameter('background_color');
$width = (int) get_parameter('width');
$height = (int) get_parameter('height');
$visualConsoleName = (string) get_parameter('name');
$visualConsoleName = io_safe_input((string) get_parameter('name'));
$is_favourite = (int) get_parameter('is_favourite_sent');
$auto_adjust = (int) get_parameter('auto_adjust_sent');

View File

@ -87,6 +87,20 @@ $create_text_file = (bool) get_parameter('create_text_file');
$default_real_directory = realpath($config['homedir'].'/');
// Remove double dot in filename path.
$file_name = $_FILES['file']['name'];
$path_parts = explode('/', $file_name);
$stripped_parts = array_filter(
$path_parts,
function ($value) {
return $value !== '..';
}
);
$stripped_path = implode('/', $stripped_parts);
$_FILES['file']['name'] = $stripped_path;
if ($upload_file === true) {
upload_file(
$upload_file,

View File

@ -1353,11 +1353,8 @@ $values = [
'Alert detail' => __('Alert detail'),
'External link' => __('External link'),
'Other' => __('Other'),
'Dashboard' => __('Dashboard'),
];
if (!is_metaconsole()) {
$values['Dashboard'] = __('Dashboard');
}
$home_screen .= html_print_select(
$values,
@ -1372,7 +1369,14 @@ $home_screen .= html_print_select(
).'</div>';
$dashboards = Manager::getDashboards(-1, -1);
$dashboards = Manager::getDashboards(
-1,
-1,
false,
false,
$id_usr
);
$dashboards_aux = [];
if ($dashboards === false) {
$dashboards = ['None' => 'None'];

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

View File

@ -1515,9 +1515,37 @@ if ($change_status === true) {
}
if ($get_Acknowledged === true) {
$event_id = get_parameter('event_id');
echo events_page_general_acknowledged($event_id);
return;
$event_id = (int) get_parameter('event_id', 0);
$server_id = (int) get_parameter('server_id', 0);
$return = '';
try {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node = new Node($server_id);
$node->connect();
}
echo events_page_general_acknowledged($event_id);
} catch (\Exception $e) {
// Unexistent agent.
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
$return = false;
} finally {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
}
return $return;
}
if ($change_owner === true) {

View File

@ -340,7 +340,7 @@ if (is_ajax() === true) {
// Group.
$secondary_groups = '';
$secondary = agents_get_secondary_groups($data['id_agente']);
$secondary = enterprise_hook('agents_get_secondary_groups', [$data['id_agente']]);
if (isset($secondary['for_select']) === true && empty($secondary['for_select']) === false) {
$secondary_groups = implode(', ', $secondary['for_select']);
$secondary_groups = ', '.$secondary_groups;
@ -353,19 +353,26 @@ if (is_ajax() === true) {
// Events.
echo '<div class="div-dialog">';
echo graph_graphic_agentevents(
$id,
100,
40,
SECONDS_1DAY,
'',
true,
false,
false,
1
$result_graph_event = enterprise_hook(
'graph_graphic_agentevents',
[
$id,
100,
40,
SECONDS_1DAY,
'',
true,
false,
false,
1,
]
);
echo '</div>';
if ($result_graph_event !== -1) {
echo '<div class="div-dialog">';
echo $result_graph_event;
echo '</div>';
}
break;
}
}

View File

@ -61,6 +61,8 @@ if (check_login()) {
0
);
$get_children_modules = (bool) get_parameter('get_children_modules', false);
$get_data_dataMatrix = (bool) get_parameter(
'get_data_dataMatrix',
0
@ -1629,4 +1631,36 @@ if (check_login()) {
return;
}
if ($get_children_modules === true) {
$parent_modules = get_parameter('parent_modulues', false);
$children_selected = [];
if ($parent_modules === false) {
$children_selected = false;
} else {
foreach ($parent_modules as $parent) {
$child_modules = get_children_module($parent_modules, ['nombre', 'id_agente_modulo'], true);
if ((bool) $child_modules === false) {
continue;
}
foreach ($child_modules as $child) {
$module_exist = in_array($child['id_agente_modulo'], $parent_modules);
$child_exist = in_array($child, $children_selected);
if ($module_exist === false && $child_exist === false) {
array_push($children_selected, $child);
}
}
}
}
if (empty($children_selected) === true) {
$children_selected = false;
}
echo json_encode($children_selected);
return;
}
}

View File

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

View File

@ -415,7 +415,7 @@ class AuditLog extends HTML
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
@ -423,6 +423,8 @@ class AuditLog extends HTML
row.child(format(row.data())).show();
tr.addClass('shown');
}
$('#audit_logs').css('table-layout','fixed');
$('#audit_logs').css('width','95% !important');
});
$('#save-filter').click(function() {

View File

@ -659,15 +659,6 @@ class Diagnostics extends Wizard
{
global $config;
// Size BBDD.
$dbSizeSql = db_get_value_sql(
'SELECT ROUND(SUM(data_length+index_length)/1024/1024,3)
FROM information_schema.TABLES'
);
// Add unit size.
$dbSize = $dbSizeSql.' M';
$result = [
'error' => false,
'data' => [
@ -683,10 +674,6 @@ class Diagnostics extends Wizard
'name' => __('DB Schema Build'),
'value' => $config['db_scheme_build'],
],
'dbSize' => [
'name' => __('DB Size'),
'value' => $dbSize,
],
],
];

View File

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

View File

@ -805,6 +805,7 @@ define('AUDIT_LOG_DASHBOARD_MANAGEMENT', 'Dashboard management');
define('AUDIT_LOG_SERVICE_MANAGEMENT', 'Service management');
define('AUDIT_LOG_INCIDENT_MANAGEMENT', 'Incident management');
define('AUDIT_LOG_UMC', 'Warp Manager');
define('AUDIT_LOG_NMS_VIOLATION', 'NMS Violation');
// MIMEs.
define(

View File

@ -226,7 +226,7 @@ function format_numeric($number, $decimals=1)
global $config;
// Translate to float in case there are characters in the string so
// fmod doesn't throw a notice
// fmod doesn't throw a notice.
$number = (float) $number;
if ($number == 0) {
@ -234,10 +234,20 @@ function format_numeric($number, $decimals=1)
}
if (fmod($number, 1) > 0) {
return number_format($number, $decimals, $config['decimal_separator'], $config['thousand_separator']);
return number_format(
$number,
$decimals,
$config['decimal_separator'],
($config['thousand_separator'] ?? ',')
);
}
return number_format($number, 0, $config['decimal_separator'], $config['thousand_separator']);
return number_format(
$number,
0,
$config['decimal_separator'],
($config['thousand_separator'] ?? ',')
);
}

View File

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

View File

@ -12471,9 +12471,26 @@ function api_get_total_modules($id_group, $trash1, $trash2, $returnType)
return;
}
$partial = tactical_status_modules_agents($config['id_user'], false, 'AR');
if ($id_group) {
$groups_clause = '1 = 1';
if (!users_is_admin($config['id_user'])) {
$user_groups = implode(',', array_keys(users_get_groups()));
$groups_clause = "(ta.id_grupo IN ($user_groups) OR tasg.id_group IN ($user_groups))";
}
$total = (int) $partial['_monitor_total_'];
$sql = "SELECT COUNT(DISTINCT(id_agente_modulo))
FROM tagente_modulo tam, tagente ta
LEFT JOIN tagent_secondary_group tasg
ON ta.id_agente = tasg.id_agent
WHERE tam.id_agente = ta.id_agente AND id_module_group = $id_group
AND delete_pending = 0 AND $groups_clause";
$total = db_get_value_sql($sql);
} else {
$partial = tactical_status_modules_agents($config['id_user'], false, 'AR');
$total = (int) $partial['_monitor_total_'];
}
$data = [
'type' => 'string',
@ -14430,7 +14447,7 @@ function api_get_module_graph($id_module, $thrash2, $other, $thrash4)
$height = (!empty($other) && isset($other['data'][3]) && $other['data'][3]) ? $other['data'][3] : 225;
// Graph width (optional).
$width = (!empty($other) && isset($other['data'][4]) && $other['data'][4]) ? $other['data'][4] : '';
$width = (!empty($other) && isset($other['data'][4]) && $other['data'][4]) ? $other['data'][4] : 600;
// If recive value its from mail call.
$graph_font_size = $other['data'][5];

View File

@ -67,7 +67,7 @@ function config_create_value($token, $value)
*
* @return boolean True if success. False on failure.
*/
function config_update_value($token, $value, $noticed=false)
function config_update_value($token, $value, $noticed=false, $password=false)
{
global $config;
// Include functions_io to can call __() function.
@ -91,7 +91,11 @@ function config_update_value($token, $value, $noticed=false)
if (isset($config[$token]) === false) {
$config[$token] = $value;
return (bool) config_create_value($token, io_safe_input($value));
if (($password === false)) {
return (bool) config_create_value($token, io_safe_input($value));
} else {
return (bool) config_create_value($token, io_input_password($value));
}
}
// If it has not changed.
@ -104,7 +108,7 @@ function config_update_value($token, $value, $noticed=false)
$result = db_process_sql_update(
'tconfig',
['value' => io_safe_input($value)],
['value' => ($password === false) ? io_safe_input($value) : io_input_password($value)],
['token' => $token]
);

View File

@ -496,9 +496,13 @@ function events_update_status($id_evento, $status, $filter=null)
// No groups option direct update.
$update_sql = sprintf(
'UPDATE tevento
SET estado = %d
SET estado = %d,
ack_utimestamp = %d,
id_usuario = "%s"
WHERE id_evento = %d',
$status,
time(),
$config['id_user'],
$id_evento
);
break;
@ -4732,7 +4736,7 @@ function events_page_general($event)
$data = [];
$data[0] = __('Owner');
if (empty($event['owner_user']) === true) {
if ($event['owner_user'] == -1) {
$data[1] = '<i>'.__('N/A').'</i>';
} else {
$user_owner = db_get_value(
@ -4797,14 +4801,15 @@ function events_page_general($event)
$data = [];
$table_general->rowid[7] = 'general_status';
$table_general->rowid[count($table_general->data)] = 'general_status';
$table_general->cellclass[count($table_general->data)][1] = 'general_status';
$data[0] = __('Status');
$data[1] = $event_st['title'];
$data[2] = html_print_image($event_st['img'], true);
$table_general->data[] = $data;
// If event is validated, show who and when acknowleded it.
$table_general->cellclass[8][1] = 'general_acknowleded';
$table_general->cellclass[count($table_general->data)][1] = 'general_acknowleded';
$data = [];
$data[0] = __('Acknowledged by');
@ -4825,7 +4830,17 @@ function events_page_general($event)
}
}
$data[1] = $user_ack.'&nbsp;(&nbsp;'.date($config['date_format'], $event['ack_utimestamp_raw']).'&nbsp;)&nbsp;';
$data[1] = $user_ack.'&nbsp;(&nbsp;';
if ($event['ack_utimestamp_raw'] !== false
&& $event['ack_utimestamp_raw'] !== 'false'
) {
$data[1] .= date(
$config['date_format'],
$event['ack_utimestamp_raw']
);
}
$data[1] .= '&nbsp;)&nbsp;';
} else {
$data[1] = '<i>'.__('N/A').'</i>';
}
@ -4932,9 +4947,9 @@ function events_page_general_acknowledged($event_id)
{
global $config;
$Acknowledged = '';
$event = db_get_all_rows_filter('tevento', 'id_evento', $event_id);
if ($event) {
$event = db_get_row('tevento', 'id_evento', $event_id);
hd($event['ack_utimestamp'], true);
if ($event !== false && $event['estado'] == 1) {
$user_ack = db_get_value(
'fullname',
'tusuario',
@ -4946,7 +4961,17 @@ function events_page_general_acknowledged($event_id)
$user_ack = $config['id_user'];
}
$Acknowledged = $user_ack.'&nbsp;(&nbsp;'.date($config['date_format'], $event['ack_utimestamp_raw']).'&nbsp;)&nbsp;';
$Acknowledged = $user_ack.'&nbsp;(&nbsp;';
if ($event['ack_utimestamp'] !== false
&& $event['ack_utimestamp'] !== 'false'
) {
$Acknowledged .= date(
$config['date_format'],
$event['ack_utimestamp']
);
}
$Acknowledged .= '&nbsp;)&nbsp;';
} else {
$Acknowledged = 'N/A';
}

View File

@ -139,8 +139,25 @@ function upload_file($upload_file_or_zip, $default_real_directory, $destination_
$nombre_archivo = sprintf('%s/%s', $real_directory, $filename);
try {
$mimeContentType = mime_content_type($_FILES['file']['tmp_name']);
$fileExtension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if (empty($filterFilesType) === true || in_array($mimeContentType, $filterFilesType) === true) {
$validFileExtension = true;
if (empty($fileExtension) === false) {
$filtered_types = array_filter(
$filterFilesType,
function ($value) use ($fileExtension) {
$mimeTypeExtensionName = explode('/', $value)[1];
return $mimeTypeExtensionName === $fileExtension;
}
);
if (empty($filtered_types) === true) {
$validFileExtension = false;
}
}
if ($validFileExtension === true && (empty($filterFilesType) === true || in_array($mimeContentType, $filterFilesType) === true)) {
$result = copy($_FILES['file']['tmp_name'], $nombre_archivo);
} else {
$error_message = 'The uploaded file is not allowed. Only gif, png or jpg files can be uploaded.';

View File

@ -508,6 +508,14 @@ function menu_add_extras(&$menu)
$menu_extra['reporting']['sub']['enterprise/godmode/reporting/graph_template_wizard']['text'] = __('Graph template wizard');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=wizard&action=wizard']['text'] = __('Templates wizard');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=template&action=list_template']['text'] = __('Templates');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&action=edit']['text'] = __('Edit custom reports');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=list_items&action=edit']['text'] = __('List items');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=item_editor&action=new']['text'] = __('Edit item');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=wizard&action=edit']['text'] = __('Wizard');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=wizard_sla&action=edit']['text'] = __('Wizard sla');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=global&action=edit']['text'] = __('Global custom reports');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=advanced&action=edit']['text'] = __('Avanced options');
if ($config['activate_gis']) {
$menu_extra['godgismaps']['sub']['godmode/gis_maps/configure_gis_map']['text'] = __('Manage GIS Maps');
}
@ -811,6 +819,27 @@ if (is_ajax()) {
);
}
$image_about = ui_get_full_url('/images/custom_logo/logo-default-pandorafms.png', false, false, false);
if (enterprise_installed() === false) {
if ($config['style'] === 'pandora_black') {
$image_about = 'images/custom_logo/'.HEADER_LOGO_BLACK_CLASSIC;
} else if ($config['style'] === 'pandora') {
$image_about = 'images/custom_logo/'.HEADER_LOGO_DEFAULT_CLASSIC;
}
} else {
if ($config['style'] === 'pandora_black' && $config['custom_logo'] === HEADER_LOGO_DEFAULT_CLASSIC) {
$config['custom_logo'] = HEADER_LOGO_BLACK_CLASSIC;
} else if ($config['style'] === 'pandora' && $config['custom_logo'] === HEADER_LOGO_BLACK_CLASSIC) {
$config['custom_logo'] = HEADER_LOGO_DEFAULT_CLASSIC;
}
$image_about = 'images/custom_logo/'.$config['custom_logo'];
if (file_exists(ENTERPRISE_DIR.'/'.$image_about) === true) {
$image_about = ENTERPRISE_DIR.'/'.$image_about;
}
}
$dialog = '
<div id="about-tabs" class="invisible overflow-hidden">
<ul>
@ -827,7 +856,7 @@ if (is_ajax()) {
<tbody>
<tr>
<th style="width: 40%;">
<img src="'.ui_get_full_url('/images/custom_logo/'.$config['custom_logo'], false, false, false).'" alt="logo" width="70%">
<img src="'.$image_about.'" alt="logo" width="70%">
</th>
<th style="width: 60%; text-align: left;">
<h1>'.$product_name.'</h1>

View File

@ -3992,16 +3992,28 @@ function recursive_get_dt_from_modules_tree(&$f_modules, $modules, $deep)
* Get the module data from a children
*
* @param integer $id_module Id module
* @param boolean $recursive Recursive children search.
* @return array Children module data
*/
function get_children_module($id_module)
function get_children_module($id_module, $fields=false, $recursion=false)
{
$children_module_data = db_get_all_rows_sql(
'SELECT *
FROM tagente_modulo
WHERE parent_module_id = '.$id_module
$children_module_data = db_get_all_rows_filter(
'tagente_modulo',
['parent_module_id' => $id_module],
$fields
);
if ($children_module_data !== false && $recursion === true) {
foreach ($children_module_data as $child) {
$niece = get_children_module($child['id_agente_modulo'], $fields, false);
if ((bool) $niece === false) {
continue;
} else {
$children_module_data = array_merge($children_module_data, $niece);
}
}
}
return $children_module_data;
}

View File

@ -257,6 +257,10 @@ function reporting_make_reporting_data(
$content['style'] = json_decode(io_safe_output($content['style']), true);
if (!empty($content['style']['event_filter_search'])) {
$content['style']['event_filter_search'] = io_safe_input($content['style']['event_filter_search']);
}
$graphs_to_macro = db_get_all_rows_field_filter(
'tgraph_source',
'id_graph',
@ -8802,24 +8806,27 @@ function reporting_availability($report, $content, $date=false, $time=false)
$data = [];
$style = io_safe_output($content['style']);
if ($style['hide_notinit_agents']) {
$aux_id_agents = $agents;
$i = 0;
foreach ($items as $item) {
$utimestamp = db_get_value(
'utimestamp',
'tagente_datos',
'id_agente_modulo',
$item['id_agent_module'],
true
);
if (($utimestamp === false)
|| (intval($utimestamp) > intval($datetime_to))
) {
unset($items[$i]);
}
$i++;
if (is_array($style)) {
if ($style['hide_notinit_agents']) {
$aux_id_agents = $agents;
$i = 0;
foreach ($items as $item) {
$utimestamp = db_get_value(
'utimestamp',
'tagente_datos',
'id_agente_modulo',
$item['id_agent_module'],
true
);
if (($utimestamp === false)
|| (intval($utimestamp) > intval($datetime_to))
) {
unset($items[$i]);
}
$i++;
}
}
}

View File

@ -478,8 +478,13 @@ function tactical_get_data(
$list['_monitors_alerts_fired_'] = tactical_monitor_fired_alerts(explode(',', $user_groups_ids), $user_strict, explode(',', $user_groups_ids));
$list['_monitors_alerts_'] = tactical_monitor_alerts($user_strict);
$filter_agents = [];
if (users_is_admin() === false) {
$filter_agents = ['id_grupo' => explode(',', $user_groups_ids)];
}
$total_agentes = agents_get_agents(
['id_grupo' => explode(',', $user_groups_ids)],
$filter_agents,
['count(DISTINCT id_agente) as total_agents'],
'AR',
false,

View File

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

View File

@ -6641,10 +6641,10 @@ function ui_print_comments($comments)
$rest_time = (time() - $last_comment['utimestamp']);
$time_last = (($rest_time / 60) / 60);
$comentario = '<i>'.number_format($time_last, 0, $config['decimal_separator'], $config['thousand_separator']).'&nbsp; Hours &nbsp;('.$last_comment['id_user'].'):&nbsp;'.$last_comment['comment'].'';
$comentario = '<i>'.number_format($time_last, 0, $config['decimal_separator'], ($config['thousand_separator'] ?? ',')).'&nbsp; Hours &nbsp;('.$last_comment['id_user'].'):&nbsp;'.$last_comment['comment'].'';
if (strlen($comentario) > '200px') {
$comentario = '<i>'.number_format($time_last, 0, $config['decimal_separator'], $config['thousand_separator']).'&nbsp; Hours &nbsp;('.$last_comment['id_user'].'):&nbsp;'.$short_comment.'...';
$comentario = '<i>'.number_format($time_last, 0, $config['decimal_separator'], ($config['thousand_separator'] ?? ',')).'&nbsp; Hours &nbsp;('.$last_comment['id_user'].'):&nbsp;'.$short_comment.'...';
}
}

View File

@ -142,13 +142,21 @@ function users_get_groups_for_select(
null
);
if ($id_groups !== null) {
$children = groups_get_children($id_groups);
foreach ($children as $child) {
unset($user_groups[$child['id_grupo']]);
if ($id_groups !== null && empty($id_groups) === false) {
$children = [];
foreach ($id_groups as $key => $id_group) {
$children[] = groups_get_children($id_group);
}
unset($user_groups[$id_groups]);
if (empty($children) === false) {
foreach ($children as $child) {
unset($user_groups[$child['id_grupo']]);
}
}
foreach ($id_groups as $key => $id_group) {
unset($user_groups[$id_group]);
}
}
if (empty($user_groups)) {

View File

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

View File

@ -336,19 +336,17 @@ function event_change_status(event_ids, server_id) {
}
if (data.status == "status_ok") {
// if (typeof dt_events !== "undefined") {
// dt_events.draw(false);
// }
$.ajax({
type: "POST",
url: "ajax.php",
data: {
page: "include/ajax/events",
get_Acknowledged: 1,
event_id: event_ids
event_id: event_ids,
server_id: server_id
},
success: function(response) {
$("#table4-9-1").html(response);
$(".general_acknowleded").html(response);
}
});
@ -356,15 +354,6 @@ function event_change_status(event_ids, server_id) {
.DataTable()
.draw(false);
$("#notification_status_success").show();
if (new_status == 1) {
$("#extended_event_general_page table td.general_acknowleded").text(
data.user
);
} else {
$("#extended_event_general_page table td.general_acknowleded").text(
"N/A"
);
}
$("#general_status")
.find(".general_status")

View File

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

View File

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

View File

@ -675,7 +675,8 @@ class Manager implements PublicLogin
int $offset=-1,
int $limit=-1,
bool $favourite=false,
bool $slideshow=false
bool $slideshow=false,
string $id_user=''
):array {
global $config;
@ -693,11 +694,15 @@ class Manager implements PublicLogin
$sql_where .= 'AND td.cells_slideshow = 1';
}
if (empty($id_user) === true) {
$id_user = $config['id_user'];
}
// Check ACl.
if (\is_user_admin($config['id_user']) !== true) {
if (\is_user_admin($id_user) !== true) {
// Non-admin user can see dashboards of his groups and 'AR' profile.
$group_list = \users_get_groups(
$config['id_user'],
$id_user,
'RR',
true
);
@ -727,7 +732,7 @@ class Manager implements PublicLogin
GROUP BY td.id
ORDER BY name%s",
$string_groups,
$config['id_user'],
$id_user,
$sql_where,
$sql_limit
);
@ -746,7 +751,7 @@ class Manager implements PublicLogin
WHERE td.id_group = 0 AND td.id_user = '%s' %s
GROUP BY td.id
ORDER BY name%s",
$config['id_user'],
$id_user,
$sql_where,
$sql_limit
);

View File

@ -357,7 +357,7 @@ final class Container extends Model
$config['dbpass'].$row['id'].$config['id_user']
);
return \io_safe_output($row);
return $row;
}

View File

@ -15,200 +15,383 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
h1 {
font: bold 1em;
font-size: 18px;
color: #ffffff;
text-align: center;
}
h2 {
font: Verdana;
font-size: 16px;
@font-face {
font-family: "Circular Std Book";
src: url("../../fonts/CircularStd-Book.woff") format("woff");
font-weight: 500;
font-style: normal;
font-display: swap;
}
div#install_container {
@font-face {
font-family: "Circular Std";
src: url("../../CircularStd-Medium.woff") format("woff");
font-weight: 500;
font-style: normal;
font-display: swap;
}
html {
background-image: url("../../images/installer-background.jpg");
background-position: center;
background-size: cover;
}
#install_container {
max-width: 1000px;
margin: 0 auto;
margin-top: 45px;
width: 650px;
margin-top: 50px;
background-color: #131727;
color: white;
font-family: "Circular Std Book";
border-radius: 10px;
}
div#logo_img {
#wizard {
padding: 20px;
overflow: hidden;
}
.title {
font-size: 40px;
font-weight: 400;
}
.subtitle {
font-size: 30px;
font-weight: 400;
}
.text {
font-size: 17px;
}
.content-footer {
padding: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.header {
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: space-between;
}
.title-pandora {
margin: 0px;
font-size: 18px;
}
.steps {
display: flex;
align-items: center;
}
.step {
font-size: 17px;
border: 1px solid #8a96a6;
color: #8a96a6;
border-radius: 30px;
width: 30px;
height: 30px;
text-align: center;
width: 100%;
color: #666;
display: flex;
align-items: center;
justify-content: center;
}
div#wizard {
text-align: left;
margin-top: 1em;
width: 650px;
padding-left: 0px;
padding-top: 0px;
padding-bottom: 20px;
background-color: #ffffff;
margin-top: 0px;
margin-left: 0px;
margin-right: 0px;
position: relative;
.step.active {
background-color: #82b92e;
color: #ffffff;
border-color: #82b92e;
}
div#wizard a img {
padding-right: 30px;
.step-separator {
min-width: 15px;
margin: 0px 5px;
border-color: #8a96a6;
}
div#wizard > input {
padding-right: 30px;
float: right;
.build-banner {
color: #8a96a6;
font-size: 13px;
font-weight: 300;
margin-left: 20px;
}
#foot_install {
border-top: 1px solid white;
margin-top: 20px;
}
div#install_box,
div#install_img {
padding-right: 20px;
margin-top: 0px;
width: 80%;
margin: 0px auto;
.signature {
color: #8a96a6;
font-size: 13px;
font-weight: 300;
margin-right: auto;
margin-left: 10px;
}
div#install_box {
background: F3F3F3;
border: 1px solid #ccc;
padding: 10px 25px;
margin-top: 40px;
}
div#install_box h2 {
.link {
color: #82b92e;
text-transform: uppercase;
text-decoration: none;
}
div#install_img {
margin-bottom: 25px;
margin-left: 25px;
}
div#foot_install {
font-size: 7pt;
color: #fff;
margin-top: #000;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 20px;
padding-right: 20px;
text-align: center;
}
div#foot_install a {
color: #ccc;
}
input#step4,
input#step4:hover {
width: 70px;
height: 16px;
border: 0px;
background-color: #fafafa;
}
div.warn {
min-height: 24px;
background: url(../../images/icono_warning_install.png) no-repeat 0% -2px;
color: #222;
margin-top: 14px;
padding: 2px 1px 6px 40px;
}
div.info {
min-height: 24px;
background: url(../../images/icono_info_install.png) no-repeat 0% -2px;
color: #222;
margin-top: 14px;
padding: 2px 1px 6px 40px;
}
div.err {
min-height: 24px;
background: url(../../images/icono_critical_install.png) no-repeat 0% -2px;
color: #cc0000;
margin-top: 14px;
padding: 2px 1px 6px 40px;
}
span.arr {
background: url(../../images/arrow.png) no-repeat;
margin-top: 2px;
margin-left: 5px;
padding: 2px 1px 6px 15px;
display: block;
font-size: 8.5pt;
}
body,
td {
font-size: 9pt;
line-height: 15px;
}
body {
background-color: #555555;
}
div.installation_step {
position: static;
float: right;
top: 7px;
right: 10px;
color: #666;
margin-top: 14px;
margin-right: 12px;
}
.btn_install_next {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
margin: 10px;
padding: 8px 20px 8px 20px;
background-color: transparent;
border: 1px solid #82b92e;
font: 1em Verdana;
font-size: 11pt;
.signature a {
color: #82b92e;
border-radius: 0%;
text-decoration: none;
}
.btn_install_next:hover {
.btn_primary {
color: white;
background-color: #82b92e;
border: 20px;
font-size: 15px;
border-radius: 6px;
padding: 10px 20px;
cursor: pointer;
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
text-decoration: none;
}
.btn_primary.outline {
background-color: transparent;
border: 1px solid white;
}
.info {
background: #d6e2ff;
color: #454545;
font-size: 15px;
border-radius: 5px;
padding: 15px;
position: relative;
margin: 25px 0px;
}
.info::before {
content: "|";
color: blue;
position: absolute;
left: 4px;
top: 50%;
transform: translateY(-50%);
height: 77%;
background: blue;
border-radius: 12px;
width: 4px;
}
.warn {
background: #fffbdf;
color: #454545;
font-size: 15px;
border-radius: 5px;
padding: 15px;
position: relative;
margin: 25px 0px;
}
.warn::before {
content: "|";
color: #dd9900;
position: absolute;
left: 4px;
top: 50%;
transform: translateY(-50%);
height: 77%;
background: #dd9900;
border-radius: 12px;
width: 4px;
}
.err {
background: #fbdada;
color: #454545;
font-size: 15px;
border-radius: 5px;
padding: 15px;
position: relative;
margin: 25px 0px;
}
.err::before {
content: "|";
color: red;
position: absolute;
left: 4px;
top: 50%;
transform: translateY(-50%);
height: 77%;
background: red;
border-radius: 12px;
width: 4px;
}
.check-table {
background-color: #0f111b;
color: #c1ccdc;
padding: 10px;
width: 100%;
border-radius: 8px;
margin-top: 20px;
}
.check-table td {
padding: 5px 0px;
}
.incomplete {
color: red;
}
.checked {
color: #82b92e;
}
.row {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.reverse {
flex-direction: row-reverse;
}
.col-md-6 {
width: 47%;
position: relative;
padding: 0px 10px;
}
.content-animation {
display: flex;
height: 94%;
bottom: 0;
position: absolute;
right: 0;
width: 90%;
}
.content-animation::before {
content: "";
width: 120%;
position: absolute;
height: 103%;
background-image: linear-gradient(225deg, #731dd854 0%, #2eb9b83d 100%);
top: 0;
left: 0;
border-top-left-radius: 100px;
}
.popuphero {
margin-top: 48px;
margin-left: -26px;
}
.popupgear1 img,
.popupgear2 img {
height: 176px;
position: absolute;
}
.popupgear1 img {
margin: 0px 0px 0px 129px;
animation: rotar1 10s infinite linear;
}
.popupgear2 img {
margin: 130px 0px 0px 0px;
animation: rotar2 10s infinite linear;
}
.popuplaptop img {
height: 352px;
position: absolute;
margin: 115px 0px 0px 0px;
}
.login {
font-size: 14px;
padding: 8px 10px;
border-radius: 5px;
border: 0px;
width: 100%;
}
.input-label {
color: #8a96a6;
font-size: 13px;
margin-top: 5px;
margin-bottom: 5px;
}
.example-message {
color: #8a96a6;
font-size: 8px;
}
.login[type="checkbox"] {
width: auto;
}
.table-config-database td {
text-align: left;
}
.table-config-database td.inline {
display: flex;
align-items: center;
justify-content: flex-start;
}
.table-config-database td.inline .input-label {
margin-left: 10px;
}
@keyframes rotar1 {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes rotar2 {
from {
transform: rotate(0deg);
}
to {
transform: rotate(-360deg);
}
}
@media (max-width: 768px) {
.col-md-6 {
width: 100%;
}
.hide-phone {
display: none;
}
}
/* SWITCH */
.switch {
position: relative;
display: inline-block;
width: 33px;
height: 12px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.slider:before {
position: absolute;
content: "";
height: 19px;
width: 19px;
left: 0px;
background-color: white;
-webkit-transition: 0.4s;
transition: 0.4s;
transform: translateY(-50%);
top: 50%;
}
input:checked + .slider {
background-color: #82b92e;
}
.btn_install_next_text {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color: #82b92e;
}
.btn_install_next:hover .btn_install_next_text {
transition-property: background-color, color;
transition-duration: 1s;
transition-timing-function: ease-out;
-webkit-transition-property: background-color, color;
-webkit-transition-duration: 1s;
-o-transition-property: background-color, color;
-o-transition-duration: 1s;
color: white;
input:focus + .slider {
box-shadow: 0 0 1px #82b92e;
}
:focus {
outline: 0;
input:checked + .slider:before {
-webkit-transform: translate(15px, -50%);
-ms-transform: translate(15px, -50%);
transform: translate(15px, -50%);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
/* POPUP */
.popup-lightbox {
position: fixed;
@ -218,6 +401,7 @@ div.installation_step {
background-color: #000;
opacity: 0.6;
visibility: hidden;
top: 0;
}
.popup {
@ -227,17 +411,22 @@ div.installation_step {
top: 50%;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
background-color: #fff;
z-index: 9999;
display: none;
font-family: "Circular Std Book";
}
.popup .btn_primary.outline {
color: #82b92e;
border-color: #82b92e;
margin: 0px 20px;
}
.popup-title {
background-color: #82b92e;
padding: 10px 20px;
color: #fff;
font-size: 12pt;
text-align: center;
border-radius: 10px 10px 0px 0px;
}
.popup-inner {
@ -246,6 +435,7 @@ div.installation_step {
/* overflow-y: scroll;*/
padding: 25px 35px;
font-size: 11pt;
border-radius: 0px 0px 10px 10px;
}
.popup-button-green {

View File

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

View File

@ -1218,3 +1218,93 @@ input[type="image"] {
padding: 0px !important;
color: #95a3bf;
}
/* Table about dialog */
.table-about {
background-color: #222 !important;
width: 100%;
border-collapse: collapse;
border-color: #222 !important;
}
.table-about th {
background-color: #222 !important;
width: 100%;
}
.table-about h1 {
text-transform: none !important;
font-size: 28px !important;
color: white;
margin-top: 34px;
margin-left: 9px;
}
.table-about h2 {
text-transform: none !important;
font-size: 15px !important;
margin-bottom: 5px;
margin-left: 9px;
color: #95a3bf;
}
.table-about h2 span {
color: #95a3bf;
font-size: large;
font-weight: bolder;
}
.table-about p {
color: white;
font-size: 15px;
font-weight: normal;
margin: 7px;
margin-left: 9px;
}
.table-about p span {
color: white;
font-size: 15px;
font-weight: bold;
margin: 9px;
margin-left: 0px;
}
.table-about p.about-last-p {
padding-bottom: 17px;
}
.table-about .about-last-tr {
border-bottom: 1px solid #eaeaea;
}
.about-copyright-div {
width: 100%;
height: 100%;
}
p.trademark-copyright {
width: 90%;
color: #8a96a6;
font-size: 13px;
margin-top: 20px;
margin-bottom: 0px;
text-align: center !important;
position: absolute;
bottom: 0;
}
#about-tabs,
#tab-general-view {
padding-bottom: 0px;
margin-bottom: 0px;
}
#about-tabs {
overflow: hidden;
}
#tab-database {
height: 80%;
overflow: auto;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1440,6 +1440,16 @@ if ($searchPage) {
}
}
if (__PAN_XHPROF__ === 1) {
echo "<span style='font-size: 0.8em;'>";
echo __('Page generated at').' ';
echo date('D F d, Y H:i:s', $time).'</span>';
echo ' - ( ';
pandora_xhprof_display_result('node_index');
echo ' )';
echo '</center>';
}
if ($config['pure'] == 0) {
echo '<div id="both"></div>';
echo '</div>';
@ -1623,7 +1633,3 @@ require 'include/php_to_js_values.php';
);
}
</script>
<?php
if (__PAN_XHPROF__ === 1) {
pandora_xhprof_display_result('node_index');
}

File diff suppressed because it is too large Load Diff

View File

@ -53,7 +53,7 @@ $isFunctionPolicies = enterprise_include_once('include/functions_policies.php');
$strict_user = db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']);
$filter = get_parameter('filter', 'all_enabled');
$disabled = get_parameter('disabled', 'all_enabled');
$filter_standby = get_parameter('standby', 'all');
$id_group = (int) get_parameter('ag_group', 0);
// 0 is the All group (selects all groups)
@ -113,7 +113,7 @@ $tab = get_parameter_get('tab', null);
$refr = (int) get_parameter('refr', 0);
$pure = get_parameter('pure', 0);
$url = 'index.php?sec='.$sec.'&sec2='.$sec2.'&refr='.$refr.'&filter='.$filter.'&filter_standby='.$filter_standby.'&ag_group='.$id_group.'&tag_filter='.$tag_filter.'&action_filter='.$action_filter;
$url = 'index.php?sec='.$sec.'&sec2='.$sec2.'&refr='.$refr.'&disabled='.$disabled.'&filter_standby='.$filter_standby.'&ag_group='.$id_group.'&tag_filter='.$tag_filter.'&action_filter='.$action_filter;
if ($flag_alert == 1 && check_acl($config['id_user'], $id_group, 'AW')) {
forceExecution($id_group);
@ -418,7 +418,7 @@ if ($agent_view_page === true) {
'form' => [
'html' => printFormFilterAlert(
$id_group,
$filter,
$disabled,
$free_search,
$url,
$filter_standby,

View File

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

View File

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

View File

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

View File

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

View File

@ -524,7 +524,7 @@ if (is_ajax() === true) {
$tmp->ack_utimestamp_raw = strtotime($tmp->ack_utimestamp);
$tmp->ack_utimestamp = ui_print_timestamp(
(int) $tmp->ack_utimestamp,
(empty($tmp->ack_utimestamp) === true) ? 0 : $tmp->ack_utimestamp,
true
);
$tmp->timestamp = ui_print_timestamp(
@ -1475,7 +1475,24 @@ if ($pure) {
// Sound events.
$sound_event['active'] = false;
$sound_event['text'] = '<a href="javascript: openSoundEventWindow();">'.html_print_image(
// Sound Events.
$data_sound = base64_encode(
json_encode(
[
'title' => __('Sound Console'),
'start' => __('Start'),
'stop' => __('Stop'),
'noAlert' => __('No alert'),
'silenceAlarm' => __('Silence alarm'),
'url' => ui_get_full_url('ajax.php'),
'page' => 'include/ajax/events',
'urlSound' => 'include/sounds/',
]
)
);
$sound_event['text'] = '<a href="javascript: openSoundEventModal(`'.$data_sound.'`);">'.html_print_image(
'images/sound.png',
true,
[
@ -1565,27 +1582,6 @@ if ($pure) {
unset($onheader['fullscreen']);
ui_meta_print_header(__('Events'), $section_string, $onheader);
}
?>
<script type="text/javascript">
function openSoundEventWindow() {
url = '<?php echo ui_get_full_url('operation/events/sound_events.php'); ?>';
// devicePixelRatio knows how much zoom browser applied.
var windowScale = parseFloat(window.devicePixelRatio);
var defaultWidth = 630;
var defaultHeight = 630;
// If the scale is 1, no zoom has been applied.
var windowWidth = windowScale <= 1 ? defaultWidth : windowScale*defaultWidth;
var windowHeight = windowScale <= 1 ? defaultHeight : windowScale*defaultHeight + (defaultHeight*0.1);
window.open(
url,
'<?php __('Sound Alerts'); ?>',
'width='+windowWidth+', height='+windowHeight+', resizable=yes, toolbar=no, location=no, directories=no, status=no, menubar=no'
);
}
</script>
<?php
}
if (enterprise_installed() === true) {

View File

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

View File

@ -196,10 +196,12 @@ if ($is_metaconsole === true) {
}
if ($is_metaconsole === true) {
$nodo_image_url = $config['homeurl'].'/images/node.png';
if ($id_server > 0) {
$connection = metaconsole_get_connection_by_id($id_server);
$agents_node = metaconsole_get_agents_servers($connection['server_name'], $inventory_id_group);
$node = metaconsole_get_servers($id_server);
$nodos = [];
if (metaconsole_connect($connection) !== NOERR) {
ui_print_error_message(
@ -216,7 +218,8 @@ if ($is_metaconsole === true) {
$result_module = db_get_all_rows_sql($sql);
if ($submit_filter === true) {
$inventory_data .= inventory_get_data(
// Get the data.
$rows_meta = inventory_get_datatable(
array_keys($agents_node),
$inventory_module,
$utimestamp,
@ -224,15 +227,26 @@ if ($is_metaconsole === true) {
$export,
false,
$order_by_agent,
$node,
$server,
$pagination_url_parameters
);
$data_tmp['server_name'] = $connection['server_name'];
$data_tmp['dbhost'] = $connection['dbhost'];
$data_tmp['server_uid'] = $connection['server_uid'];
$data_tmp['data'] = $rows_meta;
$nodos[$connection['id']] = $data_tmp;
if ($result_data !== ERR_NODATA) {
$inventory_data .= $result_data;
}
}
// Restore db connection.
metaconsole_restore_db();
} else {
$result_module = [];
$nodos = [];
foreach ($nodes_connection as $key => $server) {
$agents_node = metaconsole_get_agents_servers($server['server_name'], $inventory_id_group);
$connection = metaconsole_get_connection($server['server_name']);
@ -253,7 +267,7 @@ if ($is_metaconsole === true) {
$result_module = array_merge($result_module, $result);
if ($submit_filter === true) {
// Get the data.
$result_data = inventory_get_data(
$rows_meta = inventory_get_datatable(
array_keys($agents_node),
$inventory_module,
$utimestamp,
@ -264,6 +278,13 @@ if ($is_metaconsole === true) {
$server,
$pagination_url_parameters
);
$data_tmp['server_name'] = $server['server_name'];
$data_tmp['dbhost'] = $server['dbhost'];
$data_tmp['server_uid'] = $server['server_uid'];
$data_tmp['data'] = $rows_meta;
$nodos[$server['id']] = $data_tmp;
if ($result_data !== ERR_NODATA) {
$inventory_data .= $result_data;
}
@ -360,8 +381,8 @@ $table->data[0][1] .= '</div>';
$table->data[0][2] = '<strong>'.__('Module').'</strong>';
if ($is_metaconsole === true) {
// array_unshift($fields, __('All'));
$table->data[0][3] = html_print_select($fields, 'module_inventory_general_view', $inventory_module, $filteringFunction, __('All'), 0, true, false, true, '', false, 'min-width: 194px; max-width: 200px;');
array_unshift($fields, __('All'));
$table->data[0][3] = html_print_select($fields, 'module_inventory_general_view', $inventory_module, $filteringFunction, __('Basic info'), 'basic', true, false, true, '', false, 'min-width: 194px; max-width: 200px;');
} else {
$sql = 'SELECT name as indexname, name
FROM tmodule_inventory, tagent_module_inventory
@ -848,11 +869,411 @@ if ($is_metaconsole === false) {
echo '<div class="databox">'.$table.'</div>';
}
}
// Metaconsole.
} else {
if (empty($inventory_data) === true) {
ui_print_info_message(['no_close' => true, 'message' => __('No data found.') ]);
if ($inventory_module !== 'basic') {
if ($order_by_agent === true) {
$count_nodos_tmp = [];
foreach ($nodos as $count_value) {
array_push($count_nodos_tmp, $count_value['server_name']);
}
$count = array_count_values($count_nodos_tmp);
foreach ($nodos as $nodo) {
$agents = '';
foreach ($nodo['data'] as $agent_rows) {
$modules = '';
foreach ($agent_rows['row'] as $row) {
$data = [];
$columns = explode(';', io_safe_output($row['data_format']));
array_push($columns, 'Timestamp');
$data_rows = explode(PHP_EOL, $row['data']);
foreach ($data_rows as $data_row) {
// Exclude results don't match filter.
if ($inventory_search_string && preg_match('/'.io_safe_output($inventory_search_string).'/', ($data_row)) == 0) {
continue;
}
$column_data = explode(';', io_safe_output($data_row));
if ($column_data[0] !== '') {
$row_tmp = [];
foreach ($column_data as $key => $value) {
$row_tmp[$columns[$key]] = $value;
}
$row_tmp['Timestamp'] = $row['timestamp'];
array_push($data, (object) $row_tmp);
}
}
$id_table = 'id_'.$row['id_module_inventory'].'_'.$nodo['server_uid'];
$table = ui_print_datatable(
[
'id' => $id_table,
'class' => 'info_table w100p',
'style' => 'width: 100%',
'columns' => $columns,
'column_names' => $columns,
'no_sortable_columns' => [],
'data_element' => $data,
'searching' => true,
'dom_elements' => 'lftipB',
'order' => [
'field' => $columns[0],
'direction' => 'asc',
],
'zeroRecords' => __('No inventory found'),
'emptyTable' => __('No inventory found'),
'return' => true,
'default_pagination' => 10,
'no_sortable_columns' => [-1],
]
);
$modules .= ui_toggle(
$table,
'<span class="title-blue">'.$row['name'].'</span>',
'',
'',
true,
true,
'',
'white-box-content w100p',
'box-shadow white_table_graph w100p',
'images/arrow_down_green.png',
'images/arrow_right_green.png',
false,
false,
false,
'',
'',
null,
null,
$id_table
);
}
$agents .= ui_toggle(
$modules,
$agent_rows['agent'],
'',
'',
true,
true
);
}
$node_name = $nodo['server_name'];
if ($count[$nodo['server_name']] > 1) {
$node_name .= ' ('.$nodo['dbhost'].')';
}
ui_toggle(
$agents,
'<span class="toggle-inventory-nodo">'.$node_name.'</span>',
'',
'',
false,
false
);
}
} else {
$count_nodos_tmp = [];
foreach ($nodos as $count_value) {
array_push($count_nodos_tmp, $count_value['server_name']);
}
$count = array_count_values($count_nodos_tmp);
foreach ($nodos as $nodo_key => $nodo) {
$agents = '';
foreach ($nodo['data'] as $module_rows) {
$agent = '';
foreach ($module_rows as $row) {
$columns = explode(';', io_safe_output($row['data_format']));
array_push($columns, 'Timestamp');
$data = [];
$data_explode = explode(PHP_EOL, $row['data']);
foreach ($data_explode as $values) {
// Exclude results don't match filter.
if ($inventory_search_string && preg_match('/'.io_safe_output($inventory_search_string).'/', ($values)) == 0) {
continue;
}
$data_tmp = [];
if ($values !== '') {
$values_explode = explode(';', io_safe_output($values));
foreach ($values_explode as $key => $value) {
$data_tmp[$columns[$key]] = $value;
}
$data_tmp['Timestamp'] = $row['timestamp'];
array_push($data, $data_tmp);
}
}
$id_table = 'id_'.$row['id_module_inventory'].'_'.$nodo['server_uid'];
$table = ui_print_datatable(
[
'id' => $id_table,
'class' => 'info_table w100p',
'style' => 'width: 100%',
'columns' => $columns,
'column_names' => $columns,
'no_sortable_columns' => [],
'data_element' => $data,
'searching' => true,
'dom_elements' => 'lftipB',
'order' => [
'field' => $columns[0],
'direction' => 'asc',
],
'zeroRecords' => __('No inventory found'),
'emptyTable' => __('No inventory found'),
'return' => true,
'default_pagination' => 10,
'no_sortable_columns' => [-1],
]
);
$agent .= ui_toggle(
$table,
'<span class="title-blue">'.$row['name_agent'].'</span>',
'',
'',
true,
true,
'',
'white-box-content w100p',
'box-shadow white_table_graph w100p',
'images/arrow_down_green.png',
'images/arrow_right_green.png',
false,
false,
false,
'',
'',
null,
null,
$id_table
);
}
$agents .= ui_toggle(
$agent,
$module_rows[0]['name'],
'',
'',
true,
true
);
}
$node_name = $nodo['server_name'];
if ($count[$nodo['server_name']] > 1) {
$node_name .= ' ('.$nodo['dbhost'].')';
}
ui_toggle(
$agents,
'<span class="toggle-inventory-nodo">'.$node_name.'</span>',
'',
'',
false,
false
);
}
}
} else {
echo $inventory_data;
$id_agente = $inventory_id_agent;
$agentes = [];
$data = [];
$class = 'info_table w100p';
$style = 'width: 100%';
$ordering = false;
$searching = false;
$dom = 't';
$columns = [
__('Alias'),
__('IP'),
__("IP's Secondary"),
__('Group'),
__('Secondary groups'),
__('Description'),
__('OS'),
__('Interval'),
__('Last contact'),
__('Last status change'),
__('Custom fields'),
__('Values Custom Fields'),
];
if ($id_server === 0) {
$servers_ids = array_column(metaconsole_get_servers(), 'id');
} else {
$servers_ids = [$id_server];
}
foreach ($servers_ids as $server_id) {
if (is_metaconsole()) {
$server = metaconsole_get_connection_by_id($server_id);
if ((int) $es_agent_server_filter !== 0
&& (int) $es_agent_server_filter !== (int) $server_id
) {
continue;
}
metaconsole_connect($server);
}
if ((int) $id_agente === 0) {
$class = 'databox info_table w100p';
$style = 'width: 99%';
$ordering = true;
$searching = true;
$dom = 'lftipB';
$sql_agentes = 'SELECT t.id_agente
FROM tagente t
LEFT JOIN tgrupo tg ON tg.id_grupo = t.id_grupo
WHERE (t.alias LIKE "%'.$inventory_search_string.'%")
OR (t.comentarios LIKE "%'.$inventory_search_string.'%")
OR (t.direccion LIKE "%'.$inventory_search_string.'%")
OR (t.os_version LIKE "%'.$inventory_search_string.'%")
OR (tg.nombre LIKE "%'.$inventory_search_string.'%")';
$agentes = db_get_all_rows_sql($sql_agentes);
} else {
array_push($agentes, $id_agente);
}
foreach ($agentes as $id) {
if ((int) $id_agente === 0) {
$id = $id['id_agente'];
}
$agent = db_get_row('tagente', 'id_agente', $id);
$ip = '<em>'.__('N/A').'</em>';
if (empty($agent['direccion']) === false) {
$ip = $agent['direccion'];
}
$secondary_ips = '';
foreach (agents_get_addresses($id) as $ip) {
if ($ip !== $agent['direccion']) {
$secondary_ips .= '<span class="left" style="height: 1.3em !important">'.$ip.'</span>';
}
}
$group = groups_get_name($agent['id_grupo']);
$secondary_groups = enterprise_hook('agents_get_secondary_groups', [$id]);
if (empty($secondary_groups['for_select']) === true) {
$sec_group_data = '<em>'.__('N/A').'</em>';
} else {
$sec_group = [];
foreach ($secondary_groups['for_select'] as $name) {
$sec_group[] = $name;
}
$sec_group_data = implode(', ', $sec_group);
}
$os = ui_print_os_icon($agent['id_os'], false, true).' ';
$os .= io_safe_output(get_os_name($agent['id_os'])).' '.io_safe_output($agent['os_version']);
$interval = human_time_description_raw($agent['intervalo'], false, 'large');
$last_contact = ui_print_timestamp($agent['ultimo_contacto'], true);
// $last_contact .= ' / '.date_w_fixed_tz($agent['ultimo_contacto_remoto']);
$last_status_change_agent = agents_get_last_status_change($agent['id_agente']);
$time_elapsed = !empty($last_status_change_agent) ? human_time_comparation($last_status_change_agent) : '<em>'.__('N/A').'</em>';
$sql_fields = 'SELECT tcf.name, tcd.description, tcf.is_password_type
FROM tagent_custom_fields tcf
INNER JOIN tagent_custom_data tcd ON tcd.id_field=tcf.id_field
WHERE tcd.id_agent='.$id.' AND tcd.description!=""';
$field_result = db_get_all_rows_sql($sql_fields);
$custom_fields_names = '';
$custom_fields_values = '';
foreach ($field_result as $field) {
$field_name = str_replace(' ', '&nbsp;', io_safe_output($field['name']));
$custom_fields_names .= '<span class="right" style="height: 1.3em !important">'.$field_name.'</span>';
$description = $field['description'];
$password_length = strlen(io_safe_output($field['description']));
$asterisks = '';
if ((int) $field['is_password_type'] === 1) {
for ($i = 0; $i < $password_length; $i++) {
$asterisks .= '&#9679;';
}
$description = $asterisks;
}
$custom_fields_values .= '<span class="left" style="height: 1.3em !important">'.$description.'</span>';
}
$data_tmp = [
__('Alias') => $agent['alias'],
__('IP') => $ip,
__("IP's Secondary") => $secondary_ips,
__('Group') => $group,
__('Secondary groups') => $sec_group_data,
__('Description') => $agent['comentarios'],
__('OS') => $os,
__('Interval') => $interval,
__('Last contact') => $last_contact,
__('Last status change') => $time_elapsed,
__('Custom fields') => $custom_fields_names,
__('Values Custom Fields') => $custom_fields_values,
];
array_push($data, $data_tmp);
}
if (is_metaconsole()) {
metaconsole_restore_db();
}
}
$table = ui_print_datatable(
[
'id' => 'basic_info',
'class' => $class,
'style' => $style,
'columns' => $columns,
'column_names' => $columns,
'ordering' => $ordering,
'data_element' => $data,
'searching' => $searching,
'dom_elements' => $dom,
'order' => [
'field' => $columns[0],
'direction' => 'asc',
],
'zeroRecords' => __('Agent info not found'),
'emptyTable' => __('Agent info not found'),
'default_pagination' => 10,
'return' => true,
]
);
if ((int) $id_agente === 0) {
echo $table;
} else {
echo '<div class="databox">'.$table.'</div>';
}
}
close_meta_frame();
@ -882,6 +1303,23 @@ ui_require_jquery_file('bgiframe');
// Reduce margins between table and pagination.
$('.dataTables_paginate.paging_simple_numbers').css('margin-top', 10);
$('.dataTables_paginate.paging_simple_numbers').css('margin-bottom', 10);
// Change chevron for node icon.
let toggle = document.querySelectorAll('.toggle-inventory-nodo');
let src = '<?php echo $nodo_image_url; ?>';
toggle.forEach(img => {
img.parentElement.parentElement.style = 'cursor: pointer; border: 0';
img.parentElement.previousElementSibling.src = src;
});
toggle.forEach(divParent => {
let div = divParent.parentElement.parentElement;
$(div).click(function (e) {
div.style = 'cursor: pointer; border: 0';
div.firstChild.src = src;
});
});
});
/* ]]> */
</script>

View File

@ -457,26 +457,6 @@ if ($access_console_node === true) {
ui_require_javascript_file('pandora_events');
?>
<script type="text/javascript">
function openSoundEventWindow() {
url = '<?php echo ui_get_full_url('operation/events/sound_events.php'); ?>';
// devicePixelRatio knows how much zoom browser applied.
var windowScale = parseFloat(window.devicePixelRatio);
var defaultWidth = 630;
var defaultHeight = 630;
// If the scale is 1, no zoom has been applied.
var windowWidth = windowScale <= 1 ? defaultWidth : windowScale*defaultWidth;
var windowHeight = windowScale <= 1 ? defaultHeight : windowScale*defaultHeight + (defaultHeight*0.1);
window.open(
url,
'<?php __('Sound Alerts'); ?>',
'width='+windowWidth+', height='+windowHeight+', resizable=yes, toolbar=no, location=no, directories=no, status=no, menubar=no'
);
}
</script>
<?php
$menu_operation['eventos']['sub'] = $sub;
}
}

View File

@ -31,6 +31,7 @@ global $config;
$headerTitle = __('User detail editor');
// Load the header.
require $config['homedir'].'/operation/users/user_edit_header.php';
use PandoraFMS\Dashboard\Manager;
if (is_metaconsole() === false) {
include 'include/javascript/timezonepicker/includes/parser.inc';
@ -442,7 +443,13 @@ if (!$meta) {
$home_screen .= html_print_select($values, 'section', io_safe_output($user_info['section']), 'show_data_section();', '', -1, true, false, false).'</div>';
$dashboards = get_user_dashboards($config['id_user']);
$dashboards = Manager::getDashboards(
-1,
-1,
false,
false,
$config['id_user']
);
$dashboards_aux = [];
if ($dashboards === false) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -29,28 +29,29 @@
"@types/jest": "^24.9.1",
"@typescript-eslint/eslint-plugin": "^1.13.0",
"@typescript-eslint/parser": "^1.13.0",
"awesome-typescript-loader": "^5.2.1",
"clean-webpack-plugin": "^2.0.2",
"css-loader": "^2.1.1",
"clean-webpack-plugin": "^4.0.0",
"css-loader": "^6.7.3",
"d3-shape": "^1.3.7",
"eslint": "^5.16.0",
"eslint-config-prettier": "^4.3.0",
"eslint-plugin-prettier": "^3.4.0",
"file-loader": "^3.0.1",
"jest": "^24.9.0",
"mini-css-extract-plugin": "^0.5.0",
"file-loader": "^6.2.0",
"jest": "^29.3.1",
"mini-css-extract-plugin": "^2.7.2",
"npm-watch": "^0.11.0",
"postcss-loader": "^3.0.0",
"prettier": "^1.19.1",
"ts-jest": "^24.3.0",
"typescript": "^3.9.9",
"url-loader": "^1.1.2",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.2"
"ts-jest": "^29.0.3",
"typescript": "^4.9.4",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
],
"devDependencies": {
"ts-loader": "^9.4.2"
}
}

View File

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

View File

@ -558,6 +558,20 @@ export default class VisualConsole {
delete this.lineLinks[i];
}
}
if (
(this.lineLinks[i][line].start != itemAtStart &&
this.lineLinks[i][line].end == itemAtEnd) ||
(this.lineLinks[i][line].start == itemAtStart &&
this.lineLinks[i][line].end != itemAtEnd)
) {
// Object not connected to a line.
delete this.lineLinks[i][line];
if (Object.keys(this.lineLinks[i]).length === 0) {
delete this.lineLinks[i];
}
}
}
}
} catch (error) {
@ -722,7 +736,7 @@ export default class VisualConsole {
context.containerRef.append(itemInstance.elementRef);
return itemInstance;
} catch (error) {
console.error("Error creating a new element:", error.message);
console.error("Error creating a new element:", (error as Error).message);
}
return;
}
@ -759,7 +773,10 @@ export default class VisualConsole {
try {
this.elementsById[item.id].props = decodeProps(item);
} catch (error) {
console.error("Error updating an element:", error.message);
console.error(
"Error updating an element:",
(error as Error).message
);
}
}
}
@ -780,7 +797,7 @@ export default class VisualConsole {
...decodeProps(item)
};
} catch (error) {
console.error("Error updating element:", error.message);
console.error("Error updating element:", (error as Error).message);
}
// Re-build relations.

View File

@ -223,16 +223,11 @@ export default class Odometer extends Item<OdometerProps> {
let script = document.createElement("script");
script.type = "text/javascript";
script.onload = function() {
script.onload = () => {
odometerB.style.transform = `rotate(${rotate}turn)`;
};
if (typeof this.props.metaconsoleId !== "undefined") {
script.src = "./../../include/javascript/pandora_alerts.js";
} else {
script.src = "./include/javascript/pandora_alerts.js";
}
var url_pandora = window.location.pathname.split("/")[1];
script.src = `${document.dir}/${url_pandora}/include/javascript/pandora_alerts.js`;
odometerA.appendChild(h1);
odometerA.appendChild(h2);
odometerContainer.appendChild(odometerB);
@ -325,9 +320,7 @@ export default class Odometer extends Item<OdometerProps> {
}
private getCoords(percent: number, radio: number): string {
if (this.props.minMaxValue === "") {
percent = percent;
} else {
if (this.props.minMaxValue !== "") {
const minMax = JSON.parse(this.props.minMaxValue);
if (minMax["min"] === percent) {
percent = 0;

View File

@ -1,5 +1,6 @@
{
"compilerOptions": {
"outDir": "./dist/",
"target": "es5",
"module": "es6",
"strict": true,

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