Manage the sflow daemon.

This commit is contained in:
Ramon Novoa 2023-03-09 10:49:54 +01:00
parent 5ff56ff7e8
commit 8f393cea12
6 changed files with 91 additions and 0 deletions

View File

@ -76,6 +76,9 @@ sub pandora_shutdown () {
# Stop the netflow daemon
pandora_stop_netflow_daemon ();
# Stop the sflow daemon
pandora_stop_sflow_daemon ();
# Stop server threads.
stop_server_threads();
@ -167,6 +170,9 @@ sub pandora_startup () {
# Start the netflow daemon if necessary
pandora_start_netflow_daemon ();
# Start the sflow daemon if necessary
pandora_start_sflow_daemon ();
# Remove disabled servers
@Servers = grep { defined ($_) } @Servers;
@ -310,6 +316,62 @@ sub pandora_stop_netflow_daemon () {
return 0;
}
########################################################################################
# Start the sflow daemon if necessary.
########################################################################################
sub pandora_start_sflow_daemon () {
my $pid_file = '/var/run/pandora_sfcapd.pid';
# Check if sflow is enabled
if ($Config{'activate_sflow'} != 1) {
logger (\%Config, " [*] sflow daemon disabled.", 1);
print_message (\%Config, " [*] sflow daemon disabled.", 1);
return;
}
# Stop sfcapd if it's already running
my $pid = pandora_stop_sflow_daemon ();
if (pandora_stop_sflow_daemon () != 0) {
logger (\%Config, "sfcapd (pid $pid) is already running, attempting to kill it...", 1);
print_message (\%Config, "sfcapd (pid $pid) is already running, attempting to kill it...", 1);
}
# Start sfcapd
my $command = $Config{'sflow_daemon'} . ' -D -T all -w -t ' . $Config{'sflow_interval'} . ' -P ' . $pid_file . ' -l ' . $Config{'sflow_path'};
if (system ("$command >/dev/null 2>&1") != 0) {
logger (\%Config, " [E] Could not start sfcapd: $command", 1);
print_message (\%Config, " [E] Could not start sfcapd: $command", 1);
return;
}
logger (\%Config, "[*] sflow daemon started.", 1);
print_message (\%Config, "[*] sflow daemon started.", 1);
}
########################################################################################
# Stop the sflow daemon if it's running.
########################################################################################
sub pandora_stop_sflow_daemon () {
my $pid_file = '/var/run/pandora_sfcapd.pid';
# Open the pid file
if ( ! (-e $pid_file && open (PIDFILE, $pid_file))) {
return 0;
}
my $pid = <PIDFILE>;
close PIDFILE;
# Check if sfcapd is running
if (kill (0, $pid) > 0) {
kill (9, $pid);
return $pid;
}
return 0;
}
sub pandora_agent_autoconfiguration_scheduled($) {
my $pa_config = shift;

View File

@ -144,6 +144,12 @@ sub pandora_get_sharedconfig ($$) {
$pa_config->{"netflow_interval"} = pandora_get_tconfig_token ($dbh, 'netflow_interval', 300);
$pa_config->{"netflow_daemon"} = pandora_get_tconfig_token ($dbh, 'netflow_daemon', '/usr/bin/nfcapd');
# Sflow configuration options
$pa_config->{"activate_sflow"} = pandora_get_tconfig_token ($dbh, 'activate_sflow', 0);
$pa_config->{"sflow_path"} = pandora_get_tconfig_token ($dbh, 'sflow_path', '/var/spool/pandora/data_in/sflow');
$pa_config->{"sflow_interval"} = pandora_get_tconfig_token ($dbh, 'sflow_interval', 300);
$pa_config->{"sflow_daemon"} = pandora_get_tconfig_token ($dbh, 'sflow_daemon', '/usr/bin/nfcapd');
# Log module configuration
$pa_config->{"log_dir"} = pandora_get_tconfig_token ($dbh, 'log_dir', '/var/spool/pandora/data_in/log');
$pa_config->{"log_interval"} = pandora_get_tconfig_token ($dbh, 'log_interval', 3600);

View File

@ -55,6 +55,7 @@ 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/collections
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/netflow
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/sflow
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/trans
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/spool/pandora/data_in/commands
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/pandora/
@ -237,5 +238,6 @@ exit 0
%{_localstatedir}/spool/pandora/data_in/collections
%{_localstatedir}/spool/pandora/data_in/conf
%{_localstatedir}/spool/pandora/data_in/netflow
%{_localstatedir}/spool/pandora/data_in/sflow
%{_localstatedir}/spool/pandora/data_in/trans
%{_localstatedir}/spool/pandora/data_in/commands

View File

@ -62,6 +62,7 @@ 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/collections
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/netflow
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/sflow
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/trans
mkdir -p $RPM_BUILD_ROOT/var/spool/pandora/data_in/commands
mkdir -p $RPM_BUILD_ROOT/var/log/pandora/
@ -235,6 +236,7 @@ rm -Rf /usr/share/man/man1/tentacle_server.1.gz
/var/spool/pandora/data_in/md5
/var/spool/pandora/data_in/collections
/var/spool/pandora/data_in/netflow
/var/spool/pandora/data_in/sflow
/var/spool/pandora/data_in/conf
/var/spool/pandora/data_in/trans
/var/spool/pandora/data_in/commands

View File

@ -308,6 +308,8 @@ install () {
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/collections
mkdir $DESTDIR$PANDORA_SPOOL/data_in/netflow 2> /dev/null
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/netflow
mkdir $DESTDIR$PANDORA_SPOOL/data_in/sflow 2> /dev/null
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/sflow
mkdir $DESTDIR$PANDORA_SPOOL/data_in/trans 2> /dev/null
chmod 2770 $DESTDIR$PANDORA_SPOOL/data_in/trans
mkdir $DESTDIR$PANDORA_SPOOL/data_in/commands 2> /dev/null

View File

@ -353,6 +353,23 @@ sub pandora_purgedb ($$$) {
else {
log_message ('PURGE', 'netflow_max_lifetime is set to 0. Old netflow data will not be deleted.');
}
# Delete old sflow data
if ($conf->{'_sflow_max_lifetime'} > 0) {
log_message ('PURGE', "Deleting old sflow data.");
if (! defined ($conf->{'_sflow_path'}) || ! -d $conf->{'_sflow_path'}) {
log_message ('!', "sflow data directory does not exist, skipping.");
}
elsif (! -x $conf->{'_sflow_nfexpire'}) {
log_message ('!', "Cannot execute " . $conf->{'_sflow_nfexpire'} . ", skipping.");
}
else {
`yes 2>/dev/null | $conf->{'_sflow_nfexpire'} -r "$conf->{'_sflow_path'}" -t $conf->{'_sflow_max_lifetime'}d`;
}
}
else {
log_message ('PURGE', 'sflow_max_lifetime is set to 0. Old sflow data will not be deleted.');
}
# Delete old log data
log_message ('PURGE', "Deleting old log data.");