summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-09-29 10:17:55 -0700
committerMark Wells <mark@freeside.biz>2016-09-29 10:17:55 -0700
commit1de48dbd2df88f4ceeedc3e54ce5933bf54c4c84 (patch)
treed59907d8a66194d39dabdd28fad4bb6f1855958a
parent2416fc07f8626ac8c3a1db67bb8a3560c05c2736 (diff)
config option to start ping daemon
-rw-r--r--FS/FS/Conf.pm17
-rw-r--r--FS/FS/Daemon.pm2
-rw-r--r--FS/bin/freeside-pingd13
-rw-r--r--init.d/freeside-init10
4 files changed, 40 insertions, 2 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index a7e5d947a..ea80bb732 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -3073,6 +3073,23 @@ and customer address. Include units.',
},
{
+ 'key' => 'pingd-interval',
+ 'section' => 'network_monitoring',
+ 'description' => 'Run ping scans of broadband services at this interval.',
+ 'type' => 'select',
+ 'select_hash' => [ '' => '',
+ 60 => '1 min',
+ 300 => '5 min',
+ 600 => '10 min',
+ 1800 => '30 min',
+ 3600 => '1 hour',
+ 14400 => '4 hours',
+ 28800 => '8 hours',
+ 86400 => '1 day',
+ ],
+ },
+
+ {
'key' => 'ticket_system-default_queueid',
'section' => 'ticketing',
'description' => 'Default queue used when creating new customer tickets.',
diff --git a/FS/FS/Daemon.pm b/FS/FS/Daemon.pm
index a3862088c..4ecd80e98 100644
--- a/FS/FS/Daemon.pm
+++ b/FS/FS/Daemon.pm
@@ -204,7 +204,7 @@ sub daemon_reconnect {
unless ($dbh && $dbh->ping) {
warn "WARNING: connection to database lost, reconnecting...\n";
- eval { $FS::UID::dbh = myconnect; };
+ eval { $FS::UID::dbh = myconnect(); };
unless ( !$@ && $FS::UID::dbh && $FS::UID::dbh->ping ) {
warn "WARNING: still no connection to database, sleeping for retry...\n";
diff --git a/FS/bin/freeside-pingd b/FS/bin/freeside-pingd
index 8cfb26a5f..fc9f8a378 100644
--- a/FS/bin/freeside-pingd
+++ b/FS/bin/freeside-pingd
@@ -5,6 +5,7 @@ use FS::Daemon ':all';
use FS::UID qw(dbh adminsuidsetup);
use FS::Record qw( dbh qsearch qsearchs );
use FS::addr_status;
+use FS::Conf;
use Getopt::Std;
use Net::Ping;
@@ -14,12 +15,13 @@ my @TARGETS = (
# could add others here
);
-my $interval = 300; # seconds
my $timeout = 5.0; # seconds
# useful opts: scan interval, timeout, verbose, max forks
# maybe useful opts: interface, protocol, packet size, no-fork
+my $interval;
+
our %opt;
getopts('vxi:', \%opt);
my $user = shift or die usage();
@@ -41,6 +43,15 @@ sub debug {
adminsuidsetup($user);
$FS::UID::AutoCommit = 1;
+if ( !$interval ) {
+ my $conf = FS::Conf->new;
+ $interval = $conf->config('pingd-interval');
+ if ( !$interval ) {
+ debug("no pingd-interval configured; exiting");
+ exit(0);
+ }
+}
+
while(1) {
daemon_reconnect();
my @addrs_to_scan;
diff --git a/init.d/freeside-init b/init.d/freeside-init
index 248c5b36e..a7bb3d12c 100644
--- a/init.d/freeside-init
+++ b/init.d/freeside-init
@@ -78,6 +78,10 @@ case "$1" in
freeside-cdrrated $QUEUED_USER
echo "done."
+ echo -n "Starting freeside-pingd: "
+ freeside-pingd $QUEUED_USER
+ echo "done."
+
if [ -e /usr/local/bin/torrus ]; then
echo -n "Starting torrus collector: "
/usr/local/bin/torrus collector --tree=main
@@ -134,6 +138,12 @@ case "$1" in
echo "done."
fi
+ if [ -e /var/run/freeside-pingd.pid ]; then
+ echo -n "Stopping freeside-pingd: "
+ kill `cat /var/run/freeside-pingd.pid`
+ echo "done."
+ fi
+
if [ -e /var/run/freeside/torrus-srvderive.pid ]; then
echo -n "Stopping freeside-torrus-srvderive: "
kill `cat /var/run/freeside/torrus-srvderive.pid`