have freeside-cdrd disable itself if there's no appropriate package definition, RT...
authorivan <ivan>
Sat, 1 Nov 2008 22:12:58 +0000 (22:12 +0000)
committerivan <ivan>
Sat, 1 Nov 2008 22:12:58 +0000 (22:12 +0000)
FS/FS/Daemon.pm
FS/bin/freeside-cdrd
init.d/freeside-init

index 7e0d45c..ca18134 100644 (file)
@@ -12,7 +12,10 @@ use Date::Format;
 #avoid duplicate code.  eventually this should use something from CPAN.
 
 @ISA = qw(Exporter);
 #avoid duplicate code.  eventually this should use something from CPAN.
 
 @ISA = qw(Exporter);
-@EXPORT_OK = qw( daemonize1 drop_root daemonize2 sigint sigterm logfile );
+@EXPORT_OK = qw(
+  daemonize1 drop_root daemonize2 myexit logfile sigint sigterm
+);
+%EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] );
 
 $pid_dir = '/var/run';
 
 
 $pid_dir = '/var/run';
 
@@ -74,6 +77,11 @@ sub sigterm { $sigterm; }
 
 sub logfile { $logfile = shift; } #_logmsg('test'); }
 
 
 sub logfile { $logfile = shift; } #_logmsg('test'); }
 
+sub myexit {
+  unlink $pid_file if -e $pid_file;
+  exit;  
+}
+
 sub _die {
   my $msg = shift;
   unlink $pid_file if -e $pid_file;
 sub _die {
   my $msg = shift;
   unlink $pid_file if -e $pid_file;
index ef420b5..882fd54 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 
 use strict;
 #!/usr/bin/perl -w
 
 use strict;
-use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm);
+use FS::Daemon ':all'; #daemonize1 drop_root daemonize2 myexit logfile sig*
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearch ); #qsearchs);
 #use FS::cdr;
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw(qsearch ); #qsearchs);
 #use FS::cdr;
@@ -20,6 +20,9 @@ logfile( "%%%FREESIDE_LOG%%%/cdrd-log.". $FS::UID::datasrc );
 
 daemonize2();
 
 
 daemonize2();
 
+die "not running; no voip_cdr package defs w/ bill_every_call and customer pkgs"
+  unless _shouldrun();
+
 #--
 
 my $addl_from =
 #--
 
 my $addl_from =
@@ -66,7 +69,7 @@ while (1) {
 
     $found = 1;
 
 
     $found = 1;
 
-    my $work_cust_pkg = $cust_pkg;
+    #my $work_cust_pkg = $cust_pkg;
 
     my $cust_main = $cust_pkg->cust_main;
 
 
     my $cust_main = $cust_pkg->cust_main;
 
@@ -81,13 +84,35 @@ while (1) {
 
   }
 
 
   }
 
-  die "exiting" if sigterm() || sigint();
+  myexit() if sigterm() || sigint();
   sleep 5; # unless $found;
 
 }
 
 #--
 
   sleep 5; # unless $found;
 
 }
 
 #--
 
+sub _shouldrun {
+
+  my $extra_sql =
+    ' AND 0 < ( SELECT COUNT(*) FROM cust_pkg
+                  WHERE cust_pkg.pkgpart = part_pkg.pkgpart
+                    AND ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 )
+              )
+    ';
+
+  my @part_pkg =
+    grep $_->option('bill_every_call', 'hush'),
+    qsearch({
+      'table'     => 'part_pkg',
+      'hashref'   => { 'plan' => 'voip_cdr' },
+      'extra_sql' => $extra_sql,
+    })
+  ;
+
+  scalar(@part_pkg);
+
+}
+
 sub usage { 
   die "Usage:\n\n  freeside-prepaidd user\n";
 }
 sub usage { 
   die "Usage:\n\n  freeside-prepaidd user\n";
 }
index 1f3ce2b..54ebea2 100644 (file)
@@ -43,35 +43,45 @@ case "$1" in
   stop)
         # Stop daemons.
         echo -n "Stopping freeside-queued: "
   stop)
         # Stop daemons.
         echo -n "Stopping freeside-queued: "
-        kill `cat /var/run/freeside-queued.pid`
-        echo "done."
-
+        [ -e /var/run/freeside-queued.pid ] && kill `cat /var/run/freeside-queued.pid`
         #and
         #and
+        sleep 2;
         killall freeside-queued
         killall freeside-queued
-
-        echo -n "Stopping freeside-sqlradius-radacctd: "
-        kill `cat /var/run/freeside-sqlradius-radacctd.pid`
         echo "done."
 
         echo "done."
 
-        echo -n "Stopping freeside-prepaidd: "
-        kill `cat /var/run/freeside-prepaidd.pid`
-        echo "done."
+        if [ -e /var/run/freeside-sqlradius-radacctd.pid ]; then
+          echo -n "Stopping freeside-sqlradius-radacctd: "
+          kill `cat /var/run/freeside-sqlradius-radacctd.pid`
+          echo "done."
+        fi
 
 
-        echo -n "Stopping freeside-cdrd: "
-        kill `cat /var/run/freeside-cdrd.pid`
-        echo "done."
+        if [ -e /var/run/freeside-prepaidd.pid ]; then
+          echo -n "Stopping freeside-prepaidd: "
+          kill `cat /var/run/freeside-prepaidd.pid`
+          echo "done."
+        fi
+
+        if [ -e /var/run/freeside-cdrd.pid ]; then
+          echo -n "Stopping freeside-cdrd: "
+          kill `cat /var/run/freeside-cdrd.pid`
+          echo "done."
+        fi
 
         if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid ]
         then
           echo -n "Stopping (old) freeside-selfservice-server: "
           kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid`
           rm /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid
 
         if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid ]
         then
           echo -n "Stopping (old) freeside-selfservice-server: "
           kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid`
           rm /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid
+          echo "done."
         fi
 
         for MACHINE in $SELFSERVICE_MACHINES; do
         fi
 
         for MACHINE in $SELFSERVICE_MACHINES; do
-          echo -n "Stopping freeside-selfservice-server to $MACHINE: "
-          kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid`
-          echo "done."
+          if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid ]
+          then
+            echo -n "Stopping freeside-selfservice-server to $MACHINE: "
+            kill `cat /var/run/freeside-selfservice-server.$SELFSERVICE_USER.$MACHINE.pid`
+            echo "done."
+          fi
         done
 
         ;;
         done
 
         ;;