add start of torrus srvderive daemon, RT#10574
authorivan <ivan>
Sun, 27 Feb 2011 02:23:00 +0000 (02:23 +0000)
committerivan <ivan>
Sun, 27 Feb 2011 02:23:00 +0000 (02:23 +0000)
FS/MANIFEST
FS/bin/freeside-torrus-srvderive [new file with mode: 0644]
init.d/freeside-init

index ae571a1..0c82337 100644 (file)
@@ -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 (file)
index 0000000..3a974ac
--- /dev/null
@@ -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;
+
index 1acefdc..c82ea98 100644 (file)
@@ -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)