mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-29 16:55:05 +02:00
Merge remote-tracking branch 'origin/develop' into ent-7074-Command-Center
Conflicts: pandora_console/extras/mr/48.sql
This commit is contained in:
commit
f52d389327
613
extras/deploy-scripts/pandora_deploy_community_el8.sh
Normal file
613
extras/deploy-scripts/pandora_deploy_community_el8.sh
Normal file
@ -0,0 +1,613 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# define variables
|
||||||
|
PANDORA_CONSOLE=/var/www/html/pandora_console
|
||||||
|
CONSOLE_PATH=/var/www/html/pandora_console
|
||||||
|
PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf
|
||||||
|
DBHOST=127.0.0.1
|
||||||
|
DBNAME=pandora
|
||||||
|
DBUSER=pandora
|
||||||
|
DBPASS=pandora
|
||||||
|
DBPORT=3306
|
||||||
|
S_VERSION='2021070101'
|
||||||
|
LOGFILE="/tmp/pandora-deploy-community-$(date +%F).log"
|
||||||
|
|
||||||
|
# Ansi color code variables
|
||||||
|
red="\e[0;91m"
|
||||||
|
green="\e[0;92m"
|
||||||
|
cyan="\e[0;36m"
|
||||||
|
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 () {
|
||||||
|
export MYSQL_PWD=$DBPASS
|
||||||
|
|
||||||
|
echo -en "${cyan}Checking environment ... ${reset}"
|
||||||
|
rpm -qa | grep pandora &>> /dev/null && local fail=true
|
||||||
|
[ -d "$CONSOLE_PATH" ] && local fail=true
|
||||||
|
[ -f /usr/bin/pandora_server ] && local fail=true
|
||||||
|
echo "use $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST &>> /dev/null && local fail=true
|
||||||
|
|
||||||
|
[ ! $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 8.8.8.8" "Checking internet connection"
|
||||||
|
execute_cmd "ping -c 2 firefly.artica.es" "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 PandoraFMS"
|
||||||
|
echo "Error installing Pandora FMS for detailed error please check log: $LOGFILE"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
else
|
||||||
|
echo -e "${green}OK${reset}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Main
|
||||||
|
echo "Starting PandoraFMS Community deployment EL8 ver. $S_VERSION"
|
||||||
|
|
||||||
|
# Centos Version
|
||||||
|
if [ ! "$(grep -Ei 'centos|rocky' /etc/redhat-release)" ]; then
|
||||||
|
printf "\n ${red}Error this is not a Centos/Rocky Base system, this installer is compatible with Centos/Rocky 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 '8' ]
|
||||||
|
check_cmd_status 'Error OS version, Centos/Rocky 8+ is expected'
|
||||||
|
|
||||||
|
# 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
|
||||||
|
check_pre_pandora
|
||||||
|
|
||||||
|
# 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)'
|
||||||
|
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
|
||||||
|
#Installing wget
|
||||||
|
execute_cmd "dnf install -y wget" "Installing wget"
|
||||||
|
|
||||||
|
#Installing extra repositiries
|
||||||
|
extra_repos=" \
|
||||||
|
tar \
|
||||||
|
dnf-utils \
|
||||||
|
epel-release \
|
||||||
|
http://rpms.remirepo.net/enterprise/remi-release-8.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 --set-enabled powertools" "Configuring Powertools"
|
||||||
|
execute_cmd "dnf module reset -y php " "Disabling standard PHP module"
|
||||||
|
execute_cmd "dnf module install -y php:remi-7.3" "Configuring PHP"
|
||||||
|
|
||||||
|
# Install percona Database
|
||||||
|
execute_cmd "dnf module disable -y mysql" "Disabiling mysql module"
|
||||||
|
rm -rf /etc/my.cnf
|
||||||
|
execute_cmd "dnf install -y Percona-Server-server-57" "Installing Percona Server"
|
||||||
|
|
||||||
|
# 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 \
|
||||||
|
libcroco \
|
||||||
|
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 \
|
||||||
|
http://firefly.artica.es/centos8/perl-Net-Telnet-3.04-1.el8.noarch.rpm \
|
||||||
|
http://firefly.artica.es/centos7/wmic-1.4-1.el7.x86_64.rpm \
|
||||||
|
http://firefly.artica.es/centos8/phantomjs-2.1.1-1.el7.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(Geo::IP) \
|
||||||
|
perl(IO::Socket::INET6) \
|
||||||
|
perl(XML::Twig) \
|
||||||
|
expect \
|
||||||
|
openssh-clients \
|
||||||
|
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"
|
||||||
|
execute_cmd "dnf install -y $server_dependencies" "Installing Pandora FMS Server dependencies"
|
||||||
|
|
||||||
|
# SDK VMware perl dependencies
|
||||||
|
vmware_dependencies=" \
|
||||||
|
perl-Net-HTTP \
|
||||||
|
perl-libwww-perl \
|
||||||
|
openssl-devel \
|
||||||
|
perl-Crypt-CBC \
|
||||||
|
perl-Bytes-Random-Secure \
|
||||||
|
perl-Crypt-Random-Seed \
|
||||||
|
perl-Math-Random-ISAAC \
|
||||||
|
perl-JSON \
|
||||||
|
http://firefly.artica.es/centos8/perl-Crypt-OpenSSL-AES-0.02-1.el8.x86_64.rpm \
|
||||||
|
http://mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/perl-Crypt-SSLeay-0.73_07-1.gf.el8.x86_64.rpm \
|
||||||
|
http://firefly.artica.es/centos8/VMware-vSphere-Perl-SDK-6.5.0-4566394.x86_64.rpm"
|
||||||
|
execute_cmd "dnf install -y $vmware_dependencies" "Installing SDK VMware perl dependencies"
|
||||||
|
|
||||||
|
# Instant client Oracle
|
||||||
|
oracle_dependencies=" \
|
||||||
|
https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm \
|
||||||
|
https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-sqlplus-19.8.0.0.0-1.x86_64.rpm"
|
||||||
|
execute_cmd "dnf install -y $oracle_dependencies" "Installing Oracle Instant client"
|
||||||
|
|
||||||
|
ipam_dependencies=" \
|
||||||
|
http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm \
|
||||||
|
perl(NetAddr::IP) \
|
||||||
|
perl(Sys::Syslog) \
|
||||||
|
perl(DBI) \
|
||||||
|
perl(XML::Simple) \
|
||||||
|
perl(Geo::IP) \
|
||||||
|
perl(IO::Socket::INET6) \
|
||||||
|
perl(XML::Twig)"
|
||||||
|
execute_cmd "dnf install -y $ipam_dependencies" "Installing Oracle 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"
|
||||||
|
|
||||||
|
|
||||||
|
#Configuring Database
|
||||||
|
execute_cmd "systemctl start mysqld" "Starting database engine"
|
||||||
|
export MYSQL_PWD=$(grep "temporary password" /var/log/mysqld.log | rev | cut -d' ' -f1 | rev)
|
||||||
|
echo """
|
||||||
|
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Pandor4!');
|
||||||
|
UNINSTALL PLUGIN validate_password;
|
||||||
|
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('pandora');
|
||||||
|
""" | mysql --connect-expired-password -uroot
|
||||||
|
|
||||||
|
export MYSQL_PWD=$DBPASS
|
||||||
|
echo -en "${cyan}Creating Pandora FMS database...${reset}"
|
||||||
|
echo "create database $DBNAME" | mysql -uroot -P$DBPORT -h$DBHOST
|
||||||
|
check_cmd_status 'Error creating database pandora, is this an empty node? if you have a previus installation please contact with support.'
|
||||||
|
|
||||||
|
echo "GRANT ALL PRIVILEGES ON $DBNAME.* TO \"$DBUSER\"@'%' identified by \"$DBPASS\"" | mysql -uroot -P$DBPORT -h$DBHOST
|
||||||
|
|
||||||
|
#Generating my.cnf
|
||||||
|
POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{printf "%.2f \n", $(NF-1)*0.4/1024}' | sed "s/\\..*$/M/g")
|
||||||
|
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 http://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 = 100
|
||||||
|
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
|
||||||
|
|
||||||
|
query_cache_type = 1
|
||||||
|
query_cache_size = 64M
|
||||||
|
query_cache_min_res_unit = 2k
|
||||||
|
query_cache_limit = 256K
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
# Downloading Pandora Packages
|
||||||
|
execute_cmd "wget http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_server-7.0NG.noarch.rpm" "Downloading Pandora FMS Server community"
|
||||||
|
execute_cmd "wget http://firefly.artica.es/pandorafms/latest/RHEL_CentOS/pandorafms_console-7.0NG.noarch.rpm" "Downloading Pandora FMS Console community"
|
||||||
|
execute_cmd "wget http://firefly.artica.es/centos7/pandorafms_agent_unix-7.0NG.751_x86_64.rpm" "Downloading Pandora FMS Agent community"
|
||||||
|
|
||||||
|
# Install Pandora
|
||||||
|
execute_cmd "dnf install -y $HOME/pandora_deploy_tmp/pandorafms*.rpm" "installing PandoraFMS packages"
|
||||||
|
|
||||||
|
# Copy gotty utility
|
||||||
|
execute_cmd "wget https://github.com/yudai/gotty/releases/download/v1.0.1/gotty_linux_amd64.tar.gz" 'Dowloading gotty util'
|
||||||
|
tar xvzf gotty_linux_amd64.tar.gz &>> $LOGFILE
|
||||||
|
execute_cmd "mv gotty /usr/bin/" 'Installing gotty util'
|
||||||
|
|
||||||
|
# Enable Services
|
||||||
|
execute_cmd "systemctl enable mysqld --now" "Enabling Database service"
|
||||||
|
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 > $CONSOLE_PATH/include/config.php << EO_CONFIG_F
|
||||||
|
<?php
|
||||||
|
\$config["dbtype"] = "mysql";
|
||||||
|
\$config["dbname"]="$DBNAME";
|
||||||
|
\$config["dbuser"]="$DBUSER";
|
||||||
|
\$config["dbpass"]="$DBPASS";
|
||||||
|
\$config["dbhost"]="localhost";
|
||||||
|
\$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
|
||||||
|
|
||||||
|
# Add ws proxy options to apache.
|
||||||
|
cat >> /etc/httpd/conf.modules.d/00-proxy.conf << 'EO_HTTPD_MOD'
|
||||||
|
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
|
||||||
|
|
||||||
|
EO_HTTPD_MOD
|
||||||
|
|
||||||
|
cat >> /etc/httpd/conf.d/wstunnel.conf << 'EO_HTTPD_WSTUNNEL'
|
||||||
|
ProxyRequests Off
|
||||||
|
<Proxy *>
|
||||||
|
Require all granted
|
||||||
|
</Proxy>
|
||||||
|
|
||||||
|
ProxyPass /ws ws://127.0.0.1:8080
|
||||||
|
ProxyPassReverse /ws ws://127.0.0.1:8080
|
||||||
|
|
||||||
|
EO_HTTPD_WSTUNNEL
|
||||||
|
|
||||||
|
# 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 $CONSOLE_PATH/include/config.php
|
||||||
|
chown apache. $CONSOLE_PATH/include/config.php
|
||||||
|
mv $CONSOLE_PATH/install.php $CONSOLE_PATH/install.done
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# Set Oracle environment for pandora_server
|
||||||
|
cat > /etc/pandora/pandora_server.env << 'EOF_ENV'
|
||||||
|
#!/bin/bash
|
||||||
|
VERSION=19.8
|
||||||
|
export PATH=$PATH:$HOME/bin:/usr/lib/oracle/$VERSION/client64/bin
|
||||||
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/$VERSION/client64/lib
|
||||||
|
export ORACLE_HOME=/usr/lib/oracle/$VERSION/client64
|
||||||
|
EOF_ENV
|
||||||
|
|
||||||
|
# Kernel optimization
|
||||||
|
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
|
||||||
|
|
||||||
|
[ -d /dev/lxd/ ] || execute_cmd "sysctl --system" "Applying Kernel optimization"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Add websocket engine start script.
|
||||||
|
mv /var/www/html/pandora_console/pandora_websocket_engine /etc/init.d/
|
||||||
|
chmod +x /etc/init.d/pandora_websocket_engine
|
||||||
|
|
||||||
|
# Start Websocket engine
|
||||||
|
/etc/init.d/pandora_websocket_engine start &>> "$LOGFILE"
|
||||||
|
|
||||||
|
# Configure websocket to be started at start.
|
||||||
|
systemctl enable pandora_websocket_engine &>> "$LOGFILE"
|
||||||
|
|
||||||
|
# Enable pandora ha service
|
||||||
|
systemctl enable pandora_server --now &>> "$LOGFILE"
|
||||||
|
execute_cmd "systemctl start pandora_server" "Starting Pandora FMS Server"
|
||||||
|
|
||||||
|
# starting tentacle server
|
||||||
|
systemctl enable tentacle_serverd &>> "$LOGFILE"
|
||||||
|
execute_cmd "service tentacle_serverd start" "Starting Tentacle Server"
|
||||||
|
|
||||||
|
# Enabling condole cron
|
||||||
|
execute_cmd "echo \"* * * * * root wget -q -O - --no-check-certificate http://127.0.0.1/pandora_console/enterprise/cron.php >> $PANDORA_CONSOLE/log/cron.log\" >> /etc/crontab" "Enabling Pandora FMS Console cron"
|
||||||
|
echo "* * * * * root wget -q -O - --no-check-certificate http://127.0.0.1/pandora_console/enterprise/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"
|
||||||
|
|
||||||
|
#SSH banner
|
||||||
|
[ "$(curl -s ifconfig.me)" ] && ipplublic=$(curl -s ifconfig.me)
|
||||||
|
|
||||||
|
cat > /etc/issue.net << EOF_banner
|
||||||
|
|
||||||
|
Welcome to Pandora FMS appliance on CentOS
|
||||||
|
------------------------------------------
|
||||||
|
Go to Public http://$ipplublic/pandora_console$to 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 this credentials to login in the console "g"[ User: admin / Password: pandora ]"n" \n"}'
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-agent-unix
|
package: pandorafms-agent-unix
|
||||||
Version: 7.0NG.755-210629
|
Version: 7.0NG.755-210705
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -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.755-210629"
|
pandora_version="7.0NG.755-210705"
|
||||||
|
|
||||||
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
|
||||||
|
@ -1015,7 +1015,7 @@ my $Sem = undef;
|
|||||||
my $ThreadSem = undef;
|
my $ThreadSem = undef;
|
||||||
|
|
||||||
use constant AGENT_VERSION => '7.0NG.755';
|
use constant AGENT_VERSION => '7.0NG.755';
|
||||||
use constant AGENT_BUILD => '210629';
|
use constant AGENT_BUILD => '210705';
|
||||||
|
|
||||||
# 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;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_agent_unix
|
%define name pandorafms_agent_unix
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_agent_unix
|
%define name pandorafms_agent_unix
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
Summary: Pandora FMS Linux agent, PERL version
|
Summary: Pandora FMS Linux agent, PERL version
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.755"
|
PI_VERSION="7.0NG.755"
|
||||||
PI_BUILD="210629"
|
PI_BUILD="210705"
|
||||||
OS_NAME=`uname -s`
|
OS_NAME=`uname -s`
|
||||||
|
|
||||||
FORCE=0
|
FORCE=0
|
||||||
|
@ -12,12 +12,19 @@
|
|||||||
#
|
#
|
||||||
###################################################
|
###################################################
|
||||||
|
|
||||||
from sys import argv, path, stderr, exit
|
from sys import argv
|
||||||
|
from sys import path
|
||||||
|
from sys import stderr
|
||||||
|
from sys import exit
|
||||||
|
from subprocess import Popen
|
||||||
|
from subprocess import PIPE
|
||||||
|
from subprocess import DEVNULL
|
||||||
|
from subprocess import getstatusoutput
|
||||||
import psutil
|
import psutil
|
||||||
from subprocess import *
|
|
||||||
|
|
||||||
global module_list
|
global module_list
|
||||||
module_list = []
|
module_list = []
|
||||||
|
version = "1.1"
|
||||||
|
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
@ -116,7 +123,7 @@ def service_module(name, value, parent=None):
|
|||||||
"value" : value,
|
"value" : value,
|
||||||
"module_parent" : parent,
|
"module_parent" : parent,
|
||||||
}]
|
}]
|
||||||
#print ("service_module END "+str(now(0,1)))
|
#print ("service_module END "+str(now(0,1)))
|
||||||
return (module)
|
return (module)
|
||||||
|
|
||||||
def get_memcpu (process, servicename):
|
def get_memcpu (process, servicename):
|
||||||
@ -169,7 +176,7 @@ def win_service(servicelist, option=False, memcpu=False):
|
|||||||
if output != None and output["modules"]:
|
if output != None and output["modules"]:
|
||||||
modules += PSCheck.check_service(srvc.strip(), option, memcpu)["modules"]
|
modules += PSCheck.check_service(srvc.strip(), option, memcpu)["modules"]
|
||||||
module_list.append(srvc)
|
module_list.append(srvc)
|
||||||
winprocess = output["name"]
|
#winprocess = output["name"]
|
||||||
#if memcpu == True:
|
#if memcpu == True:
|
||||||
# modules += get_memcpu(winprocess) ## Only available for parent service ATM.
|
# modules += get_memcpu(winprocess) ## Only available for parent service ATM.
|
||||||
else:
|
else:
|
||||||
@ -189,18 +196,19 @@ def lnx_service(services_list, memcpu=False):
|
|||||||
status = None
|
status = None
|
||||||
if sysctl == 0:
|
if sysctl == 0:
|
||||||
### Systemd available
|
### Systemd available
|
||||||
syscall = Popen(["systemctl", "is-active", srvc], stdout=PIPE,
|
syscall = Popen(["systemctl", "show", "-pLoadState", "-pActiveState", srvc], stdout=PIPE,
|
||||||
stdin=DEVNULL, universal_newlines=True)
|
stdin=DEVNULL, universal_newlines=True)
|
||||||
result = syscall.communicate()
|
result = syscall.communicate()
|
||||||
result = result[0].strip().lower()
|
srvstatus= result[0].strip().lower().split("\n")
|
||||||
if result == "active":
|
if srvstatus[0] == "loadstate=not-found":
|
||||||
modules += service_module(srvc, 1)
|
|
||||||
status = 1
|
|
||||||
elif result == "inactive":
|
|
||||||
modules += service_module(srvc, 0)
|
|
||||||
status = 0
|
|
||||||
elif result == "unknown":
|
|
||||||
next
|
next
|
||||||
|
else:
|
||||||
|
if srvstatus[1] == "activestate=active":
|
||||||
|
modules += service_module(srvc, 1)
|
||||||
|
status = 1
|
||||||
|
elif srvstatus[1] == "activestate=inactive":
|
||||||
|
modules += service_module(srvc, 0)
|
||||||
|
status = 0
|
||||||
elif sysctl != 0 and servic == 0:
|
elif sysctl != 0 and servic == 0:
|
||||||
### Systemd not available, switch to service command
|
### Systemd not available, switch to service command
|
||||||
syscall = Popen(["service", srvc, "status"], stdout=PIPE,
|
syscall = Popen(["service", srvc, "status"], stdout=PIPE,
|
||||||
@ -375,14 +383,14 @@ def discover(osyst, servicelist):
|
|||||||
elif osyst == "Linux":
|
elif osyst == "Linux":
|
||||||
lnx_service(servicelist, memcpu)
|
lnx_service(servicelist, memcpu)
|
||||||
else:
|
else:
|
||||||
print ("\nPandora FMS Autodiscovery plugin.")
|
print ("\nPandora FMS Autodiscovery plugin v{}".format(version))
|
||||||
print ("Checks the status of the services in list and monitors CPU and Memory for each of them.\n")
|
print ("Checks the status of the services in list and monitors CPU and Memory for each of them.\n")
|
||||||
print ("Usage:")
|
print ("Usage:")
|
||||||
print ("{} [options] [--usage]".format(argv[0]))
|
print ("{} [options] [--usage]".format(argv[0]))
|
||||||
print ("--help")
|
print ("--help")
|
||||||
print ("\tPrints this help screen")
|
print ("\tPrints this help screen")
|
||||||
print ("--default")
|
print ("--default")
|
||||||
print ("\tRuns this tool with default monitoring.".format(argv[0]))
|
print ("\tRuns this tool with default monitoring.")
|
||||||
print ("\tServices monitored by default for {}:".format(osyst))
|
print ("\tServices monitored by default for {}:".format(osyst))
|
||||||
print ("\t",", ".join(servicelist))
|
print ("\t",", ".join(servicelist))
|
||||||
print ("--list \"<srvc1,srvc2,srvc3>\"")
|
print ("--list \"<srvc1,srvc2,srvc3>\"")
|
||||||
|
@ -186,7 +186,7 @@ UpgradeApplicationID
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
Version
|
Version
|
||||||
{210629}
|
{210705}
|
||||||
|
|
||||||
ViewReadme
|
ViewReadme
|
||||||
{Yes}
|
{Yes}
|
||||||
|
@ -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.755 Build 210629")
|
#define PANDORA_VERSION ("7.0NG.755 Build 210705")
|
||||||
|
|
||||||
string pandora_path;
|
string pandora_path;
|
||||||
string pandora_dir;
|
string pandora_dir;
|
||||||
|
@ -11,7 +11,7 @@ BEGIN
|
|||||||
VALUE "LegalCopyright", "Artica ST"
|
VALUE "LegalCopyright", "Artica ST"
|
||||||
VALUE "OriginalFilename", "PandoraAgent.exe"
|
VALUE "OriginalFilename", "PandoraAgent.exe"
|
||||||
VALUE "ProductName", "Pandora FMS Windows Agent"
|
VALUE "ProductName", "Pandora FMS Windows Agent"
|
||||||
VALUE "ProductVersion", "(7.0NG.755(Build 210629))"
|
VALUE "ProductVersion", "(7.0NG.755(Build 210705))"
|
||||||
VALUE "FileVersion", "1.0.0.0"
|
VALUE "FileVersion", "1.0.0.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-console
|
package: pandorafms-console
|
||||||
Version: 7.0NG.755-210629
|
Version: 7.0NG.755-210705
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -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.755-210629"
|
pandora_version="7.0NG.755-210705"
|
||||||
|
|
||||||
package_pear=0
|
package_pear=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -105,3 +105,4 @@ include/help/es/help_event_alert.php
|
|||||||
enterprise/godmode/alerts/alert_events.php
|
enterprise/godmode/alerts/alert_events.php
|
||||||
enterprise/godmode/alerts/alert_events_list.php
|
enterprise/godmode/alerts/alert_events_list.php
|
||||||
enterprise/godmode/alerts/alert_events_rules.php
|
enterprise/godmode/alerts/alert_events_rules.php
|
||||||
|
enterprise/godmode/alerts/configure_alert_rule.php
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
|
CREATE TABLE IF NOT EXISTS `talert_execution_queue` (
|
||||||
|
`id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`id_alert_template_module` int(10) unsigned NOT NULL,
|
||||||
|
`alert_mode` tinyint(1) NOT NULL,
|
||||||
|
`data` mediumtext NOT NULL,
|
||||||
|
`extra_macros` text,
|
||||||
|
`utimestamp` bigint(20) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `tsync_queue` (
|
CREATE TABLE IF NOT EXISTS `tsync_queue` (
|
||||||
`id` serial,
|
`id` serial,
|
||||||
@ -11,6 +20,8 @@ CREATE TABLE IF NOT EXISTS `tsync_queue` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
ALTER TABLE `tlayout` ADD COLUMN `auto_adjust` INTEGER UNSIGNED NOT NULL default 0;
|
||||||
|
|
||||||
SOURCE './procedures/updateSnmpAlerts.sql';
|
SOURCE './procedures/updateSnmpAlerts.sql';
|
||||||
|
|
||||||
UPDATE `tlink` SET `link` = 'https://pandorafms.com/manual/' WHERE `id_link` = 0000000001;
|
UPDATE `tlink` SET `link` = 'https://pandorafms.com/manual/' WHERE `id_link` = 0000000001;
|
||||||
@ -24,6 +35,4 @@ UPDATE `tuser_task_scheduled` SET
|
|||||||
`args`= REPLACE(`args`, 's:15:"first_execution"', 'i:2;s:0:"";i:7;s:3:"PDF";s:15:"first_execution"')
|
`args`= REPLACE(`args`, 's:15:"first_execution"', 'i:2;s:0:"";i:7;s:3:"PDF";s:15:"first_execution"')
|
||||||
WHERE `id_user_task` = 2;
|
WHERE `id_user_task` = 2;
|
||||||
|
|
||||||
ALTER TABLE `tlayout` ADD COLUMN `auto_adjust` INTEGER UNSIGNED NOT NULL default 0;
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -4058,4 +4058,17 @@ CREATE TABLE IF NOT EXISTS `tsync_queue` (
|
|||||||
|
|
||||||
ALTER TABLE `tperfil` DROP COLUMN `incident_view`;
|
ALTER TABLE `tperfil` DROP COLUMN `incident_view`;
|
||||||
ALTER TABLE `tperfil` DROP COLUMN `incident_edit`;
|
ALTER TABLE `tperfil` DROP COLUMN `incident_edit`;
|
||||||
ALTER TABLE `tperfil` DROP COLUMN `incident_management`;
|
ALTER TABLE `tperfil` DROP COLUMN `incident_management`;
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `talert_execution_queue`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `talert_execution_queue` (
|
||||||
|
`id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`id_alert_template_module` int(10) unsigned NOT NULL,
|
||||||
|
`alert_mode` tinyint(1) NOT NULL,
|
||||||
|
`data` mediumtext NOT NULL,
|
||||||
|
`extra_macros` text,
|
||||||
|
`utimestamp` bigint(20) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
@ -69,6 +69,13 @@ if (empty($license) === true) {
|
|||||||
$license = 'PANDORA-FREE';
|
$license = 'PANDORA-FREE';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mode_str = '';
|
||||||
|
if ($mode === Manager::MODE_ONLINE) {
|
||||||
|
$mode_str = 'online';
|
||||||
|
} else if ($mode === Manager::MODE_OFFLINE) {
|
||||||
|
$mode_str = 'offline';
|
||||||
|
}
|
||||||
|
|
||||||
if (function_exists('enterprise_hook') === true) {
|
if (function_exists('enterprise_hook') === true) {
|
||||||
enterprise_include_once('/include/functions_license.php');
|
enterprise_include_once('/include/functions_license.php');
|
||||||
$license_data = enterprise_hook('license_get_info');
|
$license_data = enterprise_hook('license_get_info');
|
||||||
@ -93,13 +100,6 @@ if (function_exists('enterprise_hook') === true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($days_to_expiry < 0) {
|
if ($days_to_expiry < 0) {
|
||||||
$mode_str = '';
|
|
||||||
if ($mode === Manager::MODE_ONLINE) {
|
|
||||||
$mode_str = 'online';
|
|
||||||
} else if ($mode === Manager::MODE_OFFLINE) {
|
|
||||||
$mode_str = 'offline';
|
|
||||||
}
|
|
||||||
|
|
||||||
ui_print_warning_message(
|
ui_print_warning_message(
|
||||||
__(
|
__(
|
||||||
'You cannot use update manager %s. This license has expired %d days ago. Please update your license or disable enterprise section by moving enterprise directory to another location and try again.',
|
'You cannot use update manager %s. This license has expired %d days ago. Please update your license or disable enterprise section by moving enterprise directory to another location and try again.',
|
||||||
@ -109,6 +109,24 @@ if (function_exists('enterprise_hook') === true) {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rtrim($license_data['licensed_to']) === Manager::PANDORA_TRIAL_ISSUER) {
|
||||||
|
if (function_exists('get_product_name') === true) {
|
||||||
|
$product_name = get_product_name();
|
||||||
|
} else {
|
||||||
|
$product_name = 'Pandora FMS';
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_print_info_message(
|
||||||
|
__(
|
||||||
|
'You cannot use update manager %s. This license is a trial license to test all %s features. Please update your license to unlock all %s features.',
|
||||||
|
$mode_str,
|
||||||
|
$product_name,
|
||||||
|
$product_name
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$license_data = [];
|
$license_data = [];
|
||||||
$license_data['count_enabled'] = db_get_value(
|
$license_data['count_enabled'] = db_get_value(
|
||||||
|
@ -40,6 +40,7 @@ class Manager
|
|||||||
const MODE_ONLINE = 0;
|
const MODE_ONLINE = 0;
|
||||||
const MODE_OFFLINE = 1;
|
const MODE_OFFLINE = 1;
|
||||||
const MODE_REGISTER = 2;
|
const MODE_REGISTER = 2;
|
||||||
|
const PANDORA_TRIAL_ISSUER = 'Enterprise Trial License(Pandora FMS <info@pandorafms.com>)';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current mode (view).
|
* Current mode (view).
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* Pandora build version and version
|
* Pandora build version and version
|
||||||
*/
|
*/
|
||||||
$build_version = 'PC210629';
|
$build_version = 'PC210705';
|
||||||
$pandora_version = 'v7.0NG.755';
|
$pandora_version = 'v7.0NG.755';
|
||||||
|
|
||||||
// Do not overwrite default timezone set if defined.
|
// Do not overwrite default timezone set if defined.
|
||||||
|
@ -422,6 +422,7 @@ define('SERVER_TYPE_WUX', 17);
|
|||||||
define('SERVER_TYPE_SYSLOG', 18);
|
define('SERVER_TYPE_SYSLOG', 18);
|
||||||
define('SERVER_TYPE_AUTOPROVISION', 19);
|
define('SERVER_TYPE_AUTOPROVISION', 19);
|
||||||
define('SERVER_TYPE_MIGRATION', 20);
|
define('SERVER_TYPE_MIGRATION', 20);
|
||||||
|
define('SERVER_TYPE_ALERT', 21);
|
||||||
|
|
||||||
// REPORTS.
|
// REPORTS.
|
||||||
define('REPORT_TOP_N_MAX', 1);
|
define('REPORT_TOP_N_MAX', 1);
|
||||||
|
@ -826,6 +826,19 @@ function servers_get_info($id_server=-1)
|
|||||||
$id_modulo = 0;
|
$id_modulo = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SERVER_TYPE_ALERT:
|
||||||
|
$server['img'] = html_print_image(
|
||||||
|
'images/alerts_extern.png',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'title' => __('Alert server'),
|
||||||
|
'class' => 'invert_filter',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$server['type'] = 'alert';
|
||||||
|
$id_modulo = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
$server['img'] = '';
|
$server['img'] = '';
|
||||||
$server['type'] = 'unknown';
|
$server['type'] = 'unknown';
|
||||||
|
@ -129,7 +129,7 @@
|
|||||||
<div style='height: 10px'>
|
<div style='height: 10px'>
|
||||||
<?php
|
<?php
|
||||||
$version = '7.0NG.755';
|
$version = '7.0NG.755';
|
||||||
$build = '210629';
|
$build = '210705';
|
||||||
$banner = "v$version Build $build";
|
$banner = "v$version Build $build";
|
||||||
|
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
# User and Group under which Apache is running
|
# User and Group under which Apache is running
|
||||||
%define httpd_name httpd
|
%define httpd_name httpd
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_console
|
%define name pandorafms_console
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
%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
|
||||||
|
@ -582,6 +582,19 @@ CREATE TABLE IF NOT EXISTS `talert_special_days` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `talert_execution_queue`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `talert_execution_queue` (
|
||||||
|
`id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`id_alert_template_module` int(10) unsigned NOT NULL,
|
||||||
|
`alert_mode` tinyint(1) NOT NULL,
|
||||||
|
`data` mediumtext NOT NULL,
|
||||||
|
`extra_macros` text,
|
||||||
|
`utimestamp` bigint(20) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- Table `tattachment`
|
-- Table `tattachment`
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package: pandorafms-server
|
package: pandorafms-server
|
||||||
Version: 7.0NG.755-210629
|
Version: 7.0NG.755-210705
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: admin
|
Section: admin
|
||||||
|
@ -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.755-210629"
|
pandora_version="7.0NG.755-210705"
|
||||||
|
|
||||||
package_cpan=0
|
package_cpan=0
|
||||||
package_pandora=1
|
package_pandora=1
|
||||||
|
@ -31,6 +31,7 @@ use PandoraFMS::DB;
|
|||||||
use PandoraFMS::Config;
|
use PandoraFMS::Config;
|
||||||
use PandoraFMS::Tools;
|
use PandoraFMS::Tools;
|
||||||
use PandoraFMS::Core;
|
use PandoraFMS::Core;
|
||||||
|
use PandoraFMS::AlertServer;
|
||||||
use PandoraFMS::DataServer;
|
use PandoraFMS::DataServer;
|
||||||
use PandoraFMS::NetworkServer;
|
use PandoraFMS::NetworkServer;
|
||||||
use PandoraFMS::SNMPServer;
|
use PandoraFMS::SNMPServer;
|
||||||
@ -147,6 +148,7 @@ sub pandora_startup () {
|
|||||||
# Load servers
|
# Load servers
|
||||||
if (!is_metaconsole(\%Config)) {
|
if (!is_metaconsole(\%Config)) {
|
||||||
pandora_reset_server (\%Config, $DBH);
|
pandora_reset_server (\%Config, $DBH);
|
||||||
|
push (@Servers, new PandoraFMS::AlertServer (\%Config, $DBH));
|
||||||
push (@Servers, new PandoraFMS::DataServer (\%Config, $DBH));
|
push (@Servers, new PandoraFMS::DataServer (\%Config, $DBH));
|
||||||
push (@Servers, new PandoraFMS::NetworkServer (\%Config, $DBH));
|
push (@Servers, new PandoraFMS::NetworkServer (\%Config, $DBH));
|
||||||
push (@Servers, new PandoraFMS::DiscoveryServer (\%Config, $DBH));
|
push (@Servers, new PandoraFMS::DiscoveryServer (\%Config, $DBH));
|
||||||
|
@ -698,3 +698,12 @@ ha_interval 30
|
|||||||
# Pandora FMS Database HA Tool monitoring interval in seconds. Must be a multiple of ha_interval (PANDORA FMS ENTERPRISE ONLY).
|
# Pandora FMS Database HA Tool monitoring interval in seconds. Must be a multiple of ha_interval (PANDORA FMS ENTERPRISE ONLY).
|
||||||
ha_monitoring_interval 60
|
ha_monitoring_interval 60
|
||||||
|
|
||||||
|
# Enable (1) or disable (0) Pandora FMS Alert Server.
|
||||||
|
alertserver 0
|
||||||
|
|
||||||
|
# Pandora FMS Alert Server threads.
|
||||||
|
alertserver_threads 4
|
||||||
|
|
||||||
|
# Generate an hourly warning event if alert execution is being delayed more than alertserver_warn seconds.
|
||||||
|
alertserver_warn 180
|
||||||
|
|
||||||
|
201
pandora_server/lib/PandoraFMS/AlertServer.pm
Normal file
201
pandora_server/lib/PandoraFMS/AlertServer.pm
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
package PandoraFMS::AlertServer;
|
||||||
|
##########################################################################
|
||||||
|
# Pandora FMS Alert Server.
|
||||||
|
# Pandora FMS. the Flexible Monitoring System. http://www.pandorafms.org
|
||||||
|
##########################################################################
|
||||||
|
# Copyright (c) 2005-2021 Artica Soluciones Tecnologicas S.L
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU Lesser General Public License
|
||||||
|
# as published by the Free Software Foundation; version 2
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use threads;
|
||||||
|
use threads::shared;
|
||||||
|
use Thread::Semaphore;
|
||||||
|
|
||||||
|
use JSON;
|
||||||
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
# Default lib dir for RPM and DEB packages
|
||||||
|
use lib '/usr/lib/perl5';
|
||||||
|
|
||||||
|
use PandoraFMS::Tools;
|
||||||
|
use PandoraFMS::DB;
|
||||||
|
use PandoraFMS::Core;
|
||||||
|
use PandoraFMS::ProducerConsumerServer;
|
||||||
|
|
||||||
|
# Inherits from PandoraFMS::ProducerConsumerServer
|
||||||
|
our @ISA = qw(PandoraFMS::ProducerConsumerServer);
|
||||||
|
|
||||||
|
# Global variables
|
||||||
|
my @TaskQueue :shared;
|
||||||
|
my %PendingTasks :shared;
|
||||||
|
my $Sem :shared;
|
||||||
|
my $TaskSem :shared;
|
||||||
|
my $AlertSem :shared;
|
||||||
|
my %Alerts :shared;
|
||||||
|
my $EventRef :shared = 0;
|
||||||
|
|
||||||
|
########################################################################################
|
||||||
|
# Alert Server class constructor.
|
||||||
|
########################################################################################
|
||||||
|
sub new ($$$) {
|
||||||
|
my ($class, $config, $dbh) = @_;
|
||||||
|
|
||||||
|
return undef unless $config->{'alertserver'} == 1;
|
||||||
|
|
||||||
|
# Initialize semaphores and queues
|
||||||
|
@TaskQueue = ();
|
||||||
|
%PendingTasks = ();
|
||||||
|
$Sem = Thread::Semaphore->new;
|
||||||
|
$TaskSem = Thread::Semaphore->new (0);
|
||||||
|
$AlertSem = Thread::Semaphore->new (1);
|
||||||
|
|
||||||
|
# Call the constructor of the parent class
|
||||||
|
my $self = $class->SUPER::new($config, ALERTSERVER, \&PandoraFMS::AlertServer::data_producer, \&PandoraFMS::AlertServer::data_consumer, $dbh);
|
||||||
|
|
||||||
|
bless $self, $class;
|
||||||
|
return $self;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Run.
|
||||||
|
###############################################################################
|
||||||
|
sub run ($) {
|
||||||
|
my $self = shift;
|
||||||
|
my $pa_config = $self->getConfig ();
|
||||||
|
|
||||||
|
print_message ($pa_config, " [*] Starting " . $pa_config->{'rb_product_name'} . " Alert Server.", 1);
|
||||||
|
$self->setNumThreads ($pa_config->{'alertserver_threads'});
|
||||||
|
$self->SUPER::run (\@TaskQueue, \%PendingTasks, $Sem, $TaskSem);
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Data producer.
|
||||||
|
###############################################################################
|
||||||
|
sub data_producer ($) {
|
||||||
|
my $self = shift;
|
||||||
|
my ($pa_config, $dbh) = ($self->getConfig (), $self->getDBH ());
|
||||||
|
|
||||||
|
my @tasks;
|
||||||
|
my @rows;
|
||||||
|
|
||||||
|
# Make a local copy of locked alerts.
|
||||||
|
$AlertSem->down ();
|
||||||
|
my $locked_alerts = {%Alerts};
|
||||||
|
$AlertSem->up ();
|
||||||
|
|
||||||
|
# Check the execution queue.
|
||||||
|
if (pandora_is_master($pa_config) == 1) {
|
||||||
|
@rows = get_db_rows ($dbh, 'SELECT id, utimestamp FROM talert_execution_queue ORDER BY utimestamp ASC');
|
||||||
|
}
|
||||||
|
|
||||||
|
# Queue alerts.
|
||||||
|
foreach my $row (@rows) {
|
||||||
|
next if (alert_lock($pa_config, $row->{'id'}, $locked_alerts) == 0);
|
||||||
|
push (@tasks, $row->{'id'});
|
||||||
|
|
||||||
|
# Generate an event if execution delay is high (every 1 hour at most).
|
||||||
|
my $now = time();
|
||||||
|
if (($pa_config->{'alertserver_warn'} > 0) &&
|
||||||
|
($now - $row->{'utimestamp'} > $pa_config->{'alertserver_warn'}) &&
|
||||||
|
($EventRef + 3600 < $now)) {
|
||||||
|
$EventRef = $now;
|
||||||
|
pandora_event ($pa_config, "Alert execution delay has exceeded " . $pa_config->{'alertserver_warn'} . " seconds.", 0, 0, 3, 0, 0, 'system', 0, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return @tasks;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Data consumer.
|
||||||
|
###############################################################################
|
||||||
|
sub data_consumer ($$) {
|
||||||
|
my ($self, $task_id) = @_;
|
||||||
|
my ($pa_config, $dbh) = ($self->getConfig (), $self->getDBH ());
|
||||||
|
|
||||||
|
eval {{
|
||||||
|
# Get the alert from the queue.
|
||||||
|
my $task = get_db_single_row ($dbh, 'SELECT * FROM talert_execution_queue WHERE id = ?', $task_id);
|
||||||
|
if (! defined ($task)) {
|
||||||
|
logger ($pa_config,"[ERROR] Executing invalid alert", 0);
|
||||||
|
last 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the alert data.
|
||||||
|
my $alert = get_db_single_row ($dbh, 'SELECT talert_template_modules.id as id_template_module,
|
||||||
|
talert_template_modules.*, talert_templates.*
|
||||||
|
FROM talert_template_modules, talert_templates
|
||||||
|
WHERE talert_template_modules.id_alert_template = talert_templates.id
|
||||||
|
AND talert_template_modules.id = ?', $task->{'id_alert_template_module'});
|
||||||
|
if (! defined ($alert)) {
|
||||||
|
logger($pa_config, "Alert ID " . $task->{'id_alert_template_module'} . " not found.", 10);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the agent and module associated with the alert
|
||||||
|
my $module = get_db_single_row ($dbh, 'SELECT * FROM tagente_modulo WHERE id_agente_modulo = ?', $alert->{'id_agent_module'});
|
||||||
|
if (! defined ($module)) {
|
||||||
|
logger($pa_config, "Module ID " . $alert->{'id_agent_module'} . " not found for alert ID " . $alert->{'id_template_module'} . ".", 10);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
my $agent = get_db_single_row ($dbh, 'SELECT * FROM tagente WHERE id_agente = ?', $module->{'id_agente'});
|
||||||
|
if (! defined ($agent)) {
|
||||||
|
logger($pa_config, "Agent ID " . $module->{'id_agente'} . " not found for module ID " . $module->{'id_agente_modulo'} . " alert ID " . $alert->{'id_template_module'} . ".", 10);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute the alert.
|
||||||
|
pandora_execute_alert ($pa_config, $task->{'data'}, $agent, $module, $alert, $task->{'alert_mode'},
|
||||||
|
$dbh, strftime ("%Y-%m-%d %H:%M:%S", localtime()), 0, decode_json($task->{'extra_macros'}));
|
||||||
|
}};
|
||||||
|
|
||||||
|
# Remove the alert from the queue and unlock.
|
||||||
|
db_do($dbh, 'DELETE FROM talert_execution_queue WHERE id=?', $task_id);
|
||||||
|
alert_unlock($pa_config, $task_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Get a lock on the given alert. Return 1 on success, 0 otherwise.
|
||||||
|
##########################################################################
|
||||||
|
sub alert_lock {
|
||||||
|
my ($pa_config, $alert, $locked_alerts) = @_;
|
||||||
|
|
||||||
|
if (defined($locked_alerts->{$alert})) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$locked_alerts->{$alert} = 1;
|
||||||
|
$AlertSem->down ();
|
||||||
|
$Alerts{$alert} = 1;
|
||||||
|
$AlertSem->up ();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Remove the lock on the given alert.
|
||||||
|
##########################################################################
|
||||||
|
sub alert_unlock {
|
||||||
|
my ($pa_config, $alert) = @_;
|
||||||
|
|
||||||
|
$AlertSem->down ();
|
||||||
|
delete ($Alerts{$alert});
|
||||||
|
$AlertSem->up ();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
@ -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.755";
|
my $pandora_version = "7.0NG.755";
|
||||||
my $pandora_build = "210629";
|
my $pandora_build = "210705";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
# Setup hash
|
# Setup hash
|
||||||
@ -555,6 +555,10 @@ sub pandora_load_config {
|
|||||||
|
|
||||||
$pa_config->{"event_inhibit_alerts"} = 0; # 7.0 737
|
$pa_config->{"event_inhibit_alerts"} = 0; # 7.0 737
|
||||||
|
|
||||||
|
$pa_config->{"alertserver"} = 0; # 7.0 756
|
||||||
|
$pa_config->{"alertserver_threads"} = 1; # 7.0 756
|
||||||
|
$pa_config->{"alertserver_warn"} = 180; # 7.0 756
|
||||||
|
|
||||||
# Check for UID0
|
# Check for UID0
|
||||||
if ($pa_config->{"quiet"} != 0){
|
if ($pa_config->{"quiet"} != 0){
|
||||||
if ($> == 0){
|
if ($> == 0){
|
||||||
@ -1265,6 +1269,15 @@ sub pandora_load_config {
|
|||||||
elsif ($parametro =~ m/^fsnmp\s(.*)/i) {
|
elsif ($parametro =~ m/^fsnmp\s(.*)/i) {
|
||||||
$pa_config->{'fsnmp'}= clean_blank($1);
|
$pa_config->{'fsnmp'}= clean_blank($1);
|
||||||
}
|
}
|
||||||
|
elsif ($parametro =~ m/^alertserver\s+([0-9]*)/i){
|
||||||
|
$pa_config->{'alertserver'}= clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^alertserver_threads\s+([0-9]*)/i) {
|
||||||
|
$pa_config->{'alertserver_threads'}= clean_blank($1);
|
||||||
|
}
|
||||||
|
elsif ($parametro =~ m/^alertserver_warn\s+([0-9]*)/i) {
|
||||||
|
$pa_config->{'alertserver_warn'}= clean_blank($1);
|
||||||
|
}
|
||||||
|
|
||||||
# Pandora HA extra
|
# Pandora HA extra
|
||||||
elsif ($parametro =~ m/^ha_file\s(.*)/i) {
|
elsif ($parametro =~ m/^ha_file\s(.*)/i) {
|
||||||
|
@ -732,7 +732,11 @@ sub pandora_process_alert ($$$$$$$$;$$) {
|
|||||||
db_do($dbh, 'UPDATE talert_template_module_actions SET last_execution = 0 WHERE id_alert_template_module = ?', $id);
|
db_do($dbh, 'UPDATE talert_template_module_actions SET last_execution = 0 WHERE id_alert_template_module = ?', $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
pandora_execute_alert ($pa_config, $data, $agent, $module, $alert, 0, $dbh, $timestamp, 0, $extra_macros);
|
if ($pa_config->{'alertserver'} == 1 && defined ($alert->{'id_template_module'})) {
|
||||||
|
pandora_queue_alert($pa_config, $dbh, $data, $alert, 0, $extra_macros);
|
||||||
|
} else {
|
||||||
|
pandora_execute_alert ($pa_config, $data, $agent, $module, $alert, 0, $dbh, $timestamp, 0, $extra_macros);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -772,8 +776,12 @@ sub pandora_process_alert ($$$$$$$$;$$) {
|
|||||||
last_fired = ?, internal_counter = ? ' . $new_interval . ' WHERE id = ?',
|
last_fired = ?, internal_counter = ? ' . $new_interval . ' WHERE id = ?',
|
||||||
$alert->{'times_fired'}, $utimestamp, $alert->{'internal_counter'}, $id);
|
$alert->{'times_fired'}, $utimestamp, $alert->{'internal_counter'}, $id);
|
||||||
|
|
||||||
pandora_execute_alert ($pa_config, $data, $agent, $module, $alert, 1,
|
if ($pa_config->{'alertserver'} == 1 && defined ($alert->{'id_template_module'})) {
|
||||||
$dbh, $timestamp, 0, $extra_macros, $is_correlated_alert);
|
pandora_queue_alert($pa_config, $dbh, $data, $alert, 1, $extra_macros);
|
||||||
|
} else {
|
||||||
|
pandora_execute_alert ($pa_config, $data, $agent, $module, $alert, 1,
|
||||||
|
$dbh, $timestamp, 0, $extra_macros, $is_correlated_alert);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1005,6 +1013,26 @@ sub pandora_execute_alert ($$$$$$$$$;$$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
=head2 C<< pandora_queue_alert (I<$pa_config>, I<$dbh>, I<$data>, I<$alert>, I<$extra_macros> >>
|
||||||
|
|
||||||
|
Queue the given alert for execution.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
##########################################################################
|
||||||
|
sub pandora_queue_alert ($$$$$;$) {
|
||||||
|
my ($pa_config, $dbh, $data, $alert, $alert_mode, $extra_macros) = @_;
|
||||||
|
my $json_macros = '{}';
|
||||||
|
|
||||||
|
eval {
|
||||||
|
local $SIG{__DIE__};
|
||||||
|
$json_macros = encode_json($extra_macros);
|
||||||
|
};
|
||||||
|
|
||||||
|
db_do ($dbh, "INSERT INTO talert_execution_queue (id_alert_template_module, data, alert_mode, extra_macros, utimestamp)
|
||||||
|
VALUES (?, ?, ?, ?, ?)", $alert->{'id_template_module'}, $data, $alert_mode, $json_macros, time());
|
||||||
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
=head2 C<< pandora_execute_action (I<$pa_config>, I<$data>, I<$agent>, I<$alert>, I<$alert_mode>, I<$action>, I<$module>, I<$dbh>, I<$timestamp>) >>
|
=head2 C<< pandora_execute_action (I<$pa_config>, I<$data>, I<$agent>, I<$alert>, I<$alert_mode>, I<$action>, I<$module>, I<$dbh>, I<$timestamp>) >>
|
||||||
|
|
||||||
|
@ -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.755";
|
my $pandora_version = "7.0NG.755";
|
||||||
my $pandora_build = "210629";
|
my $pandora_build = "210705";
|
||||||
our $VERSION = $pandora_version." ".$pandora_build;
|
our $VERSION = $pandora_version." ".$pandora_build;
|
||||||
|
|
||||||
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
|
||||||
|
@ -55,6 +55,7 @@ our @ISA = ("Exporter");
|
|||||||
our %EXPORT_TAGS = ( 'all' => [ qw( ) ] );
|
our %EXPORT_TAGS = ( 'all' => [ qw( ) ] );
|
||||||
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
||||||
our @EXPORT = qw(
|
our @EXPORT = qw(
|
||||||
|
ALERTSERVER
|
||||||
DATASERVER
|
DATASERVER
|
||||||
NETWORKSERVER
|
NETWORKSERVER
|
||||||
SNMPCONSOLE
|
SNMPCONSOLE
|
||||||
@ -189,6 +190,7 @@ use constant WUXSERVER => 17;
|
|||||||
use constant SYSLOGSERVER => 18;
|
use constant SYSLOGSERVER => 18;
|
||||||
use constant PROVISIONINGSERVER => 19;
|
use constant PROVISIONINGSERVER => 19;
|
||||||
use constant MIGRATIONSERVER => 20;
|
use constant MIGRATIONSERVER => 20;
|
||||||
|
use constant ALERTSERVER => 21;
|
||||||
|
|
||||||
# Module status
|
# Module status
|
||||||
use constant MODULE_NORMAL => 0;
|
use constant MODULE_NORMAL => 0;
|
||||||
@ -2519,6 +2521,7 @@ sub get_server_name {
|
|||||||
return "SYSLOGSERVER" if ($server_type eq SYSLOGSERVER);
|
return "SYSLOGSERVER" if ($server_type eq SYSLOGSERVER);
|
||||||
return "PROVISIONINGSERVER" if ($server_type eq PROVISIONINGSERVER);
|
return "PROVISIONINGSERVER" if ($server_type eq PROVISIONINGSERVER);
|
||||||
return "MIGRATIONSERVER" if ($server_type eq MIGRATIONSERVER);
|
return "MIGRATIONSERVER" if ($server_type eq MIGRATIONSERVER);
|
||||||
|
return "ALERTSERVER" if ($server_type eq ALERTSERVER);
|
||||||
|
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
%define name pandorafms_server
|
%define name pandorafms_server
|
||||||
%define version 7.0NG.755
|
%define version 7.0NG.755
|
||||||
%define release 210629
|
%define release 210705
|
||||||
|
|
||||||
Summary: Pandora FMS Server
|
Summary: Pandora FMS Server
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# **********************************************************************
|
# **********************************************************************
|
||||||
|
|
||||||
PI_VERSION="7.0NG.755"
|
PI_VERSION="7.0NG.755"
|
||||||
PI_BUILD="210629"
|
PI_BUILD="210705"
|
||||||
|
|
||||||
MODE=$1
|
MODE=$1
|
||||||
if [ $# -gt 1 ]; then
|
if [ $# -gt 1 ]; then
|
||||||
|
@ -35,7 +35,7 @@ use PandoraFMS::Config;
|
|||||||
use PandoraFMS::DB;
|
use PandoraFMS::DB;
|
||||||
|
|
||||||
# version: define current version
|
# version: define current version
|
||||||
my $version = "7.0NG.755 Build 210629";
|
my $version = "7.0NG.755 Build 210705";
|
||||||
|
|
||||||
# Pandora server configuration
|
# Pandora server configuration
|
||||||
my %conf;
|
my %conf;
|
||||||
|
11
pandora_server/util/pandora_ha.service
Normal file
11
pandora_server/util/pandora_ha.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Pandora FMS Database HA Tool
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
PIDFile=/var/run/pandora_ha.pid
|
||||||
|
Restart=always
|
||||||
|
ExecStart=/usr/bin/pandora_ha -d -p /var/run/pandora_ha.pid /etc/pandora/pandora_server.conf
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -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.755 Build 210629";
|
my $version = "7.0NG.755 Build 210705";
|
||||||
|
|
||||||
# save program name for logging
|
# save program name for logging
|
||||||
my $progname = basename($0);
|
my $progname = basename($0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user