From dfb7a6fac8234f53ba8b1719bfa29ecf474f4241 Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 27 Feb 2011 02:23:00 +0000 Subject: [PATCH] add start of torrus srvderive daemon, RT#10574 --- FS/MANIFEST | 1 + FS/bin/freeside-torrus-srvderive | 108 +++++++++++++++++++++++++++++++++++++++ init.d/freeside-init | 10 ++++ 3 files changed, 119 insertions(+) create mode 100644 FS/bin/freeside-torrus-srvderive diff --git a/FS/MANIFEST b/FS/MANIFEST index ae571a10f..0c82337c7 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -23,6 +23,7 @@ bin/freeside-setup bin/freeside-sqlradius-radacctd bin/freeside-sqlradius-reset bin/freeside-sqlradius-seconds +bin/freeside-torrus-srvderive FS.pm FS/AccessRight.pm FS/CGI.pm diff --git a/FS/bin/freeside-torrus-srvderive b/FS/bin/freeside-torrus-srvderive new file mode 100644 index 000000000..3a974ac4f --- /dev/null +++ b/FS/bin/freeside-torrus-srvderive @@ -0,0 +1,108 @@ +#!/usr/bin/perl -w + +use strict; +use Date::Parse; +use FS::Daemon ':all'; #daemonize1 drop_root daemonize2 myexit logfile sig* +use FS::UID qw( adminsuidsetup dbh driver_name ); +use FS::Record qw( qsearch str2time_sql str2time_sql_closing ); +use FS::torrus_srvderive; + +our $DEBUG = 1; + +my $user = shift or die &usage; +$FS::Daemon::PID_NEWSTYLE = 1; +daemonize1('freeside-torrus-srvderive'); + +drop_root(); + +adminsuidsetup($user); + +logfile( "%%%FREESIDE_LOG%%%/torrus-srvderive-log.". $FS::UID::datasrc ); + +daemonize2(); + +our $conf = new FS::Conf; + +die "not running: network_monitoring_system not Torrus_Internal\n" + unless _shouldrun(); + +#-- + +my $str2time = str2time_sql(); +my $c = str2time_sql_closing(); + +my $_date = concat_sql([ 'srvexport.srv_date', "' '", 'srvexport.srv_time' ]); +$_date = "CAST( $_date AS TIMESTAMP )" if driver_name =~ /^Pg/i; +$_date = str2time_sql. $_date. str2time_sql_closing; + +my $other_date = concat_sql([ 'other.srv_date', "' '", 'other.srv_time' ]); +$other_date = "CAST( $other_date AS TIMESTAMP )" if driver_name =~ /^Pg/i; +$other_date = str2time_sql. $other_date. str2time_sql_closing; + +my $sql = " + SELECT DISTINCT srv_date, srv_time FROM srvexport + WHERE NOT EXISTS ( + SELECT 1 FROM srvexport AS other + WHERE other.serviceid IN ( ?||'_IN', ?||'_OUT') + AND ABS( $_date - $other_date ) <= 60 + ) + ORDER BY id +"; + +while (1) { + + #my $found = 0; + + foreach my $torrus_srvderive ( qsearch('torrus_srvderive', {}) ) { + + my $serviceid = $torrus_srvderive->serviceid; + + my $sth = dbh->prepare($sql) or die $DBI::errstr; #better recovery? + $sth->execute($serviceid, $serviceid) or die $sth->errstr; + my $prev = 0; + while ( my $row = $sth->fetchrow_arrayref ) { + my( $srv_date, $srv_time ) = @$row; + my $cur = str2time( "$srv_date $srv_time" ); + next if $cur-$prev <= 60; + + warn "no $serviceid for $srv_date $srv_time; adding\n" + if $DEBUG; + + } + + } + + + myexit() if sigterm() || sigint(); + sleep 60; #unless $found +} + +sub _shouldrun { + $conf->exists('network_monitoring_system') + && $conf->config('network_monitoring_system') eq 'Torrus_Internal'; +} + +sub usage { + die "Usage:\n\n freeside-cdrrewrited user\n"; +} + + +=head1 NAME + +freeside-torrus-srvderive - Freeside's Torrus virtual port daemon. + +=head1 SYNOPSIS + + freeside-torrus-srvderive + +=head1 DESCRIPTION + +Runs continuously, searches for samples in the srvexport table which do not +have an entry for combined virtual ports, and adds them. + +=head1 SEE ALSO + +=cut + +1; + diff --git a/init.d/freeside-init b/init.d/freeside-init index 1acefdc41..c82ea9862 100644 --- a/init.d/freeside-init +++ b/init.d/freeside-init @@ -52,6 +52,10 @@ case "$1" in freeside-selfservice-xmlrpcd $SELFSERVICE_USER echo "done." + echo -n "Starting freeside-torrus-srvderive: " + freeside-torrus-srvderive $QUEUED_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 @@ -114,6 +118,12 @@ case "$1" in 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` + echo "done." + fi + ;; restart) -- 2.11.0