config option to start ping daemon
authorMark Wells <mark@freeside.biz>
Thu, 29 Sep 2016 17:17:55 +0000 (10:17 -0700)
committerMark Wells <mark@freeside.biz>
Thu, 29 Sep 2016 17:17:55 +0000 (10:17 -0700)
FS/FS/Conf.pm
FS/FS/Daemon.pm
FS/bin/freeside-pingd
init.d/freeside-init

index a7e5d94..ea80bb7 100644 (file)
@@ -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.',
index a386208..4ecd80e 100644 (file)
@@ -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";
index 8cfb26a..fc9f8a3 100644 (file)
@@ -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;
index 248c5b3..a7bb3d1 100644 (file)
@@ -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`