Merge remote-tracking branch 'origin/develop' into 1827-Graficas_TIP_eje_x_no_mantiene_ratio

Conflicts:
	pandora_console/include/functions_graph.php
	pandora_console/include/styles/pandora.css
This commit is contained in:
daniel 2018-05-10 08:52:45 +02:00
commit 123d49d604
86 changed files with 1484 additions and 442 deletions

View File

@ -1,14 +1,14 @@
{ {
"name": "__MSG_name__", "name": "__MSG_name__",
"version": "1.0", "version": "2.0",
"manifest_version": 2, "manifest_version": 2,
"description": "__MSG_description__", "description": "Pandora FMS Event viewer Chrome extension",
"homepage_url": "http://pandorafms.com", "homepage_url": "http://pandorafms.com",
"browser_action": { "browser_action": {
"default_title": "__MSG_default_title__", "default_title": "__MSG_default_title__",
"default_icon": "images/icon.png", "default_icon": "images/icon.png",
"default_popup": "popup.html" "default_popup": "popup.html"
}, },
"background": { "background": {
"page": "background.html" "page": "background.html"
}, },

View File

@ -56,6 +56,7 @@ AGENT_WIN_RC_FILE="$CODEHOME/pandora_agents/win32/versioninfo.rc"
SATELLITE_FILE="$PANDHOME_ENT/satellite_server/satellite_server.pl" SATELLITE_FILE="$PANDHOME_ENT/satellite_server/satellite_server.pl"
PERL_PLUGIN_FILES="$PANDHOME_ENT/pandora_plugins/NGINX/nginx_requests_queued.pl \ PERL_PLUGIN_FILES="$PANDHOME_ENT/pandora_plugins/NGINX/nginx_requests_queued.pl \
$PANDHOME_ENT/pandora_plugins/Sybase/sybase_plugin.pl \ $PANDHOME_ENT/pandora_plugins/Sybase/sybase_plugin.pl \
$PANDHOME_ENT/pandora_plugins/JMX/pandora_plugin_jmx.pl \
$PANDHOME_ENT/pandora_plugins/MarkLogic/pandora_marklogic.pl \ $PANDHOME_ENT/pandora_plugins/MarkLogic/pandora_marklogic.pl \
$PANDHOME_ENT/pandora_plugins/Apache/pandora_apache.pl \ $PANDHOME_ENT/pandora_plugins/Apache/pandora_apache.pl \
$PANDHOME_ENT/pandora_plugins/Oracle/Database/pandora_oracle.pl \ $PANDHOME_ENT/pandora_plugins/Oracle/Database/pandora_oracle.pl \
@ -66,6 +67,7 @@ $PANDHOME_ENT/pandora_plugins/Informix/informix.pl \
$PANDHOME_ENT/pandora_plugins/Ruckus/ruckus.pl \ $PANDHOME_ENT/pandora_plugins/Ruckus/ruckus.pl \
$PANDHOME_ENT/pandora_plugins/UX/pandora_ux.pl \ $PANDHOME_ENT/pandora_plugins/UX/pandora_ux.pl \
$PANDHOME_ENT/pandora_plugins/JMX/pandora_plugin_jmx.pl \ $PANDHOME_ENT/pandora_plugins/JMX/pandora_plugin_jmx.pl \
$PANDHOME_ENT/pandora_plugins/MySQL/pandora_mysql.pl \
$PANDHOME_ENT/pandora_server/util/plugin/vmware-plugin.pl " $PANDHOME_ENT/pandora_server/util/plugin/vmware-plugin.pl "
PLUGIN_LIB_FILE="$CODEHOME/pandora_server/lib/PandoraFMS/PluginTools.pm" PLUGIN_LIB_FILE="$CODEHOME/pandora_server/lib/PandoraFMS/PluginTools.pm"

View File

@ -102,7 +102,7 @@ my $SERVICE_NAME="Tentacle Server";
my $SERVICE_PARAMS=join(' ', @ARGV); my $SERVICE_PARAMS=join(' ', @ARGV);
# Program version # Program version
our $VERSION = '0.6.1'; our $VERSION = '0.6.2';
# IPv4 address to listen on # IPv4 address to listen on
my @t_addresses = ('0', '0.0.0.0'); my @t_addresses = ('0', '0.0.0.0');
@ -217,6 +217,7 @@ sub print_help {
print ("\t-d\t\tRun as daemon.\n"); print ("\t-d\t\tRun as daemon.\n");
print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n"); print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n");
print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n"); print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n");
print ("\t-F config_file\tConfiguration file full path.\n");
print ("\t-h\t\tShow help.\n"); print ("\t-h\t\tShow help.\n");
print ("\t-I\t\tEnable insecure operations (file listing and moving).\n"); print ("\t-I\t\tEnable insecure operations (file listing and moving).\n");
print ("\t-i\t\tFilters.\n"); print ("\t-i\t\tFilters.\n");
@ -278,11 +279,13 @@ sub daemonize {
################################################################################ ################################################################################
sub parse_options { sub parse_options {
my %opts; my %opts;
my $CONF = {};
my $token_value;
my $tmp; my $tmp;
my @t_addresses_tmp; my @t_addresses_tmp;
# Get options # Get options
if (getopts ('a:b:c:de:f:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) { if (getopts ('a:b:c:de:f:F:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) {
print_help (); print_help ();
exit 1; exit 1;
} }
@ -304,10 +307,16 @@ sub parse_options {
} }
} }
# Configuration file
if (defined($opts{'F'})) {
parse_config_file($opts{'F'}, $CONF);
}
# Address # Address
if (defined ($opts{'a'})) { $token_value = get_config_value($opts{'a'}, $CONF->{'addresses'});
if (defined ($token_value)) {
@t_addresses = (); @t_addresses = ();
@t_addresses_tmp = split(/,/, $opts{'a'}); @t_addresses_tmp = split(/,/, $token_value);
foreach my $t_address (@t_addresses_tmp) { foreach my $t_address (@t_addresses_tmp) {
$t_address =~ s/^ *(.*?) *$/$1/; $t_address =~ s/^ *(.*?) *$/$1/;
@ -323,15 +332,17 @@ sub parse_options {
} }
# Maximum simultaneous connections # Maximum simultaneous connections
if (defined ($opts{'c'})) { $token_value = get_config_value($opts{'c'}, $CONF->{'max_connections'});
$t_max_conn = $opts{'c'}; if (defined ($token_value)) {
$t_max_conn = $token_value;
if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) { if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) {
error ("Invalid number of maximum simultaneous connections."); error ("Invalid number of maximum simultaneous connections.");
} }
} }
# Run as daemon # Run as daemon
if (defined ($opts{'d'})) { $token_value = get_config_value($opts{'d'}, $CONF->{'daemon'}, 1);
if (defined ($token_value)) {
if ($^ eq 'MSWin32') { if ($^ eq 'MSWin32') {
error ("-d flag not available for this OS."); error ("-d flag not available for this OS.");
} }
@ -340,11 +351,12 @@ sub parse_options {
} }
# Enable SSL # Enable SSL
if (defined ($opts{'e'})) { $token_value = get_config_value($opts{'e'}, $CONF->{'ssl_cert'});
if (defined ($token_value)) {
require IO::Socket::SSL; require IO::Socket::SSL;
$t_ssl_cert = $opts{'e'}; $t_ssl_cert = $token_value;
if (! -f $t_ssl_cert) { if (! -f $t_ssl_cert) {
error ("File $t_ssl_cert does not exist."); error ("File $t_ssl_cert does not exist.");
} }
@ -353,21 +365,24 @@ sub parse_options {
} }
# Verify peer certificate # Verify peer certificate
if (defined ($opts{'f'})) { $token_value = get_config_value($opts{'f'}, $CONF->{'ssl_ca'});
$t_ssl_ca = $opts{'f'}; if (defined ($token_value)) {
$t_ssl_ca = $token_value;
if (! -f $t_ssl_ca) { if (! -f $t_ssl_ca) {
error ("File $t_ssl_ca does not exist."); error ("File $t_ssl_ca does not exist.");
} }
} }
# Insecure mode # Insecure mode
if (defined ($opts{'I'})) { $token_value = get_config_value($opts{'I'}, $CONF->{'insecure'}, 1);
if (defined ($token_value)) {
$t_insecure = 1; $t_insecure = 1;
} }
# Filters (regexp:dir;regexp:dir...) # Filters (regexp:dir;regexp:dir...)
if (defined ($opts{'i'})) { $token_value = get_config_value($opts{'i'}, $CONF->{'filters'});
my @filters = split (';', $opts{'i'}); if (defined ($token_value)) {
my @filters = split (';', $token_value);
foreach my $filter (@filters) { foreach my $filter (@filters) {
my ($regexp, $dir) = split (':', $filter); my ($regexp, $dir) = split (':', $filter);
next unless defined ($regexp) && defined ($dir); next unless defined ($regexp) && defined ($dir);
@ -381,51 +396,58 @@ sub parse_options {
} }
# SSL private key file # SSL private key file
if (defined ($opts{'k'})) { $token_value = get_config_value($opts{'k'}, $CONF->{'ssl_key'});
$t_ssl_key = $opts{'k'}; if (defined ($token_value)) {
$t_ssl_key = $token_value;
if (! -f $t_ssl_key) { if (! -f $t_ssl_key) {
error ("File $t_ssl_key does not exist."); error ("File $t_ssl_key does not exist.");
} }
} }
# Maximum file size # Maximum file size
if (defined ($opts{'m'})) { $token_value = get_config_value($opts{'m'}, $CONF->{'max_size'});
$t_max_size = $opts{'m'}; if (defined ($token_value)) {
$t_max_size = $token_value;
if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) { if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) {
error ("Invalid maximum file size."); error ("Invalid maximum file size.");
} }
} }
# File overwrite # File overwrite
if (defined ($opts{'o'})) { $token_value = get_config_value($opts{'o'}, $CONF->{'overwrite'}, 1);
if (defined ($token_value)) {
$t_overwrite = 1; $t_overwrite = 1;
} }
# Port # Port
if (defined ($opts{'p'})) { $token_value = get_config_value($opts{'p'}, $CONF->{'port'});
$t_port = $opts{'p'}; if (defined ($token_value)) {
$t_port = $token_value;
if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) { if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) {
error ("Port $t_port is not valid."); error ("Port $t_port is not valid.");
} }
} }
# Quiet mode # Quiet mode
if (defined ($opts{'q'})) { $token_value = get_config_value($opts{'q'}, $CONF->{'quiet'}, 1);
if (defined ($token_value)) {
$t_quiet = 1; $t_quiet = 1;
} }
# Retries # Retries
if (defined ($opts{'r'})) { $token_value = get_config_value($opts{'r'}, $CONF->{'retries'});
$t_retries = $opts{'r'}; if (defined ($token_value)) {
$t_retries = $token_value;
if ($t_retries !~ /^\d+$/ || $t_retries < 1) { if ($t_retries !~ /^\d+$/ || $t_retries < 1) {
error ("Invalid number of retries for network operations."); error ("Invalid number of retries for network operations.");
} }
} }
# Storage directory # Storage directory
if (defined ($opts{'s'})) { $token_value = get_config_value($opts{'s'}, $CONF->{'directory'});
if (defined ($token_value)) {
$t_directory = $opts{'s'}; $t_directory = $token_value;
# Check that directory exists # Check that directory exists
if (! -d $t_directory) { if (! -d $t_directory) {
@ -444,25 +466,36 @@ sub parse_options {
} }
} }
else { else {
if (! defined($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
if (! defined($token_value)) {
print_help (); print_help ();
exit 1; exit 1;
} }
} }
# Timeout # Timeout
if (defined ($opts{'t'})) { $token_value = get_config_value($opts{'t'}, $CONF->{'timeout'});
$t_timeout = $opts{'t'}; if (defined ($token_value)) {
$t_timeout = $token_value;
if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) { if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) {
error ("Invalid timeout for network operations."); error ("Invalid timeout for network operations.");
} }
} }
# Read verbose from config file
if (defined($CONF->{'verbose'})) {
if ($CONF->{'verbose'} eq "1") {
$t_log = 1;
} elsif ($CONF->{'verbose'} eq "2") {
$t_log = 1;
$t_log_hard = 1;
}
}
# Be verbose # Be verbose
if (defined ($opts{'v'})) { if (defined ($opts{'v'})) {
$t_log = 1; $t_log = 1;
$t_log_hard = 0;
} }
# Be verbose hard # Be verbose hard
if (defined ($opts{'V'})) { if (defined ($opts{'V'})) {
$t_log = 1; $t_log = 1;
@ -470,18 +503,21 @@ sub parse_options {
} }
# SSL private key password # SSL private key password
if (defined ($opts{'w'})) { $token_value = get_config_value($opts{'w'}, $CONF->{'ssl_password'}, 1);
if (defined ($token_value)) {
$t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: "); $t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: ");
} }
# Server password # Server password
if (defined ($opts{'x'})) { $token_value = get_config_value($opts{'x'}, $CONF->{'password'});
$t_pwd = $opts{'x'}; if (defined ($token_value)) {
$t_pwd = $token_value;
} }
#Proxy IP address #Proxy IP address
if (defined ($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
$t_proxy_ip = $opts{'b'}; if (defined ($token_value)) {
$t_proxy_ip = $token_value;
if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
|| $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255 || $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255
|| $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) && || $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) &&
@ -491,15 +527,17 @@ sub parse_options {
} }
# Proxy Port # Proxy Port
if (defined ($opts{'g'})) { $token_value = get_config_value($opts{'g'}, $CONF->{'proxy_port'});
$t_proxy_port = $opts{'g'}; if (defined ($token_value)) {
$t_proxy_port = $token_value;
if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) { if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) {
error ("Proxy port $t_port is not valid."); error ("Proxy port $t_port is not valid.");
} }
} }
# TCP wrappers support # TCP wrappers support
if (defined ($opts{'T'})) { $token_value = get_config_value($opts{'T'}, $CONF->{'use_libwrap'}, 1);
if (defined ($token_value)) {
if ($t_libwrap_installed) { if ($t_libwrap_installed) {
$t_use_libwrap = 1; $t_use_libwrap = 1;
} else { } else {
@ -531,9 +569,76 @@ sub parse_options {
} }
# Get the config file # Get the config file
if (defined ($opts{'l'})) { $token_value = get_config_value($opts{'l'}, $CONF->{'log_file'});
$log_file = $opts{'l'}; if (defined ($token_value)) {
$log_file = $token_value;
} }
# No command lines config values
# Get the block size
if (defined ($CONF->{'block_size'})) {
if ($t_port !~ /^\d+$/ || $t_port < 1) {
error ("Invalid block size: " . $CONF->{'block_size'} . ".");
}
$t_block_size = $CONF->{'block_size'};
}
# Configuration file invalid chars
if (defined ($CONF->{'invalid_chars'})) {
$t_invalid_chars = $CONF->{'invalid_chars'};
}
}
################################################################################
## SUB parse_config_file
## Get all options from a config file.
################################################################################
sub parse_config_file {
my ($config_file, $CONF) = @_;
# File should be writable
if (! -r $config_file) {
print "Configuration file $config_file is not readable.\n";
return;
}
# Open the file
my $FH;
if (! open ($FH, "< $config_file")) {
print "Cannot open configuration file $config_file.\n";
return;
}
# Read the file and only get the well formed lines
while (<$FH>) {
my $buffer_line = $_;
if ($buffer_line =~ /^[a-zA-Z]/){ # begins with letters
if ($buffer_line =~ m/([\w\-\_\.]+)\s+(.*)/){
$CONF->{$1} = $2 unless $2 eq "";
}
}
}
close ($FH);
return;
}
################################################################################
## SUB parse_config_file
## Search in command line options and config hash from configuration file
## to get a value (command line is a priority)
################################################################################
sub get_config_value {
my ($cmd_value, $conf_value, $bool) = @_;
$bool = 0 unless defined($bool);
return $cmd_value if defined($cmd_value);
# The boolean type value is 1 or undef (0 should be translated like undefP)
if ($bool && defined($conf_value)) {
return undef if ($conf_value ne "1");
}
return $conf_value;
} }
################################################################################ ################################################################################
@ -929,14 +1034,14 @@ sub recv_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("SEND ERR\n"); send_data ("SEND ERR (invalid file name)\n");
return; return;
} }
# Check file size, empty files are not allowed # Check file size, empty files are not allowed
if ($size < 1 || $size > $t_max_size) { if ($size < 1 || $size > $t_max_size) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file is too big)\n");
return; return;
} }
@ -946,7 +1051,7 @@ sub recv_file {
# Check if file exists # Check if file exists
if (-f $file && $t_overwrite == 0) { if (-f $file && $t_overwrite == 0) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file already exists)\n");
return; return;
} }
@ -979,7 +1084,7 @@ sub send_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file has an invalid file name)\n");
return; return;
} }
@ -989,7 +1094,7 @@ sub send_file {
# Check if file exists # Check if file exists
if (! -f $file) { if (! -f $file) {
print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist"); print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file does not exist)\n");
return; return;
} }

View File

@ -1,5 +1,5 @@
package: pandorafms-agent-unix package: pandorafms-agent-unix
Version: 7.0NG.722-180423 Version: 7.0NG.722-180510
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.722-180423" pandora_version="7.0NG.722-180510"
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

@ -42,7 +42,7 @@ my $Sem = undef;
my $ThreadSem = undef; my $ThreadSem = undef;
use constant AGENT_VERSION => '7.0NG.722'; use constant AGENT_VERSION => '7.0NG.722';
use constant AGENT_BUILD => '180423'; use constant AGENT_BUILD => '180510';
# 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

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

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_agent_unix %define name pandorafms_agent_unix
%define version 7.0NG.722 %define version 7.0NG.722
%define release 180423 %define release 180510
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.722" PI_VERSION="7.0NG.722"
PI_BUILD="180423" PI_BUILD="180510"
OS_NAME=`uname -s` OS_NAME=`uname -s`
FORCE=0 FORCE=0

View File

@ -102,7 +102,7 @@ my $SERVICE_NAME="Tentacle Server";
my $SERVICE_PARAMS=join(' ', @ARGV); my $SERVICE_PARAMS=join(' ', @ARGV);
# Program version # Program version
our $VERSION = '0.6.1'; our $VERSION = '0.6.2';
# IPv4 address to listen on # IPv4 address to listen on
my @t_addresses = ('0', '0.0.0.0'); my @t_addresses = ('0', '0.0.0.0');
@ -217,6 +217,7 @@ sub print_help {
print ("\t-d\t\tRun as daemon.\n"); print ("\t-d\t\tRun as daemon.\n");
print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n"); print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n");
print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n"); print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n");
print ("\t-F config_file\tConfiguration file full path.\n");
print ("\t-h\t\tShow help.\n"); print ("\t-h\t\tShow help.\n");
print ("\t-I\t\tEnable insecure operations (file listing and moving).\n"); print ("\t-I\t\tEnable insecure operations (file listing and moving).\n");
print ("\t-i\t\tFilters.\n"); print ("\t-i\t\tFilters.\n");
@ -278,11 +279,13 @@ sub daemonize {
################################################################################ ################################################################################
sub parse_options { sub parse_options {
my %opts; my %opts;
my $CONF = {};
my $token_value;
my $tmp; my $tmp;
my @t_addresses_tmp; my @t_addresses_tmp;
# Get options # Get options
if (getopts ('a:b:c:de:f:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) { if (getopts ('a:b:c:de:f:F:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) {
print_help (); print_help ();
exit 1; exit 1;
} }
@ -304,10 +307,16 @@ sub parse_options {
} }
} }
# Configuration file
if (defined($opts{'F'})) {
parse_config_file($opts{'F'}, $CONF);
}
# Address # Address
if (defined ($opts{'a'})) { $token_value = get_config_value($opts{'a'}, $CONF->{'addresses'});
if (defined ($token_value)) {
@t_addresses = (); @t_addresses = ();
@t_addresses_tmp = split(/,/, $opts{'a'}); @t_addresses_tmp = split(/,/, $token_value);
foreach my $t_address (@t_addresses_tmp) { foreach my $t_address (@t_addresses_tmp) {
$t_address =~ s/^ *(.*?) *$/$1/; $t_address =~ s/^ *(.*?) *$/$1/;
@ -323,15 +332,17 @@ sub parse_options {
} }
# Maximum simultaneous connections # Maximum simultaneous connections
if (defined ($opts{'c'})) { $token_value = get_config_value($opts{'c'}, $CONF->{'max_connections'});
$t_max_conn = $opts{'c'}; if (defined ($token_value)) {
$t_max_conn = $token_value;
if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) { if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) {
error ("Invalid number of maximum simultaneous connections."); error ("Invalid number of maximum simultaneous connections.");
} }
} }
# Run as daemon # Run as daemon
if (defined ($opts{'d'})) { $token_value = get_config_value($opts{'d'}, $CONF->{'daemon'}, 1);
if (defined ($token_value)) {
if ($^ eq 'MSWin32') { if ($^ eq 'MSWin32') {
error ("-d flag not available for this OS."); error ("-d flag not available for this OS.");
} }
@ -340,11 +351,12 @@ sub parse_options {
} }
# Enable SSL # Enable SSL
if (defined ($opts{'e'})) { $token_value = get_config_value($opts{'e'}, $CONF->{'ssl_cert'});
if (defined ($token_value)) {
require IO::Socket::SSL; require IO::Socket::SSL;
$t_ssl_cert = $opts{'e'}; $t_ssl_cert = $token_value;
if (! -f $t_ssl_cert) { if (! -f $t_ssl_cert) {
error ("File $t_ssl_cert does not exist."); error ("File $t_ssl_cert does not exist.");
} }
@ -353,21 +365,24 @@ sub parse_options {
} }
# Verify peer certificate # Verify peer certificate
if (defined ($opts{'f'})) { $token_value = get_config_value($opts{'f'}, $CONF->{'ssl_ca'});
$t_ssl_ca = $opts{'f'}; if (defined ($token_value)) {
$t_ssl_ca = $token_value;
if (! -f $t_ssl_ca) { if (! -f $t_ssl_ca) {
error ("File $t_ssl_ca does not exist."); error ("File $t_ssl_ca does not exist.");
} }
} }
# Insecure mode # Insecure mode
if (defined ($opts{'I'})) { $token_value = get_config_value($opts{'I'}, $CONF->{'insecure'}, 1);
if (defined ($token_value)) {
$t_insecure = 1; $t_insecure = 1;
} }
# Filters (regexp:dir;regexp:dir...) # Filters (regexp:dir;regexp:dir...)
if (defined ($opts{'i'})) { $token_value = get_config_value($opts{'i'}, $CONF->{'filters'});
my @filters = split (';', $opts{'i'}); if (defined ($token_value)) {
my @filters = split (';', $token_value);
foreach my $filter (@filters) { foreach my $filter (@filters) {
my ($regexp, $dir) = split (':', $filter); my ($regexp, $dir) = split (':', $filter);
next unless defined ($regexp) && defined ($dir); next unless defined ($regexp) && defined ($dir);
@ -381,51 +396,58 @@ sub parse_options {
} }
# SSL private key file # SSL private key file
if (defined ($opts{'k'})) { $token_value = get_config_value($opts{'k'}, $CONF->{'ssl_key'});
$t_ssl_key = $opts{'k'}; if (defined ($token_value)) {
$t_ssl_key = $token_value;
if (! -f $t_ssl_key) { if (! -f $t_ssl_key) {
error ("File $t_ssl_key does not exist."); error ("File $t_ssl_key does not exist.");
} }
} }
# Maximum file size # Maximum file size
if (defined ($opts{'m'})) { $token_value = get_config_value($opts{'m'}, $CONF->{'max_size'});
$t_max_size = $opts{'m'}; if (defined ($token_value)) {
$t_max_size = $token_value;
if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) { if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) {
error ("Invalid maximum file size."); error ("Invalid maximum file size.");
} }
} }
# File overwrite # File overwrite
if (defined ($opts{'o'})) { $token_value = get_config_value($opts{'o'}, $CONF->{'overwrite'}, 1);
if (defined ($token_value)) {
$t_overwrite = 1; $t_overwrite = 1;
} }
# Port # Port
if (defined ($opts{'p'})) { $token_value = get_config_value($opts{'p'}, $CONF->{'port'});
$t_port = $opts{'p'}; if (defined ($token_value)) {
$t_port = $token_value;
if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) { if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) {
error ("Port $t_port is not valid."); error ("Port $t_port is not valid.");
} }
} }
# Quiet mode # Quiet mode
if (defined ($opts{'q'})) { $token_value = get_config_value($opts{'q'}, $CONF->{'quiet'}, 1);
if (defined ($token_value)) {
$t_quiet = 1; $t_quiet = 1;
} }
# Retries # Retries
if (defined ($opts{'r'})) { $token_value = get_config_value($opts{'r'}, $CONF->{'retries'});
$t_retries = $opts{'r'}; if (defined ($token_value)) {
$t_retries = $token_value;
if ($t_retries !~ /^\d+$/ || $t_retries < 1) { if ($t_retries !~ /^\d+$/ || $t_retries < 1) {
error ("Invalid number of retries for network operations."); error ("Invalid number of retries for network operations.");
} }
} }
# Storage directory # Storage directory
if (defined ($opts{'s'})) { $token_value = get_config_value($opts{'s'}, $CONF->{'directory'});
if (defined ($token_value)) {
$t_directory = $opts{'s'}; $t_directory = $token_value;
# Check that directory exists # Check that directory exists
if (! -d $t_directory) { if (! -d $t_directory) {
@ -444,25 +466,36 @@ sub parse_options {
} }
} }
else { else {
if (! defined($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
if (! defined($token_value)) {
print_help (); print_help ();
exit 1; exit 1;
} }
} }
# Timeout # Timeout
if (defined ($opts{'t'})) { $token_value = get_config_value($opts{'t'}, $CONF->{'timeout'});
$t_timeout = $opts{'t'}; if (defined ($token_value)) {
$t_timeout = $token_value;
if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) { if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) {
error ("Invalid timeout for network operations."); error ("Invalid timeout for network operations.");
} }
} }
# Read verbose from config file
if (defined($CONF->{'verbose'})) {
if ($CONF->{'verbose'} eq "1") {
$t_log = 1;
} elsif ($CONF->{'verbose'} eq "2") {
$t_log = 1;
$t_log_hard = 1;
}
}
# Be verbose # Be verbose
if (defined ($opts{'v'})) { if (defined ($opts{'v'})) {
$t_log = 1; $t_log = 1;
$t_log_hard = 0;
} }
# Be verbose hard # Be verbose hard
if (defined ($opts{'V'})) { if (defined ($opts{'V'})) {
$t_log = 1; $t_log = 1;
@ -470,18 +503,21 @@ sub parse_options {
} }
# SSL private key password # SSL private key password
if (defined ($opts{'w'})) { $token_value = get_config_value($opts{'w'}, $CONF->{'ssl_password'}, 1);
if (defined ($token_value)) {
$t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: "); $t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: ");
} }
# Server password # Server password
if (defined ($opts{'x'})) { $token_value = get_config_value($opts{'x'}, $CONF->{'password'});
$t_pwd = $opts{'x'}; if (defined ($token_value)) {
$t_pwd = $token_value;
} }
#Proxy IP address #Proxy IP address
if (defined ($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
$t_proxy_ip = $opts{'b'}; if (defined ($token_value)) {
$t_proxy_ip = $token_value;
if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
|| $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255 || $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255
|| $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) && || $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) &&
@ -491,15 +527,17 @@ sub parse_options {
} }
# Proxy Port # Proxy Port
if (defined ($opts{'g'})) { $token_value = get_config_value($opts{'g'}, $CONF->{'proxy_port'});
$t_proxy_port = $opts{'g'}; if (defined ($token_value)) {
$t_proxy_port = $token_value;
if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) { if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) {
error ("Proxy port $t_port is not valid."); error ("Proxy port $t_port is not valid.");
} }
} }
# TCP wrappers support # TCP wrappers support
if (defined ($opts{'T'})) { $token_value = get_config_value($opts{'T'}, $CONF->{'use_libwrap'}, 1);
if (defined ($token_value)) {
if ($t_libwrap_installed) { if ($t_libwrap_installed) {
$t_use_libwrap = 1; $t_use_libwrap = 1;
} else { } else {
@ -531,9 +569,76 @@ sub parse_options {
} }
# Get the config file # Get the config file
if (defined ($opts{'l'})) { $token_value = get_config_value($opts{'l'}, $CONF->{'log_file'});
$log_file = $opts{'l'}; if (defined ($token_value)) {
$log_file = $token_value;
} }
# No command lines config values
# Get the block size
if (defined ($CONF->{'block_size'})) {
if ($t_port !~ /^\d+$/ || $t_port < 1) {
error ("Invalid block size: " . $CONF->{'block_size'} . ".");
}
$t_block_size = $CONF->{'block_size'};
}
# Configuration file invalid chars
if (defined ($CONF->{'invalid_chars'})) {
$t_invalid_chars = $CONF->{'invalid_chars'};
}
}
################################################################################
## SUB parse_config_file
## Get all options from a config file.
################################################################################
sub parse_config_file {
my ($config_file, $CONF) = @_;
# File should be writable
if (! -r $config_file) {
print "Configuration file $config_file is not readable.\n";
return;
}
# Open the file
my $FH;
if (! open ($FH, "< $config_file")) {
print "Cannot open configuration file $config_file.\n";
return;
}
# Read the file and only get the well formed lines
while (<$FH>) {
my $buffer_line = $_;
if ($buffer_line =~ /^[a-zA-Z]/){ # begins with letters
if ($buffer_line =~ m/([\w\-\_\.]+)\s+(.*)/){
$CONF->{$1} = $2 unless $2 eq "";
}
}
}
close ($FH);
return;
}
################################################################################
## SUB parse_config_file
## Search in command line options and config hash from configuration file
## to get a value (command line is a priority)
################################################################################
sub get_config_value {
my ($cmd_value, $conf_value, $bool) = @_;
$bool = 0 unless defined($bool);
return $cmd_value if defined($cmd_value);
# The boolean type value is 1 or undef (0 should be translated like undefP)
if ($bool && defined($conf_value)) {
return undef if ($conf_value ne "1");
}
return $conf_value;
} }
################################################################################ ################################################################################
@ -929,14 +1034,14 @@ sub recv_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("SEND ERR\n"); send_data ("SEND ERR (invalid file name)\n");
return; return;
} }
# Check file size, empty files are not allowed # Check file size, empty files are not allowed
if ($size < 1 || $size > $t_max_size) { if ($size < 1 || $size > $t_max_size) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file is too big)\n");
return; return;
} }
@ -946,7 +1051,7 @@ sub recv_file {
# Check if file exists # Check if file exists
if (-f $file && $t_overwrite == 0) { if (-f $file && $t_overwrite == 0) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file already exists)\n");
return; return;
} }
@ -979,7 +1084,7 @@ sub send_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file has an invalid file name)\n");
return; return;
} }
@ -989,7 +1094,7 @@ sub send_file {
# Check if file exists # Check if file exists
if (! -f $file) { if (! -f $file) {
print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist"); print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file does not exist)\n");
return; return;
} }

View File

@ -186,7 +186,7 @@ UpgradeApplicationID
{} {}
Version Version
{180423} {180510}
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.722(Build 180423)") #define PANDORA_VERSION ("7.0NG.722(Build 180510)")
string pandora_path; string pandora_path;
string pandora_dir; string pandora_dir;

View File

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

View File

@ -5,6 +5,7 @@ WORKDIR /pandorafms/pandora_console
ADD pandoradb.sql /docker-entrypoint-initdb.d ADD pandoradb.sql /docker-entrypoint-initdb.d
ADD pandoradb_data.sql /docker-entrypoint-initdb.d ADD pandoradb_data.sql /docker-entrypoint-initdb.d
RUN chown mysql /docker-entrypoint-initdb.d
ENV MYSQL_DATABASE=pandora ENV MYSQL_DATABASE=pandora

View File

@ -1,5 +1,5 @@
package: pandorafms-console package: pandorafms-console
Version: 7.0NG.722-180423 Version: 7.0NG.722-180510
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.722-180423" pandora_version="7.0NG.722-180510"
package_pear=0 package_pear=0
package_pandora=1 package_pandora=1

View File

@ -45,13 +45,14 @@ RUN yum install -y \
php-zip \ php-zip \
nmap \ nmap \
net-snmp-utils \ net-snmp-utils \
mod_ssl \
xprobe2 xprobe2
#Clone the repo #Clone the repo
RUN git clone -b develop https://github.com/pandorafms/pandorafms.git /tmp/pandorafms RUN git clone -b develop https://github.com/pandorafms/pandorafms.git /tmp/pandorafms
#Exposing ports for: HTTP, SNMP Traps, Tentacle protocol #Exposing ports for: HTTP, SNMP Traps, Tentacle protocol
EXPOSE 80 162/udp 41121 EXPOSE 80 162/udp 443 41121
# Simple startup script to avoid some issues observed with container restart # Simple startup script to avoid some issues observed with container restart
ADD docker_entrypoint.sh /entrypoint.sh ADD docker_entrypoint.sh /entrypoint.sh

View File

@ -46,8 +46,19 @@ if (isset ($_GET["loginhash"])) {
} }
} }
$public_hash = get_parameter('hash', false);
// Check user // Check user
//check_login (); if ($public_hash === false) {
check_login();
} else {
enterprise_include_once('include/functions_dashboard.php');
if (dashboard_check_public_hash($public_hash) === false) {
db_pandora_audit("Invalid public hash", "Trying to access public dashboard");
require ("general/noaccess.php");
exit;
}
}
define ('AJAX', true); define ('AJAX', true);

View File

@ -14,8 +14,10 @@
// 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.
include_once('include/graphs/fgraph.php'); global $config;
include_once('include/functions_snmp_browser.php');
include_once($config['homedir'] . '/include/graphs/fgraph.php');
include_once($config['homedir'] . '/include/functions_snmp_browser.php');
function pandora_realtime_graphs () { function pandora_realtime_graphs () {
global $config; global $config;
@ -25,8 +27,11 @@ function pandora_realtime_graphs () {
$action = get_parameter('action', 'list'); $action = get_parameter('action', 'list');
$onheader = array(); $onheader = array();
ui_print_page_header (__("Realtime graphs"), "images/extensions.png", false, "", false, $onheader); $hide_header = get_parameter('hide_header', 0);
if (!$hide_header) {
ui_print_page_header (__("Realtime graphs"), "images/extensions.png", false, "", false, $onheader);
}
$chart[time()]['graph'] = '0'; $chart[time()]['graph'] = '0';
$interactive_graph = true; $interactive_graph = true;
@ -69,26 +74,40 @@ function pandora_realtime_graphs () {
$graph = get_parameter('graph', 'cpu_load'); $graph = get_parameter('graph', 'cpu_load');
$refresh = get_parameter('refresh', '1000'); $refresh = get_parameter('refresh', '1000');
$data['graph'] = __('Graph') . '&nbsp;&nbsp;' . html_print_select ($graph_fields, 'graph', $graph, '', '', 0, true); if ($graph != 'snmp_module') {
$data['graph'] = __('Graph') . '&nbsp;&nbsp;' . html_print_select ($graph_fields, 'graph', $graph, '', '', 0, true);
}
$refresh_fields[1000] = human_time_description_raw(1, true, 'large'); $refresh_fields[1000] = human_time_description_raw(1, true, 'large');
$refresh_fields[5000] = human_time_description_raw(5, true, 'large'); $refresh_fields[5000] = human_time_description_raw(5, true, 'large');
$refresh_fields[10000] = human_time_description_raw(10, true, 'large'); $refresh_fields[10000] = human_time_description_raw(10, true, 'large');
$refresh_fields[30000] = human_time_description_raw(30, true, 'large'); $refresh_fields[30000] = human_time_description_raw(30, true, 'large');
if ($graph == 'snmp_module') {
$agent_alias = get_parameter('agent_alias', '');
$module_name = get_parameter('module_name', '');
$module_incremental = get_parameter ('incremental', 0);
$data['module_info'] = "$agent_alias: <b>$module_name</b>";
// Append all the hidden in this cell
$data['module_info'] .= html_print_input_hidden ('incremental', $module_incremental, true);
$data['module_info'] .= html_print_select (
array('snmp_module' => '-'), 'graph', 'snmp_module', '', '', 0, true, false, true, '', false, 'display: none;'
);
}
$data['refresh'] = __('Refresh interval') . '&nbsp;&nbsp;' . html_print_select ($refresh_fields, 'refresh', $refresh, '', '', 0, true); $data['refresh'] = __('Refresh interval') . '&nbsp;&nbsp;' . html_print_select ($refresh_fields, 'refresh', $refresh, '', '', 0, true);
$data['incremental'] = __('Incremental') . '&nbsp;&nbsp;' . html_print_checkbox ('incremental', 1, 0, true); if ($graph != 'snmp_module') {
$data['incremental'] = __('Incremental') . '&nbsp;&nbsp;' . html_print_checkbox ('incremental', 1, 0, true);
}
$data['reset'] = html_print_button(__('Clear graph'), 'reset', false, 'clearGraph()', 'class="sub delete" style="margin-top:0px;"', true); $data['reset'] = html_print_button(__('Clear graph'), 'reset', false, 'clearGraph()', 'class="sub delete" style="margin-top:0px;"', true);
$table->data[] = $data; $table->data[] = $data;
if ($graph == 'snmp_interface' || $graph == 'snmp_module') {
if ($graph == 'snmp_interface') { $snmp_address = get_parameter('snmp_address', '');
$snmp_address = ''; $snmp_community = get_parameter('snmp_community', '');
$snmp_community = ''; $snmp_oid = get_parameter('snmp_oid', '');
$snmp_oid = ''; $snmp_ver = get_parameter('snmp_ver', '');
$snmp_ver = '1';
$snmp_inc = false;
$data = array(); $data = array();
$data['snmp_address'] = __('Target IP') . '&nbsp;&nbsp;' . html_print_input_text ('ip_target', $snmp_address, '', 50, 255, true); $data['snmp_address'] = __('Target IP') . '&nbsp;&nbsp;' . html_print_input_text ('ip_target', $snmp_address, '', 50, 255, true);
@ -111,12 +130,21 @@ function pandora_realtime_graphs () {
$data['snmp_ver'] = __('Version') . '&nbsp;&nbsp;' . html_print_select ($snmp_versions, 'snmp_version', $snmp_ver, '', '', 0, true); $data['snmp_ver'] = __('Version') . '&nbsp;&nbsp;' . html_print_select ($snmp_versions, 'snmp_version', $snmp_ver, '', '', 0, true);
$data['snmp_ver'] .= '&nbsp;&nbsp;' . html_print_button (__('SNMP walk'), 'snmp_walk', false, 'snmpBrowserWindow()', 'class="sub next"', true); $data['snmp_ver'] .= '&nbsp;&nbsp;' . html_print_button (__('SNMP walk'), 'snmp_walk', false, 'snmpBrowserWindow()', 'class="sub next"', true);
$table->colspan[2]['snmp_ver'] = 2; $table->colspan[2]['snmp_ver'] = 2;
$table->data[] = $data; $table->data[] = $data;
// Hide some options in snmp_module graphs
if ($graph == 'snmp_module') {
$table->rowstyle[1] = "display: none;";
$table->rowstyle[2] = "display: none;";
}
snmp_browser_print_container (false, '100%', '60%', 'none'); snmp_browser_print_container (false, '100%', '60%', 'none');
} }
// Print the relative path to AJAX calls:
html_print_input_hidden('rel_path', get_parameter('rel_path', ''));
// Print the form
echo '<form id="realgraph" method="post">'; echo '<form id="realgraph" method="post">';
html_print_table($table); html_print_table($table);
echo '</form>'; echo '</form>';
@ -125,9 +153,9 @@ function pandora_realtime_graphs () {
html_print_input_hidden ('custom_action', urlencode (base64_encode('&nbsp;<a href="javascript:setOID()"><img src="' . ui_get_full_url("images") . '/input_filter.disabled.png" title="' . __("Use this OID") . '" style="vertical-align: middle;"></img></a>')), false); html_print_input_hidden ('custom_action', urlencode (base64_encode('&nbsp;<a href="javascript:setOID()"><img src="' . ui_get_full_url("images") . '/input_filter.disabled.png" title="' . __("Use this OID") . '" style="vertical-align: middle;"></img></a>')), false);
html_print_input_hidden ('incremental_base', '0'); html_print_input_hidden ('incremental_base', '0');
echo '<script type="text/javascript" src="extensions/realtime_graphs/realtime_graphs.js"></script>'; echo '<script type="text/javascript" src="'.ui_get_full_url("extensions/realtime_graphs/realtime_graphs.js").'"></script>';
echo '<script type="text/javascript" src="include/javascript/pandora_snmp_browser.js"></script>'; echo '<script type="text/javascript" src="'.ui_get_full_url("include/javascript/pandora_snmp_browser.js").'"></script>';
echo '<link rel="stylesheet" type="text/css" href="extensions/realtime_graphs/realtime_graphs.css"></style>'; echo '<link rel="stylesheet" type="text/css" href="'.ui_get_full_url("extensions/realtime_graphs/realtime_graphs.css").'"></style>';
// Store servers timezone offset to be retrieved from js // Store servers timezone offset to be retrieved from js
set_js_value('timezone_offset', date('Z', time())); set_js_value('timezone_offset', date('Z', time()));

View File

@ -59,6 +59,7 @@ switch($graph) {
$data = exec("ps aux | grep pandora_server | grep -v grep | awk '{ print $3 }'"); $data = exec("ps aux | grep pandora_server | grep -v grep | awk '{ print $3 }'");
break; break;
case 'snmp_interface': case 'snmp_interface':
case 'snmp_module':
$snmp_address = $_POST['snmp_address']; $snmp_address = $_POST['snmp_address'];
$snmp_community = $_POST['snmp_community']; $snmp_community = $_POST['snmp_community'];
$snmp_ver = $_POST['snmp_ver']; $snmp_ver = $_POST['snmp_ver'];

View File

@ -37,7 +37,7 @@ var plot = $.plot("#" + id, data, options);
var refresh = parseInt($('#refresh').val()); var refresh = parseInt($('#refresh').val());
var incremental = $('#checkbox-incremental').is(':checked'); var incremental = $('#checkbox-incremental').is(':checked') || $('#hidden-incremental').val() == 1;
var incremental_base = 0; var incremental_base = 0;
var last_inc = 0; var last_inc = 0;
var to; var to;
@ -58,9 +58,11 @@ function refresh_graph () {
postvars['snmp_address'] = $('#text-ip_target').val(); postvars['snmp_address'] = $('#text-ip_target').val();
postvars['refresh'] = refresh; postvars['refresh'] = refresh;
var rel_path = $("#hidden-rel_path").val();
$.ajax({ $.ajax({
url: "extensions/realtime_graphs/ajax.php", url: rel_path + "extensions/realtime_graphs/ajax.php",
type: "POST", type: "POST",
dataType: "json", dataType: "json",
data: postvars, data: postvars,

View File

@ -0,0 +1,9 @@
START TRANSACTION;
ALTER TABLE tcluster DROP FOREIGN KEY tcluster_ibfk_1;
ALTER TABLE tcluster_agent DROP FOREIGN KEY tcluster_agent_ibfk_1;
ALTER TABLE tcluster_agent DROP FOREIGN KEY tcluster_agent_ibfk_2;
COMMIT;

View File

@ -1509,9 +1509,7 @@ create table IF NOT EXISTS `tcluster`(
`description` text not null default '', `description` text not null default '',
`group` int(10) unsigned NOT NULL default '0', `group` int(10) unsigned NOT NULL default '0',
`id_agent` int(10) unsigned NOT NULL, `id_agent` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`)
FOREIGN KEY (`id_agent`) REFERENCES tagente(`id_agente`)
ON UPDATE CASCADE
) engine=InnoDB DEFAULT CHARSET=utf8; ) engine=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
@ -1539,8 +1537,6 @@ create table IF NOT EXISTS `tcluster_agent`(
`id_cluster` int unsigned not null, `id_cluster` int unsigned not null,
`id_agent` int(10) unsigned not null, `id_agent` int(10) unsigned not null,
PRIMARY KEY (`id_cluster`,`id_agent`), PRIMARY KEY (`id_cluster`,`id_agent`),
FOREIGN KEY (`id_agent`) REFERENCES tagente(`id_agente`)
ON UPDATE CASCADE,
FOREIGN KEY (`id_cluster`) REFERENCES tcluster(`id`) FOREIGN KEY (`id_cluster`) REFERENCES tcluster(`id`)
ON UPDATE CASCADE ON UPDATE CASCADE
) engine=InnoDB DEFAULT CHARSET=utf8; ) engine=InnoDB DEFAULT CHARSET=utf8;

View File

@ -568,7 +568,7 @@ if ($agents !== false) {
echo '</span><div class="left actions" style="visibility: hidden; clear: left">'; echo '</span><div class="left actions" style="visibility: hidden; clear: left">';
if (check_acl ($config["id_user"], $agent["id_grupo"], "AW")) { if (check_acl ($config["id_user"], $agent["id_grupo"], "AW")) {
if($agent["id_os"] == 21){ if($agent["id_os"] == 100){
$cluster = db_get_row_sql('select id from tcluster where id_agent = '.$agent['id_agente']); $cluster = db_get_row_sql('select id from tcluster where id_agent = '.$agent['id_agente']);
echo '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&id_cluster='.$cluster['id'].'&step=1&update=1">'.__('Edit').'</a>'; echo '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&id_cluster='.$cluster['id'].'&step=1&update=1">'.__('Edit').'</a>';
echo ' | '; echo ' | ';
@ -580,7 +580,7 @@ if ($agents !== false) {
echo ' | '; echo ' | ';
} }
} }
if($agent["id_os"] != 21){ if($agent["id_os"] != 100){
echo '<a href="index.php?sec=gagente& echo '<a href="index.php?sec=gagente&
sec2=godmode/agentes/configurar_agente&tab=module& sec2=godmode/agentes/configurar_agente&tab=module&
id_agente='.$agent["id_agente"].'">'.__('Modules').'</a>'; id_agente='.$agent["id_agente"].'">'.__('Modules').'</a>';
@ -592,7 +592,7 @@ if ($agents !== false) {
id_agente='.$agent["id_agente"].'">'.__('Alerts').'</a>'; id_agente='.$agent["id_agente"].'">'.__('Alerts').'</a>';
echo ' | '; echo ' | ';
if($agent["id_os"] == 21){ if($agent["id_os"] == 100){
echo '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_view&id='.$cluster['id'].'">'.__('View').'</a>'; echo '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_view&id='.$cluster['id'].'">'.__('View').'</a>';
} }
else{ else{
@ -650,7 +650,7 @@ if ($agents !== false) {
echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente& echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&
enable_agent=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'"; enable_agent=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'";
if($agent["id_os"] != 21){ if($agent["id_os"] != 100){
echo ">"; echo ">";
} }
else{ else{
@ -662,7 +662,7 @@ if ($agents !== false) {
else { else {
echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente& echo "<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&
disable_agent=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'"; disable_agent=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'";
if($agent["id_os"] != 21){ if($agent["id_os"] != 100){
echo ">"; echo ">";
} }
else{ else{
@ -676,11 +676,11 @@ if ($agents !== false) {
echo "&nbsp;&nbsp;<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente& echo "&nbsp;&nbsp;<a href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&
borrar_agente=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'"; borrar_agente=".$agent["id_agente"]."&group_id=$ag_group&recursion=$recursion&search=$search&offset=$offsetArg&sort_field=$sortField&sort=$sort&disabled=$disabled'";
if($agent["id_os"] != 21){ if($agent["id_os"] != 100){
echo ' onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">'; echo ' onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">';
} }
else{ else{
echo ' onClick="if (!confirm(\' '.__('You are going to delete a cluster agent. Are you sure?').'\')) return false;">'; echo ' onClick="if (!confirm(\' '.__('WARNING! - You are going to delete a cluster agent. Are you sure?').'\')) return false;">';
} }
echo html_print_image('images/cross.png', true, array("border" => '0')) . "</a>"; echo html_print_image('images/cross.png', true, array("border" => '0')) . "</a>";

View File

@ -103,24 +103,9 @@ if ($module_service_synthetic_selector !== ENTERPRISE_NOT_HOOK) {
$data[0] = ''; $data[0] = '';
} }
$data[1] = '<div id="module_data" style="top:1em; float:left; width:50%;">'; $data[1] = '<div id="module_data" style="top:1em; float:left; width:50%;">';
$data[1] .= html_print_label(__("Agent"),'agent_name', true)."<br/>"; $data[1] .= html_print_label(__("Agent"),'agent_name', true)."<br/>";
$params = array();
$params['return'] = true;
$params['show_helptip'] = true;
$params['input_name'] = 'agent_name';
$params['value'] = $agent_name;
$params['javascript_is_function_select'] = true;
$params['selectbox_id'] = 'prediction_module';
$params['none_module_text'] = __('Select Module');
$params['use_hidden_input_idagent'] = true;
$params['hidden_input_idagent_id'] = 'hidden-id_agente';
$data[1] .= ui_print_agent_autocomplete_input($params);
// Get module and agent of the target prediction module // Get module and agent of the target prediction module
if (!empty($prediction_module)) { if (!empty($prediction_module)) {
$id_agente_clean = modules_get_agentmodule_agent($prediction_module); $id_agente_clean = modules_get_agentmodule_agent($prediction_module);
@ -131,6 +116,19 @@ else {
$id_agente_clean = $id_agente; $id_agente_clean = $id_agente;
$agent_name_clean = $agent_name; $agent_name_clean = $agent_name;
} }
$agent_alias = agents_get_alias($id_agente_clean);
$params = array();
$params['return'] = true;
$params['show_helptip'] = true;
$params['input_name'] = 'agent_name';
$params['value'] = $agent_alias;
$params['javascript_is_function_select'] = true;
$params['selectbox_id'] = 'prediction_module';
$params['none_module_text'] = __('Select Module');
$params['use_hidden_input_idagent'] = true;
$params['hidden_input_idagent_id'] = 'hidden-id_agente_module_prediction';
$data[1] .= ui_print_agent_autocomplete_input($params);
$data[1] .= html_print_label(__("Module"),'prediction_module',true); $data[1] .= html_print_label(__("Module"),'prediction_module',true);
if ($id_agente) { if ($id_agente) {
@ -154,7 +152,7 @@ $periods [1] = __('Monthly');
$periods [2] = __('Daily'); $periods [2] = __('Daily');
$data[1] .= html_print_select ($periods, 'custom_integer_2', $custom_integer_2, '', '', 0, true); $data[1] .= html_print_select ($periods, 'custom_integer_2', $custom_integer_2, '', '', 0, true);
$data[1] .= html_print_input_hidden ('id_agente', $id_agente, true); $data[1] .= html_print_input_hidden ('id_agente_module_prediction', $id_agente, true);
$data[1] .= '</div>'; $data[1] .= '</div>';
$table_simple->colspan['prediction_module'][1] = 3; $table_simple->colspan['prediction_module'][1] = 3;

View File

@ -404,7 +404,8 @@ if (!empty($groups)) {
$symbolBranchs = ' symbol_branch_' . $group['parent']; $symbolBranchs = ' symbol_branch_' . $group['parent'];
$data = groups_get_group_to_list($group, $groups_count, $symbolBranchs); $has_children = isset($sons[$group['id_grupo']]);
$data = groups_get_group_to_list($group, $groups_count, $symbolBranchs, $has_children);
array_push ($table->data, $data); array_push ($table->data, $data);
$table->rowstyle[$iterator] = ''; $table->rowstyle[$iterator] = '';
if ($group['id_grupo'] != 0) { if ($group['id_grupo'] != 0) {

View File

@ -35,7 +35,6 @@ var img_handler_end;
function toggle_advance_options_palette(close) { function toggle_advance_options_palette(close) {
if ($("#advance_options").css('display') == 'none') { if ($("#advance_options").css('display') == 'none') {
$("#advance_options").css('display', ''); $("#advance_options").css('display', '');
$("#advance_options *").css('display', '');
} }
else { else {
$("#advance_options").css('display', 'none'); $("#advance_options").css('display', 'none');

View File

@ -123,6 +123,15 @@ switch ($action) {
'image_height' => $image_height 'image_height' => $image_height
); );
break; break;
case 'WMS':
$url = get_parameter('url');
$layers = get_parameter('layers');
$mapConnectionData = array(
'type' => 'WMS',
'url' => $url,
'layers' => $layers
);
break;
} }
//TODO VALIDATE PARAMETERS //TODO VALIDATE PARAMETERS
@ -168,6 +177,7 @@ $table->data = array();
$types["OSM"] = __('Open Street Maps'); $types["OSM"] = __('Open Street Maps');
$types["Gmap"] = __('Google Maps'); $types["Gmap"] = __('Google Maps');
$types["Static_Image"] = __('Static Image'); $types["Static_Image"] = __('Static Image');
$types["WMS"] = __('WMS Server');
$table->data[0][0] = __('Type') . ":"; $table->data[0][0] = __('Type') . ":";
$table->data[0][1] = html_print_select($types, 'sel_type', $mapConnection_type, "selMapConnectionType();", __('Please select the connection type'), 0, true); $table->data[0][1] = html_print_select($types, 'sel_type', $mapConnection_type, "selMapConnectionType();", __('Please select the connection type'), 0, true);
@ -184,6 +194,7 @@ $bb_bottom = '';
$bb_top = ''; $bb_top = '';
$image_width = ''; $image_width = '';
$image_height = ''; $image_height = '';
$layers = '';
if ($mapConnectionData != null) { if ($mapConnectionData != null) {
switch ($mapConnection_type) { switch ($mapConnection_type) {
case 'OSM': case 'OSM':
@ -202,6 +213,10 @@ if ($mapConnectionData != null) {
$image_width= $mapConnectionData['image_width']; $image_width= $mapConnectionData['image_width'];
$image_height= $mapConnectionData['image_height']; $image_height= $mapConnectionData['image_height'];
break; break;
case 'WMS':
$mapConnectionDataUrl = $mapConnectionData['url'];
$layers = $mapConnectionData['layers'];
break;
} }
} }
// Open Street Map Connection // Open Street Map Connection
@ -260,6 +275,27 @@ $optionsConnectionImageTable = '<table class="databox" border="0" cellpadding="4
'<td>'. html_print_input_text ('image_height', $image_height, '', 25, 25, true) . '</td>' . '<td>'. html_print_input_text ('image_height', $image_height, '', 25, 25, true) . '</td>' .
'</tr>' . '</tr>' .
'</table>'; '</table>';
// WMS Server Connection
$optionsConnectionWMSTable = '<table class="databox" border="0" cellpadding="4" cellspacing="4" width="50%">' .
'<tr class="row_0">' .
'<td>' . __("WMS Server URL") . '</td>' .
'<td>' .
'<input id="type" type="hidden" name="type" value="WMS" />' .
html_print_input_text('url', $mapConnectionDataUrl, '', 90, 255, true) .
'</td>' .
'</tr>' .
'<tr class="row_1">' .
'<td>' .
__("Layers") .
ui_print_help_tip (__('Enter a single element or a comma separated list'), true) .
'</td>' .
'<td>' .
html_print_input_text('layers', $layers, '', 90, 255, true) .
'</td>' .
'</tr>' .
'</table>';
if ($mapConnectionData != null) { if ($mapConnectionData != null) {
switch ($mapConnection_type) { switch ($mapConnection_type) {
case 'OSM': case 'OSM':
@ -271,6 +307,9 @@ if ($mapConnectionData != null) {
case 'Static_Image': case 'Static_Image':
$optionsConnectionTypeTable = $optionsConnectionImageTable; $optionsConnectionTypeTable = $optionsConnectionImageTable;
break; break;
case 'WMS':
$optionsConnectionTypeTable = $optionsConnectionWMSTable;
break;
} }
} }
@ -434,6 +473,8 @@ function refreshMapViewSecondStep() {
objBaseLayers[0]['bb_top'] = $('input[name=bb_top]').val(); objBaseLayers[0]['bb_top'] = $('input[name=bb_top]').val();
objBaseLayers[0]['image_width'] = $('input[name=image_width]').val(); objBaseLayers[0]['image_width'] = $('input[name=image_width]').val();
objBaseLayers[0]['image_height'] = $('input[name=image_height]').val(); objBaseLayers[0]['image_height'] = $('input[name=image_height]').val();
// type WMS
objBaseLayers[0]['layers'] = $('input[name=layers]').val();
arrayControls = null; arrayControls = null;
arrayControls = Array('Navigation', 'PanZoom', 'MousePosition'); arrayControls = Array('Navigation', 'PanZoom', 'MousePosition');
@ -487,6 +528,9 @@ function selMapConnectionType() {
case 'Static_Image': case 'Static_Image':
$('#form_map_connection_type').html('<?php echo $optionsConnectionImageTable; ?>').hide(); $('#form_map_connection_type').html('<?php echo $optionsConnectionImageTable; ?>').hide();
break; break;
case 'WMS':
$('#form_map_connection_type').html('<?php echo $optionsConnectionWMSTable; ?>').hide();
break;
default: default:
$('#form_map_connection_type').html('').hide(); $('#form_map_connection_type').html('').hide();
break; break;

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

View File

@ -234,7 +234,8 @@ if ($get_graphs){
$height = 300; $height = 300;
} }
$table .= "<div style='width: 90%'><h4>".$graph[0]['name']."</h4><hr></div>"; $table .= "<div style='width: 90%'><h4>".$graph[0]['name']."</h4><hr></div>";
$table .= graphic_combined_module($modules, $table .= graphic_combined_module(
$modules,
$weights, $weights,
$value['time_lapse'], $value['time_lapse'],
1000, 1000,
@ -261,7 +262,7 @@ if ($get_graphs){
$labels, $labels,
false, false,
false, false,
null, true,
false, false,
false, false,
$value['fullscale'] $value['fullscale']

View File

@ -1083,6 +1083,10 @@ if ($list_modules) {
$url = 'include/procesos.php?agente='.$module["id_agente_modulo"]; $url = 'include/procesos.php?agente='.$module["id_agente_modulo"];
$win_handle=dechex(crc32($module["id_agente_modulo"].$module["nombre"])); $win_handle=dechex(crc32($module["id_agente_modulo"].$module["nombre"]));
// Try to display the SNMP module realtime graph
$rt_button .= get_module_realtime_link_graph($module);
if (!empty($rt_button)) $data[8] = $rt_button . "&nbsp;&nbsp;";
# Show events for boolean modules by default. # Show events for boolean modules by default.
if ($graph_type == 'boolean') { if ($graph_type == 'boolean') {
$draw_events = 1; $draw_events = 1;
@ -1099,9 +1103,8 @@ if ($list_modules) {
base64_encode($module["nombre"]))) . "&amp;" . base64_encode($module["nombre"]))) . "&amp;" .
"refresh=" . SECONDS_10MINUTES . "&amp;" . "refresh=" . SECONDS_10MINUTES . "&amp;" .
"draw_events=$draw_events', 'day_".$win_handle."')"; "draw_events=$draw_events', 'day_".$win_handle."')";
if(!is_snapshot_data($module['datos'])){
if(!is_snapshot_data($module['datos'])){ $data[8] .= '<a href="javascript:'.$link.'">' . html_print_image("images/chart_curve.png", true, array("border" => '0', "alt" => "")) . '</a> &nbsp;&nbsp;';
$data[8] .= '<a href="javascript:'.$link.'">' . html_print_image("images/chart_curve.png", true, array("border" => '0', "alt" => "")) . '</a> &nbsp;&nbsp;';
} }
$server_name = ''; $server_name = '';
$data[8] .= "<a href='javascript: " . $data[8] .= "<a href='javascript: " .

View File

@ -15,6 +15,14 @@
global $config; global $config;
check_login ();
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
db_pandora_audit("ACL Violation", "Trying to access update Management");
require ("general/noaccess.php");
return;
}
require_once($config['homedir'] . "/include/functions_update_manager.php"); require_once($config['homedir'] . "/include/functions_update_manager.php");
require_once($config['homedir'] . "/include/functions_graph.php"); require_once($config['homedir'] . "/include/functions_graph.php");
enterprise_include_once("include/functions_update_manager.php"); enterprise_include_once("include/functions_update_manager.php");

View File

@ -116,7 +116,7 @@ if ($correctLogin) {
$id_os = db_get_value_sql('select id_os from tagente where id_agente = '.$id); $id_os = db_get_value_sql('select id_os from tagente where id_agente = '.$id);
if($id_os == 21){ if($id_os == 100){
returnError('not_allowed_operation_cluster', $returnType); returnError('not_allowed_operation_cluster', $returnType);
return false; return false;
} }
@ -135,7 +135,7 @@ if ($correctLogin) {
html_debug($id_os); html_debug($id_os);
if($id_os == 21){ if($id_os == 100){
returnError('not_allowed_operation_cluster', $returnType); returnError('not_allowed_operation_cluster', $returnType);
return false; return false;
} }
@ -149,7 +149,7 @@ if ($correctLogin) {
$id_os = db_get_value_sql('select id_os from tagente where id_agente = (select id_agente from tagente_modulo where id_agente_modulo ='.$id.')'); $id_os = db_get_value_sql('select id_os from tagente where id_agente = (select id_agente from tagente_modulo where id_agente_modulo ='.$id.')');
if($id_os == 21){ if($id_os == 100){
returnError('not_allowed_operation_cluster', $returnType); returnError('not_allowed_operation_cluster', $returnType);
return false; return false;
} }

View File

@ -22,7 +22,7 @@
/** /**
* Pandora build version and version * Pandora build version and version
*/ */
$build_version = 'PC180423'; $build_version = 'PC180510';
$pandora_version = 'v7.0NG.722'; $pandora_version = 'v7.0NG.722';
// Do not overwrite default timezone set if defined. // Do not overwrite default timezone set if defined.

View File

@ -1330,12 +1330,13 @@ function agents_get_name ($id_agent, $case = "none") {
* @return string Alias of the given agent. * @return string Alias of the given agent.
*/ */
function agents_get_alias ($id_agent, $case = 'none') { function agents_get_alias ($id_agent, $case = 'none') {
if(is_metaconsole()){ global $config;
if($config['dbconnection_cache'] == null && is_metaconsole()){
$alias = (string) db_get_value ('alias', 'tmetaconsole_agent', 'id_tagente', (int) $id_agent); $alias = (string) db_get_value ('alias', 'tmetaconsole_agent', 'id_tagente', (int) $id_agent);
} else { } else {
$alias = (string) db_get_value ('alias', 'tagente', 'id_agente', (int) $id_agent); $alias = (string) db_get_value ('alias', 'tagente', 'id_agente', (int) $id_agent);
} }
switch ($case) { switch ($case) {
case 'upper': case 'upper':
return mb_strtoupper($alias, 'UTF-8'); return mb_strtoupper($alias, 'UTF-8');

View File

@ -10271,7 +10271,7 @@ function api_set_new_cluster($thrash1, $thrash2, $other, $thrash3) {
$id_parent_modulo = db_process_sql('select id_agente_modulo from tagente_modulo where id_agente = '.$id_agent[0]['id_agent'].' and nombre = "Cluster status"'); $id_parent_modulo = db_process_sql('select id_agente_modulo from tagente_modulo where id_agente = '.$id_agent[0]['id_agent'].' and nombre = "Cluster status"');
$get_module_type = db_process_sql('select id_tipo_modulo,descripcion,min_warning,min_critical,module_interval from tagente_modulo where nombre = "'.$element["name"].'" limit 1'); $get_module_type = db_process_sql('select id_tipo_modulo,descripcion,min_warning,min_critical,module_interval from tagente_modulo where nombre = "'.io_safe_input($element["name"]).'" limit 1');
$get_module_type_value = $get_module_type[0]['id_tipo_modulo']; $get_module_type_value = $get_module_type[0]['id_tipo_modulo'];
@ -10302,6 +10302,8 @@ function api_set_new_cluster($thrash1, $thrash2, $other, $thrash3) {
$id_module = modules_create_agent_module($values_module['id_agente'],$values_module['nombre'],$values_module); $id_module = modules_create_agent_module($values_module['id_agente'],$values_module['nombre'],$values_module);
$launch_cluster = db_process_sql('update tagente_modulo set flag = 1 where custom_integer_1 = '.$element["id_cluster"].' and nombre = "Cluster status"');
if ($tcluster_module !== false){ if ($tcluster_module !== false){
db_pandora_audit("Report management", "Module #".$element["name"]." assigned to cluster #".$element["id_cluster"]); db_pandora_audit("Report management", "Module #".$element["name"]." assigned to cluster #".$element["id_cluster"]);
} }
@ -10319,7 +10321,7 @@ function api_set_new_cluster($thrash1, $thrash2, $other, $thrash3) {
$tcluster_balanced_module = db_process_sql_insert('tcluster_item',array('name'=>$element["name"],'id_cluster'=>$element["id_cluster"],'item_type'=>"AP",'is_critical'=>$element["is_critical"])); $tcluster_balanced_module = db_process_sql_insert('tcluster_item',array('name'=>$element["name"],'id_cluster'=>$element["id_cluster"],'item_type'=>"AP",'is_critical'=>$element["is_critical"]));
$get_module_type = db_process_sql('select id_tipo_modulo,descripcion,min_warning,min_critical,module_interval from tagente_modulo where nombre = "'.$element["name"].'" limit 1'); $get_module_type = db_process_sql('select id_tipo_modulo,descripcion,min_warning,min_critical,module_interval from tagente_modulo where nombre = "'.io_safe_input($element["name"]).'" limit 1');
$get_module_type_value = $get_module_type[0]['id_tipo_modulo']; $get_module_type_value = $get_module_type[0]['id_tipo_modulo'];
@ -10369,6 +10371,8 @@ function api_set_new_cluster($thrash1, $thrash2, $other, $thrash3) {
); );
$id_module = modules_create_agent_module($values_module['id_agente'],$values_module['nombre'],$values_module); $id_module = modules_create_agent_module($values_module['id_agente'],$values_module['nombre'],$values_module);
$launch_cluster = db_process_sql('update tagente_modulo set flag = 1 where custom_integer_1 = '.$element["id_cluster"].' and nombre = "Cluster status"');
if ($tcluster_balanced_module !== false){ if ($tcluster_balanced_module !== false){
db_pandora_audit("Report management", "Module #".$element["name"]." assigned to cluster #".$element["id_cluster"]); db_pandora_audit("Report management", "Module #".$element["name"]." assigned to cluster #".$element["id_cluster"]);
@ -10614,4 +10618,22 @@ function api_set_apply_module_template($id_template, $id_agent, $thrash3, $thras
} }
?> function api_get_cluster_status($id_cluster, $trash1, $trash2, $returnType) {
if (defined ('METACONSOLE')) {
return;
}
$sql = "select estado from tagente_estado INNER JOIN tagente_modulo ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo and tagente_modulo.nombre = 'Cluster status' and tagente_modulo.id_agente = (select id_agent from tcluster where id = ".$id_cluster.")";
$value = db_get_value_sql($sql);
if ($value === false) {
returnError('id_not_found', $returnType);
}
$data = array('type' => 'string', 'data' => $value);
returnData($returnType, $data);
}
?>

View File

@ -92,28 +92,27 @@ function extensions_is_extension ($page) {
* *
* @param bool $enterprise * @param bool $enterprise
*/ */
function extensions_get_extensions ($enterprise = false) { function extensions_get_extensions ($enterprise = false, $rel_path = '') {
$dir = EXTENSIONS_DIR; $dir = $rel_path . EXTENSIONS_DIR;
$master_dir = ENTERPRISE_DIR . '/' . EXTENSIONS_DIR; $master_dir = $rel_path . ENTERPRISE_DIR . '/' . EXTENSIONS_DIR;
$handle = false; $handle = false;
if ($enterprise) { if ($enterprise) {
$dir = ENTERPRISE_DIR . '/' . EXTENSIONS_DIR; $dir = $rel_path . ENTERPRISE_DIR . '/' . EXTENSIONS_DIR;
if (defined("METACONSOLE")) { if (defined("METACONSOLE")) {
$dir = '../' . EXTENSIONS_DIR; $dir = $rel_path . '../' . EXTENSIONS_DIR;
$master_dir = '../' . EXTENSIONS_DIR; $master_dir = $rel_path . '../' . EXTENSIONS_DIR;
} }
} }
else { else {
if (defined("METACONSOLE")) { if (defined("METACONSOLE")) {
$dir = '../../' . $dir; $dir = $rel_path . '../../' . $dir;
$master_dir = '../' . EXTENSIONS_DIR; $master_dir = $rel_path . '../' . EXTENSIONS_DIR;
} }
} }
if (file_exists ($dir)) if (file_exists ($dir))
$handle = @opendir ($dir); $handle = @opendir ($dir);
if (empty ($handle)) if (empty ($handle))
return; return;
@ -148,11 +147,22 @@ function extensions_get_extensions ($enterprise = false) {
/* Load extensions in enterprise directory */ /* Load extensions in enterprise directory */
if (! $enterprise && file_exists ($master_dir)) if (! $enterprise && file_exists ($master_dir))
return array_merge ($extensions, extensions_get_extensions (true)); return array_merge ($extensions, extensions_get_extensions (true, $rel_path));
return $extensions; return $extensions;
} }
/**
* @brief Check if an extension is enabled
*
* @param string Extension name (ended with .php)
* @return True if enabled
*/
function extensions_is_enabled_extension($name) {
global $config;
return isset($config['extensions'][$name]);
}
/** /**
* Get disabled open and enterprise extensions * Get disabled open and enterprise extensions
*/ */

View File

@ -118,6 +118,10 @@ function gis_print_map($idDiv, $iniZoom, $latCenter, $lonCenter, $baselayers, $c
case 'Gmap': case 'Gmap':
echo "baselayer['gmap_type'] = '" . $baselayer['gmap_type'] . "';"; echo "baselayer['gmap_type'] = '" . $baselayer['gmap_type'] . "';";
break; break;
case 'WMS':
echo "baselayer['url'] = '" . $baselayer['url'] . "';";
echo "baselayer['layers'] = '" . $baselayer['layers'] . "';";
break;
} }
echo "baselayerList.push(baselayer);"; echo "baselayerList.push(baselayer);";
@ -1035,6 +1039,10 @@ function gis_get_agent_map($agent_id, $heigth, $width, $show_history = false, $c
$baselayers[0]['image_width'] = $conectionData['image_width']; $baselayers[0]['image_width'] = $conectionData['image_width'];
$baselayers[0]['image_height'] = $conectionData['image_height']; $baselayers[0]['image_height'] = $conectionData['image_height'];
break; break;
case 'WMS':
$baselayers[0]['url'] = $conectionData['url'];
$baselayers[0]['layers'] = $conectionData['layers'];
break;
} }
if ($gmap_layer === true) { if ($gmap_layer === true) {

View File

@ -1073,7 +1073,7 @@ function graph_get_formatted_date($timestamp, $format1, $format2) {
* @param int Show alerts in graph (set to 1) * @param int Show alerts in graph (set to 1)
* @param int Pure mode (without titles) (set to 1) * @param int Pure mode (without titles) (set to 1)
* @param int Date to start of getting info. * @param int Date to start of getting info.
* @param mixed If is a projection graph this parameter will be module data with prediction data (the projection) * @param mixed If is a projection graph this parameter will be module data with prediction data (the projection)
* or false in other case. * or false in other case.
* @param array List of names for the items. Should have the same size as the module list. * @param array List of names for the items. Should have the same size as the module list.
* @param array List of units for the items. Should have the same size as the module list. * @param array List of units for the items. Should have the same size as the module list.
@ -1084,12 +1084,42 @@ function graph_get_formatted_date($timestamp, $format1, $format2) {
* *
* @return Mixed * @return Mixed
*/ */
function graphic_combined_module ( $module_list, $weight_list, $period, $width, $height, $title, $unit_name, function graphic_combined_module (
$show_events = 0, $show_alerts = 0, $pure = 0, $stacked = 0, $date = 0, $only_image = false, $homeurl = '', $module_list,
$ttl = 1, $projection = false, $prediction_period = false, $backgroundColor = 'white', $name_list = array(), $weight_list,
$unit_list = array(), $show_last = true, $show_max = true, $show_min = true, $show_avg = true, $labels = array(), $period,
$dashboard = false, $vconsole = false, $percentil = null, $from_interface = false, $id_widget_dashboard=false, $width,
$fullscale = false, $summatory = 0, $average = 0, $modules_series = 0 ) { $height,
$title,
$unit_name,
$show_events = 0,
$show_alerts = 0,
$pure = 0,
$stacked = 0,
$date = 0,
$only_image = false,
$homeurl = '',
$ttl = 1,
$projection = false,
$prediction_period = false,
$background_color = 'white',
$name_list = array(),
$unit_list = array(),
$show_last = true,
$show_max = true,
$show_min = true,
$show_avg = true,
$labels = array(),
$dashboard = false,
$vconsole = false,
$percentil = null,
$from_interface = false,
$id_widget_dashboard=false,
$fullscale = false,
$summatory = 0,
$average = 0,
$modules_series = 0
) {
global $config; global $config;
global $graphic_type; global $graphic_type;

View File

@ -2122,7 +2122,7 @@ function groups_agent_disabled ($group_array) {
* @return mixed Row with html_print_table format * @return mixed Row with html_print_table format
* *
*/ */
function groups_get_group_to_list($group, $groups_count, &$symbolBranchs) { function groups_get_group_to_list($group, $groups_count, &$symbolBranchs, $has_children = false) {
$tabulation = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $group['deep']); $tabulation = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $group['deep']);
if ($group['id_grupo'] == 0) { if ($group['id_grupo'] == 0) {
@ -2160,11 +2160,16 @@ function groups_get_group_to_list($group, $groups_count, &$symbolBranchs) {
'id_group=' . $group['id_grupo'] . '">' . html_print_image("images/config.png", true, array("alt" => __('Edit'), "title" => __('Edit'), "border" => '0')); 'id_group=' . $group['id_grupo'] . '">' . html_print_image("images/config.png", true, array("alt" => __('Edit'), "title" => __('Edit'), "border" => '0'));
//Check if there is only a group to unable delete it //Check if there is only a group to unable delete it
if ($groups_count > 2) { if ($groups_count > 2) {
$confirm_message = __('Are you sure?');
if ($has_children) {
$confirm_message = __('The child groups will be updated to use the parent id of the deleted group') . ". " . $confirm_message;
}
$data[5] .= '&nbsp;&nbsp;' . $data[5] .= '&nbsp;&nbsp;' .
'<a href="index.php?sec=gagente&' . '<a href="index.php?sec=gagente&' .
'sec2=godmode/groups/group_list&' . 'sec2=godmode/groups/group_list&' .
'id_group=' . $group['id_grupo'] . '&' . 'id_group=' . $group['id_grupo'] . '&' .
'delete_group=1" onClick="if (!confirm(\' '.__('Are you sure?').'\')) return false;">' . html_print_image("images/cross.png", true, array("alt" => __('Delete'), "border" => '0')); 'delete_group=1" onClick="if (!confirm(\' '.$confirm_message.'\')) return false;">' . html_print_image("images/cross.png", true, array("alt" => __('Delete'), "border" => '0'));
} }
else { else {
$data[5] .= '&nbsp;&nbsp;' . $data[5] .= '&nbsp;&nbsp;' .
@ -2193,7 +2198,9 @@ function groups_print_group_sons($group, $sons, &$branch_classes, $groups_count,
foreach($sons[$group['id_grupo']] as $key => $g) { foreach($sons[$group['id_grupo']] as $key => $g) {
$symbolBranchs .= ' symbol_branch_' . $g['parent']; $symbolBranchs .= ' symbol_branch_' . $g['parent'];
$data = groups_get_group_to_list($g, $groups_count, $symbolBranchs); $has_children = isset($sons[$g['id_grupo']]);
$data = groups_get_group_to_list($g, $groups_count, $symbolBranchs, $has_children);
array_push ($table->data, $data); array_push ($table->data, $data);
$branch_classes[$g['id_grupo']] = $branch_classes[$g['parent']] . ' branch_' . $g['parent']; $branch_classes[$g['id_grupo']] = $branch_classes[$g['parent']] . ' branch_' . $g['parent'];

View File

@ -2683,4 +2683,62 @@ function recursive_get_dt_from_modules_tree (&$f_modules, $modules, $deep) {
} }
} }
/**
* @brief Get the button with the link to open realtime stats into a new window
* Only to native (not satellite discovered) snmp modules.
*
* @param array With all the module info
* @return string All the HTML code to paint the button
*/
function get_module_realtime_link_graph ($module) {
global $config;
// Sometimes some parameters are renamed
if (!isset($module['id_tipo_modulo'])) $module['id_tipo_modulo'] = $module['module_type'];
if (!isset($module['nombre'])) $module['nombre'] = $module['module_name'];
// Avoid to show on metaconsole
if (is_metaconsole()) return '';
// Realtime graph is an extension and it should be enabled
if (!extensions_is_enabled_extension("realtime_graphs.php")) return '';
// Only to remote_snmp, remote_snmp_proc. snmp_snmp_inc
if ($module['id_tipo_modulo'] != 15 && $module['id_tipo_modulo'] != 16 && $module['id_tipo_modulo'] != 18) {
return '';
}
// Only version 1, 2 and 2c
if ($module['tcp_send'] != "1" && $module['tcp_send'] != "2" && $module['tcp_send'] != "2c") {
return '';
}
$params = array(
'graph' => 'snmp_module',
'agent_alias' => modules_get_agentmodule_agent_alias($module['id_agente_modulo']),
'module_name' => $module['nombre'],
'snmp_address' => $module['ip_target'],
'snmp_community' => $module['snmp_community'],
'snmp_oid' => $module['snmp_oid'],
'snmp_ver' => $module['tcp_send'],
'hide_header' => 1,
'rel_path' => '../../'
);
// Incremental type
if ($module['id_tipo_modulo'] == 16) $params['incremental'] = 1;
$link = "operation/agentes/realtime_win.php?";
foreach ($params as $p_key => $p_value) {
$link .= "$p_key=" . urlencode(io_safe_output($p_value)) . "&";
}
$link = substr($link, 0, -1);
$win_handle = "realtime_" . dechex(crc32($module["id_agente_modulo"].$module["nombre"]));
$link_button = '<a href="javascript:winopeng_var(\''.$link.'\',\''.$win_handle.'\', 850, 480)">' .
html_print_image(
"images/realtime_shortcut.png",
true,
array("border" => '0', "alt" => "", 'title' => __('Realtime SNMP graph'))
) .
'</a>';
return $link_button;
}
?> ?>

View File

@ -1815,7 +1815,8 @@ if (empty($list_networkmaps))
$table->data[1][0] = ''; $table->data[1][0] = '';
$table->data[1][1] = $table->data[1][1] =
html_print_button(__('Add agent node'), '', false, html_print_button(__('Add agent node'), '', false,
'add_agent_node();', 'class="sub"', true); 'add_agent_node();', 'class="sub"', true) . html_print_image('images/error_red.png', true,
array('id' => 'error_red', 'style' => 'vertical-align: bottom;display: none;', 'class' => 'forced_title', 'alt' => 'Esto es una prueba', 'data-title' => 'data-use_title_for_force_title:1'), false);
$add_agent_node_html = html_print_table($table, true); $add_agent_node_html = html_print_table($table, true);
ui_toggle($add_agent_node_html, __('Add agent node'), ui_toggle($add_agent_node_html, __('Add agent node'),

View File

@ -879,7 +879,7 @@ function reporting_SLA($report, $content, $type = 'dinamic',
} }
$i++; $i++;
} }
$data['sla_value'] = reporting_sla_get_compliance_from_array($data) * 100; $data['sla_value'] = reporting_sla_get_compliance_from_array($data);
$data['sla_fixed'] = sla_truncate($data['sla_value'], $config['graph_precision'] ); $data['sla_fixed'] = sla_truncate($data['sla_value'], $config['graph_precision'] );
} }
else{ else{
@ -895,8 +895,8 @@ function reporting_SLA($report, $content, $type = 'dinamic',
$data['checks_error'] = $sla_array['checks_error']; $data['checks_error'] = $sla_array['checks_error'];
$data['checks_unknown'] = $sla_array['checks_unknown']; $data['checks_unknown'] = $sla_array['checks_unknown'];
$data['checks_not_init'] = $sla_array['checks_not_init']; $data['checks_not_init'] = $sla_array['checks_not_init'];
$data['sla_value'] = $sla_array['SLA'] * 100; $data['sla_value'] = $sla_array['SLA'];
$data['sla_fixed'] = $sla_array['sla_fixed'] * 100; $data['sla_fixed'] = $sla_array['sla_fixed'];
} }
//checks whether or not it meets the SLA //checks whether or not it meets the SLA
@ -5846,7 +5846,7 @@ function reporting_availability_graph($report, $content, $pdf=false) {
$raw_graph[$i]['utimestamp'] = $value_sla['date_to'] - $value_sla['date_from']; $raw_graph[$i]['utimestamp'] = $value_sla['date_to'] - $value_sla['date_from'];
$i++; $i++;
} }
$data['sla_value'] = reporting_sla_get_compliance_from_array($data) * 100; $data['sla_value'] = reporting_sla_get_compliance_from_array($data);
$data['sla_fixed'] = sla_truncate($data['sla_value'], $config['graph_precision'] ); $data['sla_fixed'] = sla_truncate($data['sla_value'], $config['graph_precision'] );
} }
else{ else{
@ -5862,7 +5862,7 @@ function reporting_availability_graph($report, $content, $pdf=false) {
$data['checks_error'] = $sla_array['checks_error']; $data['checks_error'] = $sla_array['checks_error'];
$data['checks_unknown'] = $sla_array['checks_unknown']; $data['checks_unknown'] = $sla_array['checks_unknown'];
$data['checks_not_init'] = $sla_array['checks_not_init']; $data['checks_not_init'] = $sla_array['checks_not_init'];
$data['sla_value'] = $sla_array['SLA'] * 100; $data['sla_value'] = $sla_array['SLA'];
} }
//checks whether or not it meets the SLA //checks whether or not it meets the SLA
@ -5891,6 +5891,8 @@ function reporting_availability_graph($report, $content, $pdf=false) {
$dataslice['order'] = $data['sla_value']; $dataslice['order'] = $data['sla_value'];
$dataslice['checks_total'] = $data['checks_total']; $dataslice['checks_total'] = $data['checks_total'];
$dataslice['checks_ok'] = $data['checks_ok']; $dataslice['checks_ok'] = $data['checks_ok'];
$dataslice['time_total'] = $data['time_total'];
$dataslice['time_not_init']= $data['time_not_init'];
$dataslice['sla_status'] = $data['sla_status']; $dataslice['sla_status'] = $data['sla_status'];
$dataslice['sla_value'] = $data['sla_value']; $dataslice['sla_value'] = $data['sla_value'];
@ -10991,13 +10993,36 @@ function reporting_label_macro ($item, $label) {
* @brief Calculates the SLA compliance value given an sla array * @brief Calculates the SLA compliance value given an sla array
* *
* @param Array With keys time_ok, time_error, time_downtime and time_unknown * @param Array With keys time_ok, time_error, time_downtime and time_unknown
* @return SLA Return the compliance value.
*/ */
function reporting_sla_get_compliance_from_array ($sla_array) { function reporting_sla_get_compliance_from_array ($sla_array) {
$time_compliance = $sla_array['time_ok'] + $sla_array['time_unknown'] + $sla_array['time_downtime']; $time_compliance = $sla_array['time_ok'] + $sla_array['time_unknown'] + $sla_array['time_downtime'];
$time_total_working = $time_compliance + $sla_array['time_error']; $time_total_working = $time_compliance + $sla_array['time_error'];
return $time_compliance == 0 return $time_compliance == 0
? 0 ? 0
: $time_compliance/$time_total_working; : ($time_compliance/$time_total_working) * 100;
}
/**
* @brief Calculates if an SLA array is not init
*
* @param Array With keys time_ok, time_error, time_downtime and time_unknown
* @return bool True if not init
*/
function reporting_sla_is_not_init_from_array($sla_array) {
if ($sla_array["time_total"] == 0) return false;
return $sla_array["time_not_init"] == $sla_array["time_total"];
}
/**
* @brief Calculates if an SLA array is ignored
*
* @param Array With keys time_ok, time_error, time_downtime and time_unknown
* @return bool True if igonred time
*/
function reporting_sla_is_ignored_from_array($sla_array) {
if ($sla_array["time_total"] > 0) return false;
return $sla_array["time_not_init"] == 0;
} }
/** /**

View File

@ -485,14 +485,19 @@ function reporting_html_SLA($table, $item, $mini) {
$row[] = $sla['dinamic_text']; $row[] = $sla['dinamic_text'];
} }
$row[] = round($sla['sla_limit'], 2) . "%"; $row[] = round($sla['sla_limit'], 2) . "%";
if ($sla['sla_value_unknown']) { if (reporting_sla_is_not_init_from_array($sla)) {
$row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_UNKNOWN.';">' . $row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NOTINIT.';">' .
__('N/A') . '</span>'; __('N/A') . '</span>';
$row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_UNKNOWN.';">' . $row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NOTINIT.';">' .
__('Unknown') . '</span>'; __('Not init') . '</span>';
} } elseif (reporting_sla_is_ignored_from_array($sla)) {
elseif ($sla['sla_status']) { $row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_IGNORED.';">' .
__('N/A') . '</span>';
$row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_IGNORED.';">' .
__('No data') . '</span>';
// Normal calculation
} elseif ($sla['sla_status']) {
$row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NORMAL.';">' . $row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NORMAL.';">' .
sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . '</span>'; sla_truncate($sla['sla_value'], $config['graph_precision']) . "%" . '</span>';
$row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NORMAL.';">' . $row[] = '<span style="font: bold '.$font_size.'em Arial, Sans-serif; color: '.COL_NORMAL.';">' .
@ -2564,24 +2569,36 @@ function reporting_html_availability_graph(&$table, $item, $pdf=0) {
$table1->width = '99%'; $table1->width = '99%';
$table1->data = array (); $table1->data = array ();
foreach ($item['charts'] as $chart) { foreach ($item['charts'] as $chart) {
switch ($chart['sla_status']) { $checks_resume = '';
case REPORT_STATUS_ERR: $sla_value = '';
$color = COL_CRITICAL; if (reporting_sla_is_not_init_from_array($chart)) {
break; $color = COL_NOTINIT;
case REPORT_STATUS_OK: $sla_value = __('Not init');
$color = COL_NORMAL; } elseif (reporting_sla_is_ignored_from_array($chart)) {
break; $color = COL_IGNORED;
default: $sla_value = __('No data');
$color = COL_UNKNOWN; } else {
break; switch ($chart['sla_status']) {
case REPORT_STATUS_ERR:
$color = COL_CRITICAL;
break;
case REPORT_STATUS_OK:
$color = COL_NORMAL;
break;
default:
$color = COL_UNKNOWN;
break;
}
$sla_value = sla_truncate($chart['sla_value'], $config['graph_precision']) . '%';
$checks_resume = "(" . $chart['checks_ok'] . "/" . $chart['checks_total'] . ")";
} }
$table1->data[] = array( $table1->data[] = array(
$chart['agent'] . "<br />" . $chart['module'], $chart['agent'] . "<br />" . $chart['module'],
$chart['chart'], $chart['chart'],
"<span style = 'font: bold 2em Arial, Sans-serif; color: ".$color."'>" . "<span style = 'font: bold 2em Arial, Sans-serif; color: ".$color."'>" .
sla_truncate($chart['sla_value'], $config['graph_precision']) . '%' . $sla_value .
'</span>', '</span>',
"(" . $chart['checks_ok'] . "/" . $chart['checks_total'] . ")" $checks_resume
); );
} }

View File

@ -576,16 +576,17 @@ function snmp_browser_print_container ($return = false, $width = '100%', $height
enterprise_include_once ('include/functions_satellite.php'); enterprise_include_once ('include/functions_satellite.php');
$rows = get_proxy_servers(); $rows = get_proxy_servers();
foreach ($rows as $row) { if ($rows !== false) {
if ($row['server_type'] != 13) { foreach ($rows as $row) {
$s_type = " (Standard)"; if ($row['server_type'] != 13) {
$s_type = " (Standard)";
}
else {
$s_type = " (Satellite)";
}
$servers_to_exec[$row['id_server']] = $row['name'] . $s_type;
}
} }
else {
$s_type = " (Satellite)";
}
$servers_to_exec[$row['id_server']] = $row['name'] . $s_type;
}
} }
$table->data[1][1] = '<strong>' . __('Server to execute') . '</strong> &nbsp;&nbsp;'; $table->data[1][1] = '<strong>' . __('Server to execute') . '</strong> &nbsp;&nbsp;';
$table->data[1][1] .= html_print_select($servers_to_exec, 'server_to_exec', '', '', '', '', true); $table->data[1][1] .= html_print_select($servers_to_exec, 'server_to_exec', '', '', '', '', true);

View File

@ -719,10 +719,10 @@ function tags_get_acl_tags($id_user, $id_group, $access = 'AR',
function tags_get_acl_tags_module_condition($acltags, $modules_table = '') { function tags_get_acl_tags_module_condition($acltags, $modules_table = '') {
if (!empty($modules_table)) if (!empty($modules_table))
$modules_table .= '.'; $modules_table .= '.';
$condition = ''; $condition = '';
$group_conditions = array(); $group_conditions = array();
// The acltags array contains the groups with the acl propagation applied // The acltags array contains the groups with the acl propagation applied
// after the changes done into the 'tags_get_user_groups_and_tags' function. // after the changes done into the 'tags_get_user_groups_and_tags' function.
foreach ($acltags as $group_id => $group_tags) { foreach ($acltags as $group_id => $group_tags) {
@ -733,8 +733,9 @@ function tags_get_acl_tags_module_condition($acltags, $modules_table = '') {
AND ttmc.id_tag IN (%s)', AND ttmc.id_tag IN (%s)',
is_array($group_tags) ? implode(',', $group_tags) : $group_tags); is_array($group_tags) ? implode(',', $group_tags) : $group_tags);
} }
// FIXME: Not properly way to increse performance
$agent_condition = sprintf('SELECT tamc.id_agente_modulo if(enterprise_hook('agents_is_using_secondary_groups')){
$agent_condition = sprintf('SELECT tamc.id_agente_modulo
FROM tagente_modulo tamc FROM tagente_modulo tamc
%s %s
INNER JOIN tagente tac INNER JOIN tagente tac
@ -743,10 +744,21 @@ function tags_get_acl_tags_module_condition($acltags, $modules_table = '') {
ON tasg.id_agent = tac.id_agente ON tasg.id_agent = tac.id_agente
WHERE (tac.id_grupo = %d OR tasg.id_group = %d)', WHERE (tac.id_grupo = %d OR tasg.id_group = %d)',
$tag_join, $group_id, $group_id); $tag_join, $group_id, $group_id);
}
else{
$agent_condition = sprintf('SELECT tamc.id_agente_modulo
FROM tagente_modulo tamc
%s
INNER JOIN tagente tac
ON tamc.id_agente = tac.id_agente
AND tac.id_grupo = %d',
$tag_join, $group_id);
}
$sql_condition = sprintf('(%sid_agente_modulo IN (%s))', $modules_table, $agent_condition); $sql_condition = sprintf('(%sid_agente_modulo IN (%s))', $modules_table, $agent_condition);
$group_conditions[] = $sql_condition; $group_conditions[] = $sql_condition;
$i++; $i++;
} }
@ -859,7 +871,13 @@ function tags_get_acl_tags_event_condition($acltags, $meta = false, $force_group
// Tags condition (The module has at least one of the restricted tags) // Tags condition (The module has at least one of the restricted tags)
$tags_condition = ''; $tags_condition = '';
if (empty($group_tags)) { if (empty($group_tags)) {
$tags_condition = "id_grupo = ".$group_id . " OR id_group = " . $group_id; // FIXME: Not properly way to increse performance
if(enterprise_hook('agents_is_using_secondary_groups')){
$tags_condition = "id_grupo = ".$group_id . " OR id_group = " . $group_id;
}
else{
$tags_condition = "id_grupo = ".$group_id;
}
} }
else { else {
if (!is_array($group_tags)) { if (!is_array($group_tags)) {

View File

@ -623,7 +623,7 @@ function treeview_printTable($id_agente, $server_data = array(), $no_head = fals
if ( $user_access_node && check_acl ($config["id_user"], $agent["id_grupo"], "AW")) { if ( $user_access_node && check_acl ($config["id_user"], $agent["id_grupo"], "AW")) {
$go_to_agent = '<div style="text-align: right;">'; $go_to_agent = '<div style="text-align: right;">';
if($agent["id_os"] != 21){ if($agent["id_os"] != 100){
$go_to_agent .= '<a target=_blank href="' . $console_url . 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.$url_hash.'">'; $go_to_agent .= '<a target=_blank href="' . $console_url . 'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.$url_hash.'">';
$go_to_agent .= html_print_submit_button (__('Go to agent edition'), 'upd_button', false, 'class="sub config"', true); $go_to_agent .= html_print_submit_button (__('Go to agent edition'), 'upd_button', false, 'class="sub config"', true);
} }

View File

@ -654,7 +654,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) {
$form_items_advance['position_row']['items'] = array('static_graph', $form_items_advance['position_row']['items'] = array('static_graph',
'percentile_bar', 'percentile_item', 'module_graph', 'percentile_bar', 'percentile_item', 'module_graph',
'simple_value', 'label', 'icon', 'datos', 'box_item', 'simple_value', 'label', 'icon', 'datos', 'box_item',
'auto_sla_graph', 'bars_graph','clock'); 'auto_sla_graph', 'bars_graph','clock', 'donut_graph');
$form_items_advance['position_row']['html'] = ' $form_items_advance['position_row']['html'] = '
<td align="left">' . __('Position') . '</td> <td align="left">' . __('Position') . '</td>
<td align="left">(' . html_print_input_text('left', '0', '', 3, 5, true) . <td align="left">(' . html_print_input_text('left', '0', '', 3, 5, true) .
@ -684,7 +684,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) {
'group_item', 'static_graph', 'group_item', 'static_graph',
'percentile_bar', 'percentile_item', 'module_graph', 'percentile_bar', 'percentile_item', 'module_graph',
'simple_value', 'label', 'icon', 'datos', 'auto_sla_graph', 'simple_value', 'label', 'icon', 'datos', 'auto_sla_graph',
'bars_graph'); 'bars_graph', 'donut_graph');
$form_items_advance['parent_row']['html'] = '<td align="left">' . $form_items_advance['parent_row']['html'] = '<td align="left">' .
__('Parent') . '</td> __('Parent') . '</td>
<td align="left">' . <td align="left">' .
@ -696,7 +696,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) {
$form_items_advance['map_linked_row']['items'] = array( $form_items_advance['map_linked_row']['items'] = array(
'group_item', 'static_graph', 'percentile_bar', 'group_item', 'static_graph', 'percentile_bar',
'percentile_item', 'module_graph', 'simple_value', 'percentile_item', 'module_graph', 'simple_value',
'icon', 'label', 'datos'); 'icon', 'label', 'datos', 'donut_graph');
$form_items_advance['map_linked_row']['html'] = '<td align="left">'. $form_items_advance['map_linked_row']['html'] = '<td align="left">'.
__('Map linked') . '</td>' . __('Map linked') . '</td>' .
'<td align="left">' . html_print_select_from_sql ( '<td align="left">' . html_print_select_from_sql (
@ -732,7 +732,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) {
$form_items_advance['element_group_row']['items'] = array( $form_items_advance['element_group_row']['items'] = array(
'group_item', 'static_graph', 'percentile_bar', 'group_item', 'static_graph', 'percentile_bar',
'percentile_item', 'module_graph', 'simple_value', 'percentile_item', 'module_graph', 'simple_value',
'icon', 'label', 'datos'); 'icon', 'label', 'datos', 'donut_graph');
$form_items_advance['element_group_row']['html'] = '<td align="left">'. $form_items_advance['element_group_row']['html'] = '<td align="left">'.
__('Restrict access to group') . '</td>' . __('Restrict access to group') . '</td>' .
'<td align="left">' . '<td align="left">' .

View File

@ -248,6 +248,7 @@ function flot_area_graph (
$array_events_alerts = json_encode($array_events_alerts); $array_events_alerts = json_encode($array_events_alerts);
// Javascript code // Javascript code
if ($font_size == '') $font_size = '\'\'';
$return .= "<script type='text/javascript'>"; $return .= "<script type='text/javascript'>";
$return .= "$(document).ready( function () {"; $return .= "$(document).ready( function () {";
$return .= "pandoraFlotArea(" . $return .= "pandoraFlotArea(" .

View File

@ -111,15 +111,22 @@ function set_center(id) {
function get_relations(node_param) { function get_relations(node_param) {
var return_links = []; var return_links = [];
var links_id_db = [];
jQuery.each(graph.links, function (i, link_each) { jQuery.each(graph.links, function (i, link_each) {
if (node_param.id == link_each.source.id) { if (node_param.id == link_each.source.id || node_param.id == link_each.target.id) {
return_links.push(link_each); if(links_id_db.length > 0){
} if(links_id_db.indexOf(link_each.id_db) == -1){
else if (node_param.id == link_each.target.id) { return_links.push(link_each);
return_links.push(link_each); links_id_db.push(link_each.id_db);
}
} else {
return_links.push(link_each);
links_id_db.push(link_each.id_db);
}
} }
}); });
return return_links; return return_links;
} }
@ -1098,6 +1105,10 @@ function add_agent_node(agents) {
draw_elements_graph(); draw_elements_graph();
init_drag_and_drop(); init_drag_and_drop();
set_positions_graph(); set_positions_graph();
} else {
$("#error_red").show();
$("#error_red").attr("data-title","The agent is already added on the networkmap");
$("#error_red").attr("data-use_title_for_force_title","1");
} }
} }
}); });

View File

@ -139,7 +139,7 @@ function js_printMap(id_div, initial_zoom, center_latitude, center_longitude, ob
map.events.on({"zoomend": EventZoomEnd}); map.events.on({"zoomend": EventZoomEnd});
map.events.on({"mouseup": EventZoomEnd}); map.events.on({"mouseup": EventZoomEnd});
//Define the maps layer //Define the maps layer
for (var baselayerIndex in objBaseLayers) { for (var baselayerIndex in objBaseLayers) {
if (isInt(baselayerIndex)) { if (isInt(baselayerIndex)) {
@ -217,6 +217,29 @@ function js_printMap(id_div, initial_zoom, center_latitude, center_longitude, ob
); );
map.addLayer(baseLayer); map.addLayer(baseLayer);
break; break;
case 'WMS':
// http://<server>/geoserver/wms
// ?bbox=-130,24,-66,50
// &styles=population
// &Format=application/openlayers
// &request=GetMap
// &layers=topp:states
// &width=550
// &height=250
// &srs=EPSG:4326
var layer = new OpenLayers.Layer.WMS(
objBaseLayers[baselayerIndex]['name'],
objBaseLayers[baselayerIndex]['url'],
{
layers: objBaseLayers[baselayerIndex]['layers'],
format: "image/png"
},
{
numZoomLevels: objBaseLayers[baselayerIndex]['num_zoom_levels']
}
);
map.addLayer(layer);
break;
} }
} }
} }

View File

@ -1562,4 +1562,68 @@ function round_with_decimals (value, multiplier = 1) {
return Math.round(value * multiplier) / multiplier; return Math.round(value * multiplier) / multiplier;
} }
return round_with_decimals (value, multiplier * 10); return round_with_decimals (value, multiplier * 10);
}
/*
$("body").append('<div id="event_delete_confirm_dialog"><h4>' + '<?php echo __('Are you sure?'); ?>' + '</h4></div>');
$("#event_delete_confirm_dialog").dialog({
resizable: false,
draggable: false,
modal: true,
height: 280,
width: 330,
overlay: {
opacity: 0.5,
background: "black"
},
closeOnEscape: false,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});
*/
/**
* Display a confirm dialog box
*
* @param string Text to display
* @param string Ok button text
* @param string Cancel button text
* @param function Callback to action when ok button is pressed
*/
function display_confirm_dialog (
message = '',
ok_text = '',
cancel_text = '',
ok_function = function () {}
) {
// Clean function to close the dialog
var clean_function = function () {
$("#pandora_confirm_dialog_text").hide();
$("#pandora_confirm_dialog_text").remove();
}
// Modify the ok function to close the dialog too
var ok_function_clean = function () {
ok_function();
clean_function();
}
// Display the dialog
$("body").append('<div id="pandora_confirm_dialog_text"><h3>' + message + '</h3></div>');
$("#pandora_confirm_dialog_text").dialog({
resizable: false,
draggable: true,
modal: true,
dialogClass: "pandora_confirm_dialog",
overlay: {
opacity: 0.5,
background: "black"
},
closeOnEscape: true,
modal: true,
buttons: {
Cancel: clean_function,
"Confirm": ok_function_clean
}
});
} }

View File

@ -316,6 +316,10 @@ function configure_modules_form () {
$("#text-max_critical").attr ("value", (data["max_critical"] == 0) ? 0 : data["max_critical"]); $("#text-max_critical").attr ("value", (data["max_critical"] == 0) ? 0 : data["max_critical"]);
$("#text-str_critical").attr ("value", data["str_critical"]); $("#text-str_critical").attr ("value", data["str_critical"]);
$("#text-ff_event").attr ("value", (data["min_ff_event"] == 0) ? 0 : data["min_ff_event"]); $("#text-ff_event").attr ("value", (data["min_ff_event"] == 0) ? 0 : data["min_ff_event"]);
$("input[name=each_ff][value=" + data["each_ff"] + "]").prop('checked', true);
$("#text-ff_event_normal").attr ("value", (data["min_ff_event_normal"] == 0) ? 0 : data["min_ff_event_normal"]);
$("#text-ff_event_warning").attr ("value", (data["min_ff_event_warning"] == 0) ? 0 : data["min_ff_event_warning"]);
$("#text-ff_event_critical").attr ("value", (data["min_ff_event_critical"] == 0) ? 0 : data["min_ff_event_critical"]);
$("#text-post_process").attr("value", (data["post_process"] == 0) ? 0 : data["post_process"]); $("#text-post_process").attr("value", (data["post_process"] == 0) ? 0 : data["post_process"]);
$("#text-unit").attr("value", (data["unit"] == '') ? '' : data["unit"]); $("#text-unit").attr("value", (data["unit"] == '') ? '' : data["unit"]);
$("#text-critical_inverse").attr ("value", (data["critical_inverse"] == 0) ? 0 : data["critical_inverse"]); $("#text-critical_inverse").attr ("value", (data["critical_inverse"] == 0) ? 0 : data["critical_inverse"]);

View File

@ -4545,7 +4545,6 @@ form ul.form_flex li ul li{
width: 85%; width: 85%;
height:100%; height:100%;
float:left; float:left;
} }
.status_animation { .status_animation {
@ -4574,7 +4573,6 @@ form ul.form_flex li ul li{
width: 15%; width: 15%;
height:100%; height:100%;
float:left; float:left;
} }
#last_contact_date { #last_contact_date {
@ -4584,9 +4582,9 @@ form ul.form_flex li ul li{
margin-left:5%; margin-left:5%;
text-align:center; text-align:center;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-content: center; align-content: center;
flex-direction: column; flex-direction: column;
} }
#last_contact_date_text { #last_contact_date_text {
@ -4612,9 +4610,9 @@ form ul.form_flex li ul li{
width: 90%; width: 90%;
height:100%; height:100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-content: center; align-content: center;
flex-direction: column; flex-direction: column;
} }
.events_bar { .events_bar {
@ -4629,8 +4627,26 @@ form ul.form_flex li ul li{
} }
/* /*
.tickLabel { .yAxis.y1Axis > .tickLabel {
white-space: nowrap; white-space: nowrap;
line-height: 1.05em!important; line-height: 1.05em!important;
width: auto!important;
} }
*/ */
.pandora_confirm_dialog .ui-dialog-buttonset {
display: flex;
width: 100%;
margin-left: 10px;
float: none !important;
}
.pandora_confirm_dialog .ui-dialog-buttonset button{
flex: 50%;
}
#pandora_confirm_dialog_text h3{
margin-left: 20px;
margin-right: 20px;
text-align: center;
}

View File

@ -555,12 +555,15 @@ if (! isset ($config['id_user'])) {
exit ("</html>"); exit ("</html>");
} }
} }
if($home_page != 'Visual console'){ // Form the url
header("Location: ".$config['homeurl']."index.php?sec=".$_GET["sec"]."&sec2=".$_GET["sec2"]); $query_params_redirect = $_GET;
// Visual console do not want sec2
if($home_page == 'Visual console') unset($query_params_redirect["sec2"]);
$redirect_url = '?1=1';
foreach ($query_params_redirect as $key => $value) {
$redirect_url .= '&'.safe_url_extraclean($key).'='.safe_url_extraclean($value);
} }
else{ header("Location: ".$config['homeurl']."index.php".$redirect_url);
header("Location: ".$config['homeurl']."index.php?sec=".$_GET["sec"]);
}
} }
// Hash login process // Hash login process
elseif (isset ($_GET["loginhash"])) { elseif (isset ($_GET["loginhash"])) {

View File

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

View File

@ -641,7 +641,7 @@ foreach ($agents as $agent) {
$data[0] .= '<div class="agentleft_' . $agent["id_agente"] . '" style="visibility: hidden; clear: left;">'; $data[0] .= '<div class="agentleft_' . $agent["id_agente"] . '" style="visibility: hidden; clear: left;">';
if($agent["id_os"] == 21){ if($agent["id_os"] == 100){
$data[0] .= '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_view&id='.$cluster['id'].'">'.__('View').'</a>'; $data[0] .= '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_view&id='.$cluster['id'].'">'.__('View').'</a>';
} }
else{ else{
@ -651,7 +651,7 @@ foreach ($agents as $agent) {
if (check_acl ($config['id_user'], $agent["id_grupo"], "AW")) { if (check_acl ($config['id_user'], $agent["id_grupo"], "AW")) {
$data[0] .= ' | '; $data[0] .= ' | ';
if($agent["id_os"] == 21){ if($agent["id_os"] == 100){
$data[0] .= '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&id_cluster='.$cluster['id'].'&step=1&update=1">'.__('Edit').'</a>'; $data[0] .= '<a href="index.php?sec=reporting&sec2=enterprise/godmode/reporting/cluster_builder&id_cluster='.$cluster['id'].'&step=1&update=1">'.__('Edit').'</a>';
} }
else{ else{

View File

@ -87,6 +87,13 @@ $interface_traffic_modules = array(
<script type='text/javascript' src='../../include/javascript/jquery-1.9.0.js'></script> <script type='text/javascript' src='../../include/javascript/jquery-1.9.0.js'></script>
<script type='text/javascript' src='../../include/javascript/jquery.pandora.js'></script> <script type='text/javascript' src='../../include/javascript/jquery.pandora.js'></script>
<script type='text/javascript' src='../../include/javascript/jquery.jquery-ui-1.10.0.custom.js'></script> <script type='text/javascript' src='../../include/javascript/jquery.jquery-ui-1.10.0.custom.js'></script>
<?php
if ($config['flash_charts']) {
//Include the javascript for the js charts library
include_once($config["homedir"] . '/include/graphs/functions_flot.php');
echo include_javascript_dependencies_flot_graph(true, "../");
}
?>
<script type='text/javascript'> <script type='text/javascript'>
<!-- <!--
window.onload = function() { window.onload = function() {

View File

@ -0,0 +1,105 @@
<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2018 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
if (! isset($_SESSION['id_usuario'])) {
session_start();
//session_write_close();
}
// Global & session management
require_once ('../../include/config.php');
require_once ($config['homedir'] . '/include/auth/mysql.php');
require_once ($config['homedir'] . '/include/functions.php');
require_once ($config['homedir'] . '/include/functions_db.php');
require_once ($config['homedir'] . '/include/functions_reporting.php');
require_once ($config['homedir'] . '/include/functions_graph.php');
require_once ($config['homedir'] . '/include/functions_modules.php');
require_once ($config['homedir'] . '/include/functions_agents.php');
require_once ($config['homedir'] . '/include/functions_tags.php');
require_once ($config['homedir'] . '/include/functions_extensions.php');
check_login ();
// Metaconsole connection to the node
$server_id = (int) get_parameter("server");
if (is_metaconsole() && !empty($server_id)) {
$server = metaconsole_get_connection_by_id($server_id);
// Error connecting
if (metaconsole_connect($server) !== NOERR) {
echo "<html>";
echo "<body>";
ui_print_error_message(__('There was a problem connecting with the node'));
echo "</body>";
echo "</html>";
exit;
}
}
$user_language = get_user_language ($config['id_user']);
if (file_exists ('../../include/languages/'.$user_language.'.mo')) {
$l10n = new gettext_reader (new CachedFileReader ('../../include/languages/'.$user_language.'.mo'));
$l10n->load_tables();
}
echo '<link rel="stylesheet" href="../../include/styles/pandora.css" type="text/css"/>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
// Parsing the refresh before sending any header
$refresh = (int) get_parameter ("refresh", -1);
if ($refresh > 0) {
$query = ui_get_url_refresh (false);
echo '<meta http-equiv="refresh" content="'.$refresh.'; URL='.$query.'" />';
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pandora FMS Realtime Module Graph</title>
<link rel="stylesheet" href="../../include/styles/pandora_minimal.css" type="text/css" />
<link rel="stylesheet" href="../../include/styles/jquery-ui-1.10.0.custom.css" type="text/css" />
<script type='text/javascript' src='../../include/javascript/pandora.js'></script>
<script type='text/javascript' src='../../include/javascript/jquery-1.9.0.js'></script>
<script type='text/javascript' src='../../include/javascript/jquery.pandora.js'></script>
<script type='text/javascript' src='../../include/javascript/jquery.jquery-ui-1.10.0.custom.js'></script>
<?php
//Include the javascript for the js charts library
include_once($config["homedir"] . '/include/graphs/functions_flot.php');
include_javascript_dependencies_flot_graph();
?>
</head>
<body bgcolor="#ffffff" style='background:#ffffff;'>
<?php
$config['extensions'] = extensions_get_extensions (false, '../../');
if (!extensions_is_enabled_extension("realtime_graphs.php")) {
ui_print_error_message(__('Realtime extension is not enabled.'));
return;
} else {
include_once('../../extensions/realtime_graphs.php');
}
pandora_realtime_graphs();
?>
</body>
</html>
<?php
// Echo the script tags of the datepicker and the timepicker
// Modify the user language cause the ui.datepicker language files use - instead _
$custom_user_language = str_replace('_', '-', $user_language);
ui_require_jquery_file("ui.datepicker-" . $custom_user_language, "include/javascript/i18n/", true);
ui_include_time_picker(true);
?>

View File

@ -125,7 +125,7 @@ else {
if (((int)$ag_group !== 0) && (check_acl ($config['id_user'], $id_ag_group, 'AR'))) { if (((int)$ag_group !== 0) && (check_acl ($config['id_user'], $id_ag_group, 'AR'))) {
$sql_conditions_group = sprintf ( $sql_conditions_group = sprintf (
' AND (tagente.id_grupo IN (%s) OR tasg.id_group IN (%s))', ' AND (tagente.id_grupo IN (%s) OR tasg.id_group IN (%s))',
$user_groups, $user_groups $ag_group, $ag_group
); );
} }
elseif ($user_groups != '') { elseif ($user_groups != '') {
@ -753,7 +753,11 @@ switch ($config['dbtype']) {
tagente.id_grupo AS id_group, tagente.id_grupo AS id_group,
tagente.id_agente AS id_agent, tagente.id_agente AS id_agent,
tagente_modulo.id_tipo_modulo AS module_type, tagente_modulo.id_tipo_modulo AS module_type,
tagente_modulo.module_interval, tagente_modulo.module_interval,
tagente_modulo.tcp_send,
tagente_modulo.ip_target,
tagente_modulo.snmp_community,
tagente_modulo.snmp_oid,
tagente_estado.datos, tagente_estado.datos,
tagente_estado.estado, tagente_estado.estado,
tagente_modulo.min_warning, tagente_modulo.min_warning,
@ -1272,12 +1276,11 @@ if (!empty($result)) {
$graph_params_str = http_build_query($graph_params); $graph_params_str = http_build_query($graph_params);
$link = 'winopeng(\''.$url.'?'.$graph_params_str.'\',\''.$win_handle.'\')'; $link = 'winopeng(\''.$url.'?'.$graph_params_str.'\',\''.$win_handle.'\')';
$data[7] = ''; $data[7] = get_module_realtime_link_graph($row);
if(!is_snapshot_data($row['datos'])){ if(!is_snapshot_data($row['datos'])){
$data[7] .= '<a href="javascript:'.$link.'">' . html_print_image('images/chart_curve.png', true, array('border' => '0', 'alt' => '')) . '</a>';
$data[7] = '<a href="javascript:'.$link.'">' . html_print_image('images/chart_curve.png', true, array('border' => '0', 'alt' => '')) . '</a>';
} }
$data[7] .= '<a href="javascript: ' . $data[7] .= '<a href="javascript: ' .
'show_module_detail_dialog(' . 'show_module_detail_dialog(' .

View File

@ -666,8 +666,12 @@ else {
if ($i != 0 && $allow_action) { if ($i != 0 && $allow_action) {
//Actions //Actions
$data[$i] = ''; $data[$i] = '<a href="javascript:" onclick="show_event_dialog(' . $event["id_evento"] . ', '.$group_rep.');">';
$data[$i] .= html_print_input_hidden('event_title_'.$event["id_evento"], "#".$event["id_evento"]." - " . strip_tags(io_safe_output($event["evento"])), true);
$data[$i] .= html_print_image ("images/eye.png", true,
array ("title" => __('Show more')));
$data[$i] .= '</a>';
if(!$readonly) { if(!$readonly) {
// Validate event // Validate event
if (($event["estado"] != 1) && (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids))) { if (($event["estado"] != 1) && (tags_checks_event_acl ($config["id_user"], $event["id_grupo"], "EW", $event['clean_tags'], $childrens_ids))) {
@ -676,6 +680,13 @@ else {
$data[$i] .= html_print_image ("images/ok.png", true, $data[$i] .= html_print_image ("images/ok.png", true,
array ("title" => __('Validate event'))); array ("title" => __('Validate event')));
$data[$i] .= '</a>'; $data[$i] .= '</a>';
// Display the go to in progress status button
if ($event["estado"] != 2) {
$data[$i] .= '<a href="javascript:validate_event_advanced('.$event["id_evento"].', 2)" id="in-progress-'.$event["id_evento"].'">';
$data[$i] .= html_print_image ("images/hourglass.png", true,
array ("title" => __('Change to in progress status')));
$data[$i] .= '</a>';
}
} }
// Delete event // Delete event
@ -688,18 +699,19 @@ else {
$data[$i] .= '</a>'; $data[$i] .= '</a>';
} }
else { else {
$data[$i] .= html_print_image ("images/cross.disabled.png", true, $data[$i] .= html_print_image (
array ("title" => __('Is not allowed delete events in process'))).'&nbsp;'; "images/cross.disabled.png",
true,
array (
"title" => __('Is not allowed delete events in process'),
"id" => "delete-" . $event['id_evento']
)
);
$data[$i] .= '&nbsp;';
} }
} }
} }
$data[$i] .= '<a href="javascript:" onclick="show_event_dialog(' . $event["id_evento"] . ', '.$group_rep.');">';
$data[$i] .= html_print_input_hidden('event_title_'.$event["id_evento"], "#".$event["id_evento"]." - " . strip_tags(io_safe_output($event["evento"])), true);
$data[$i] .= html_print_image ("images/eye.png", true,
array ("title" => __('Show more')));
$data[$i] .= '</a>';
$table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;'; $table->cellstyle[count($table->data)][$i] = 'background: #F3F3F3;';
$i++; $i++;

View File

@ -873,41 +873,45 @@ $(document).ready( function() {
"html" "html"
); );
}); });
$("a.delete_event").click (function () { $("td").on('click', 'a.delete_event', function () {
confirmation = confirm("<?php echo __('Are you sure?'); ?>"); var click_element = this;
if (!confirmation) { display_confirm_dialog(
return; "<?php echo __('Are you sure?'); ?>",
} "<?php echo __('Confirm'); ?>",
meta = $('#hidden-meta').val(); "<?php echo __('Cancel'); ?>",
history_var = $('#hidden-history').val(); function () {
meta = $('#hidden-meta').val();
$tr = $(this).parents ("tr"); history_var = $('#hidden-history').val();
id = this.id.split ("-").pop ();
$tr = $(click_element).parents ("tr");
$("#delete_cross_"+id).attr ("src", "images/spinner.gif"); id = click_element.id.split ("-").pop ();
jQuery.post ("<?php echo ui_get_full_url("ajax.php", false, false, false); ?>", $("#delete_cross_"+id).attr ("src", "images/spinner.gif");
{"page" : "operation/events/events",
"delete_event" : 1, jQuery.post ("<?php echo ui_get_full_url("ajax.php", false, false, false); ?>",
"id" : id, {"page" : "operation/events/events",
"similars" : <?php echo ($group_rep ? 1 : 0) ?>, "delete_event" : 1,
"meta" : meta, "id" : id,
"history" : history_var "similars" : <?php echo ($group_rep ? 1 : 0) ?>,
}, "meta" : meta,
function (data, status) { "history" : history_var
if (data == "ok") { },
$tr.remove (); function (data, status) {
$('#show_message_error').html('<h3 class="suc"> <?php echo __('Successfully delete'); ?> </h3>'); if (data == "ok") {
} $tr.remove ();
else $('#show_message_error').html('<h3 class="suc"> <?php echo __('Successfully delete'); ?> </h3>');
$('#show_message_error').html('<h3 class="error"> <?php echo __('Error deleting event'); ?> </h3>'); }
}, else
"html" $('#show_message_error').html('<h3 class="error"> <?php echo __('Error deleting event'); ?> </h3>');
},
"html"
);
return false;
}
); );
return false;
}); });
function toggleDiv (divid) { function toggleDiv (divid) {
if (document.getElementById(divid).style.display == 'none') { if (document.getElementById(divid).style.display == 'none') {
document.getElementById(divid).style.display = 'block'; document.getElementById(divid).style.display = 'block';
@ -940,6 +944,11 @@ function validate_event_advanced(id, new_status) {
$tr = $('#validate-'+id).parents ("tr"); $tr = $('#validate-'+id).parents ("tr");
var grouped = $('#group_rep').val(); var grouped = $('#group_rep').val();
// Get images url
var hourglass_image = "<?php echo ui_get_full_url("images/hourglass.png", false, false, false); ?>";
var cross_disabled_image = "<?php echo ui_get_full_url("images/cross.disabled.png", false, false, false); ?>";
var cross_image = "<?php echo ui_get_full_url("images/cross.png", false, false, false); ?>";
var similar_ids; var similar_ids;
similar_ids = $('#hidden-similar_ids_'+id).val(); similar_ids = $('#hidden-similar_ids_'+id).val();
@ -964,31 +973,46 @@ function validate_event_advanced(id, new_status) {
// Change status description // Change status description
$("#status_row_"+id).html(<?php echo "'" . __('Event validated') . "'"; ?>); $("#status_row_"+id).html(<?php echo "'" . __('Event validated') . "'"; ?>);
// Change state image // Change delete icon
$("#delete-"+id).remove();
$("#validate-"+id).parent().append('<a class="delete_event" href="javascript:" id="delete-' + id + '"></a>');
$("#delete-"+id).append("<img src='" + cross_image + "' />");
$("#delete-"+id + " img").attr ("id", "delete_cross_" + id);
$("#delete-"+id + " img").attr ("data-title", <?php echo "'" . __('Delete event') . "'"; ?>);
$("#delete-"+id + " img").attr ("alt", <?php echo "'" . __('Delete event') . "'"; ?>);
$("#delete-"+id + " img").attr ("data-use_title_for_force_title", 1);
$("#delete-"+id + " img").attr ("class", "forced_title");
// Change other buttons actions
$("#validate-"+id).css("display", "none"); $("#validate-"+id).css("display", "none");
$("#in-progress-"+id).css("display", "none");
$("#status_img_"+id).attr ("src", "images/tick.png"); $("#status_img_"+id).attr ("src", "images/tick.png");
$("#status_img_"+id).attr ("title", <?php echo "'" . __('Event validated') . "'"; ?>); $("#status_img_"+id).attr ("data-title", <?php echo "'" . __('Event in process') . "'"; ?>);
$("#status_img_"+id).attr ("alt", <?php echo "'" . __('Event validated') . "'"; ?>); $("#status_img_"+id).attr ("alt", <?php echo "'" . __('Event in process') . "'"; ?>);
$("#status_img_"+id).attr ("data-use_title_for_force_title", 1);
$("#status_img_"+id).attr ("class", "forced_title");
} // In process } // In process
else if (new_status == 2) { else if (new_status == 2) {
// Change status description // Change status description
$("#status_row_"+id).html(<?php echo "'" . __('Event in process') . "'"; ?>); $("#status_row_"+id).html(<?php echo "'" . __('Event in process') . "'"; ?>);
// Remove delete link (if event is not grouped and there is more than one event)
if (grouped == 1) {
if (parseInt($("#count_event_group_"+id).text()) <= 1) {
$("#delete-"+id).replaceWith('<img alt="' + <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?> + '" title="' + <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?> + '" src="images/cross.disabled.png">');
}
}
else { // Remove delete link (if event is not grouped)
$("#delete-"+id).replaceWith('<img alt="' + <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?> + '" title="' + <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?> + '" src="images/cross.disabled.png">');
}
// Change state image // Change state image
$("#status_img_"+id).attr ("src", "images/hourglass.png"); $("#status_img_"+id).attr ("src", hourglass_image);
$("#status_img_"+id).attr ("title", <?php echo "'" . __('Event in process') . "'"; ?>); $("#status_img_"+id).attr ("data-title", <?php echo "'" . __('Event in process') . "'"; ?>);
$("#status_img_"+id).attr ("alt", <?php echo "'" . __('Event in process') . "'"; ?>); $("#status_img_"+id).attr ("alt", <?php echo "'" . __('Event in process') . "'"; ?>);
$("#status_img_"+id).attr ("data-use_title_for_force_title", 1);
$("#status_img_"+id).attr ("class", "forced_title");
// Change the actions buttons
$("#delete-"+id).remove();
$("#in-progress-"+id).remove();
// Format the new disabled delete icon.
$("#validate-"+id).parent().append("<img id='delete-" + id + "' src='" + cross_disabled_image + "' />");
$("#delete-"+id).attr ("data-title", <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?>);
$("#delete-"+id).attr ("alt", <?php echo "'" . __('Is not allowed delete events in process') . "'"; ?>);
$("#delete-"+id).attr ("data-use_title_for_force_title", 1);
$("#delete-"+id).attr ("class", "forced_title");
// Remove row due to new state // Remove row due to new state
if (($("#status").val() == 0) if (($("#status").val() == 0)
|| ($("#status").val() == 1)) { || ($("#status").val() == 1)) {

View File

@ -87,7 +87,9 @@ switch ($config["dbtype"]) {
case "postgresql": case "postgresql":
case "oracle": case "oracle":
$sql = "SELECT * $sql = "SELECT *
FROM tevento FROM tevento te
LEFT JOIN tagent_secondary_group tasg
ON te.id_grupo = tasg.id_group
WHERE 1=1 ".$sql_post." WHERE 1=1 ".$sql_post."
ORDER BY utimestamp DESC"; ORDER BY utimestamp DESC";
break; break;
@ -97,9 +99,9 @@ $now = date ("Y-m-d");
// Show contentype header // Show contentype header
Header ("Content-type: text/txt"); Header ("Content-type: text/txt");
header ('Content-Disposition: attachment; filename="pandora_export_event'.$now.'.txt"'); header ('Content-Disposition: attachment; filename="pandora_export_event'.$now.'.csv"');
echo "timestamp, agent, group, event, status, user, event_type, severity"; echo "timestamp, agent, group, event, status, user, event_type, severity, id";
echo chr (13); echo chr (13);
$new = true; $new = true;
@ -126,6 +128,8 @@ while ($event = db_get_all_row_by_steps_sql($new, $result, $sql)) {
echo io_safe_output($event["event_type"]); echo io_safe_output($event["event_type"]);
echo ","; echo ",";
echo $event["criticity"]; echo $event["criticity"];
echo ",";
echo $event["id_evento"];
echo chr (13); echo chr (13);
} }
?> ?>

View File

@ -96,6 +96,10 @@ if ($confMap !== false) {
$baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width']; $baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width'];
$baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height']; $baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height'];
break; break;
case 'WMS':
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
$baselayers[$num_baselayer]['layers'] = $decodeJSON['layers'];
break;
} }
$num_baselayer++; $num_baselayer++;
if ($mapC['default_map_connection'] == 1) { if ($mapC['default_map_connection'] == 1) {
@ -203,11 +207,7 @@ if ($layers != false) {
// Resize GIS map on fullscreen // Resize GIS map on fullscreen
?> ?>
<script type="text/javascript"> <script type="text/javascript">
$().ready(function() { $(document).ready(function() {
$("#map").css("height", $(document).height() - 100);
var new_height = $(document).height();
$("#map").css("height", new_height - 60);
$("svg[id*=OpenLayers]").css("height", new_height - 60);
}); });
</script> </script>

View File

@ -77,6 +77,10 @@ if ($confMap !== false) {
$baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width']; $baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width'];
$baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height']; $baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height'];
break; break;
case 'WMS':
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
$baselayers[$num_baselayer]['layers'] = $decodeJSON['layers'];
break;
} }
$num_baselayer++; $num_baselayer++;
if ($mapC['default_map_connection'] == 1) { if ($mapC['default_map_connection'] == 1) {
@ -157,12 +161,12 @@ $buttons[]['text'] = '&nbsp;' . __('Show agents by state: ') .
ui_print_page_header(__('Map') . " &raquo; " . __('Map') . "&nbsp;" . $map['map_name'], ui_print_page_header(__('Map') . " &raquo; " . __('Map') . "&nbsp;" . $map['map_name'],
"images/op_gis.png", false, "", false, $buttons); "images/op_gis.png", false, "", false, $buttons);
if ($config["pure"] == 0) { $map_inline_style = "width: 100%; min-height:500px; height: calc(100vh - 80px);";
echo "<div id='map' style='width: 100%; height: 500px; border: 1px solid black;' ></div>"; $map_inline_style .= $config["pure"]
} ? "position:absolute; top: 80px; left: 0px;"
else { : "border: 1px solid black;";
echo "<div id='map' style='position:absolute; top:40px; z-index:100; width: 100%; height: 500px; min-height:500px; border: 1px solid black;' ></div>";
} echo '<div id="map" style="' . $map_inline_style . '" />';
gis_print_map('map', $map['zoom_level'], $map['initial_latitude'], gis_print_map('map', $map['zoom_level'], $map['initial_latitude'],
$map['initial_longitude'], $baselayers, $controls); $map['initial_longitude'], $baselayers, $controls);
@ -234,18 +238,11 @@ if ($layers != false) {
gis_activate_ajax_refresh($layers, $timestampLastOperation); gis_activate_ajax_refresh($layers, $timestampLastOperation);
} }
// Resize GIS map on fullscreen
if ($config["pure"] != 0) {
?>
<script type="text/javascript">
$().ready(function() {
var new_height = $(document).height();
$("#map").css("height", new_height - 60);
$("svg[id*=OpenLayers]").css("height", new_height - 60);
});
</script>
<?php
}
?> ?>
<script type="text/javascript">
$(document).ready(function() {
var $map = $("#map");
$map.css("height", "calc(100vh - " + $map.offset().top + "px - 20px)");
});
</script>

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_console %define name pandorafms_console
%define version 7.0NG.722 %define version 7.0NG.722
%define release 180423 %define release 180510
# 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.722 %define version 7.0NG.722
%define release 180423 %define release 180510
%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

@ -3048,9 +3048,7 @@ create table IF NOT EXISTS `tcluster`(
`description` text not null default '', `description` text not null default '',
`group` int(10) unsigned NOT NULL default '0', `group` int(10) unsigned NOT NULL default '0',
`id_agent` int(10) unsigned NOT NULL, `id_agent` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`)
FOREIGN KEY (`id_agent`) REFERENCES tagente(`id_agente`)
ON UPDATE CASCADE
) engine=InnoDB DEFAULT CHARSET=utf8; ) engine=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
@ -3078,8 +3076,6 @@ create table IF NOT EXISTS `tcluster_agent`(
`id_cluster` int unsigned not null, `id_cluster` int unsigned not null,
`id_agent` int(10) unsigned not null, `id_agent` int(10) unsigned not null,
PRIMARY KEY (`id_cluster`,`id_agent`), PRIMARY KEY (`id_cluster`,`id_agent`),
FOREIGN KEY (`id_agent`) REFERENCES tagente(`id_agente`)
ON UPDATE CASCADE,
FOREIGN KEY (`id_cluster`) REFERENCES tcluster(`id`) FOREIGN KEY (`id_cluster`) REFERENCES tcluster(`id`)
ON UPDATE CASCADE ON UPDATE CASCADE
) engine=InnoDB DEFAULT CHARSET=utf8; ) engine=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1,5 +1,5 @@
package: pandorafms-server package: pandorafms-server
Version: 7.0NG.722-180423 Version: 7.0NG.722-180510
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.722-180423" pandora_version="7.0NG.722-180510"
package_cpan=0 package_cpan=0
package_pandora=1 package_pandora=1
@ -69,6 +69,7 @@ then
mkdir -p temp_package/etc/init.d/ mkdir -p temp_package/etc/init.d/
mkdir -p temp_package/lib/systemd/system/ mkdir -p temp_package/lib/systemd/system/
mkdir -p temp_package/etc/pandora/ mkdir -p temp_package/etc/pandora/
mkdir -p temp_package/etc/tentacle/
mkdir -p temp_package/var/spool/pandora/data_in mkdir -p temp_package/var/spool/pandora/data_in
chmod 770 temp_package/var/spool/pandora/data_in chmod 770 temp_package/var/spool/pandora/data_in
mkdir -p temp_package/var/spool/pandora/data_in/conf mkdir -p temp_package/var/spool/pandora/data_in/conf
@ -82,6 +83,7 @@ then
chmod 770 temp_package/var/spool/pandora/data_in/trans chmod 770 temp_package/var/spool/pandora/data_in/trans
mkdir -p temp_package/var/log/pandora/ mkdir -p temp_package/var/log/pandora/
mkdir -p temp_package/usr/share/pandora_server/conf/ mkdir -p temp_package/usr/share/pandora_server/conf/
mkdir -p temp_package/usr/share/tentacle_server/conf/
mkdir -p temp_package/usr/lib/perl5/ mkdir -p temp_package/usr/lib/perl5/
mkdir -p temp_package/usr/share/man/man1/ mkdir -p temp_package/usr/share/man/man1/
mkdir -p temp_package/etc/logrotate.d/ mkdir -p temp_package/etc/logrotate.d/
@ -90,7 +92,8 @@ then
cp -aRf bin/pandora_exec temp_package/usr/bin/pandora_exec.server cp -aRf bin/pandora_exec temp_package/usr/bin/pandora_exec.server
cp -aRf bin/tentacle_server temp_package/usr/bin/ cp -aRf bin/tentacle_server temp_package/usr/bin/
cp -aRf conf/* temp_package/usr/share/pandora_server/conf/ cp -aRf conf/pandora_* temp_package/usr/share/pandora_server/conf/
cp -aRf conf/tentacle_* temp_package/usr/share/tentacle_server/conf/
cp -aRf util temp_package/usr/share/pandora_server/ cp -aRf util temp_package/usr/share/pandora_server/
cp -aRf lib/* temp_package/usr/lib/perl5/ cp -aRf lib/* temp_package/usr/lib/perl5/
cp -aRf AUTHORS COPYING README temp_package/usr/share/pandora_server/ cp -aRf AUTHORS COPYING README temp_package/usr/share/pandora_server/

View File

@ -71,7 +71,7 @@ chown -R pandora:www-data /var/spool/pandora/
echo "Creating setup directory in /etc/pandora" echo "Creating setup directory in /etc/pandora"
mkdir /etc/pandora 2> /dev/null mkdir /etc/pandora 2> /dev/null
#Check if exist old conf file #Check if exist old conf files
if [ ! -e /etc/pandora/pandora_server.conf ] if [ ! -e /etc/pandora/pandora_server.conf ]
then then
cp /usr/share/pandora_server/conf/pandora_server.conf.new /etc/pandora/pandora_server.conf cp /usr/share/pandora_server/conf/pandora_server.conf.new /etc/pandora/pandora_server.conf
@ -80,6 +80,14 @@ else
cp /usr/share/pandora_server/conf/pandora_server.conf.new /etc/pandora/pandora_server.conf.new cp /usr/share/pandora_server/conf/pandora_server.conf.new /etc/pandora/pandora_server.conf.new
echo "Skipping creation of pandora_server.conf: there is already one." echo "Skipping creation of pandora_server.conf: there is already one."
fi fi
if [ ! -e /etc/tentacle/tentacle_server.conf ]
then
cp /usr/share/tentacle_server/conf/tentacle_server.conf.new /etc/tentacle/tentacle_server.conf
chmod 664 /etc/tentacle/tentacle_server.conf
else
cp /usr/share/tentacle_server/conf/tentacle_server.conf.new /etc/tentacle/tentacle_server.conf.new
echo "Skipping creation of tentacle_server.conf: there is already one."
fi
echo "Enabling start-up pandora & tentacle server daemons"; echo "Enabling start-up pandora & tentacle server daemons";
if [ -x `command -v systemctl` ]; then if [ -x `command -v systemctl` ]; then

View File

@ -102,7 +102,7 @@ my $SERVICE_NAME="Tentacle Server";
my $SERVICE_PARAMS=join(' ', @ARGV); my $SERVICE_PARAMS=join(' ', @ARGV);
# Program version # Program version
our $VERSION = '0.6.1'; our $VERSION = '0.6.2';
# IPv4 address to listen on # IPv4 address to listen on
my @t_addresses = ('0', '0.0.0.0'); my @t_addresses = ('0', '0.0.0.0');
@ -217,6 +217,7 @@ sub print_help {
print ("\t-d\t\tRun as daemon.\n"); print ("\t-d\t\tRun as daemon.\n");
print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n"); print ("\t-e cert\t\tOpenSSL certificate file. Enables SSL.\n");
print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n"); print ("\t-f ca_cert\tVerify that the peer certificate is signed by a ca.\n");
print ("\t-F config_file\tConfiguration file full path.\n");
print ("\t-h\t\tShow help.\n"); print ("\t-h\t\tShow help.\n");
print ("\t-I\t\tEnable insecure operations (file listing and moving).\n"); print ("\t-I\t\tEnable insecure operations (file listing and moving).\n");
print ("\t-i\t\tFilters.\n"); print ("\t-i\t\tFilters.\n");
@ -278,11 +279,13 @@ sub daemonize {
################################################################################ ################################################################################
sub parse_options { sub parse_options {
my %opts; my %opts;
my $CONF = {};
my $token_value;
my $tmp; my $tmp;
my @t_addresses_tmp; my @t_addresses_tmp;
# Get options # Get options
if (getopts ('a:b:c:de:f:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) { if (getopts ('a:b:c:de:f:F:g:hIi:k:l:m:op:qr:s:S:t:TvVwx:', \%opts) == 0 || defined ($opts{'h'})) {
print_help (); print_help ();
exit 1; exit 1;
} }
@ -304,10 +307,16 @@ sub parse_options {
} }
} }
# Configuration file
if (defined($opts{'F'})) {
parse_config_file($opts{'F'}, $CONF);
}
# Address # Address
if (defined ($opts{'a'})) { $token_value = get_config_value($opts{'a'}, $CONF->{'addresses'});
if (defined ($token_value)) {
@t_addresses = (); @t_addresses = ();
@t_addresses_tmp = split(/,/, $opts{'a'}); @t_addresses_tmp = split(/,/, $token_value);
foreach my $t_address (@t_addresses_tmp) { foreach my $t_address (@t_addresses_tmp) {
$t_address =~ s/^ *(.*?) *$/$1/; $t_address =~ s/^ *(.*?) *$/$1/;
@ -323,15 +332,17 @@ sub parse_options {
} }
# Maximum simultaneous connections # Maximum simultaneous connections
if (defined ($opts{'c'})) { $token_value = get_config_value($opts{'c'}, $CONF->{'max_connections'});
$t_max_conn = $opts{'c'}; if (defined ($token_value)) {
$t_max_conn = $token_value;
if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) { if ($t_max_conn !~ /^\d+$/ || $t_max_conn < 1) {
error ("Invalid number of maximum simultaneous connections."); error ("Invalid number of maximum simultaneous connections.");
} }
} }
# Run as daemon # Run as daemon
if (defined ($opts{'d'})) { $token_value = get_config_value($opts{'d'}, $CONF->{'daemon'}, 1);
if (defined ($token_value)) {
if ($^ eq 'MSWin32') { if ($^ eq 'MSWin32') {
error ("-d flag not available for this OS."); error ("-d flag not available for this OS.");
} }
@ -340,11 +351,12 @@ sub parse_options {
} }
# Enable SSL # Enable SSL
if (defined ($opts{'e'})) { $token_value = get_config_value($opts{'e'}, $CONF->{'ssl_cert'});
if (defined ($token_value)) {
require IO::Socket::SSL; require IO::Socket::SSL;
$t_ssl_cert = $opts{'e'}; $t_ssl_cert = $token_value;
if (! -f $t_ssl_cert) { if (! -f $t_ssl_cert) {
error ("File $t_ssl_cert does not exist."); error ("File $t_ssl_cert does not exist.");
} }
@ -353,21 +365,24 @@ sub parse_options {
} }
# Verify peer certificate # Verify peer certificate
if (defined ($opts{'f'})) { $token_value = get_config_value($opts{'f'}, $CONF->{'ssl_ca'});
$t_ssl_ca = $opts{'f'}; if (defined ($token_value)) {
$t_ssl_ca = $token_value;
if (! -f $t_ssl_ca) { if (! -f $t_ssl_ca) {
error ("File $t_ssl_ca does not exist."); error ("File $t_ssl_ca does not exist.");
} }
} }
# Insecure mode # Insecure mode
if (defined ($opts{'I'})) { $token_value = get_config_value($opts{'I'}, $CONF->{'insecure'}, 1);
if (defined ($token_value)) {
$t_insecure = 1; $t_insecure = 1;
} }
# Filters (regexp:dir;regexp:dir...) # Filters (regexp:dir;regexp:dir...)
if (defined ($opts{'i'})) { $token_value = get_config_value($opts{'i'}, $CONF->{'filters'});
my @filters = split (';', $opts{'i'}); if (defined ($token_value)) {
my @filters = split (';', $token_value);
foreach my $filter (@filters) { foreach my $filter (@filters) {
my ($regexp, $dir) = split (':', $filter); my ($regexp, $dir) = split (':', $filter);
next unless defined ($regexp) && defined ($dir); next unless defined ($regexp) && defined ($dir);
@ -381,51 +396,58 @@ sub parse_options {
} }
# SSL private key file # SSL private key file
if (defined ($opts{'k'})) { $token_value = get_config_value($opts{'k'}, $CONF->{'ssl_key'});
$t_ssl_key = $opts{'k'}; if (defined ($token_value)) {
$t_ssl_key = $token_value;
if (! -f $t_ssl_key) { if (! -f $t_ssl_key) {
error ("File $t_ssl_key does not exist."); error ("File $t_ssl_key does not exist.");
} }
} }
# Maximum file size # Maximum file size
if (defined ($opts{'m'})) { $token_value = get_config_value($opts{'m'}, $CONF->{'max_size'});
$t_max_size = $opts{'m'}; if (defined ($token_value)) {
$t_max_size = $token_value;
if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) { if ($t_max_size !~ /^\d+$/ || $t_max_size < 1) {
error ("Invalid maximum file size."); error ("Invalid maximum file size.");
} }
} }
# File overwrite # File overwrite
if (defined ($opts{'o'})) { $token_value = get_config_value($opts{'o'}, $CONF->{'overwrite'}, 1);
if (defined ($token_value)) {
$t_overwrite = 1; $t_overwrite = 1;
} }
# Port # Port
if (defined ($opts{'p'})) { $token_value = get_config_value($opts{'p'}, $CONF->{'port'});
$t_port = $opts{'p'}; if (defined ($token_value)) {
$t_port = $token_value;
if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) { if ($t_port !~ /^\d+$/ || $t_port < 1 || $t_port > 65535) {
error ("Port $t_port is not valid."); error ("Port $t_port is not valid.");
} }
} }
# Quiet mode # Quiet mode
if (defined ($opts{'q'})) { $token_value = get_config_value($opts{'q'}, $CONF->{'quiet'}, 1);
if (defined ($token_value)) {
$t_quiet = 1; $t_quiet = 1;
} }
# Retries # Retries
if (defined ($opts{'r'})) { $token_value = get_config_value($opts{'r'}, $CONF->{'retries'});
$t_retries = $opts{'r'}; if (defined ($token_value)) {
$t_retries = $token_value;
if ($t_retries !~ /^\d+$/ || $t_retries < 1) { if ($t_retries !~ /^\d+$/ || $t_retries < 1) {
error ("Invalid number of retries for network operations."); error ("Invalid number of retries for network operations.");
} }
} }
# Storage directory # Storage directory
if (defined ($opts{'s'})) { $token_value = get_config_value($opts{'s'}, $CONF->{'directory'});
if (defined ($token_value)) {
$t_directory = $opts{'s'}; $t_directory = $token_value;
# Check that directory exists # Check that directory exists
if (! -d $t_directory) { if (! -d $t_directory) {
@ -444,25 +466,36 @@ sub parse_options {
} }
} }
else { else {
if (! defined($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
if (! defined($token_value)) {
print_help (); print_help ();
exit 1; exit 1;
} }
} }
# Timeout # Timeout
if (defined ($opts{'t'})) { $token_value = get_config_value($opts{'t'}, $CONF->{'timeout'});
$t_timeout = $opts{'t'}; if (defined ($token_value)) {
$t_timeout = $token_value;
if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) { if ($t_timeout !~ /^\d+$/ || $t_timeout < 1) {
error ("Invalid timeout for network operations."); error ("Invalid timeout for network operations.");
} }
} }
# Read verbose from config file
if (defined($CONF->{'verbose'})) {
if ($CONF->{'verbose'} eq "1") {
$t_log = 1;
} elsif ($CONF->{'verbose'} eq "2") {
$t_log = 1;
$t_log_hard = 1;
}
}
# Be verbose # Be verbose
if (defined ($opts{'v'})) { if (defined ($opts{'v'})) {
$t_log = 1; $t_log = 1;
$t_log_hard = 0;
} }
# Be verbose hard # Be verbose hard
if (defined ($opts{'V'})) { if (defined ($opts{'V'})) {
$t_log = 1; $t_log = 1;
@ -470,18 +503,21 @@ sub parse_options {
} }
# SSL private key password # SSL private key password
if (defined ($opts{'w'})) { $token_value = get_config_value($opts{'w'}, $CONF->{'ssl_password'}, 1);
if (defined ($token_value)) {
$t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: "); $t_ssl_pwd = ask_passwd ("Enter private key file password: ", "Enter private key file password again for confirmation: ");
} }
# Server password # Server password
if (defined ($opts{'x'})) { $token_value = get_config_value($opts{'x'}, $CONF->{'password'});
$t_pwd = $opts{'x'}; if (defined ($token_value)) {
$t_pwd = $token_value;
} }
#Proxy IP address #Proxy IP address
if (defined ($opts{'b'})) { $token_value = get_config_value($opts{'b'}, $CONF->{'proxy_ip'});
$t_proxy_ip = $opts{'b'}; if (defined ($token_value)) {
$t_proxy_ip = $token_value;
if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ if ($t_proxy_ip !~ /^[a-zA-Z\.]+$/ && ($t_proxy_ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
|| $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255 || $1 < 0 || $1 > 255 || $2 < 0 || $2 > 255
|| $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) && || $3 < 0 || $3 > 255 || $4 < 0 || $4 > 255) &&
@ -491,15 +527,17 @@ sub parse_options {
} }
# Proxy Port # Proxy Port
if (defined ($opts{'g'})) { $token_value = get_config_value($opts{'g'}, $CONF->{'proxy_port'});
$t_proxy_port = $opts{'g'}; if (defined ($token_value)) {
$t_proxy_port = $token_value;
if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) { if ($t_proxy_port !~ /^\d+$/ || $t_proxy_port < 1 || $t_proxy_port > 65535) {
error ("Proxy port $t_port is not valid."); error ("Proxy port $t_port is not valid.");
} }
} }
# TCP wrappers support # TCP wrappers support
if (defined ($opts{'T'})) { $token_value = get_config_value($opts{'T'}, $CONF->{'use_libwrap'}, 1);
if (defined ($token_value)) {
if ($t_libwrap_installed) { if ($t_libwrap_installed) {
$t_use_libwrap = 1; $t_use_libwrap = 1;
} else { } else {
@ -531,9 +569,76 @@ sub parse_options {
} }
# Get the config file # Get the config file
if (defined ($opts{'l'})) { $token_value = get_config_value($opts{'l'}, $CONF->{'log_file'});
$log_file = $opts{'l'}; if (defined ($token_value)) {
$log_file = $token_value;
} }
# No command lines config values
# Get the block size
if (defined ($CONF->{'block_size'})) {
if ($t_port !~ /^\d+$/ || $t_port < 1) {
error ("Invalid block size: " . $CONF->{'block_size'} . ".");
}
$t_block_size = $CONF->{'block_size'};
}
# Configuration file invalid chars
if (defined ($CONF->{'invalid_chars'})) {
$t_invalid_chars = $CONF->{'invalid_chars'};
}
}
################################################################################
## SUB parse_config_file
## Get all options from a config file.
################################################################################
sub parse_config_file {
my ($config_file, $CONF) = @_;
# File should be writable
if (! -r $config_file) {
print "Configuration file $config_file is not readable.\n";
return;
}
# Open the file
my $FH;
if (! open ($FH, "< $config_file")) {
print "Cannot open configuration file $config_file.\n";
return;
}
# Read the file and only get the well formed lines
while (<$FH>) {
my $buffer_line = $_;
if ($buffer_line =~ /^[a-zA-Z]/){ # begins with letters
if ($buffer_line =~ m/([\w\-\_\.]+)\s+(.*)/){
$CONF->{$1} = $2 unless $2 eq "";
}
}
}
close ($FH);
return;
}
################################################################################
## SUB parse_config_file
## Search in command line options and config hash from configuration file
## to get a value (command line is a priority)
################################################################################
sub get_config_value {
my ($cmd_value, $conf_value, $bool) = @_;
$bool = 0 unless defined($bool);
return $cmd_value if defined($cmd_value);
# The boolean type value is 1 or undef (0 should be translated like undefP)
if ($bool && defined($conf_value)) {
return undef if ($conf_value ne "1");
}
return $conf_value;
} }
################################################################################ ################################################################################
@ -929,14 +1034,14 @@ sub recv_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("SEND ERR\n"); send_data ("SEND ERR (invalid file name)\n");
return; return;
} }
# Check file size, empty files are not allowed # Check file size, empty files are not allowed
if ($size < 1 || $size > $t_max_size) { if ($size < 1 || $size > $t_max_size) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " is too big");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file is too big)\n");
return; return;
} }
@ -946,7 +1051,7 @@ sub recv_file {
# Check if file exists # Check if file exists
if (-f $file && $t_overwrite == 0) { if (-f $file && $t_overwrite == 0) {
print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists"); print_log ("File '$base_name' size ${size}b from " . $t_client_socket->sockhost () . " already exists");
send_data ("SEND ERR\n"); send_data ("SEND ERR (file already exists)\n");
return; return;
} }
@ -979,7 +1084,7 @@ sub send_file {
# Check file name # Check file name
if ($base_name =~ /[$t_invalid_chars]/) { if ($base_name =~ /[$t_invalid_chars]/) {
print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name"); print_log ("Requested file '$base_name' from " . $t_client_socket->sockhost () . " has an invalid file name");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file has an invalid file name)\n");
return; return;
} }
@ -989,7 +1094,7 @@ sub send_file {
# Check if file exists # Check if file exists
if (! -f $file) { if (! -f $file) {
print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist"); print_log ("Requested file '$file' from " . $t_client_socket->sockhost () . " does not exist");
send_data ("RECV ERR\n"); send_data ("RECV ERR (file does not exist)\n");
return; return;
} }

View File

@ -0,0 +1,75 @@
##########################################################################
# Tentacle Server Parameters
# See https://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Tentacle
# for protocol description.
# Tentacle have IANA assigned port tpc/41121 as official port.
##########################################################################
# [-a] IPv4 address to listen on. Several IPs cam be selected separating if by comma.
addresses 0.0.0.0
# [-p] Port to listen on
port 41121
# [-c] Maximum number of simultaneous connections
# max_connections 10
# [-d] Run as daemon. 1 true, 0 false
daemon 1
# [-i] Enable insecure mode
# insecure 0
# Filters (regexp:dir;regexp:dir...)
filters .*\.conf:conf;.*\.md5:md5;.*\.zip:collections;.*\.lock:trans
# [-m] Maximum file size allowed by the server in bytes
#max_size 2000000
# [-o] Accept files with a repeated name
# overwrite 0
# [-q] Do not output error messages.
# quiet 0
# [-r] Number of retries for socket read/write operations
# retries 3
# [-s] Storage directory
directory /var/spool/pandora/data_in
# [-b] Address to proxy client requests to
# proxy_ip 127.0.0.1
# [-g] Port to proxy client requests to
# proxy_port 41121
# [-t] Timeout for socket read/write operations in seconds
# timeout 1
# [-v and -V] Verbose level
# 0: Do not display any informative messages
# 1: Display only important messages [-v]
# 2: Display all messages [-V]
# verbose 0
# [-l] Log file
log_file /dev/null
# [-x] Server password
# password PASSWORD
# [-e] SSL certificate file full path
# ssl_cert /path/to/ssl/cert
# [-f] SSL CA file full path
# ssl_ca /path/to/ssl/ca
# [-k] SSL private key file
# ssl_key /path/to/private/key/file
# [-w] SSL password. Set to 1 to ask for password by command line
# ssl_password 0
# [-T] Use libwrap library (Authen::Libwrap perl module)
# use_libwrap 0

0
pandora_server/extras/.gitignore vendored Normal file
View File

View File

@ -43,7 +43,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.722"; my $pandora_version = "7.0NG.722";
my $pandora_build = "180423"; my $pandora_build = "180510";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
# Setup hash # Setup hash

View File

@ -31,7 +31,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.722"; my $pandora_version = "7.0NG.722";
my $pandora_build = "180423"; my $pandora_build = "180510";
our $VERSION = $pandora_version." ".$pandora_build; our $VERSION = $pandora_version." ".$pandora_build;
our %EXPORT_TAGS = ( 'all' => [ qw() ] ); our %EXPORT_TAGS = ( 'all' => [ qw() ] );

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.722 %define version 7.0NG.722
%define release 180423 %define release 180510
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}
@ -48,6 +48,7 @@ rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_bindir}/ mkdir -p $RPM_BUILD_ROOT%{_bindir}/
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/ mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pandora/ mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pandora/
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/tentacle/
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/conf mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/conf
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/md5 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/md5
@ -81,6 +82,7 @@ rm -f $RPM_BUILD_ROOT%{prefix}/pandora_server/util/recon_scripts/PandoraFMS
install -m 0644 util/pandora_server_logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/pandora_server install -m 0644 util/pandora_server_logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/pandora_server
install -m 0640 conf/pandora_server.conf.new $RPM_BUILD_ROOT%{_sysconfdir}/pandora/pandora_server.conf.new install -m 0640 conf/pandora_server.conf.new $RPM_BUILD_ROOT%{_sysconfdir}/pandora/pandora_server.conf.new
install -m 0640 conf/tentacle_server.conf.new $RPM_BUILD_ROOT%{_sysconfdir}/tentacle/tentacle_server.conf.new
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d
chmod 0750 $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d chmod 0750 $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d
@ -119,8 +121,8 @@ if [ "$1" = 1 ]; then
echo " " echo " "
fi fi
# This will avoid pandora_server.conf overwritting on UPGRADES. # This will avoid confi files overwritting on UPGRADES.
# Main configuration file
if [ ! -e "/etc/pandora/pandora_server.conf" ] if [ ! -e "/etc/pandora/pandora_server.conf" ]
then then
echo "Creating a new version of Pandora FMS Server config file at /etc/pandora/pandora_server.conf" echo "Creating a new version of Pandora FMS Server config file at /etc/pandora/pandora_server.conf"
@ -130,6 +132,12 @@ else
echo "An existing version of pandora_server.conf is found." echo "An existing version of pandora_server.conf is found."
cat /etc/pandora/pandora_server.conf > /etc/pandora/pandora_server.conf.old cat /etc/pandora/pandora_server.conf > /etc/pandora/pandora_server.conf.old
fi fi
# Tentacle server
if [ ! -e "/etc/tentacle/tentacle_server.conf" ]
then
echo "Creating a new version of Tentacle Server config file at /etc/tentacle/tentacle_server.conf"
cat /etc/tentacle/tentacle_server.conf.new > /etc/tentacle/tentacle_server.conf
fi
echo "Don't forget to start Tentacle Server daemon if you want to receive" echo "Don't forget to start Tentacle Server daemon if you want to receive"
echo "data using tentacle" echo "data using tentacle"
@ -175,6 +183,9 @@ exit 0
%defattr(600,root,root) %defattr(600,root,root)
/etc/pandora/pandora_server.conf.new /etc/pandora/pandora_server.conf.new
%defattr(664,root,root)
/etc/tentacle/tentacle_server.conf.new
%defattr(-,pandora,apache,2770) %defattr(-,pandora,apache,2770)
%{_localstatedir}/spool/pandora %{_localstatedir}/spool/pandora
%{_localstatedir}/spool/pandora/data_in %{_localstatedir}/spool/pandora/data_in

View File

@ -3,7 +3,7 @@
# #
%define name pandorafms_server %define name pandorafms_server
%define version 7.0NG.722 %define version 7.0NG.722
%define release 180423 %define release 180510
Summary: Pandora FMS Server Summary: Pandora FMS Server
Name: %{name} Name: %{name}
@ -54,6 +54,7 @@ mkdir -p $RPM_BUILD_ROOT/usr/bin/
mkdir -p $RPM_BUILD_ROOT/usr/sbin/ mkdir -p $RPM_BUILD_ROOT/usr/sbin/
mkdir -p $RPM_BUILD_ROOT/etc/init.d/ mkdir -p $RPM_BUILD_ROOT/etc/init.d/
mkdir -p $RPM_BUILD_ROOT/etc/pandora/ mkdir -p $RPM_BUILD_ROOT/etc/pandora/
mkdir -p $RPM_BUILD_ROOT/etc/tentacle/
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/conf mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/conf
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/md5 mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/md5
@ -62,6 +63,7 @@ mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/netflow
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/trans mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/trans
mkdir -p $RPM_BUILD_ROOT/var/log/pandora/ mkdir -p $RPM_BUILD_ROOT/var/log/pandora/
mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/ mkdir -p $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/
mkdir -p $RPM_BUILD_ROOT%{prefix}/tentacle/conf/
mkdir -p $RPM_BUILD_ROOT/usr/lib/perl5/ mkdir -p $RPM_BUILD_ROOT/usr/lib/perl5/
mkdir -p $RPM_BUILD_ROOT/usr/share/man/man1/ mkdir -p $RPM_BUILD_ROOT/usr/share/man/man1/
@ -70,8 +72,10 @@ cp -aRf bin/pandora_server $RPM_BUILD_ROOT/usr/bin/
cp -aRf bin/pandora_exec $RPM_BUILD_ROOT/usr/bin/ cp -aRf bin/pandora_exec $RPM_BUILD_ROOT/usr/bin/
cp -aRf bin/tentacle_server $RPM_BUILD_ROOT/usr/bin/ cp -aRf bin/tentacle_server $RPM_BUILD_ROOT/usr/bin/
cp -aRf conf/* $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/ cp -aRf conf/pandora_* $RPM_BUILD_ROOT%{prefix}/pandora_server/conf/
cp -aRf conf/pandora_server.conf.new $RPM_BUILD_ROOT/etc/pandora/ cp -aRf conf/pandora_server.conf.new $RPM_BUILD_ROOT/etc/pandora/
cp -aRf conf/tentacle_* $RPM_BUILD_ROOT%{prefix}/tentacle/conf/
cp -aRf conf/tentacle_server.conf.new $RPM_BUILD_ROOT/etc/tentacle/
cp -aRf util $RPM_BUILD_ROOT%{prefix}/pandora_server/ cp -aRf util $RPM_BUILD_ROOT%{prefix}/pandora_server/
cp -aRf lib/* $RPM_BUILD_ROOT/usr/lib/perl5/ cp -aRf lib/* $RPM_BUILD_ROOT/usr/lib/perl5/
cp -aRf AUTHORS COPYING README $RPM_BUILD_ROOT%{prefix}/pandora_server/ cp -aRf AUTHORS COPYING README $RPM_BUILD_ROOT%{prefix}/pandora_server/
@ -112,6 +116,8 @@ if [ ! -d /etc/pandora ] ; then
mkdir -p /etc/pandora mkdir -p /etc/pandora
fi fi
# Avoid to overwrite config files on upgrades
# Main configuration files
if [ ! -e "/etc/pandora/pandora_server.conf" ] if [ ! -e "/etc/pandora/pandora_server.conf" ]
then then
echo "Creating a new version of Pandora FMS Server config file at /etc/pandora/pandora_server.conf" echo "Creating a new version of Pandora FMS Server config file at /etc/pandora/pandora_server.conf"
@ -121,6 +127,12 @@ else
echo "An existing version of pandora_server.conf is found." echo "An existing version of pandora_server.conf is found."
cat /etc/pandora/pandora_server.conf > /etc/pandora/pandora_server.conf.old cat /etc/pandora/pandora_server.conf > /etc/pandora/pandora_server.conf.old
fi fi
# Tentacle config files
if [ ! -e "/etc/tentacle/tentacle_server.conf" ]
then
echo "Creating a new version of Tentacle Server config file at /etc/tentacle/tentacle_server.conf"
cat /etc/tentacle/tentacle_server.conf.new > /etc/tentacle/tentacle_server.conf
fi
echo "Don't forget to start Tentacle Server daemon if you want to receive" echo "Don't forget to start Tentacle Server daemon if you want to receive"
echo "data using tentacle" echo "data using tentacle"
@ -152,6 +164,7 @@ rm -Rf %{prefix}pandora_server
rm -Rf /var/log/pandora rm -Rf /var/log/pandora
rm -Rf /usr/lib/perl5/PandoraFMS/ rm -Rf /usr/lib/perl5/PandoraFMS/
rm -Rf /etc/pandora/pandora_server.conf* rm -Rf /etc/pandora/pandora_server.conf*
rm -Rf /etc/tentacle/tentacle_server.conf*
rm -Rf /var/spool/pandora rm -Rf /var/spool/pandora
rm -Rf /etc/init.d/pandora_server /etc/init.d/tentacle_serverd rm -Rf /etc/init.d/pandora_server /etc/init.d/tentacle_serverd
rm -Rf /usr/bin/pandora_exec /usr/bin/pandora_server /usr/bin/tentacle_server rm -Rf /usr/bin/pandora_exec /usr/bin/pandora_server /usr/bin/tentacle_server
@ -174,6 +187,7 @@ rm -Rf /usr/share/man/man1/tentacle_server.1.gz
%defattr(755,pandora,root,755) %defattr(755,pandora,root,755)
/usr/lib/perl5/PandoraFMS/ /usr/lib/perl5/PandoraFMS/
%{prefix}/pandora_server %{prefix}/pandora_server
%{prefix}/tentacle
/var/log/pandora /var/log/pandora
%defattr(-,pandora,www,2770) %defattr(-,pandora,www,2770)
@ -188,6 +202,9 @@ rm -Rf /usr/share/man/man1/tentacle_server.1.gz
%defattr(-,pandora,root,750) %defattr(-,pandora,root,750)
/etc/pandora /etc/pandora
%defattr(-,pandora,root,754)
/etc/tentacle
%defattr(644,pandora,root) %defattr(644,pandora,root)
/usr/share/man/man1/pandora_server.1.gz /usr/share/man/man1/pandora_server.1.gz
/usr/share/man/man1/tentacle_server.1.gz /usr/share/man/man1/tentacle_server.1.gz

View File

@ -9,7 +9,7 @@
# ********************************************************************** # **********************************************************************
PI_VERSION="7.0NG.722" PI_VERSION="7.0NG.722"
PI_BUILD="180423" PI_BUILD="180510"
MODE=$1 MODE=$1
if [ $# -gt 1 ]; then if [ $# -gt 1 ]; then
@ -27,6 +27,9 @@ TENTACLE_SERVER=/etc/init.d/tentacle_serverd
PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf
PANDORA_CFG_FILE_DIST=conf/pandora_server.conf.new PANDORA_CFG_FILE_DIST=conf/pandora_server.conf.new
PANDORA_INIT_SCRIPT=util/pandora_server PANDORA_INIT_SCRIPT=util/pandora_server
TENTACLE_CFG_DIR=/etc/tentacle
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
TENTACLE_CFG_FILE_DIST=conf/tentacle_server.conf.new
TENTACLE_INIT_SCRIPT=util/tentacle_serverd TENTACLE_INIT_SCRIPT=util/tentacle_serverd
PERL=perl PERL=perl
MANDIR=$PREFIX/share/man/man1 MANDIR=$PREFIX/share/man/man1
@ -91,6 +94,8 @@ set_global_vars () {
PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf
PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new
PANDORA_INIT_SCRIPT=$DISTRO/pandora_server PANDORA_INIT_SCRIPT=$DISTRO/pandora_server
TENTACLE_CFG_DIR=$PREFIX/etc/tentacle
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server TENTACLE_INIT_SCRIPT=$DISTRO/tentacle_server
MANDIR=$PREFIX/man/man1 MANDIR=$PREFIX/man/man1
INITDIR=$PREFIX/etc/rc.d INITDIR=$PREFIX/etc/rc.d
@ -103,6 +108,8 @@ set_global_vars () {
PANDORA_HOME=$PREFIX/share/pandora_server PANDORA_HOME=$PREFIX/share/pandora_server
PANDORA_CFG_DIR=$PREFIX/etc/pandora PANDORA_CFG_DIR=$PREFIX/etc/pandora
PANDORA_SERVER=/etc/rc.d/pandora_server PANDORA_SERVER=/etc/rc.d/pandora_server
TENTACLE_CFG_DIR=$PREFIX/etc/tentacle
TENTACLE_CFG_FILE=$TENTACLE_CFG_DIR/tentacle_server.conf
TENTACLE_SERVER=/etc/rc.d/tentacle_server TENTACLE_SERVER=/etc/rc.d/tentacle_server
PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf PANDORA_CFG_FILE=$PANDORA_CFG_DIR/pandora_server.conf
PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new PANDORA_CFG_FILE_DIST=$DISTRO/pandora_server.conf.new
@ -361,6 +368,19 @@ install () {
then then
# tentacle_server is already installed by "make install" # tentacle_server is already installed by "make install"
install_startup_script -s 80 $TENTACLE_INIT_SCRIPT install_startup_script -s 80 $TENTACLE_INIT_SCRIPT
# Create the directory to locate the Tentacle configuration file
echo "Creating setup Tentacle directory in $TENTACLE_CFG_DIR"
mkdir -p $DESTDIR$TENTACLE_CFG_DIR 2> /dev/null
if [ -f "$DESTDIR$TENTACLE_CFG_FILE" ]
then
echo cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_DIR
cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_DIR
else
echo cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_FILE
cp $TENTACLE_CFG_FILE_DIST $DESTDIR$TENTACLE_CFG_FILE
chmod 774 $DESTDIR$TENTACLE_CFG_FILE
fi
echo "Installing Tentacle Server manual" echo "Installing Tentacle Server manual"
cp man/man1/tentacle_server.1.gz $DESTDIR$MANDIR cp man/man1/tentacle_server.1.gz $DESTDIR$MANDIR
@ -457,6 +477,8 @@ uninstall () {
rm -Rf $DESTDIR$PANDORA_LOG 2> /dev/null rm -Rf $DESTDIR$PANDORA_LOG 2> /dev/null
rm -f $DESTDIR$PANDORA_CFG_FILE 2> /dev/null rm -f $DESTDIR$PANDORA_CFG_FILE 2> /dev/null
rm -f "$DESTDIR$PANDORA_CFG_FILE.new" 2> /dev/null rm -f "$DESTDIR$PANDORA_CFG_FILE.new" 2> /dev/null
rm -f $DESTDIR$TENTACLE_CFG_FILE 2> /dev/null
rm -f "$DESTDIR$TENTACLE_CFG_FILE.new" 2> /dev/null
rm -f $DESTDIR$PANDORA_SERVER 2> /dev/null rm -f $DESTDIR$PANDORA_SERVER 2> /dev/null
rm -f $DESTDIR$PREFIX/bin/pandora_server 2> /dev/null rm -f $DESTDIR$PREFIX/bin/pandora_server 2> /dev/null
rm -f $DESTDIR$PREFIX/bin/pandora_exec 2> /dev/null rm -f $DESTDIR$PREFIX/bin/pandora_exec 2> /dev/null

View File

@ -33,7 +33,7 @@ use PandoraFMS::Tools;
use PandoraFMS::DB; use PandoraFMS::DB;
# version: define current version # version: define current version
my $version = "7.0NG.722 PS180423"; my $version = "7.0NG.722 PS180510";
# 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.722 PS180423"; my $version = "7.0NG.722 PS180510";
# save program name for logging # save program name for logging
my $progname = basename($0); my $progname = basename($0);
@ -135,6 +135,7 @@ sub help_screen{
help_screen_line('--delete_cluster', '<id_cluster>', 'Deleting cluster'); help_screen_line('--delete_cluster', '<id_cluster>', 'Deleting cluster');
help_screen_line('--delete_cluster_agent', '<id_agent> <id_cluster>', 'Deleting cluster agent'); help_screen_line('--delete_cluster_agent', '<id_agent> <id_cluster>', 'Deleting cluster agent');
help_screen_line('--delete_cluster_item', '<id_item>', 'Deleting cluster item'); help_screen_line('--delete_cluster_item', '<id_item>', 'Deleting cluster item');
help_screen_line('--get_cluster_status', '<id_cluster>', 'Getting cluster status');
print "\nMODULES:\n\n" unless $param ne ''; print "\nMODULES:\n\n" unless $param ne '';
help_screen_line('--create_data_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <definition_file> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>]", 'Add data server module to agent'); help_screen_line('--create_data_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <definition_file> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>]", 'Add data server module to agent');
help_screen_line('--create_web_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <definition_file>\n\t <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to agent'); help_screen_line('--create_web_module', "<module_name> <module_type> <agent_name> [<description> <module_group> \n\t <min> <max> <post_process> <interval> <warning_min> <warning_max> <critical_min> <critical_max> \n\t <history_data> <retries> <requests> <agent_browser_id> <auth_server> <auth_realm> <definition_file>\n\t <proxy_url> <proxy_auth_login> <proxy_auth_password> <warning_str> <critical_str>\n\t <unknown_events> <ff_threshold> <each_ff> <ff_threshold_normal>\n\t <ff_threshold_warning> <ff_threshold_critical> <ff_timeout> <warning_inverse> <critical_inverse>\n\t <critical_instructions> <warning_instructions> <unknown_instructions>].\n\t The valid data types are web_data, web_proc, web_content_data or web_content_string", 'Add web server module to agent');
@ -6112,7 +6113,10 @@ sub pandora_manage_main ($$$) {
param_check($ltotal, 1, 0); param_check($ltotal, 1, 0);
cli_delete_cluster_item(); cli_delete_cluster_item();
} }
elsif ($param eq '--get_cluster_status') {
param_check($ltotal, 1, 0);
cli_cluster_status();
}
elsif ($param eq '--migration_agent_queue') { elsif ($param eq '--migration_agent_queue') {
param_check($ltotal, 4, 1); param_check($ltotal, 4, 1);
cli_migration_agent_queue(); cli_migration_agent_queue();
@ -6687,3 +6691,22 @@ sub cli_delete_cluster_item() {
print "\n0\n"; print "\n0\n";
} }
} }
##############################################################################
# get cluster status.
# Related option: --get_cluster_status
##############################################################################
sub cli_get_cluster_status() {
my ($id) = @ARGV[2..2];
# Call the API.
my $result = api_call( $conf, 'get', 'cluster_status', $id);
if( defined($result) && "$result" ne "" ){
print "\n1\n";
}
else{
print "\n0\n";
}
}

View File

@ -57,7 +57,7 @@ function get_pid {
# in a "strech" term, ps aux don't report more than COLUMNS # in a "strech" term, ps aux don't report more than COLUMNS
# characters and this will not work. # characters and this will not work.
COLUMNS=300 COLUMNS=300
TENTACLE_PID=`ps -Af | grep "$TENTACLE_PATH$TENTACLE_DAEMON" | grep "$TENTACLE_PORT" | grep -v grep | tail -1 | awk '{ print $2 }'` TENTACLE_PID=`ps -Af | grep "$TENTACLE_PATH$TENTACLE_DAEMON" | grep "$TENTACLE_CONFIG_FILE" | grep -v grep | tail -1 | awk '{ print $2 }'`
echo $TENTACLE_PID echo $TENTACLE_PID
} }
@ -71,18 +71,12 @@ function get_all_pid {
echo $TENTACLE_PID echo $TENTACLE_PID
} }
# Pandora server settings
PANDORA_SERVER_PATH="/var/spool/pandora/data_in"
# Tentacle server settings # Tentacle server settings
TENTACLE_DAEMON="tentacle_server" TENTACLE_DAEMON="tentacle_server"
TENTACLE_PATH="/usr/bin" TENTACLE_PATH="/usr/bin"
TENTACLE_USER="pandora" TENTACLE_USER="pandora"
TENTACLE_CONFIG_FILE="/etc/tentacle/tentacle_server.conf"
TENTACLE_ADDR="0.0.0.0" TENTACLE_EXT_OPTS=""
TENTACLE_PORT="41121"
TENTACLE_EXT_OPTS="-i.*\.conf:conf;.*\.md5:md5;.*\.zip:collections;.*\.lock:trans"
TENTACLE_LOG_FILE="/dev/null"
# Set umask to 0002, because group MUST have access to write files to # Set umask to 0002, because group MUST have access to write files to
# use remote file management on Pandora FMS Enterprise. # use remote file management on Pandora FMS Enterprise.
@ -90,7 +84,7 @@ TENTACLE_LOG_FILE="/dev/null"
umask 0007 umask 0007
# Main script # Main script
TENTACLE_OPTS="-a $TENTACLE_ADDR -p $TENTACLE_PORT -s $PANDORA_SERVER_PATH $TENTACLE_EXT_OPTS -d -l $TENTACLE_LOG_FILE -v" TENTACLE_OPTS="-F $TENTACLE_CONFIG_FILE $TENTACLE_EXT_OPTS"
# Fix TENTACLE_PATH # Fix TENTACLE_PATH
case "$TENTACLE_PATH" in case "$TENTACLE_PATH" in
@ -114,7 +108,8 @@ case "$1" in
echo "Tentacle Server is already running with PID $TENTACLE_PID" echo "Tentacle Server is already running with PID $TENTACLE_PID"
rc_exit # running start on a service already running rc_exit # running start on a service already running
fi fi
# Init the tentacle process
sudo -u $TENTACLE_USER ${TENTACLE_PATH}$TENTACLE_DAEMON $TENTACLE_OPTS sudo -u $TENTACLE_USER ${TENTACLE_PATH}$TENTACLE_DAEMON $TENTACLE_OPTS
sleep 1 sleep 1
@ -124,7 +119,7 @@ case "$1" in
rc_status -v rc_status -v
else else
echo "Tentacle Server could not be started." echo "Tentacle Server could not be started."
echo "Verify that port $TENTACLE_PORT is not used." echo "Verify that Tentacle port is not used."
rc_failed 7 # program not running rc_failed 7 # program not running
fi fi

View File

@ -4,7 +4,7 @@ After=network-online.target
[Service] [Service]
Type=forking Type=forking
ExecStart=/usr/bin/tentacle_server -a 0.0.0.0 -p 41121 -s /var/spool/pandora/data_in -i.*\.conf:conf;.*\.md5:md5;.*\.zip:collections -d ExecStart=/usr/bin/tentacle_server -F /etc/tentacle/tentacle_server.conf
User=pandora User=pandora
[Install] [Install]