summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2010-06-16 21:53:24 +0000
committerivan <ivan>2010-06-16 21:53:24 +0000
commit7ea8e16cf847c607bf917cb3b31110d18104a343 (patch)
treeb0663a3c412b0df9763a0ff547ed30b3b62f72e5
parent0743ea91445e0682a00a05a0ae8f72e587d6a0e9 (diff)
a local XML-RPC server for ncic: daemonize and respond to TERM, RT#7780
-rw-r--r--FS/FS/Conf.pm8
-rw-r--r--FS/FS/Daemon.pm20
-rwxr-xr-xFS/bin/freeside-selfservice-xmlrpcd11
-rw-r--r--init.d/freeside-init10
4 files changed, 45 insertions, 4 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 9046b261b..0cbf78bae 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1645,6 +1645,7 @@ worry that config_items is freeside-specific and icky.
'description' => 'Run billing for signup server signups immediately, and do not provision accounts which subsequently have a balance.',
'type' => 'checkbox',
},
+
{
'key' => 'signup_server-classnum2',
'section' => 'self-service',
@@ -1660,6 +1661,13 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'selfservice-xmlrpc',
+ 'section' => 'self-service',
+ 'description' => 'Run a standalone self-service XML-RPC server on the backend (on port 8080).',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'backend-realtime',
'section' => 'billing',
'description' => 'Run billing for backend signups immediately.',
diff --git a/FS/FS/Daemon.pm b/FS/FS/Daemon.pm
index 38e6d7577..b58cde49f 100644
--- a/FS/FS/Daemon.pm
+++ b/FS/FS/Daemon.pm
@@ -6,6 +6,8 @@ use Exporter;
use Fcntl qw(:flock);
use POSIX qw(setsid);
use IO::File;
+use File::Basename;
+use File::Slurp qw(slurp);
use Date::Format;
#this is a simple refactoring of the stuff from freeside-queued, just to
@@ -20,11 +22,18 @@ use Date::Format;
$pid_dir = '/var/run';
$NOSIG = 0;
+$PID_NEWSTYLE = 0;
sub daemonize1 {
$me = shift;
- $pid_file = "$pid_dir/$me";
+ $pid_file = $pid_dir;
+ if ( $PID_NEWSTYLE ) {
+ $pid_file .= '/freeside';
+ mkdir $pid_file unless -d $pid_file;
+ chown $FS::UID::freeside_uid, -1, $pid_file;
+ }
+ $pid_file .= "/$me";
$pid_file .= '.'.shift if scalar(@_);
$pid_file .= '.pid';
@@ -35,6 +44,7 @@ sub daemonize1 {
print "$me started with pid $pid\n"; #logging to $log_file\n";
exit unless $pid_file;
my $pidfh = new IO::File ">$pid_file" or exit;
+ chown $FS::UID::freeside_uid, -1, $pid_file;
print $pidfh "$pid\n";
exit;
}
@@ -82,14 +92,18 @@ sub sigterm { $sigterm; }
sub logfile { $logfile = shift; } #_logmsg('test'); }
sub myexit {
- unlink $pid_file if -e $pid_file;
+ chomp( my $pid = slurp($pid_file) );
+ unlink $pid_file if -e $pid_file && $$ == $pid;
exit;
}
sub _die {
die @_ if $^S; # $^S = 1 during an eval(), don't break exception handling
my $msg = shift;
- unlink $pid_file if -e $pid_file;
+
+ chomp( my $pid = slurp($pid_file) );
+ unlink $pid_file if -e $pid_file && $$ == $pid;
+
_logmsg($msg);
}
diff --git a/FS/bin/freeside-selfservice-xmlrpcd b/FS/bin/freeside-selfservice-xmlrpcd
index fd7639cac..a90205189 100755
--- a/FS/bin/freeside-selfservice-xmlrpcd
+++ b/FS/bin/freeside-selfservice-xmlrpcd
@@ -25,6 +25,7 @@ use XMLRPC::Lite; # for XMLRPC::Serializer
use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 );
use FS::UID qw(adminsuidsetup);
+use FS::Conf;
use FS::ClientAPI qw( load_clientapi_modules );
use FS::ClientAPI_XMLRPC; #FS::SelfService::XMLRPC;
@@ -47,18 +48,26 @@ my %typelookup = (
my $user = shift or die &usage;
$FS::Daemon::NOSIG = 1;
-daemonize1('freeside-selfservice-xmlrpcd');
+$FS::Daemon::PID_NEWSTYLE = 1;
+daemonize1('selfservice-xmlrpcd');
POE::Kernel->has_forked(); #daemonize forks...
drop_root();
+adminsuidsetup($user);
+
load_clientapi_modules;
logfile("$FREESIDE_LOG/selfservice-xmlrpcd.log");
daemonize2();
+my $conf = new FS::Conf;
+
+die "not running; selfservice-xmlrpc conf option is off\n"
+ unless $conf->exists('selfservice-xmlrpc');
+
###
# the main loop
###
diff --git a/init.d/freeside-init b/init.d/freeside-init
index b4609d48a..1acefdc41 100644
--- a/init.d/freeside-init
+++ b/init.d/freeside-init
@@ -48,6 +48,10 @@ case "$1" in
echo "done."
done
+ echo -n "Starting freeside-selfservice-xmlrpcd: "
+ freeside-selfservice-xmlrpcd $SELFSERVICE_USER
+ echo "done."
+
#ip=`/sbin/ifconfig $IF | grep 'inet addr:' | cut -d: -f2- | cut -d' ' -f1`
#cp /opt/rt3/etc/RT_SiteConfig.pm.ORIG /opt/rt3/etc/RT_SiteConfig.pm
#perl -pi -e "s/localhost/$ip/" /opt/rt3/etc/RT_SiteConfig.pm
@@ -104,6 +108,12 @@ case "$1" in
fi
done
+ if [ -e /var/run/freeside/selfservice-xmlrpcd.pid ]; then
+ echo -n "Stopping freeside-selfservice-xmlrpcd: "
+ kill `cat /var/run/freeside/selfservice-xmlrpcd.pid`
+ echo "done."
+ fi
+
;;
restart)