From 1de48dbd2df88f4ceeedc3e54ce5933bf54c4c84 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 29 Sep 2016 10:17:55 -0700 Subject: [PATCH] config option to start ping daemon --- FS/FS/Conf.pm | 17 +++++++++++++++++ FS/FS/Daemon.pm | 2 +- FS/bin/freeside-pingd | 13 ++++++++++++- init.d/freeside-init | 10 ++++++++++ 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` -- 2.11.0