if ( $svcdb eq 'svc_acct' ) {
$tag = $svc_x->email;
} elsif ( $svcdb eq 'svc_forward' ) {
- my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_x->srcsvc } );
- $tag = $svc_acct->email. '->';
+ if ( $svc_x->srcsvc ) {
+ my $svc_acct = $svc_x->srcsvc_acct;
+ $tag = $svc_acct->email;
+ } else {
+ $tag = $svc_x->src;
+ }
+ $tag .= '->';
if ( $svc_x->dstsvc ) {
- $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_x->dstsvc } );
+ my $svc_acct = $svc_x->dstsvc_acct;
$tag .= $svc_acct->email;
} else {
$tag .= $svc_x->dst;
$tag = $domain->zone;
} elsif ( $svcdb eq 'svc_broadband' ) {
$tag = $svc_x->ip_addr;
+ } elsif ( $svcdb eq 'svc_external' ) {
+ $tag = $svc_x->id. ': '. $svc_x->title;
} else {
cluck "warning: asked for label of unsupported svcdb; using svcnum";
$tag = $svc_x->getfield('svcnum');
sub seconds_since_sqlradacct {
my($self, $start, $end) = @_;
- my $username = $self->svc_x->username;
+ my $svc_x = $self->svc_x;
- my @part_export = $self->part_svc->part_export('sqlradius')
- or die "no sqlradius export configured for this service type";
+ my @part_export = $self->part_svc->part_export('sqlradius');
+ push @part_export, $self->part_svc->part_export('sqlradius_withdomain');
+ die "no sqlradius or sqlradius_withdomain export configured for this".
+ "service type"
+ unless @part_export;
#or return undef;
my $seconds = 0;
foreach my $part_export ( @part_export ) {
+ next if $part_export->option('ignore_accounting');
+
my $dbh = DBI->connect( map { $part_export->option($_) }
qw(datasrc username password) )
or die "can't connect to sqlradius database: ". $DBI::errstr;
#select a unix time conversion function based on database type
my $str2time;
- if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+ if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
$str2time = 'UNIX_TIMESTAMP(';
} elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
$str2time = 'EXTRACT( EPOCH FROM ';
$str2time = 'extract(epoch from ';
}
+ my $username;
+ if ( $part_export->exporttype eq 'sqlradius' ) {
+ $username = $svc_x->username;
+ } elsif ( $part_export->exporttype eq 'sqlradius_withdomain' ) {
+ $username = $svc_x->email;
+ } else {
+ die 'unknown exporttype '. $part_export->exporttype;
+ }
+
my $query;
#find closed sessions completely within the given range
sub attribute_since_sqlradacct {
my($self, $start, $end, $attrib) = @_;
- my $username = $self->svc_x->username;
+ my $svc_x = $self->svc_x;
- my @part_export = $self->part_svc->part_export('sqlradius')
- or die "no sqlradius export configured for this service type";
+ my @part_export = $self->part_svc->part_export('sqlradius');
+ push @part_export, $self->part_svc->part_export('sqlradius_withdomain');
+ die "no sqlradius or sqlradius_withdomain export configured for this".
+ "service type"
+ unless @part_export;
#or return undef;
my $sum = 0;
foreach my $part_export ( @part_export ) {
+ next if $part_export->option('ignore_accounting');
+
my $dbh = DBI->connect( map { $part_export->option($_) }
qw(datasrc username password) )
or die "can't connect to sqlradius database: ". $DBI::errstr;
#select a unix time conversion function based on database type
my $str2time;
- if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+ if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
$str2time = 'UNIX_TIMESTAMP(';
} elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
$str2time = 'EXTRACT( EPOCH FROM ';
$str2time = 'extract(epoch from ';
}
+ my $username;
+ if ( $part_export->exporttype eq 'sqlradius' ) {
+ $username = $svc_x->username;
+ } elsif ( $part_export->exporttype eq 'sqlradius_withdomain' ) {
+ $username = $svc_x->email;
+ } else {
+ die 'unknown exporttype '. $part_export->exporttype;
+ }
+
my $sth = $dbh->prepare("SELECT SUM($attrib)
FROM radacct
WHERE UserName = ?
#select a unix time conversion function based on database type
my $str2time;
- if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+ if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
$str2time = 'UNIX_TIMESTAMP(';
} elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
$str2time = 'EXTRACT( EPOCH FROM ';