Merge branch 'develop' into ent-13061-limitar-el-aviso-de-lts-versions-del-warp-offline

This commit is contained in:
Jonathan 2024-03-26 08:20:48 +01:00
commit e4d26875ed
60 changed files with 1090 additions and 117 deletions

View File

@ -0,0 +1,782 @@
#!/bin/bash
#######################################################
# PandoraFMS Community online installation script
#######################################################
## Tested versions ##
# Rockylinux 9.3
# RHEL 9.3
#Constants
PANDORA_CONSOLE=/var/www/html/pandora_console
PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf
PANDORA_AGENT_CONF=/etc/pandora/pandora_agent.conf
S_VERSION='2024021301'
LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log"
# define default variables
[ "$TZ" ] || TZ="Europe/Madrid"
[ "$MYVER" ] || MYVER=80
[ "$PHPVER" ] || PHPVER=8
[ "$DBHOST" ] || DBHOST=127.0.0.1
[ "$DBNAME" ] || DBNAME=pandora
[ "$DBUSER" ] || DBUSER=pandora
[ "$DBPASS" ] || DBPASS='Pandor4!'
[ "$DBPORT" ] || DBPORT=3306
[ "$DBROOTUSER" ] || DBROOTUSER=root
[ "$DBROOTPASS" ] || DBROOTPASS='Pandor4!'
[ "$SKIP_PRECHECK" ] || SKIP_PRECHECK=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")
[ "$PANDORA_LTS" ] || PANDORA_LTS=1
[ "$PANDORA_BETA" ] || PANDORA_BETA=0
[ "$RHEL_CHECK_SUBSCRIPTION" ] || RHEL_CHECK_SUBSCRIPTION=1
#Check if possible to get os version
if [ ! -e /etc/os-release ]; then
echo ' > Imposible to determinate the OS version for this machine, please make sure you are intalling in a compatible OS'
echo ' > More info: https://pandorafms.com/manual/en/documentation/02_installation/01_installing#minimum_software_requirements'
exit -1
fi
# Ansi color code variables
red="\e[0;91m"
green="\e[0;92m"
cyan="\e[0;36m"
yellow="\e[33m"
reset="\e[0m"
# Functions
execute_cmd () {
local cmd="$1"
local msg="$2"
echo -e "${cyan}$msg...${reset}"
$cmd &>> "$LOGFILE"
if [ $? -ne 0 ]; then
echo -e "${red}Fail${reset}"
[ "$3" ] && echo "$3"
echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE"
rm -rf "$HOME"/pandora_deploy_tmp &>> "$LOGFILE"
exit 1
else
echo -e "\e[1A\e ${cyan}$msg...${reset} ${green}OK${reset}"
return 0
fi
}
check_cmd_status () {
if [ $? -ne 0 ]; then
echo -e "${red}Fail${reset}"
[ "$1" ] && echo "$1"
echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE"
rm -rf "$HOME"/pandora_deploy_tmp/*.rpm* &>> "$LOGFILE"
exit 1
else
echo -e "${green}OK${reset}"
return 0
fi
}
check_pre_pandora () {
echo -en "${cyan}Checking environment ... ${reset}"
rpm -qa | grep 'pandorafms_' | grep -v pandorafms_agent_* | grep -v "pandorawmic" | grep -v "pandorafms_made" &>> /dev/null && local fail=true
[ -d "$PANDORA_CONSOLE" ] && local fail=true
[ -f /usr/bin/pandora_server ] && local fail=true
if [ "$SKIP_DATABASE_INSTALL" -eq '0' ]; then
export MYSQL_PWD=$DBPASS
echo "use $DBNAME" | mysql -u$DBUSER -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true
fi
[ ! $fail ]
check_cmd_status 'Error there is a current Pandora FMS installation on this node, please remove it to execute a clean install'
}
check_repo_connection () {
execute_cmd "ping -c 2 firefly.pandorafms.com" "Checking Community repo"
execute_cmd "ping -c 2 support.pandorafms.com" "Checking Enterprise repo"
}
check_root_permissions () {
echo -en "${cyan}Checking root account... ${reset}"
if [ "$(whoami)" != "root" ]; then
echo -e "${red}Fail${reset}"
echo "Please use a root account or sudo for installing Pandora FMS"
echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE"
exit 1
else
echo -e "${green}OK${reset}"
fi
}
installing_docker () {
#Installing docker for debug
echo "Start installig docker" &>> "$LOGFILE"
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>> "$LOGFILE"
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin &>> "$LOGFILE"
systemctl disable --now docker &>> "$LOGFILE"
systemctl disable docker.socket --now &>> "$LOGFILE"
echo "End installig docker" &>> "$LOGFILE"
}
# Function to check if a password meets the MySQL secure password requirements
is_mysql_secure_password() {
local password=$1
# Check password length (at least 8 characters)
if [[ ${#password} -lt 8 ]]; then
echo "Password length should be at least 8 characters."
return 1
fi
# Check if password contains at least one uppercase letter
if [[ $password == ${password,,} ]]; then
echo "Password should contain at least one uppercase letter."
return 1
fi
# Check if password contains at least one lowercase letter
if [[ $password == ${password^^} ]]; then
echo "Password should contain at least one lowercase letter."
return 1
fi
# Check if password contains at least one digit
if ! [[ $password =~ [0-9] ]]; then
echo "Password should contain at least one digit."
return 1
fi
# Check if password contains at least one special character
if ! [[ $password =~ [[:punct:]] ]]; then
echo "Password should contain at least one special character."
return 1
fi
# Check if password is not a common pattern (e.g., "password", "123456")
local common_patterns=("password" "123456" "qwerty")
for pattern in "${common_patterns[@]}"; do
if [[ $password == *"$pattern"* ]]; then
echo "Password should not contain common patterns."
return 1
fi
done
# If all checks pass, the password is MySQL secure compliant
return 0
}
## Main
echo "Starting PandoraFMS Community deployment EL8 ver. $S_VERSION"
#check tools
if ! grep --version &>> $LOGFILE ; then echo 'Error grep is not detected on the system, grep tool is needed for installation.'; exit -1 ;fi
if ! sed --version &>> $LOGFILE ; then echo 'Error sed is not detected on the system, sed tool is needed for installation.'; exit -1 ;fi
if ! curl --version &>> $LOGFILE ; then echo 'Error curl is not detected on the system, curl tool is needed for installation.'; exit -1 ;fi
if ! ping -V &>> $LOGFILE ; then echo 'Error ping is not detected on the system, ping tool is needed for installation.'; exit -1 ;fi
# Centos Version
if [ ! "$(grep -Ei 'centos|rocky|Almalinux|Red Hat Enterprise' /etc/redhat-release)" ]; then
printf "\n ${red}Error this is not a Centos/Rocky/Almalinux Base system, this installer is compatible with RHEL/Almalinux/Centos/Rockylinux systems only${reset}\n"
exit 1
fi
echo -en "${cyan}Check Centos Version...${reset}"
[[ $(sed -nr 's/VERSION_ID+=\s*"([0-9]).*"$/\1/p' /etc/os-release) -eq '9' ]]
check_cmd_status 'Error OS version, RHEL/Almalinux/Centos/Rockylinux 8.x is expected'
#Detect OS
os_name=$(grep ^PRETTY_NAME= /etc/os-release | cut -d '=' -f2 | tr -d '"')
execute_cmd "echo $os_name" "OS detected: ${os_name}"
# initialice logfile
execute_cmd "echo 'Starting community deployment' > $LOGFILE" "All installer activity is logged on $LOGFILE"
echo "Community installer version: $S_VERSION" >> "$LOGFILE"
# Pre checks
# Root permisions
check_root_permissions
# Pre installed pandora
[ "$SKIP_PRECHECK" == 1 ] || check_pre_pandora
#advicing BETA PROGRAM
INSTALLING_VER="${green}RRR version enable using RRR PandoraFMS packages${reset}"
[ "$PANDORA_LTS" -ne '0' ] && INSTALLING_VER="${green}LTS version enable using LTS PandoraFMS packages${reset}"
[ "$PANDORA_BETA" -ne '0' ] && INSTALLING_VER="${red}BETA version enable using nightly PandoraFMS packages${reset}"
echo -e $INSTALLING_VER
# Connectivity
check_repo_connection
# Systemd
execute_cmd "systemctl status" "Checking SystemD" 'This is not a SystemD enable system, if tryng to use in a docker env please check: https://github.com/pandorafms/pandorafms/tree/develop/extras/docker/centos8'
# Check memomry greather or equal to 2G
execute_cmd "[ $(grep MemTotal /proc/meminfo | awk '{print $2}') -ge 1700000 ]" 'Checking memory (required: 2 GB)'
# Check disk size at least 10 Gb free space
execute_cmd "[ $(df -BM / | tail -1 | awk '{print $4}' | tr -d M) -gt 10000 ]" 'Checking Disk (required: 10 GB free min)'
# Setting timezone
rm -rf /etc/localtime &>> "$LOGFILE"
execute_cmd "timedatectl set-timezone $TZ" "Setting Timezone $TZ"
# Execute tools check
execute_cmd "awk --version" 'Checking needed tools: awk'
execute_cmd "grep --version" 'Checking needed tools: grep'
execute_cmd "sed --version" 'Checking needed tools: sed'
execute_cmd "dnf --version" 'Checking needed tools: dnf'
#Check mysql pass
execute_cmd "is_mysql_secure_password $DBROOTPASS" "Checking DBROOTPASS password match policy" 'This password do not match minimum MySQL policy requirements, more info in: https://dev.mysql.com/doc/refman/8.0/en/validate-password.html'
execute_cmd "is_mysql_secure_password $DBPASS" "Checking DBPASS password match policy" 'This password do not match minimum MySQL policy requirements, more info in: https://dev.mysql.com/doc/refman/8.0/en/validate-password.html'
# Creating working directory
rm -rf "$HOME"/pandora_deploy_tmp/*.rpm* &>> "$LOGFILE"
mkdir "$HOME"/pandora_deploy_tmp &>> "$LOGFILE"
execute_cmd "cd $HOME/pandora_deploy_tmp" "Moving to workspace: $HOME/pandora_deploy_tmp"
## Extra steps on redhat envs
if [ "$(grep -Ei 'Red Hat Enterprise' /etc/redhat-release)" ]; then
## In case REDHAT
if [ "$RHEL_CHECK_SUBSCRIPTION" -eq '1' ] ; then
# Check susbscription manager status:
echo -en "${cyan}Checking Red Hat Enterprise subscription... ${reset}"
subscription-manager list &>> "$LOGFILE"
subscription-manager status &>> "$LOGFILE"
check_cmd_status 'Error checking subscription status, make sure your server is activated and suscribed to Red Hat Enterprise repositories'
# Ckeck repolist
dnf repolist &>> "$LOGFILE"
echo -en "${cyan}Checking Red Hat Enterprise repolist... ${reset}"
dnf repolist | grep 'rhel-9-for-x86_64-baseos-rpms' &>> "$LOGFILE"
check_cmd_status 'Error checking repositories status, could try a subscription-manager attach command or contact sysadmin'
fi
#install extra repos
extra_repos=" \
tar \
dnf-utils \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-9.rpm \
https://repo.percona.com/yum/percona-release-latest.noarch.rpm"
execute_cmd "dnf install -y $extra_repos" "Installing extra repositories"
execute_cmd "subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms" "Enabling subscription to codeready-builder"
else
# For alma/rocky/centos
extra_repos=" \
tar \
dnf-utils \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-9.rpm \
https://repo.percona.com/yum/percona-release-latest.noarch.rpm"
execute_cmd "dnf install -y $extra_repos" "Installing extra repositories"
execute_cmd "dnf config-manager --enable crb" "Configuring crb"
fi
execute_cmd "installing_docker" "Installing Docker for debug"
#Installing wget
execute_cmd "dnf install -y wget" "Installing wget"
#Installing php
execute_cmd "dnf module reset -y php " "Disabling standard PHP module"
if [ "$PHPVER" -eq '8' ] ; then
PHPVER=8.2
fi
execute_cmd "dnf module install -y php:remi-$PHPVER" "Configuring PHP $PHPVER"
if [ "$MYVER" -eq '80' ] ; then
execute_cmd "percona-release setup ps80 -y" "Enabling mysql80 module"
execute_cmd "dnf install -y percona-server-server percona-xtrabackup-80" "Installing Percona Server 80"
fi
# Console dependencies
console_dependencies=" \
php \
postfix \
php-mcrypt \
php-cli \
php-gd \
php-curl \
php-session \
php-mysqlnd \
php-ldap \
php-zip \
php-zlib \
php-fileinfo \
php-gettext \
php-snmp \
php-mbstring \
php-pecl-zip \
php-xmlrpc \
libxslt \
wget \
php-xml \
httpd \
mod_php \
atk \
avahi-libs \
cairo \
cups-libs \
fribidi \
gd \
gdk-pixbuf2 \
ghostscript \
graphite2 \
graphviz \
gtk2 \
harfbuzz \
hicolor-icon-theme \
hwdata \
jasper-libs \
lcms2 \
libICE \
libSM \
libXaw \
libXcomposite \
libXcursor \
libXdamage \
libXext \
libXfixes \
libXft \
libXi \
libXinerama \
libXmu \
libXrandr \
libXrender \
libXt \
libXxf86vm \
libdrm \
libfontenc \
libglvnd \
libglvnd-egl \
libglvnd-glx \
libpciaccess \
librsvg2 \
libthai \
libtool-ltdl \
libwayland-client \
libwayland-server \
libxshmfence \
mesa-libEGL \
mesa-libGL \
mesa-libgbm \
mesa-libglapi \
pango \
pixman \
xorg-x11-fonts-75dpi \
xorg-x11-fonts-misc \
poppler-data \
php-yaml \
mod_ssl \
libzstd \
openldap-clients \
https://firefly.pandorafms.com/centos8/chromium-110.0.5481.177-1.el7.x86_64.rpm \
https://firefly.pandorafms.com/centos8/chromium-common-110.0.5481.177-1.el7.x86_64.rpm \
https://firefly.pandorafms.com/centos8/pandora_gotty-1.0-1.el8.x86_64.rpm \
https://firefly.pandorafms.com/centos8/pandorafms_made-0.1.0-1.el8.x86_64.rpm "
execute_cmd "dnf install -y $console_dependencies" "Installing Pandora FMS Console dependencies"
# Server dependencies
server_dependencies=" \
perl \
vim \
fping \
perl-IO-Compress \
nmap \
sudo \
perl-Time-HiRes \
nfdump \
net-snmp-utils \
perl(NetAddr::IP) \
perl(Sys::Syslog) \
perl(DBI) \
perl(XML::Simple) \
perl(IO::Socket::INET6) \
perl(XML::Twig) \
perl-JSON \
expect \
openssh-clients \
java \
bind-utils \
whois \
libnsl \
libxcrypt-compat \
https://firefly.pandorafms.com/pandorafms-el9/perl-Geo-IP-1.51-1.el9.x86_64.rpm \
https://firefly.pandorafms.com/centos8/pandorawmic-1.0.0-1.x86_64.rpm"
execute_cmd "dnf install -y $server_dependencies" "Installing Pandora FMS Server dependencies"
#ipam dependencies
ipam_dependencies=" \
perl(NetAddr::IP) \
perl(Sys::Syslog) \
perl(DBI) \
perl(XML::Simple) \
perl(IO::Socket::INET6) \
perl(XML::Twig)"
execute_cmd "dnf install -y $ipam_dependencies" "Installing IPAM Instant client"
# Disabling SELINUX and firewalld
setenforce 0 &>> "$LOGFILE"
sed -i -e "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config &>> "$LOGFILE"
systemctl disable firewalld --now &>> "$LOGFILE"
# Adding standar cnf for initial setup.
cat > /etc/my.cnf << EO_CONFIG_TMP
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EO_CONFIG_TMP
#Configuring Database
if [ "$SKIP_DATABASE_INSTALL" -eq '0' ] ; then
execute_cmd "systemctl start mysqld" "Starting database engine"
export MYSQL_PWD=$(grep "temporary password" /var/log/mysqld.log | rev | cut -d' ' -f1 | rev)
if [ "$MYVER" -eq '80' ] ; then
echo """
SET PASSWORD FOR '$DBROOTUSER'@'localhost' = 'Pandor4!';
SET PASSWORD FOR '$DBROOTUSER'@'localhost' = '$DBROOTPASS';
""" | mysql --connect-expired-password -u$DBROOTUSER &>> "$LOGFILE"
fi
if [ "$MYVER" -ne '80' ] ; then
echo """
SET PASSWORD FOR '$DBROOTUSER'@'localhost' = PASSWORD('Pandor4!');
SET PASSWORD FOR '$DBROOTUSER'@'localhost' = PASSWORD('$DBROOTPASS');
""" | mysql --connect-expired-password -u$DBROOTUSER &>> "$LOGFILE"fi
fi
export MYSQL_PWD=$DBROOTPASS
echo -en "${cyan}Creating Pandora FMS database...${reset}"
echo "create database $DBNAME" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST
check_cmd_status "Error creating database $DBNAME, is this an empty node? if you have a previus installation please contact with support."
echo "CREATE USER \"$DBUSER\"@'%' IDENTIFIED BY \"$DBPASS\";" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST
echo "ALTER USER \"$DBUSER\"@'%' IDENTIFIED WITH mysql_native_password BY \"$DBPASS\"" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST
echo "GRANT ALL PRIVILEGES ON $DBNAME.* TO \"$DBUSER\"@'%'" | mysql -u$DBROOTUSER -P$DBPORT -h$DBHOST
#Generating my.cnf
cat > /etc/my.cnf << EO_CONFIG_F
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8
skip-character-set-client-handshake
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Mysql optimizations for Pandora FMS
# Please check the documentation in https://pandorafms.com for better results
max_allowed_packet = 64M
innodb_buffer_pool_size = $POOL_SIZE
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 300
thread_cache_size = 8
thread_stack = 256K
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=""
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EO_CONFIG_F
execute_cmd "systemctl restart mysqld" "Configuring database engine"
execute_cmd "systemctl enable mysqld --now" "Enabling Database service"
fi
export MYSQL_PWD=$DBPASS
#Define packages
if [ "$PANDORA_LTS" -eq '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_server-7.0NG.noarch.rpm"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/LTS/pandorafms_console-7.0NG.noarch.rpm"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm"
elif [ "$PANDORA_LTS" -ne '1' ] ; then
[ "$PANDORA_SERVER_PACKAGE" ] || PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_server-7.0NG.x86_64.rpm"
[ "$PANDORA_CONSOLE_PACKAGE" ] || PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_console-7.0NG.x86_64.rpm"
[ "$PANDORA_AGENT_PACKAGE" ] || PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm"
fi
# if beta is enable
if [ "$PANDORA_BETA" -eq '1' ] ; then
PANDORA_SERVER_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_server-latest.x86_64.rpm"
PANDORA_CONSOLE_PACKAGE="https://firefly.pandorafms.com/pandora_enterprise_nightlies/pandorafms_console-latest.x86_64.rpm"
PANDORA_AGENT_PACKAGE="https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_linux_bin-7.0NG.x86_64.rpm"
fi
# Downloading Pandora Packages
execute_cmd "curl -LSs --output pandorafms_server-7.0NG.noarch.rpm ${PANDORA_SERVER_PACKAGE}" "Downloading Pandora FMS Server community"
execute_cmd "curl -LSs --output pandorafms_console-7.0NG.noarch.rpm ${PANDORA_CONSOLE_PACKAGE}" "Downloading Pandora FMS Console community"
execute_cmd "curl -LSs --output pandorafms_agent_linux-7.0NG.noarch.rpm ${PANDORA_AGENT_PACKAGE}" "Downloading Pandora FMS Agent community"
# Install Pandora
execute_cmd "dnf install -y $HOME/pandora_deploy_tmp/pandorafms_console*.rpm $HOME/pandora_deploy_tmp/pandorafms_agent*.rpm" "Installing Pandora FMS packages"
execute_cmd "rpm -i --nodeps $HOME/pandora_deploy_tmp/pandorafms_server-7.0NG.noarch.rpm " "Installing Pandora FMS Server package"
# Enable Services
execute_cmd "systemctl enable httpd --now" "Enabling HTTPD service"
execute_cmd "systemctl enable php-fpm --now" "Enabling PHP-FPM service"
# Populate Database
echo -en "${cyan}Loading pandoradb.sql to $DBNAME database...${reset}"
mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE/pandoradb.sql &>> "$LOGFILE"
check_cmd_status 'Error Loading database schema'
echo -en "${cyan}Loading pandoradb_data.sql to $DBNAME database...${reset}"
mysql -u$DBUSER -P$DBPORT -h$DBHOST $DBNAME < $PANDORA_CONSOLE/pandoradb_data.sql &>> "$LOGFILE"
check_cmd_status 'Error Loading database schema data'
# Configure console
cat > $PANDORA_CONSOLE/include/config.php << EO_CONFIG_F
<?php
\$config["dbtype"] = "mysql";
\$config["dbname"]="$DBNAME";
\$config["dbuser"]="$DBUSER";
\$config["dbpass"]="$DBPASS";
\$config["dbhost"]="$DBHOST";
\$config["homedir"]="$PANDORA_CONSOLE";
\$config["homeurl"]="/pandora_console";
error_reporting(0);
\$ownDir = dirname(__FILE__) . '/';
include (\$ownDir . "config_process.php");
EO_CONFIG_F
cat > /etc/httpd/conf.d/pandora.conf << EO_CONFIG_F
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EO_CONFIG_F
# Temporal quitar htaccess
sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/images/.htaccess
sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/attachment/.htaccess
# Fixing console permissions
chmod 600 $PANDORA_CONSOLE/include/config.php
chown apache. $PANDORA_CONSOLE/include/config.php
mv $PANDORA_CONSOLE/install.php $PANDORA_CONSOLE/install.done &>> "$LOGFILE"
# Prepare php.ini
sed -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini
sed -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini
sed -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini
sed -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini
sed -i -e "s/.*post_max_size =.*/post_max_size = 800M/" /etc/php.ini
#adding 900s to httpd timeout and 300 to ProxyTimeout
echo 'TimeOut 900' > /etc/httpd/conf.d/timeout.conf
echo 'ProxyTimeout 300' >> /etc/httpd/conf.d/timeout.conf
cat > /var/www/html/index.html << EOF_INDEX
<meta HTTP-EQUIV="REFRESH" content="0; url=/pandora_console/">
EOF_INDEX
execute_cmd "systemctl restart httpd" "Restarting httpd after configuration"
execute_cmd "systemctl restart php-fpm" "Restarting php-fpm after configuration"
# prepare snmptrapd
cat > /etc/snmp/snmptrapd.conf << EOF
authCommunity log public
disableAuthorization yes
EOF
# Prepare Server conf
sed -i -e "s/^dbhost.*/dbhost $DBHOST/g" $PANDORA_SERVER_CONF
sed -i -e "s/^dbname.*/dbname $DBNAME/g" $PANDORA_SERVER_CONF
sed -i -e "s/^dbuser.*/dbuser $DBUSER/g" $PANDORA_SERVER_CONF
sed -i -e "s|^dbpass.*|dbpass $DBPASS|g" $PANDORA_SERVER_CONF
sed -i -e "s/^dbport.*/dbport $DBPORT/g" $PANDORA_SERVER_CONF
sed -i -e "s/^#.mssql_driver.*/mssql_driver $MS_ID/g" $PANDORA_SERVER_CONF
#check fping
fping_bin=$(which fping)
execute_cmd "[ $fping_bin ]" "Check fping location: $fping_bin"
if [ "$fping_bin" != "" ]; then
sed -i -e "s|^fping.*|fping $fping_bin|g" $PANDORA_SERVER_CONF
fi
# Enable agent remote config
sed -i "s/^remote_config.*$/remote_config 1/g" $PANDORA_AGENT_CONF
# Kernel optimization
if [ "$SKIP_KERNEL_OPTIMIZATIONS" -eq '0' ] ; then
old_sysctl_file=$(cat /etc/sysctl.conf)
cat >> /etc/sysctl.conf <<EO_KO
# Pandora FMS Optimization
# default=5
net.ipv4.tcp_syn_retries = 3
# default=5
net.ipv4.tcp_synack_retries = 3
# default=1024
net.ipv4.tcp_max_syn_backlog = 65536
# default=124928
net.core.wmem_max = 8388608
# default=131071
net.core.rmem_max = 8388608
# default = 128
net.core.somaxconn = 1024
# default = 20480
net.core.optmem_max = 81920
EO_KO
echo -en "${cyan}Applying Kernel optimization... ${reset}"
sysctl --system &>> $LOGFILE
if [ $? -ne 0 ]; then
echo -e "${red}Fail${reset}"
echo -e "${yellow}Your kernel could not be optimized, you may be running this script in a virtualized environment with no support for accessing the kernel.${reset}"
echo -e "${yellow}This system can be used for testing but is not recommended for a production environment.${reset}"
echo "$old_sysctl_file" > old_sysctl_file
else
echo -e "${green}OK${reset}"
fi
fi
# Fix pandora_server.{log,error} permissions to allow Console check them
chown pandora:apache /var/log/pandora
chmod g+s /var/log/pandora
cat > /etc/logrotate.d/pandora_server <<EO_LR
/var/log/pandora/pandora_server.log
/var/log/pandora/web_socket.log
/var/log/pandora/pandora_server.error {
su root apache
weekly
missingok
size 300000
rotate 3
maxage 90
compress
notifempty
copytruncate
create 660 pandora apache
}
/var/log/pandora/pandora_snmptrap.log {
su root apache
weekly
missingok
size 500000
rotate 1
maxage 30
notifempty
copytruncate
create 660 pandora apache
}
EO_LR
cat > /etc/logrotate.d/pandora_agent <<EO_LRA
/var/log/pandora/pandora_agent.log {
su root apache
weekly
missingok
size 300000
rotate 3
maxage 90
compress
notifempty
copytruncate
}
EO_LRA
chmod 0644 /etc/logrotate.d/pandora_server
chmod 0644 /etc/logrotate.d/pandora_agent
# Enable pandora ha service
systemctl enable pandora_server --now &>> "$LOGFILE"
execute_cmd "/etc/init.d/pandora_server start" "Starting Pandora FMS Server"
# starting tentacle server
systemctl enable tentacle_serverd &>> "$LOGFILE"
execute_cmd "service tentacle_serverd start" "Starting Tentacle Server"
# Enabling console cron
execute_cmd "echo \"* * * * * root wget -q -O - --no-check-certificate --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies http://127.0.0.1/pandora_console/cron.php >> $PANDORA_CONSOLE/log/cron.log\" >> /etc/crontab" "Enabling Pandora FMS Console cron"
echo "* * * * * root wget -q -O - --no-check-certificate --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies http://127.0.0.1/pandora_console/cron.php >> $PANDORA_CONSOLE/log/cron.log" >> /etc/crontab
## Enabling agent
systemctl enable pandora_agent_daemon &>> "$LOGFILE"
execute_cmd "systemctl start pandora_agent_daemon" "Starting Pandora FMS Agent"
# Enable postfix
systemctl enable postfix --now &>> "$LOGFILE"
#SSH banner
[ "$(curl -s ifconfig.me)" ] && ipplublic=$(curl -s ifconfig.me)
cat > /etc/issue.net << EOF_banner
Welcome to Pandora FMS appliance on RHEL/Rocky Linux 8
------------------------------------------
Go to Public http://$ipplublic/pandora_console to login web console
$(ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v "172.17.0.1" | awk '{print $2}' | awk -F '/' '{print "Go to Local http://"$1"/pandora_console to login web console"}')
You can find more information at http://pandorafms.com
EOF_banner
rm -f /etc/issue
ln -s /etc/issue.net /etc/issue
echo 'Banner /etc/issue.net' >> /etc/ssh/sshd_config
# Remove temporary files
execute_cmd "echo done" "Pandora FMS Community installed"
cd
execute_cmd "rm -rf $HOME/pandora_deploy_tmp" "Removing temporary files"
# Print nice finish message
GREEN='\033[01;32m'
NONE='\033[0m'
printf " -> Go to Public ${green}http://"$ipplublic"/pandora_console${reset} to manage this server"
ip addr | grep -w "inet" | grep -v "127.0.0.1" | grep -v -e "172.1[0-9].0.1" | awk '{print $2}' | awk -v g=$GREEN -v n=$NONE -F '/' '{printf "\n -> Go to Local "g"http://"$1"/pandora_console"n" to manage this server \n -> Use these credentials to log in Pandora Console "g"[ User: admin / Password: pandora ]"n" \n"}'

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.776-240325 Version: 7.0NG.776-240326
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

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

View File

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

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin %define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux %define source_name pandorafms_agent_linux
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
%define debug_package %{nil} %define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin %define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux %define source_name pandorafms_agent_linux
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
%define debug_package %{nil} %define debug_package %{nil}
Summary: Pandora FMS Linux agent, binary version Summary: Pandora FMS Linux agent, binary version

View File

@ -5,7 +5,7 @@
%define name pandorafms_agent_linux_bin %define name pandorafms_agent_linux_bin
%define source_name pandorafms_agent_linux %define source_name pandorafms_agent_linux
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
Summary: Pandora FMS Linux agent, binary version Summary: Pandora FMS Linux agent, binary version
Name: %{name} Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_agent_linux %define name pandorafms_agent_linux
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
Summary: Pandora FMS Linux agent, PERL version Summary: Pandora FMS Linux agent, PERL version
Name: %{name} Name: %{name}

View File

@ -10,7 +10,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.776" PI_VERSION="7.0NG.776"
PI_BUILD="240325" PI_BUILD="240326"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{240325} {240326}
ViewReadme ViewReadme
{Yes} {Yes}

View File

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

View File

@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Pandora FMS" VALUE "LegalCopyright", "Pandora FMS"
VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent" VALUE "ProductName", "Pandora FMS Windows Agent"
VALUE "ProductVersion", "(7.0NG.776(Build 240325))" VALUE "ProductVersion", "(7.0NG.776(Build 240326))"
VALUE "FileVersion", "1.0.0.0" VALUE "FileVersion", "1.0.0.0"
END END
END END

View File

@ -1,5 +1,5 @@
package: pandorafms-console package: pandorafms-console
Version: 7.0NG.776-240325 Version: 7.0NG.776-240326
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

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

View File

@ -196,6 +196,15 @@ function pandora_realtime_graphs()
[ [
'class' => 'action-buttons', 'class' => 'action-buttons',
'content' => html_print_submit_button( 'content' => html_print_submit_button(
__('Filter'),
'filterbutton',
false,
[
'icon' => 'search',
'mode' => 'mini',
],
true
).html_print_submit_button(
__('Clear graph'), __('Clear graph'),
'srcbutton', 'srcbutton',
false, false,

View File

@ -160,10 +160,6 @@
return +(Math.round(num + "e+2") + "e-2"); return +(Math.round(num + "e+2") + "e-2");
} }
$("#graph").change(function() {
$("form#realgraph").submit();
});
$("#refresh").change(function() { $("#refresh").change(function() {
refresh = parseInt($("#refresh").val()); refresh = parseInt($("#refresh").val());
resetDataPooling(); resetDataPooling();

View File

@ -1,5 +1,7 @@
START TRANSACTION; START TRANSACTION;
DROP TABLE tskin;
ALTER TABLE `tusuario` ALTER TABLE `tusuario`
ADD COLUMN `stop_lts_modal` TINYINT NOT NULL DEFAULT 0 AFTER `session_max_time_expire`; ADD COLUMN `stop_lts_modal` TINYINT NOT NULL DEFAULT 0 AFTER `session_max_time_expire`;

View File

@ -1514,6 +1514,7 @@ if ($update_module === true || $create_module === true) {
$old_configuration_data = (string) get_parameter('old_configuration_data'); $old_configuration_data = (string) get_parameter('old_configuration_data');
$new_configuration_data = ''; $new_configuration_data = '';
$custom_string_1_default = ''; $custom_string_1_default = '';
$custom_string_2_default = ''; $custom_string_2_default = '';
$custom_string_3_default = ''; $custom_string_3_default = '';
@ -1979,6 +1980,19 @@ if ($update_module) {
} }
} }
$def_msg = __('There was a problem updating module. Processing error');
if (preg_match('/module_type\s+([^\\n]+)/', io_safe_output($configuration_data), $matches)) {
$config_module_type = $matches[1];
$type_id = (int) db_get_value('id_tipo', 'ttipo_modulo', 'nombre', $config_module_type);
if ($type_id !== $id_module_type) {
$def_msg = __('There was a problem updating module: module type cannot be edited');
$result = ERR_GENERIC;
}
}
if (is_error($result) === true) { if (is_error($result) === true) {
switch ($result) { switch ($result) {
case ERR_EXIST: case ERR_EXIST:
@ -1996,7 +2010,7 @@ if ($update_module) {
case ERR_DB: case ERR_DB:
case ERR_GENERIC: case ERR_GENERIC:
default: default:
$msg = __('There was a problem updating module. Processing error'); $msg = $def_msg;
break; break;
} }

View File

@ -318,7 +318,7 @@ $filterTable->data[0][0] = html_print_label_input_block(
$return_all_group, $return_all_group,
'ag_group', 'ag_group',
$ag_group, $ag_group,
'this.form.submit();', '',
'', '',
0, 0,
true, true,
@ -337,7 +337,7 @@ $filterTable->data[0][1] = html_print_label_input_block(
$recursion, $recursion,
true, true,
false, false,
'this.form.submit()' ''
).'</div>' ).'</div>'
); );
@ -347,7 +347,7 @@ $filterTable->data[0][2] = html_print_label_input_block(
$showAgentFields, $showAgentFields,
'disabled', 'disabled',
$disabled, $disabled,
'this.form.submit()', '',
'', '',
0, 0,
true, true,
@ -365,7 +365,7 @@ $filterTable->data[0][3] = html_print_label_input_block(
$fields, $fields,
'os', 'os',
$os, $os,
'this.form.submit()', '',
'All', 'All',
0, 0,
true, true,

View File

@ -58,7 +58,6 @@ if ($id_group > 0) {
$alerts_disabled = $group['disabled']; $alerts_disabled = $group['disabled'];
$custom_id = $group['custom_id']; $custom_id = $group['custom_id'];
$propagate = $group['propagate']; $propagate = $group['propagate'];
$skin = $group['id_skin'];
$contact = $group['contact']; $contact = $group['contact'];
$other = $group['other']; $other = $group['other'];
$description = $group['description']; $description = $group['description'];
@ -80,7 +79,6 @@ if ($id_group > 0) {
$alerts_disabled = 0; $alerts_disabled = 0;
$custom_id = ''; $custom_id = '';
$propagate = 0; $propagate = 0;
$skin = 0;
$contact = ''; $contact = '';
$other = ''; $other = '';
$description = ''; $description = '';

View File

@ -439,7 +439,6 @@ if ($is_management_allowed === true
$group_pass = (string) get_parameter('group_pass'); $group_pass = (string) get_parameter('group_pass');
$alerts_disabled = (bool) get_parameter('alerts_disabled'); $alerts_disabled = (bool) get_parameter('alerts_disabled');
$custom_id = (string) get_parameter('custom_id'); $custom_id = (string) get_parameter('custom_id');
$skin = (string) get_parameter('skin');
$description = (string) get_parameter('description'); $description = (string) get_parameter('description');
$contact = (string) get_parameter('contact'); $contact = (string) get_parameter('contact');
$other = (string) get_parameter('other'); $other = (string) get_parameter('other');
@ -462,7 +461,6 @@ if ($is_management_allowed === true
'parent' => $id_parent, 'parent' => $id_parent,
'disabled' => $alerts_disabled, 'disabled' => $alerts_disabled,
'custom_id' => $custom_id, 'custom_id' => $custom_id,
'id_skin' => $skin,
'description' => $description, 'description' => $description,
'contact' => $contact, 'contact' => $contact,
'propagate' => $propagate, 'propagate' => $propagate,
@ -498,7 +496,6 @@ if ($is_management_allowed === true && $update_group === true) {
$alerts_enabled = (bool) get_parameter('alerts_enabled'); $alerts_enabled = (bool) get_parameter('alerts_enabled');
$custom_id = (string) get_parameter('custom_id'); $custom_id = (string) get_parameter('custom_id');
$propagate = (bool) get_parameter('propagate'); $propagate = (bool) get_parameter('propagate');
$skin = (string) get_parameter('skin');
$description = (string) get_parameter('description'); $description = (string) get_parameter('description');
$contact = (string) get_parameter('contact'); $contact = (string) get_parameter('contact');
$other = (string) get_parameter('other'); $other = (string) get_parameter('other');
@ -530,7 +527,6 @@ if ($is_management_allowed === true && $update_group === true) {
'parent' => ($id_parent == -1) ? 0 : $id_parent, 'parent' => ($id_parent == -1) ? 0 : $id_parent,
'disabled' => !$alerts_enabled, 'disabled' => !$alerts_enabled,
'custom_id' => $custom_id, 'custom_id' => $custom_id,
'id_skin' => $skin,
'description' => $description, 'description' => $description,
'contact' => $contact, 'contact' => $contact,
'propagate' => $propagate, 'propagate' => $propagate,

View File

@ -500,8 +500,6 @@ if ($access_console_node === true) {
$sub['godmode/setup/license']['text'] = __('License'); $sub['godmode/setup/license']['text'] = __('License');
$sub['godmode/setup/license']['id'] = 'license'; $sub['godmode/setup/license']['id'] = 'license';
enterprise_hook('skins_submenu');
enterprise_hook('translate_string_submenu'); enterprise_hook('translate_string_submenu');
$menu_godmode['gsetup']['sub'] = $sub; $menu_godmode['gsetup']['sub'] = $sub;

View File

@ -366,12 +366,12 @@ $filterTable->data[0][] = html_print_label_input_block(
$filterTable->data[0][] = html_print_label_input_block( $filterTable->data[0][] = html_print_label_input_block(
__('Group'), __('Group'),
html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, 'this.form.submit();', '', 0, true, false, true, '', false) html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, '', '', 0, true, false, true, '', false)
); );
$filterTable->data[0][] = html_print_label_input_block( $filterTable->data[0][] = html_print_label_input_block(
__('Group Recursion'), __('Group Recursion'),
html_print_checkbox_switch('recursion', 1, $recursion, true, false, 'this.form.submit()') html_print_checkbox_switch('recursion', 1, $recursion, true, false, '')
); );
if (is_metaconsole() === false) { if (is_metaconsole() === false) {

View File

@ -148,7 +148,6 @@ $table_behaviour->data[$row][] = html_print_label_input_block(
__('Display text when proc modules have state critical'), __('Display text when proc modules have state critical'),
html_print_input_text('render_proc_fail', $config['render_proc_fail'], '', 25, 25, true) html_print_input_text('render_proc_fail', $config['render_proc_fail'], '', 25, 25, true)
); );
$row++;
if (enterprise_installed() === true) { if (enterprise_installed() === true) {
$row++; $row++;
@ -162,6 +161,29 @@ if (enterprise_installed() === true) {
); );
} }
$row++;
// Tabs menus.
$tabs_menu_options = [];
$tabs_menu_options['both'] = __('Show both (tabs and menu)');
$tabs_menu_options['icons'] = __('Show only icons');
$tabs_menu_options['menu'] = __('Show only menu');
$table_behaviour->data[$row][] = html_print_label_input_block(
__('Tabs menu'),
html_print_select(
$tabs_menu_options,
'tabs_menu',
$config['tabs_menu'],
'',
'',
'',
true,
false,
false,
'',
false
)
);
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------

View File

@ -40,8 +40,6 @@ require_once $config['homedir'].'/include/functions_visual_map.php';
require_once $config['homedir'].'/include/functions_custom_fields.php'; require_once $config['homedir'].'/include/functions_custom_fields.php';
enterprise_include_once('include/functions_profile.php'); enterprise_include_once('include/functions_profile.php');
$isFunctionSkins = enterprise_include_once('include/functions_skins.php');
// Add the columns for the enterprise Pandora edition. // Add the columns for the enterprise Pandora edition.
$enterprise_include = false; $enterprise_include = false;
if (ENTERPRISE_NOT_HOOK !== enterprise_include('include/functions_policies.php')) { if (ENTERPRISE_NOT_HOOK !== enterprise_include('include/functions_policies.php')) {
@ -1306,12 +1304,12 @@ if ($new_user) {
if (is_metaconsole() === false) { if (is_metaconsole() === false) {
// User only can change skins if has more than one group. // User only can change skins if has more than one group.
if (function_exists('skins_print_select')) { if (count($usr_groups) > 1) {
if (count($usr_groups) > 1) { if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { $skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>';
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Skin').'</p>'; $skins[DEFAULT_THEME] = __('Default theme');
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>'; $skins[BLACK_THEME] = __('Black theme');
} $skin .= html_print_select($skins, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
} }
} }
} }

View File

@ -720,10 +720,10 @@ if (is_metaconsole() === true) {
$userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1]; $userManagementTable->data['line2_looknfeel'][1] = $outputMetaAccess[1];
} }
} else { } else {
if (function_exists('skins_print_select')) { $userManagementTable->data['line1_looknfeel'][1] = __('User color scheme').$hin_change_theme;
$userManagementTable->data['line1_looknfeel'][1] = __('User color scheme').$hin_change_theme; $skins[DEFAULT_THEME] = __('Default theme');
$userManagementTable->data['line2_looknfeel'][1] = skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true); $skins[BLACK_THEME] = __('Black theme');
} $userManagementTable->data['line2_looknfeel'][1] = html_print_select($skins, 'skin', $user_info['id_skin'], '', __('None'), 0, true);
} }
$performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control'])); $performance_variables_control = (array) json_decode(io_safe_output($config['performance_variables_control']));

View File

@ -124,6 +124,14 @@ class DiscoveryTaskList extends HTML
$this->printHeader(true) $this->printHeader(true)
); );
// Div neccesary for modal map task.
echo '<div id="map_task" class="invisible"></div>';
echo '<div id="task_review" class="invisible"></div>';
echo '<div id="msg" class="invisible"></div>';
echo '<input type="hidden" id="ajax-url" value="'.ui_get_full_url('ajax.php').'"/>';
echo '<input type="hidden" id="success-str" value="'.__('Success').'"/>';
echo '<input type="hidden" id="failed-str" value="'.__('Failed').'"/>';
// Show redirected messages from discovery.php. // Show redirected messages from discovery.php.
if ($status === 0) { if ($status === 0) {
ui_print_success_message($message); ui_print_success_message($message);
@ -1145,14 +1153,6 @@ class DiscoveryTaskList extends HTML
ui_toggle($content, $titleTable, '', '', false); ui_toggle($content, $titleTable, '', '', false);
// Div neccesary for modal map task.
echo '<div id="map_task" class="invisible"></div>';
echo '<div id="task_review" class="invisible"></div>';
echo '<div id="msg" class="invisible"></div>';
echo '<input type="hidden" id="ajax-url" value="'.ui_get_full_url('ajax.php').'"/>';
echo '<input type="hidden" id="success-str" value="'.__('Success').'"/>';
echo '<input type="hidden" id="failed-str" value="'.__('Failed').'"/>';
unset($table); unset($table);
ui_require_javascript_file('pandora_ui'); ui_require_javascript_file('pandora_ui');

View File

@ -166,7 +166,18 @@ if ($delete_event === true) {
return; return;
} }
$name = events_get_description($id_evento);
$r = events_delete($id_evento, $filter, false, true); $r = events_delete($id_evento, $filter, false, true);
db_pandora_audit(
AUDIT_LOG_EVENT,
sprintf(
'ID event %s deleted by %s - %s',
$id_evento,
$config['id_user'],
$name
),
$config['id_user']
);
} catch (\Exception $e) { } catch (\Exception $e) {
// Unexistent agent. // Unexistent agent.
if (is_metaconsole() === true if (is_metaconsole() === true
@ -224,6 +235,19 @@ if ($validate_event === true) {
EVENT_VALIDATE, EVENT_VALIDATE,
$filter $filter
); );
$name = events_get_description($id_evento);
db_pandora_audit(
AUDIT_LOG_EVENT,
sprintf(
'ID event %s validated by %s - %s',
$id_evento,
$config['id_user'],
$name
),
$config['id_user']
);
} catch (\Exception $e) { } catch (\Exception $e) {
// Unexistent agent. // Unexistent agent.
if (is_metaconsole() === true if (is_metaconsole() === true

View File

@ -780,7 +780,7 @@ class AgentsAlerts extends HTML
'nothing' => false, 'nothing' => false,
'selected' => $this->groupId, 'selected' => $this->groupId,
'return' => true, 'return' => true,
'script' => 'this.form.submit()', 'script' => '',
'size' => '100%', 'size' => '100%',
], ],
]; ];

View File

@ -22,7 +22,7 @@ use DI\ContainerBuilder;
/* /*
* Pandora build version and version * Pandora build version and version
*/ */
$build_version = 'PC240325'; $build_version = 'PC240326';
$pandora_version = 'v7.0NG.776'; $pandora_version = 'v7.0NG.776';
// Do not overwrite default timezone set if defined. // Do not overwrite default timezone set if defined.

View File

@ -300,6 +300,10 @@ define('HEADER_LOGO_DEFAULT_COLLAPSED', 'logo-default-pandorafms-collapsed.png')
define('HEADER_LOGO_BLACK_CLASSIC', 'logo-black-pandorafms.png'); define('HEADER_LOGO_BLACK_CLASSIC', 'logo-black-pandorafms.png');
define('HEADER_LOGO_BLACK_COLLAPSED', 'logo-default-pandorafms-collapsed.png'); define('HEADER_LOGO_BLACK_COLLAPSED', 'logo-default-pandorafms-collapsed.png');
// Pandora Themes.
define('DEFAULT_THEME', 1);
define('BLACK_THEME', 2);
// Status images. // Status images.
// For modules. // For modules.
define('STATUS_MODULE_OK', 'module_ok.png'); define('STATUS_MODULE_OK', 'module_ok.png');

View File

@ -13489,6 +13489,19 @@ function api_set_validate_event_by_id($id, $trash1=null, $trash2=null, $returnTy
'estado' => 1, 'estado' => 1,
]; ];
$name = events_get_description($id);
db_pandora_audit(
AUDIT_LOG_EVENT,
sprintf(
'ID event %s validated by %s - %s',
$id,
$config['id_user'],
$name
),
$config['id_user']
);
$result = db_process_sql_update('tevento', $values, ['id_evento' => $id]); $result = db_process_sql_update('tevento', $values, ['id_evento' => $id]);
if ($result === false) { if ($result === false) {

View File

@ -1443,6 +1443,10 @@ function config_update_config()
); );
} }
if (config_update_value('tabs_menu', get_parameter('tabs_menu', 'both'), true) === false) {
$error_update[] = __('Tabs menu');
}
// -------------------------------------------------- // --------------------------------------------------
// CUSTOM VALUES POST PROCESS // CUSTOM VALUES POST PROCESS
// -------------------------------------------------- // --------------------------------------------------
@ -3944,6 +3948,10 @@ function config_process_config()
config_update_value('control_session_timeout', 'check_activity'); config_update_value('control_session_timeout', 'check_activity');
} }
if (isset($config['tabs_menu']) === false) {
config_update_value('tabs_menu', 'both');
}
// Finally, check if any value was overwritten in a form. // Finally, check if any value was overwritten in a form.
config_update_config(); config_update_config();
} }

View File

@ -64,8 +64,6 @@ function menu_print_menu(&$menu)
$sec2 = 'godmode/alerts/alert_actions'; $sec2 = 'godmode/alerts/alert_actions';
} else if ($sec2 === 'godmode/alerts/configure_alert_command') { } else if ($sec2 === 'godmode/alerts/configure_alert_command') {
$sec2 = 'godmode/alerts/alert_commands'; $sec2 = 'godmode/alerts/alert_commands';
} else if ($sec2 === 'enterprise/godmode/setup/edit_skin') {
$sec2 = 'enterprise/godmode/setup/setup_skins';
} else if ($sec2 === 'operation/agentes/networkmap.dinamic') { } else if ($sec2 === 'operation/agentes/networkmap.dinamic') {
$sec2 = 'operation/agentes/pandora_networkmap'; $sec2 = 'operation/agentes/pandora_networkmap';
} else if ($sec2 === 'godmode/gis_maps/configure_gis_map') { } else if ($sec2 === 'godmode/gis_maps/configure_gis_map') {

View File

@ -47,6 +47,10 @@ function themes_get_css($path=false)
continue; continue;
} }
if ($file === 'pandoraitsm.css') {
continue;
}
// Skip '..' and '.' entries and files not ended in '.css'. // Skip '..' and '.' entries and files not ended in '.css'.
if ($path && ($file == '.' || $file == '..' || strtolower(substr($file, (strlen($file) - 4))) !== '.css')) { if ($path && ($file == '.' || $file == '..' || strtolower(substr($file, (strlen($file) - 4))) !== '.css')) {
continue; continue;

View File

@ -5419,6 +5419,18 @@ function ui_print_page_header(
if (is_array($options)) { if (is_array($options)) {
$buffer .= '<div id="menu_tab"><ul class="mn">'; $buffer .= '<div id="menu_tab"><ul class="mn">';
$menu_dots_class = 'menu-dots-hide';
if (isset($dots) === true && $dots !== '' && $config['tabs_menu'] !== 'icons') {
$menu_dots_class = 'menu-dots-show';
}
if (isset($dots) === true && $dots !== '') {
$buffer .= '<li class="nomn menu-dots-li '.$menu_dots_class.'">';
$buffer .= '<div id="menu_dots">'.$dots.'</div>';
$buffer .= '</li>';
}
foreach ($options as $key => $option) { foreach ($options as $key => $option) {
if (empty($option)) { if (empty($option)) {
continue; continue;
@ -5428,6 +5440,13 @@ function ui_print_page_header(
// $buffer .= '</li>'; // $buffer .= '</li>';
} else { } else {
if (is_array($option)) { if (is_array($option)) {
if ($config['tabs_menu'] === 'menu' && (isset($dots) === true && $dots !== '')) {
$tabs_class = 'tabs-hide';
if (isset($option['active']) === true && (bool) $option['active'] === true) {
$tabs_class = 'tabs-show';
}
}
$class = 'nomn'; $class = 'nomn';
if (isset($option['active'])) { if (isset($option['active'])) {
if ($option['active']) { if ($option['active']) {
@ -5444,7 +5463,7 @@ function ui_print_page_header(
$class .= ($godmode) ? ' tab_godmode' : ' tab_operation'; $class .= ($godmode) ? ' tab_godmode' : ' tab_operation';
} }
$buffer .= '<li class="'.$class.' ">'; $buffer .= '<li class="'.$class.' '.$tabs_class.'">';
$buffer .= $option['text']; $buffer .= $option['text'];
if (isset($option['sub_menu'])) { if (isset($option['sub_menu'])) {
$buffer .= $option['sub_menu']; $buffer .= $option['sub_menu'];
@ -5460,11 +5479,19 @@ function ui_print_page_header(
} }
$buffer .= '</ul>'; $buffer .= '</ul>';
if (isset($dots) === true) {
$buffer .= '<div id="menu_dots">'.$dots.'</div>';
}
$buffer .= '</div>'; $buffer .= '</div>';
if (is_metaconsole() === false) {
$buffer .= '
<script>
menuTabsShowHide();
$(window).on("resize", function() {
menuTabsShowHide();
});
</script>
';
}
} else { } else {
if ($options != '') { if ($options != '') {
$buffer .= '<div id="menu_tab"><ul class="mn"><li>'; $buffer .= '<div id="menu_tab"><ul class="mn"><li>';

View File

@ -2705,3 +2705,34 @@ function show_email_test(id) {
} }
}); });
} }
function menuTabsShowHide() {
const dotsLi = $(".menu-dots-li");
if (dotsLi.length) {
const tabsLi = $("#menu_tab .nomn:not(.menu-dots-li)");
const menuTabWidth = $("#menu_tab_frame_view").width();
const menuTabLeftWidth = $(".menu_tab_left_bc").width();
const menuTabsRightCount = $("#menu_tab > ul.mn > li").length * 46;
const margins = 50;
const menuTabFree = menuTabWidth - (menuTabLeftWidth + margins);
if (menuTabFree >= menuTabsRightCount) {
// Big.
if ($(dotsLi).hasClass("menu-dots-show") === true) {
if ($(tabsLi).hasClass("tabs-hide") === false) {
$(tabsLi).show();
}
} else {
$(dotsLi).hide();
if ($(tabsLi).hasClass("tabs-hide") === false) {
$(tabsLi).show();
}
}
} else {
// Small.
$(dotsLi).show();
$(tabsLi).hide();
}
}
}

View File

@ -2416,10 +2416,10 @@ class Item extends CachedModel
foreach ($fields as $k => $v) { foreach ($fields as $k => $v) {
if (isset($v['id']) === true && isset($v['name']) === true) { if (isset($v['id']) === true && isset($v['name']) === true) {
// Modern environments use id-name format. // Modern environments use id-name format.
$rs[$v['id']] = $v; $rs[$v['id']] = io_safe_output($v);
} else { } else {
// In MC environments is key-value. // In MC environments is key-value.
$rs[$k] = $v; $rs[$k] = io_safe_output($v);
} }
} }

View File

@ -1998,6 +1998,7 @@ div.title_line {
justify-content: space-between; justify-content: space-between;
overflow: hidden; overflow: hidden;
margin-left: 20px; margin-left: 20px;
min-width: fit-content;
} }
.breadcrumbs_container { .breadcrumbs_container {
@ -2037,6 +2038,11 @@ div.title_line {
margin: 0px 0px 0px 0px; margin: 0px 0px 0px 0px;
} }
#menu_tab > ul.mn {
display: inline-flex;
flex-direction: row-reverse;
}
#menu_tab .mn li { #menu_tab .mn li {
float: right; float: right;
position: relative; position: relative;
@ -4052,7 +4058,7 @@ div.div_groups_status {
min-height: 53px; min-height: 53px;
} }
#menu_tab li:hover { #menu_tab li:hover:not(.menu-dots-li) {
box-shadow: inset 0px 4px var(--primary-color); box-shadow: inset 0px 4px var(--primary-color);
} }
@ -13744,6 +13750,12 @@ button.disabled {
} }
/* Dot tab */ /* Dot tab */
#menu_tab li.nomn.menu-dots-li:hover a {
color: var(--text-color);
padding: 5px 15px;
text-align: left;
}
#menu_dots { #menu_dots {
margin-left: 10px; margin-left: 10px;
} }
@ -13780,6 +13792,7 @@ button.disabled {
top: 20px; top: 20px;
right: -20px; right: -20px;
padding: 0px 10px 10px 10px; padding: 0px 10px 10px 10px;
text-align: left;
} }
.dot-tab-menu { .dot-tab-menu {
@ -13790,7 +13803,10 @@ button.disabled {
min-height: 20px; min-height: 20px;
box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.13); box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.13);
padding: 10px 0px; padding: 10px 0px;
z-index: 1;
position: relative;
display: none; display: none;
text-align: left;
} }
.dot-tab:hover .dot-tab-menu { .dot-tab:hover .dot-tab-menu {
@ -13803,6 +13819,7 @@ button.disabled {
padding: 5px 15px; padding: 5px 15px;
display: block; display: block;
white-space: nowrap; white-space: nowrap;
text-align: left;
} }
.dot-tab-menu a:hover { .dot-tab-menu a:hover {
@ -13811,6 +13828,11 @@ button.disabled {
text-decoration: none; text-decoration: none;
} }
.dot-tab-menu .dot-tab-link {
max-height: calc(100vh - (60px + 49px + 65px + 15px));
overflow-y: auto;
}
.dot-tab-menu .dot-tab-link > a { .dot-tab-menu .dot-tab-link > a {
font-weight: 900; font-weight: 900;
color: black; color: black;
@ -13821,3 +13843,19 @@ button.disabled {
margin-top: 10px; margin-top: 10px;
padding-top: 15px; padding-top: 15px;
} }
.menu-dots-hide {
display: none;
}
.menu-dots-show {
display: list-item;
}
.tabs-hide {
display: none;
}
.tabs-show {
display: list-item;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

@ -333,7 +333,7 @@ $table->data['group'][0] = html_print_label_input_block(
true, true,
'group_id', 'group_id',
$group_id, $group_id,
'this.form.submit()', '',
'', '',
'', '',
true, true,
@ -361,7 +361,7 @@ $table->data['group'][1] = html_print_label_input_block(
$fields, $fields,
'status', 'status',
$status, $status,
'this.form.submit()', '',
__('All'), __('All'),
AGENT_STATUS_ALL, AGENT_STATUS_ALL,
true, true,
@ -436,7 +436,7 @@ $table->data[2][1] = html_print_label_input_block(
$fields, $fields,
'policies', 'policies',
$policies, $policies,
'this.form.submit()', '',
__('All'), __('All'),
0, 0,
true, true,

View File

@ -516,11 +516,11 @@ $skin = '';
$home_screen .= html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true, false); $home_screen .= html_print_input_text('data_section', $user_info['data_section'], '', 60, 255, true, false);
// User only can change skins if has more than one group. // User only can change skins if has more than one group.
if (function_exists('skins_print_select')) { if (count($usr_groups) > 1) {
if (count($usr_groups) > 1) { $skin = '<div class="label_select"><p class="edit_user_labels">'.__('Theme').': </p>';
$skin = '<div class="label_select"><p class="edit_user_labels">'.__('Theme').': </p>'; $skins[DEFAULT_THEME] = __('Default theme');
$skin .= skins_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>'; $skins[BLACK_THEME] = __('Black theme');
} $skin .= html_print_select($id_usr, 'skin', $user_info['id_skin'], '', __('None'), 0, true).'</div>';
} }

View File

@ -6,7 +6,7 @@
%define debug_package %{nil} %define debug_package %{nil}
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name httpd %define httpd_name httpd

View File

@ -6,7 +6,7 @@
%define debug_package %{nil} %define debug_package %{nil}
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
# User and Group under which Apache is running # User and Group under which Apache is running
%define httpd_name httpd %define httpd_name httpd

View File

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

View File

@ -2992,18 +2992,6 @@ CREATE TABLE IF NOT EXISTS `tsesion_extended` (
KEY idx_session (id_sesion) KEY idx_session (id_sesion)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4; ) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- -----------------------------------------------------
-- Table `tskin`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `tskin` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` TEXT ,
`relative_path` TEXT ,
`description` TEXT ,
`disabled` TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
-- Table `tpolicy_queue` -- Table `tpolicy_queue`
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------

View File

@ -1221,12 +1221,6 @@ INSERT INTO `tevent_response` VALUES (1,'Ping&#x20;to&#x20;host','Ping&#x20;to&#
INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', ''); INSERT INTO `tupdate_settings` VALUES ('current_update', '412'), ('customer_key', 'PANDORA-FREE'), ('updating_binary_path', 'Path where the updated binary files will be stored'), ('updating_code_path', 'Path where the updated code is stored'), ('dbname', ''), ('dbhost', ''), ('dbpass', ''), ('dbuser', ''), ('dbport', ''), ('proxy', ''), ('proxy_port', ''), ('proxy_user', ''), ('proxy_pass', '');
--
-- Dumping data for table `tskin`
--
INSERT INTO `tskin` VALUES (1,'Default&#x20;theme', 'pandora.css', 'Default&#x20;skin&#x20;for&#x20;Pandora&#x20;FMS&#x20;web&#x20;console', 0);
INSERT INTO `tskin` VALUES (2,'Black&#x20;theme', 'pandora_black.css', 'Black&#x20;theme', 0);
-- --
-- Dumping data for table `tcollection` -- Dumping data for table `tcollection`
-- --

View File

@ -1,5 +1,5 @@
package: pandorafms-server package: pandorafms-server
Version: 7.0NG.776-240325 Version: 7.0NG.776-240326
Architecture: all Architecture: all
Priority: optional Priority: optional
Section: admin Section: admin

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@
%define debug_package %{nil} %define debug_package %{nil}
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

@ -4,7 +4,7 @@
%global __os_install_post %{nil} %global __os_install_post %{nil}
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.776 %define version 7.0NG.776
%define release 240325 %define release 240326
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}

View File

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

View File

@ -38,7 +38,7 @@ use PandoraFMS::Config;
use PandoraFMS::DB; use PandoraFMS::DB;
# version: define current version # version: define current version
my $version = "7.0NG.776 Build 240325"; my $version = "7.0NG.776 Build 240326";
# Pandora server configuration # Pandora server configuration
my %conf; my %conf;

View File

@ -36,7 +36,7 @@ use Encode::Locale;
Encode::Locale::decode_argv; Encode::Locale::decode_argv;
# version: define current version # version: define current version
my $version = "7.0NG.776 Build 240325"; my $version = "7.0NG.776 Build 240326";
# save program name for logging # save program name for logging
my $progname = basename($0); my $progname = basename($0);
@ -1228,11 +1228,11 @@ sub param_error ($$) {
} }
############################################################################### ###############################################################################
# Print a 'not exists' error and exit the program. # Print a 'does not exist' error and exit the program.
############################################################################### ###############################################################################
sub notexists_error ($$) { sub notexists_error ($$) {
print (STDERR "[ERROR] Error: The $_[0] '$_[1]' not exists.\n\n"); print (STDERR "[ERROR] Error: The $_[0] '$_[1]' does not exist.\n\n");
logger( $conf, "($progname) [ERROR] Error: The $_[0] '$_[1]' not exists.", 10); logger( $conf, "($progname) [ERROR] Error: The $_[0] '$_[1]' does not exist.", 10);
exit 1; exit 1;
} }
@ -3459,6 +3459,10 @@ sub cli_agent_update() {
$new_value = $id_parent; $new_value = $id_parent;
} }
elsif($field eq 'agent_name') { elsif($field eq 'agent_name') {
if (!$new_value) {
print_log "[ERROR] Agent name cannot be empty\n\n";
exit;
}
my $agent_exists = get_agent_id($dbh,$new_value); my $agent_exists = get_agent_id($dbh,$new_value);
non_exist_check($agent_exists,'agent',$new_value); non_exist_check($agent_exists,'agent',$new_value);
$field = 'nombre'; $field = 'nombre';
@ -4104,7 +4108,7 @@ sub cli_exec_from_file() {
elsif($c == 3) { elsif($c == 3) {
$file = $opt; $file = $opt;
if(!(-e $file)) { if(!(-e $file)) {
print_log "[ERROR] File '$file' not exists or cannot be opened\n\n"; print_log "[ERROR] File '$file' does not exist or cannot be opened\n\n";
exit; exit;
} }
} }
@ -4952,7 +4956,7 @@ sub cli_validate_alert() {
if (defined $use_alias and $use_alias eq 'use_alias') { if (defined $use_alias and $use_alias eq 'use_alias') {
my @id_agents = get_agent_ids_from_alias($dbh,$agent_id); my @id_agents = get_agent_ids_from_alias($dbh,$agent_id);
if(!@id_agents) { if(!@id_agents) {
print (STDERR "[ERROR] Error: The agent '$agent_id' not exists.\n\n"); print (STDERR "[ERROR] Error: The agent '$agent_id' does not exist.\n\n");
} }
foreach my $id (@id_agents) { foreach my $id (@id_agents) {
@ -5946,7 +5950,7 @@ sub cli_get_bad_conf_files() {
$missings++; $missings++;
} }
elsif ($result == -1) { elsif ($result == -1) {
print_log "[WARN] File not exists /conf/".$file."\n\n"; print_log "[WARN] File does not exist /conf/".$file."\n\n";
$bad_files++; $bad_files++;
last; last;
} }

View File

@ -798,6 +798,33 @@ abstract class VisualConsoleItem<Props extends ItemProps> {
return prevProps !== newProps; return prevProps !== newProps;
} }
/**
* Compare object.
* @param previousObject Object 1.
* @param currentObject Object 2.
* @return Returns true if these are equal.
*/
public compareObjects(
previousObject: Record<string, any>,
currentObject: Record<string, any>
): boolean {
for (let key in previousObject) {
if (key === "ratio") {
continue;
}
if (currentObject.hasOwnProperty(key)) {
if (previousObject[key] !== currentObject[key]) {
return true;
}
} else {
return true;
}
}
return false;
}
/** /**
* To recreate or update the HTMLElement which represents the item into the DOM. * To recreate or update the HTMLElement which represents the item into the DOM.
* @param prevProps If exists it will be used to only perform DOM updates instead of a full replace. * @param prevProps If exists it will be used to only perform DOM updates instead of a full replace.
@ -816,13 +843,11 @@ abstract class VisualConsoleItem<Props extends ItemProps> {
this.elementRef.style.minHeight = "max-content"; this.elementRef.style.minHeight = "max-content";
} }
if ( if (this.compareObjects(prevProps, this.props) === true) {
prevProps.type == ItemType.LINE_ITEM ||
prevProps.type == ItemType.NETWORK_LINK
) {
this.updateDomElement(this.childElementRef); this.updateDomElement(this.childElementRef);
} }
} }
// Move box. // Move box.
if (!prevProps || this.positionChanged(prevProps, this.props)) { if (!prevProps || this.positionChanged(prevProps, this.props)) {
this.moveElement(this.props.x, this.props.y); this.moveElement(this.props.x, this.props.y);