From e95a136f9dae69525dd926ce4d3314e407a567c9 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 1 Nov 2008 22:12:58 +0000 Subject: [PATCH] have freeside-cdrd disable itself if there's no appropriate package definition, RT#4184 --- FS/FS/Daemon.pm | 10 +++++++++- FS/bin/freeside-cdrd | 31 ++++++++++++++++++++++++++++--- init.d/freeside-init | 40 +++++++++++++++++++++++++--------------- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/FS/FS/Daemon.pm b/FS/FS/Daemon.pm index 7e0d45c20..ca181345a 100644 --- a/FS/FS/Daemon.pm +++ b/FS/FS/Daemon.pm @@ -12,7 +12,10 @@ use Date::Format; #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'; @@ -74,6 +77,11 @@ sub sigterm { $sigterm; } 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; diff --git a/FS/bin/freeside-cdrd b/FS/bin/freeside-cdrd index ef420b53b..882fd5402 100644 --- a/FS/bin/freeside-cdrd +++ b/FS/bin/freeside-cdrd @@ -1,7 +1,7 @@ #!/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; @@ -20,6 +20,9 @@ logfile( "%%%FREESIDE_LOG%%%/cdrd-log.". $FS::UID::datasrc ); daemonize2(); +die "not running; no voip_cdr package defs w/ bill_every_call and customer pkgs" + unless _shouldrun(); + #-- my $addl_from = @@ -66,7 +69,7 @@ while (1) { $found = 1; - my $work_cust_pkg = $cust_pkg; + #my $work_cust_pkg = $cust_pkg; 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; } #-- +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"; } diff --git a/init.d/freeside-init b/init.d/freeside-init index 1f3ce2bc5..54ebea297 100644 --- a/init.d/freeside-init +++ b/init.d/freeside-init @@ -43,35 +43,45 @@ case "$1" in 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 + sleep 2; killall freeside-queued - - echo -n "Stopping freeside-sqlradius-radacctd: " - kill `cat /var/run/freeside-sqlradius-radacctd.pid` 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 + echo "done." 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 ;; -- 2.11.0