X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-torrus-srvderive;h=f6fc49906ad8f224c418732958db0e8679b12094;hb=5572125d0609b15d697ef6906845911abfdb65f7;hp=61d5fe69fb1dcab4e521cf5e3e72f0f7815de6dd;hpb=d680665a93a77fa1e4cb637eac46d11c42a9f1c4;p=freeside.git diff --git a/FS/bin/freeside-torrus-srvderive b/FS/bin/freeside-torrus-srvderive index 61d5fe69f..f6fc49906 100644 --- a/FS/bin/freeside-torrus-srvderive +++ b/FS/bin/freeside-torrus-srvderive @@ -64,11 +64,12 @@ MAIN: while (1) { my $found = 0; - foreach my $torrus_srvderive ( qsearch('torrus_srvderive', {}) ) { + SERVICEID: foreach my $torrus_srvderive ( qsearch('torrus_srvderive', {}) ) { my $serviceid = $torrus_srvderive->serviceid; my @serviceids = $torrus_srvderive->component_serviceids; + next unless @serviceids; #don't try to search for empty virtual ports my @in = (); for my $dir ('_IN', '_OUT') { @@ -76,6 +77,25 @@ MAIN: while (1) { } my $in = join(',', @in); + if ( ! $torrus_srvderive->last_srv_date ) { + warn "finding initial last_srv_date for $serviceid\n" if $DEBUG; + my $dsql = "SELECT srv_date FROM srvexport WHERE serviceid IN ($in) + ORDER BY srv_date LIMIT 1"; + my $dsth = dbh->prepare($dsql) or die $DBI::errstr; + $dsth->execute or die $dsth->errstr; + my $date = $dsth->fetchrow_arrayref->[0]; + if ( $date ) { + warn "found initial last_srv_date of $date; updating $serviceid\n" + if $DEBUG; + $torrus_srvderive->last_srv_date($date); + my $error = $torrus_srvderive->replace; + die $error if $error; + } else { + warn "no initial last_srv_date for $serviceid; skipping\n" if $DEBUG; + next; + } + } + my $ssql = " $sql AND EXISTS ( SELECT 1 FROM srvexport AS other @@ -94,11 +114,9 @@ MAIN: while (1) { warn $ssql if $DEBUG > 2; my $sth = dbh->prepare($ssql) or die $DBI::errstr; #better recovery here? - warn "executing search\n" if $DEBUG; - eval { my $h = set_sig_handler( 'ALRM', sub { die "_timeout\n"; } ); - alarm(5*60); # 15*60); + alarm(10*60); #5*60); #$torrus_srvderive->last_srv_date ? 5*60 : 15*60); $sth->execute($serviceid, $serviceid) or die $sth->errstr; alarm(0); }; @@ -108,13 +126,14 @@ MAIN: while (1) { warn "search timed out; reconnecting and restarting\n"; dbh->clone()->do("KILL QUERY ". dbh->{"mysql_thread_id"}) if driver_name eq 'mysql'; + dbh->rollback; #or die dbh->errstr; adminsuidsetup($user); - next MAIN; + next SERVICEID; #MAIN; } elsif ( $@ ) { die $@; } - warn "search executed; checking results\n" if $DEBUG; + warn "search finished; checking results\n" if $DEBUG; my $prev = 0; while ( my $row = $sth->fetchrow_arrayref ) { @@ -159,7 +178,7 @@ MAIN: while (1) { $isth->errstr; dbh->rollback; #or die dbh->errstr; sleep 5; - next MAIN; + next SERVICEID; #MAIN; } }