=item seconds_since TIMESTAMP
Returns the number of seconds all accounts (see L<FS::svc_acct>) in this
-package have been online since TIMESTAMP.
+package have been online since TIMESTAMP, according to the session monitor.
TIMESTAMP is specified as a UNIX timestamp; see L<perlfunc/"time">. Also see
L<Time::Local> and L<Date::Parse> for conversion functions.
}
+=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END DATASRC DB_USERNAME DB_PASSWORD
+
+Returns the numbers of seconds all accounts (see L<FS::svc_acct>) in this
+package have been online between TIMESTAMP_START (inclusive) and TIMESTAMP_END
+(exclusive), according to an external SQL radacct table, such as those
+generated by ICRADIUS or FreeRADIUS. Sessions which started in the specified
+range but are still open are counted from session start to the end of the
+range. Also, sessions which end in the range but started earlier are counted
+from the start of the range to session end. Finally, sessions which start
+before the range but end after (or are still open) are counted for the entire
+range.
+
+TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see
+L<perlfunc/"time">. Also see L<Time::Local> and L<Date::Parse> for conversion
+functions.
+
+
+=cut
+
+sub seconds_since_sqlradacct {
+ my($self, $start, $end, $datasrc, $db_user, $db_pass) = @_;
+
+ my $dbh = DBI->connect($datasrc, $db_user, $db_pass)
+ or die "can't connect to $datasrc: ". $DBI::errstr;
+
+ my $seconds = 0;
+
+ foreach my $cust_svc (
+ grep { $_->part_svc->svcdb eq 'svc_acct' } $self->cust_svc
+ ) {
+ $seconds += $cust_svc->seconds_since_sqlradacct($start, $end, $dbh);
+ }
+
+ $seconds;
+
+}
+
=back
=head1 SUBROUTINES
=head1 VERSION
-$Id: cust_pkg.pm,v 1.24 2002-09-17 09:19:06 ivan Exp $
+$Id: cust_pkg.pm,v 1.25 2002-10-12 13:26:45 ivan Exp $
=head1 BUGS