sqlradacct_hour price plan to charge per-hour against an external radacct table
[freeside.git] / FS / FS / cust_pkg.pm
index 0c71435..b16d081 100644 (file)
@@ -475,7 +475,7 @@ sub cust_main {
 =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.
@@ -496,6 +496,43 @@ sub seconds_since {
 
 }
 
+=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
@@ -678,7 +715,7 @@ sub order {
 
 =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