From 3ce7691203a7737406bf2d4442f7fd84b81f847e Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 23 Aug 2006 22:25:39 +0000 Subject: Will things ever be the same again? It's the final masonize --- httemplate/search/sqlradius.cgi | 540 ++++++++++++++++++++-------------------- 1 file changed, 273 insertions(+), 267 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index b84df1a03..caa2454e9 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -1,290 +1,296 @@ -<%= include( '/elements/header.html', 'RADIUS Sessions', +<% include( '/elements/header.html', 'RADIUS Sessions', include('/elements/menubar.html', 'Main menu' => $p, # popurl(2), ), ) %> +% +% ### +% # parse cgi params +% ### +% +% #sort of false laziness w/cust_pay.cgi +% my $beginning = ''; +% my $ending = ''; +% if ( $cgi->param('beginning') +% && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) { +% $beginning = str2time($1); +% } +% if ( $cgi->param('ending') +% && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) { +% $ending = str2time($1) + 86399; +% } +% if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { +% $beginning = $1; +% } +% if ( $cgi->param('end') && $cgi->param('end') =~ /^(\d+)$/ ) { +% $ending = $1; +% } +% +% my $cgi_svc_acct = ''; +% if ( $cgi->param('svcnum') =~ /^(\d+)$/ ) { +% $cgi_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ); +% } elsif ( $cgi->param('username') =~ /^([^@]+)\@([^@]+)$/ ) { +% my %search = { 'username' => $1 }; +% my $svc_domain = qsearchs('svc_domain', { 'domain' => $2 } ); +% if ( $svc_domain ) { +% $search{'domsvc'} = $svc_domain->svcnum; +% } else { +% delete $search{'username'}; +% } +% $cgi_svc_acct = qsearchs( 'svc_acct', \%search ) +% if keys %search; +% } elsif ( $cgi->param('username') =~ /^(.+)$/ ) { +% $cgi_svc_acct = qsearchs( 'svc_acct', { 'username' => $1 } ); +% } +% +% my $ip = ''; +% if ( $cgi->param('ip') =~ /^((\d+\.){3}\d+)$/ ) { +% $ip = $1; +% } +% +% my $prefix = $cgi->param('prefix'); +% $prefix =~ s/\D//g; +% if ( $prefix =~ /^(\d+)$/ ) { +% $prefix = $1; +% $prefix = "011$prefix" unless $prefix =~ /^1/; +% } else { +% $prefix = ''; +% } +% +% ### +% # field formatting subroutines +% ### +% +% my %user2svc_acct = (); +% my $user_format = sub { +% my ( $user, $session, $part_export ) = @_; +% +% my $svc_acct = ''; +% if ( exists $user2svc_acct{$user} ) { +% $svc_acct = $user2svc_acct{$user}; +% } else { +% my %search = (); +% if ( $part_export->exporttype eq 'sqlradius_withdomain' ) { +% my $domain; +% if ( $user =~ /^([^@]+)\@([^@]+)$/ ) { +% $search{'username'} = $1; +% $domain = $2; +% } else { +% $search{'username'} = $user; +% $domain = $session->{'realm'}; +% } +% my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); +% if ( $svc_domain ) { +% $search{'domsvc'} = $svc_domain->svcnum; +% } else { +% delete $search{'username'}; +% } +% } elsif ( $part_export->exporttype eq 'sqlradius' ) { +% $search{'username'} = $user; +% } else { +% die 'unknown export type '. $part_export->exporttype. +% " for $part_export\n"; +% } +% if ( keys %search ) { +% my @svc_acct = +% grep { qsearchs( 'export_svc', { +% 'exportnum' => $part_export->exportnum, +% 'svcpart' => $_->cust_svc->svcpart, +% } ) +% } qsearch( 'svc_acct', \%search ); +% if ( @svc_acct ) { +% warn 'multiple svc_acct records for user $user found; '. +% 'using first arbitrarily' +% if scalar(@svc_acct) > 1; +% $user2svc_acct{$user} = $svc_acct = shift @svc_acct; +% } +% } +% } +% +% if ( $svc_acct ) { +% my $svcnum = $svc_acct->svcnum; +% qq($user); +% } else { +% "$user"; +% } +% +% }; +% +% my $customer_format = sub { +% my( $unused, $session ) = @_; +% return ' ' unless exists $user2svc_acct{$session->{'username'}}; +% my $svc_acct = $user2svc_acct{$session->{'username'}}; +% my $cust_pkg = $svc_acct->cust_svc->cust_pkg; +% return ' ' unless $cust_pkg; +% my $cust_main = $cust_pkg->cust_main; +% +% qq!'. +% $cust_pkg->cust_main->name. ''; +% }; +% +% my $time_format = sub { +% my $time = shift; +% return ' ' if $time == 0; +% my $pretty = time2str('%T%P %a %b %o %Y', $time ); +% $pretty =~ s/ (\d)(st|dn|rd|th)/$1$2/; +% $pretty; +% }; +% +% my $duration_format = sub { +% my $seconds = shift; +% my $hour = int($seconds/3600); +% my $min = int( ($seconds%3600) / 60 ); +% my $sec = $seconds%60; +% ''. +% '
'. +% ( $hour ? "$hourh" : ' ' ). +% ''. +% ( ( $hour || $min ) ? "$minm" : ' ' ). +% ''. +% "$secs". +% '
'; +% }; +% +% my $octets_format = sub { +% my $octets = shift; +% my $megs = $octets / 1048576; +% sprintf('%.3f megs', $megs); +% #my $gigs = $octets / 1073741824 +% #sprintf('%.3f gigabytes', $gigs); +% }; +% +% ### +% # the fields +% ### +% +% tie my %fields, 'Tie::IxHash', +% 'username' => { +% name => 'User', +% attrib => 'UserName', +% fmt => $user_format, +% align => 'left', +% }, +% 'realm' => { +% name => 'Realm', +% attrib => 'Realm', +% align => 'left', +% }, +% 'dummy' => { +% name => 'Customer', +% attrib => '', +% fmt => $customer_format, +% align => 'left', +% }, +% 'framedipaddress' => { +% name => 'IP Address', +% attrib => 'Framed-IP-Address', +% fmt => sub { my $ip = shift; +% length($ip) ? $ip : ' '; +% }, +% align => 'right', +% }, +% 'acctstarttime' => { +% name => 'Start time', +% attrib => 'Acct-Start-Time', +% fmt => $time_format, +% align => 'left', +% }, +% 'acctstoptime' => { +% name => 'End time', +% attrib => 'Acct-Stop-Time', +% fmt => $time_format, +% align => 'left', +% }, +% 'acctsessiontime' => { +% name => 'Duration', +% attrib => 'Acct-Session-Time', +% fmt => $duration_format, +% align => 'right', +% }, +% 'acctinputoctets' => { +% name => 'Upload', # (from user)', +% attrib => 'Acct-Input-Octets', +% fmt => $octets_format, +% align => 'right', +% }, +% 'acctoutputoctets' => { +% name => 'Download', # (to user)', +% attrib => 'Acct-Output-Octets', +% fmt => $octets_format, +% align => 'right', +% }, +% ; +% $fields{$_}->{fmt} ||= sub { length($_[0]) ? shift : ' '; } +% foreach keys %fields; +% +% ### +% # and finally, display the thing +% ### +% +% foreach my $part_export ( +% #grep $_->can('usage_sessions'), qsearch( 'part_export' ) +% qsearch( 'part_export', { 'exporttype' => 'sqlradius' } ), +% qsearch( 'part_export', { 'exporttype' => 'sqlradius_withdomain' } ) +% ) { +% %user2svc_acct = (); +% +% my $efields = tie my %efields, 'Tie::IxHash', %fields; +% delete $efields{'framedipaddress'} if $part_export->option('hide_ip'); +% if ( $part_export->option('hide_data') ) { +% delete $efields{$_} foreach qw(acctinputoctets acctoutputoctets); +% } +% if ( $part_export->option('show_called_station') ) { +% $efields->Splice(1, 0, +% 'calledstationid' => { +% 'name' => 'Destination', +% 'attrib' => 'Called-Station-ID', +% 'fmt' => +% sub { length($_[0]) ? shift : ' '; }, +% 'align' => 'left', +% }, +% ); +% } +% +% -<% - ### - # parse cgi params - ### - #sort of false laziness w/cust_pay.cgi - my $beginning = ''; - my $ending = ''; - if ( $cgi->param('beginning') - && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) { - $beginning = str2time($1); - } - if ( $cgi->param('ending') - && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) { - $ending = str2time($1) + 86399; - } - if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { - $beginning = $1; - } - if ( $cgi->param('end') && $cgi->param('end') =~ /^(\d+)$/ ) { - $ending = $1; - } - - my $cgi_svc_acct = ''; - if ( $cgi->param('svcnum') =~ /^(\d+)$/ ) { - $cgi_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ); - } elsif ( $cgi->param('username') =~ /^([^@]+)\@([^@]+)$/ ) { - my %search = { 'username' => $1 }; - my $svc_domain = qsearchs('svc_domain', { 'domain' => $2 } ); - if ( $svc_domain ) { - $search{'domsvc'} = $svc_domain->svcnum; - } else { - delete $search{'username'}; - } - $cgi_svc_acct = qsearchs( 'svc_acct', \%search ) - if keys %search; - } elsif ( $cgi->param('username') =~ /^(.+)$/ ) { - $cgi_svc_acct = qsearchs( 'svc_acct', { 'username' => $1 } ); - } - - my $ip = ''; - if ( $cgi->param('ip') =~ /^((\d+\.){3}\d+)$/ ) { - $ip = $1; - } - - my $prefix = $cgi->param('prefix'); - $prefix =~ s/\D//g; - if ( $prefix =~ /^(\d+)$/ ) { - $prefix = $1; - $prefix = "011$prefix" unless $prefix =~ /^1/; - } else { - $prefix = ''; - } - - ### - # field formatting subroutines - ### - - my %user2svc_acct = (); - my $user_format = sub { - my ( $user, $session, $part_export ) = @_; - - my $svc_acct = ''; - if ( exists $user2svc_acct{$user} ) { - $svc_acct = $user2svc_acct{$user}; - } else { - my %search = (); - if ( $part_export->exporttype eq 'sqlradius_withdomain' ) { - my $domain; - if ( $user =~ /^([^@]+)\@([^@]+)$/ ) { - $search{'username'} = $1; - $domain = $2; - } else { - $search{'username'} = $user; - $domain = $session->{'realm'}; - } - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); - if ( $svc_domain ) { - $search{'domsvc'} = $svc_domain->svcnum; - } else { - delete $search{'username'}; - } - } elsif ( $part_export->exporttype eq 'sqlradius' ) { - $search{'username'} = $user; - } else { - die 'unknown export type '. $part_export->exporttype. - " for $part_export\n"; - } - if ( keys %search ) { - my @svc_acct = - grep { qsearchs( 'export_svc', { - 'exportnum' => $part_export->exportnum, - 'svcpart' => $_->cust_svc->svcpart, - } ) - } qsearch( 'svc_acct', \%search ); - if ( @svc_acct ) { - warn 'multiple svc_acct records for user $user found; '. - 'using first arbitrarily' - if scalar(@svc_acct) > 1; - $user2svc_acct{$user} = $svc_acct = shift @svc_acct; - } - } - } - - if ( $svc_acct ) { - my $svcnum = $svc_acct->svcnum; - qq($user); - } else { - "$user"; - } - - }; - - my $customer_format = sub { - my( $unused, $session ) = @_; - return ' ' unless exists $user2svc_acct{$session->{'username'}}; - my $svc_acct = $user2svc_acct{$session->{'username'}}; - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - return ' ' unless $cust_pkg; - my $cust_main = $cust_pkg->cust_main; - - qq!'. - $cust_pkg->cust_main->name. ''; - }; - - my $time_format = sub { - my $time = shift; - return ' ' if $time == 0; - my $pretty = time2str('%T%P %a %b %o %Y', $time ); - $pretty =~ s/ (\d)(st|dn|rd|th)/$1$2/; - $pretty; - }; - - my $duration_format = sub { - my $seconds = shift; - my $hour = int($seconds/3600); - my $min = int( ($seconds%3600) / 60 ); - my $sec = $seconds%60; - ''. - '
'. - ( $hour ? "$hourh" : ' ' ). - ''. - ( ( $hour || $min ) ? "$minm" : ' ' ). - ''. - "$secs". - '
'; - }; - - my $octets_format = sub { - my $octets = shift; - my $megs = $octets / 1048576; - sprintf('%.3f megs', $megs); - #my $gigs = $octets / 1073741824 - #sprintf('%.3f gigabytes', $gigs); - }; - - ### - # the fields - ### - - tie my %fields, 'Tie::IxHash', - 'username' => { - name => 'User', - attrib => 'UserName', - fmt => $user_format, - align => 'left', - }, - 'realm' => { - name => 'Realm', - attrib => 'Realm', - align => 'left', - }, - 'dummy' => { - name => 'Customer', - attrib => '', - fmt => $customer_format, - align => 'left', - }, - 'framedipaddress' => { - name => 'IP Address', - attrib => 'Framed-IP-Address', - fmt => sub { my $ip = shift; - length($ip) ? $ip : ' '; - }, - align => 'right', - }, - 'acctstarttime' => { - name => 'Start time', - attrib => 'Acct-Start-Time', - fmt => $time_format, - align => 'left', - }, - 'acctstoptime' => { - name => 'End time', - attrib => 'Acct-Stop-Time', - fmt => $time_format, - align => 'left', - }, - 'acctsessiontime' => { - name => 'Duration', - attrib => 'Acct-Session-Time', - fmt => $duration_format, - align => 'right', - }, - 'acctinputoctets' => { - name => 'Upload', # (from user)', - attrib => 'Acct-Input-Octets', - fmt => $octets_format, - align => 'right', - }, - 'acctoutputoctets' => { - name => 'Download', # (to user)', - attrib => 'Acct-Output-Octets', - fmt => $octets_format, - align => 'right', - }, - ; - $fields{$_}->{fmt} ||= sub { length($_[0]) ? shift : ' '; } - foreach keys %fields; - - ### - # and finally, display the thing - ### - - foreach my $part_export ( - #grep $_->can('usage_sessions'), qsearch( 'part_export' ) - qsearch( 'part_export', { 'exporttype' => 'sqlradius' } ), - qsearch( 'part_export', { 'exporttype' => 'sqlradius_withdomain' } ) - ) { - %user2svc_acct = (); - - my $efields = tie my %efields, 'Tie::IxHash', %fields; - delete $efields{'framedipaddress'} if $part_export->option('hide_ip'); - if ( $part_export->option('hide_data') ) { - delete $efields{$_} foreach qw(acctinputoctets acctoutputoctets); - } - if ( $part_export->option('show_called_station') ) { - $efields->Splice(1, 0, - 'calledstationid' => { - 'name' => 'Destination', - 'attrib' => 'Called-Station-ID', - 'fmt' => - sub { length($_[0]) ? shift : ' '; }, - 'align' => 'left', - }, - ); - } - -%> - -<%= $part_export->exporttype %> to <%= $part_export->machine %>
-<%= include( '/elements/table.html' ) %> +<% $part_export->exporttype %> to <% $part_export->machine %>
+<% include( '/elements/table.html' ) %> - <% foreach my $field ( keys %efields ) { %> +% foreach my $field ( keys %efields ) { + - <%= $efields{$field}->{name} %>
- <%= $efields{$field}->{attrib} %> + <% $efields{$field}->{name} %>
+ <% $efields{$field}->{attrib} %> - <% } %> +% } + -<% foreach my $session ( - @{ $part_export->usage_sessions( - $beginning, $ending, $cgi_svc_acct, $ip, $prefix, ) } - ) { -%> +% foreach my $session ( +% @{ $part_export->usage_sessions( +% $beginning, $ending, $cgi_svc_acct, $ip, $prefix, ) } +% ) { +% + - <% foreach my $field ( keys %efields ) { %> - - <%= &{ $efields{$field}->{fmt} }( $session->{$field}, +% foreach my $field ( keys %efields ) { + + + <% &{ $efields{$field}->{fmt} }( $session->{$field}, $session, $part_export, ) %> - <% } %> +% } + -<% } %> +% } +

+% } -<% } %> -- cgit v1.2.1 From b9dea1e88a8a13a0d206e23ee5c864a0be813030 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:05:58 +0000 Subject: allow time selection in RADIUS searches and grid-ize the resulting table --- httemplate/search/sqlradius.cgi | 553 ++++++++++++++++++++-------------------- 1 file changed, 282 insertions(+), 271 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index caa2454e9..2b6b69297 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -5,292 +5,303 @@ ) %> + +% ### +% # and finally, display the thing +% ### % -% ### -% # parse cgi params -% ### -% -% #sort of false laziness w/cust_pay.cgi -% my $beginning = ''; -% my $ending = ''; -% if ( $cgi->param('beginning') -% && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) { -% $beginning = str2time($1); -% } -% if ( $cgi->param('ending') -% && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) { -% $ending = str2time($1) + 86399; -% } -% if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { -% $beginning = $1; -% } -% if ( $cgi->param('end') && $cgi->param('end') =~ /^(\d+)$/ ) { -% $ending = $1; -% } -% -% my $cgi_svc_acct = ''; -% if ( $cgi->param('svcnum') =~ /^(\d+)$/ ) { -% $cgi_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ); -% } elsif ( $cgi->param('username') =~ /^([^@]+)\@([^@]+)$/ ) { -% my %search = { 'username' => $1 }; -% my $svc_domain = qsearchs('svc_domain', { 'domain' => $2 } ); -% if ( $svc_domain ) { -% $search{'domsvc'} = $svc_domain->svcnum; -% } else { -% delete $search{'username'}; -% } -% $cgi_svc_acct = qsearchs( 'svc_acct', \%search ) -% if keys %search; -% } elsif ( $cgi->param('username') =~ /^(.+)$/ ) { -% $cgi_svc_acct = qsearchs( 'svc_acct', { 'username' => $1 } ); -% } -% -% my $ip = ''; -% if ( $cgi->param('ip') =~ /^((\d+\.){3}\d+)$/ ) { -% $ip = $1; -% } -% -% my $prefix = $cgi->param('prefix'); -% $prefix =~ s/\D//g; -% if ( $prefix =~ /^(\d+)$/ ) { -% $prefix = $1; -% $prefix = "011$prefix" unless $prefix =~ /^1/; -% } else { -% $prefix = ''; -% } -% -% ### -% # field formatting subroutines -% ### -% -% my %user2svc_acct = (); -% my $user_format = sub { -% my ( $user, $session, $part_export ) = @_; -% -% my $svc_acct = ''; -% if ( exists $user2svc_acct{$user} ) { -% $svc_acct = $user2svc_acct{$user}; -% } else { -% my %search = (); -% if ( $part_export->exporttype eq 'sqlradius_withdomain' ) { -% my $domain; -% if ( $user =~ /^([^@]+)\@([^@]+)$/ ) { -% $search{'username'} = $1; -% $domain = $2; -% } else { -% $search{'username'} = $user; -% $domain = $session->{'realm'}; -% } -% my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); -% if ( $svc_domain ) { -% $search{'domsvc'} = $svc_domain->svcnum; -% } else { -% delete $search{'username'}; -% } -% } elsif ( $part_export->exporttype eq 'sqlradius' ) { -% $search{'username'} = $user; -% } else { -% die 'unknown export type '. $part_export->exporttype. -% " for $part_export\n"; -% } -% if ( keys %search ) { -% my @svc_acct = -% grep { qsearchs( 'export_svc', { -% 'exportnum' => $part_export->exportnum, -% 'svcpart' => $_->cust_svc->svcpart, -% } ) -% } qsearch( 'svc_acct', \%search ); -% if ( @svc_acct ) { -% warn 'multiple svc_acct records for user $user found; '. -% 'using first arbitrarily' -% if scalar(@svc_acct) > 1; -% $user2svc_acct{$user} = $svc_acct = shift @svc_acct; -% } -% } -% } -% -% if ( $svc_acct ) { -% my $svcnum = $svc_acct->svcnum; -% qq($user); -% } else { -% "$user"; -% } -% -% }; -% -% my $customer_format = sub { -% my( $unused, $session ) = @_; -% return ' ' unless exists $user2svc_acct{$session->{'username'}}; -% my $svc_acct = $user2svc_acct{$session->{'username'}}; -% my $cust_pkg = $svc_acct->cust_svc->cust_pkg; -% return ' ' unless $cust_pkg; -% my $cust_main = $cust_pkg->cust_main; -% -% qq!'. -% $cust_pkg->cust_main->name. ''; -% }; -% -% my $time_format = sub { -% my $time = shift; -% return ' ' if $time == 0; -% my $pretty = time2str('%T%P %a %b %o %Y', $time ); -% $pretty =~ s/ (\d)(st|dn|rd|th)/$1$2/; -% $pretty; -% }; -% -% my $duration_format = sub { -% my $seconds = shift; -% my $hour = int($seconds/3600); -% my $min = int( ($seconds%3600) / 60 ); -% my $sec = $seconds%60; -% ''. -% '
'. -% ( $hour ? "$hourh" : ' ' ). -% ''. -% ( ( $hour || $min ) ? "$minm" : ' ' ). -% ''. -% "$secs". -% '
'; -% }; -% -% my $octets_format = sub { -% my $octets = shift; -% my $megs = $octets / 1048576; -% sprintf('%.3f megs', $megs); -% #my $gigs = $octets / 1073741824 -% #sprintf('%.3f gigabytes', $gigs); -% }; -% -% ### -% # the fields -% ### -% -% tie my %fields, 'Tie::IxHash', -% 'username' => { -% name => 'User', -% attrib => 'UserName', -% fmt => $user_format, -% align => 'left', -% }, -% 'realm' => { -% name => 'Realm', -% attrib => 'Realm', -% align => 'left', -% }, -% 'dummy' => { -% name => 'Customer', -% attrib => '', -% fmt => $customer_format, -% align => 'left', -% }, -% 'framedipaddress' => { -% name => 'IP Address', -% attrib => 'Framed-IP-Address', -% fmt => sub { my $ip = shift; -% length($ip) ? $ip : ' '; -% }, -% align => 'right', -% }, -% 'acctstarttime' => { -% name => 'Start time', -% attrib => 'Acct-Start-Time', -% fmt => $time_format, -% align => 'left', -% }, -% 'acctstoptime' => { -% name => 'End time', -% attrib => 'Acct-Stop-Time', -% fmt => $time_format, -% align => 'left', -% }, -% 'acctsessiontime' => { -% name => 'Duration', -% attrib => 'Acct-Session-Time', -% fmt => $duration_format, -% align => 'right', -% }, -% 'acctinputoctets' => { -% name => 'Upload', # (from user)', -% attrib => 'Acct-Input-Octets', -% fmt => $octets_format, -% align => 'right', -% }, -% 'acctoutputoctets' => { -% name => 'Download', # (to user)', -% attrib => 'Acct-Output-Octets', -% fmt => $octets_format, -% align => 'right', -% }, -% ; -% $fields{$_}->{fmt} ||= sub { length($_[0]) ? shift : ' '; } -% foreach keys %fields; -% -% ### -% # and finally, display the thing -% ### -% -% foreach my $part_export ( -% #grep $_->can('usage_sessions'), qsearch( 'part_export' ) -% qsearch( 'part_export', { 'exporttype' => 'sqlradius' } ), -% qsearch( 'part_export', { 'exporttype' => 'sqlradius_withdomain' } ) -% ) { -% %user2svc_acct = (); +% foreach my $part_export ( +% #grep $_->can('usage_sessions'), qsearch( 'part_export' ) +% qsearch( 'part_export', { 'exporttype' => 'sqlradius' } ), +% qsearch( 'part_export', { 'exporttype' => 'sqlradius_withdomain' } ) +% ) { +% %user2svc_acct = (); % -% my $efields = tie my %efields, 'Tie::IxHash', %fields; -% delete $efields{'framedipaddress'} if $part_export->option('hide_ip'); -% if ( $part_export->option('hide_data') ) { -% delete $efields{$_} foreach qw(acctinputoctets acctoutputoctets); -% } -% if ( $part_export->option('show_called_station') ) { -% $efields->Splice(1, 0, -% 'calledstationid' => { -% 'name' => 'Destination', -% 'attrib' => 'Called-Station-ID', -% 'fmt' => -% sub { length($_[0]) ? shift : ' '; }, -% 'align' => 'left', -% }, -% ); -% } +% my $efields = tie my %efields, 'Tie::IxHash', %fields; +% delete $efields{'framedipaddress'} if $part_export->option('hide_ip'); +% if ( $part_export->option('hide_data') ) { +% delete $efields{$_} foreach qw(acctinputoctets acctoutputoctets); +% } +% if ( $part_export->option('show_called_station') ) { +% $efields->Splice(1, 0, +% 'calledstationid' => { +% 'name' => 'Destination', +% 'attrib' => 'Called-Station-ID', +% 'fmt' => +% sub { length($_[0]) ? shift : ' '; }, +% 'align' => 'left', +% }, +% ); +% } % % + <% $part_export->exporttype %> to <% $part_export->machine %>
+ <% include( '/elements/table-grid.html' ) %> +% my $bgcolor1 = '#eeeeee'; +% my $bgcolor2 = '#ffffff'; +% my $bgcolor; -<% $part_export->exporttype %> to <% $part_export->machine %>
-<% include( '/elements/table.html' ) %> - -% foreach my $field ( keys %efields ) { + +% foreach my $field ( keys %efields ) { - - <% $efields{$field}->{name} %>
- <% $efields{$field}->{attrib} %> - -% } + + <% $efields{$field}->{name} %>
+ <% $efields{$field}->{attrib} %> + - -% foreach my $session ( -% @{ $part_export->usage_sessions( -% $beginning, $ending, $cgi_svc_acct, $ip, $prefix, ) } -% ) { -% +% } + - -% foreach my $field ( keys %efields ) { +% foreach my $session ( +% @{ $part_export->usage_sessions( +% $beginning, $ending, $cgi_svc_acct, $ip, $prefix, ) } +% ) { - - <% &{ $efields{$field}->{fmt} }( $session->{$field}, - $session, - $part_export, - ) - %> - -% } + +% foreach my $field ( keys %efields ) { +% if ( $bgcolor eq $bgcolor1 ) { +% $bgcolor = $bgcolor2; +% } else { +% $bgcolor = $bgcolor1; +% } + + <% &{ $efields{$field}->{fmt} }( $session->{$field}, + $session, + $part_export, + ) + %> + +% } -% } +% }

+ % } + +<%init> +### +# parse cgi params +### + +#sort of false laziness w/cust_pay.cgi +my $beginning = ''; +my $ending = ''; +if ( $cgi->param('beginning') + && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) { + $beginning = str2time($1); +} +if ( $cgi->param('ending') + && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) { + $ending = str2time($1) + 86399; +} +if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { + $beginning = $1; +} +if ( $cgi->param('end') && $cgi->param('end') =~ /^(\d+)$/ ) { + $ending = $1; +} + +my $cgi_svc_acct = ''; +if ( $cgi->param('svcnum') =~ /^(\d+)$/ ) { + $cgi_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ); +} elsif ( $cgi->param('username') =~ /^([^@]+)\@([^@]+)$/ ) { + my %search = { 'username' => $1 }; + my $svc_domain = qsearchs('svc_domain', { 'domain' => $2 } ); + if ( $svc_domain ) { + $search{'domsvc'} = $svc_domain->svcnum; + } else { + delete $search{'username'}; + } + $cgi_svc_acct = qsearchs( 'svc_acct', \%search ) + if keys %search; +} elsif ( $cgi->param('username') =~ /^(.+)$/ ) { + $cgi_svc_acct = qsearchs( 'svc_acct', { 'username' => $1 } ); +} + +my $ip = ''; +if ( $cgi->param('ip') =~ /^((\d+\.){3}\d+)$/ ) { + $ip = $1; +} + +my $prefix = $cgi->param('prefix'); +$prefix =~ s/\D//g; +if ( $prefix =~ /^(\d+)$/ ) { + $prefix = $1; + $prefix = "011$prefix" unless $prefix =~ /^1/; +} else { + $prefix = ''; +} + +### +# field formatting subroutines +### + +my %user2svc_acct = (); +my $user_format = sub { + my ( $user, $session, $part_export ) = @_; + + my $svc_acct = ''; + if ( exists $user2svc_acct{$user} ) { + $svc_acct = $user2svc_acct{$user}; + } else { + my %search = (); + if ( $part_export->exporttype eq 'sqlradius_withdomain' ) { + my $domain; + if ( $user =~ /^([^@]+)\@([^@]+)$/ ) { + $search{'username'} = $1; + $domain = $2; + } else { + $search{'username'} = $user; + $domain = $session->{'realm'}; + } + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); + if ( $svc_domain ) { + $search{'domsvc'} = $svc_domain->svcnum; + } else { + delete $search{'username'}; + } + } elsif ( $part_export->exporttype eq 'sqlradius' ) { + $search{'username'} = $user; + } else { + die 'unknown export type '. $part_export->exporttype. + " for $part_export\n"; + } + if ( keys %search ) { + my @svc_acct = + grep { qsearchs( 'export_svc', { + 'exportnum' => $part_export->exportnum, + 'svcpart' => $_->cust_svc->svcpart, + } ) + } qsearch( 'svc_acct', \%search ); + if ( @svc_acct ) { + warn 'multiple svc_acct records for user $user found; '. + 'using first arbitrarily' + if scalar(@svc_acct) > 1; + $user2svc_acct{$user} = $svc_acct = shift @svc_acct; + } + } + } + + if ( $svc_acct ) { + my $svcnum = $svc_acct->svcnum; + qq($user); + } else { + "$user"; + } + +}; + +my $customer_format = sub { + my( $unused, $session ) = @_; + return ' ' unless exists $user2svc_acct{$session->{'username'}}; + my $svc_acct = $user2svc_acct{$session->{'username'}}; + my $cust_pkg = $svc_acct->cust_svc->cust_pkg; + return ' ' unless $cust_pkg; + my $cust_main = $cust_pkg->cust_main; + + qq!'. + $cust_pkg->cust_main->name. ''; +}; + +my $time_format = sub { + my $time = shift; + return ' ' if $time == 0; + my $pretty = time2str('%T%P %a %b %o %Y', $time ); + $pretty =~ s/ (\d)(st|dn|rd|th)/$1$2/; + $pretty; +}; + +my $duration_format = sub { + my $seconds = shift; + my $hour = int($seconds/3600); + my $min = int( ($seconds%3600) / 60 ); + my $sec = $seconds%60; + ''. + '
'. + ( $hour ? "$hourh" : ' ' ). + ''. + ( ( $hour || $min ) ? "$minm" : ' ' ). + ''. + "$secs". + '
'; +}; + +my $octets_format = sub { + my $octets = shift; + my $megs = $octets / 1048576; + sprintf('%.3f megs', $megs); + #my $gigs = $octets / 1073741824 + #sprintf('%.3f gigabytes', $gigs); +}; + +### +# the fields +### + +tie my %fields, 'Tie::IxHash', + 'username' => { + name => 'User', + attrib => 'UserName', + fmt => $user_format, + align => 'left', + }, + 'realm' => { + name => 'Realm', + attrib => 'Realm', + align => 'left', + }, + 'dummy' => { + name => 'Customer', + attrib => '', + fmt => $customer_format, + align => 'left', + }, + 'framedipaddress' => { + name => 'IP Address', + attrib => 'Framed-IP-Address', + fmt => sub { my $ip = shift; + length($ip) ? $ip : ' '; + }, + align => 'right', + }, + 'acctstarttime' => { + name => 'Start time', + attrib => 'Acct-Start-Time', + fmt => $time_format, + align => 'left', + }, + 'acctstoptime' => { + name => 'End time', + attrib => 'Acct-Stop-Time', + fmt => $time_format, + align => 'left', + }, + 'acctsessiontime' => { + name => 'Duration', + attrib => 'Acct-Session-Time', + fmt => $duration_format, + align => 'right', + }, + 'acctinputoctets' => { + name => 'Upload', # (from user)', + attrib => 'Acct-Input-Octets', + fmt => $octets_format, + align => 'right', + }, + 'acctoutputoctets' => { + name => 'Download', # (to user)', + attrib => 'Acct-Output-Octets', + fmt => $octets_format, + align => 'right', + }, +; +$fields{$_}->{fmt} ||= sub { length($_[0]) ? shift : ' '; } + foreach keys %fields; + + -- cgit v1.2.1 From 54223f538be2b453537c915fce865802859786d0 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:10:03 +0000 Subject: fix the gridding colors --- httemplate/search/sqlradius.cgi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 2b6b69297..32e97b675 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -57,14 +57,14 @@ % @{ $part_export->usage_sessions( % $beginning, $ending, $cgi_svc_acct, $ip, $prefix, ) } % ) { +% if ( $bgcolor eq $bgcolor1 ) { +% $bgcolor = $bgcolor2; +% } else { +% $bgcolor = $bgcolor1; +% } % foreach my $field ( keys %efields ) { -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } <% &{ $efields{$field}->{fmt} }( $session->{$field}, -- cgit v1.2.1 From 66a1f83afbb791376748cdd922583ca485588314 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:12:28 +0000 Subject: fix the embedded duration table --- httemplate/search/sqlradius.cgi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 32e97b675..95f4147af 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -222,12 +222,12 @@ my $duration_format = sub { my $hour = int($seconds/3600); my $min = int( ($seconds%3600) / 60 ); my $sec = $seconds%60; - ''. - ' % foreach my $field ( keys %efields ) { +% my $html = &{ $efields{$field}->{fmt} }( $session->{$field}, +% $session, +% $part_export, +% ); +% my $class = ( $html =~ /
'. + ''. + '
'. ( $hour ? "$hourh" : ' ' ). - ''. + ''. ( ( $hour || $min ) ? "$minm" : ' ' ). - ''. + ''. "$secs". '
'; }; -- cgit v1.2.1 From 8f00c7e7497ade051cb0306007036799b3b58c2e Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:15:26 +0000 Subject: fix the date/time parsing --- httemplate/search/sqlradius.cgi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 95f4147af..68c449ee5 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -93,11 +93,11 @@ my $beginning = ''; my $ending = ''; if ( $cgi->param('beginning') - && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) { + && $cgi->param('beginning') =~ /^([ 0-9\-\/\:\w]{0,54})$/ ) { $beginning = str2time($1); } if ( $cgi->param('ending') - && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) { + && $cgi->param('ending') =~ /^([ 0-9\-\/\:\w]{0,54})$/ ) { $ending = str2time($1) + 86399; } if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { -- cgit v1.2.1 From 4f030638a8b77faf4a674958bed60410378f4db9 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:22:43 +0000 Subject: use the exact provided time --- httemplate/search/sqlradius.cgi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 68c449ee5..1a19ef762 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -98,7 +98,7 @@ if ( $cgi->param('beginning') } if ( $cgi->param('ending') && $cgi->param('ending') =~ /^([ 0-9\-\/\:\w]{0,54})$/ ) { - $ending = str2time($1) + 86399; + $ending = str2time($1); # + 86399; } if ( $cgi->param('begin') && $cgi->param('begin') =~ /^(\d+)$/ ) { $beginning = $1; -- cgit v1.2.1 From 01d90ee58ee915b838fe3fe4d7f2c472af238429 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Sep 2006 20:31:22 +0000 Subject: really fix the embedded duration table --- httemplate/search/sqlradius.cgi | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 1a19ef762..486b94d94 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -65,13 +65,14 @@
- <% &{ $efields{$field}->{fmt} }( $session->{$field}, - $session, - $part_export, - ) - %> + % } -- cgit v1.2.1 From 590603ecaea3184f64530755a76626be8205da49 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 3 Feb 2007 11:36:30 +0000 Subject: add customer status column to customer & most other reports. also put the C in ACL in the search/ and graph/ directories. --- httemplate/search/sqlradius.cgi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'httemplate/search/sqlradius.cgi') diff --git a/httemplate/search/sqlradius.cgi b/httemplate/search/sqlradius.cgi index 486b94d94..324729b6a 100644 --- a/httemplate/search/sqlradius.cgi +++ b/httemplate/search/sqlradius.cgi @@ -84,8 +84,11 @@ % } - <%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('List rating data'); + ### # parse cgi params ### -- cgit v1.2.1
+ <% $html %>