add summarized RADIUS report feature, RT11776
authorlevinse <levinse>
Wed, 11 May 2011 15:23:56 +0000 (15:23 +0000)
committerlevinse <levinse>
Wed, 11 May 2011 15:23:56 +0000 (15:23 +0000)
FS/FS/part_export/sqlradius.pm
httemplate/search/sqlradius.cgi
httemplate/search/sqlradius.html

index 15aa986..d1663dc 100644 (file)
@@ -610,6 +610,7 @@ sub usage_sessions {
 
   my $opt = {};
   my($start, $end, $svc_acct, $ip, $prefix) = ( '', '', '', '', '');
+  my $summarize = 0;
   if ( ref($_[0]) ) {
     $opt = shift;
     $start    = $opt->{stoptime_start};
@@ -617,6 +618,7 @@ sub usage_sessions {
     $svc_acct = $opt->{svc_acct};
     $ip       = $opt->{ip};
     $prefix   = $opt->{prefix};
+    $summarize   = $opt->{summarize};
   } else {
     ( $start, $end ) = splice(@_, 0, 2);
     $svc_acct = @_ ? shift : '';
@@ -644,6 +646,10 @@ sub usage_sessions {
                  "$str2time acctstoptime ) as acctstoptime",
                );
 
+  @fields = ( 'username', 'sum(acctsessiontime) as acctsessiontime', 'sum(acctinputoctets) as acctinputoctets',
+              'sum(acctoutputoctets) as acctoutputoctets',
+            ) if $summarize;
+
   my @param = ();
   my @where = ();
 
@@ -696,11 +702,15 @@ sub usage_sessions {
   my $where = join(' AND ', @where);
   $where = "WHERE $where" if $where;
 
+  my $groupby = '';
+  $groupby = 'GROUP BY username' if $summarize;
+
+  my $orderby = 'ORDER BY AcctStartTime DESC';
+  $orderby = '' if $summarize;
+
   my $sth = $dbh->prepare('SELECT '. join(', ', @fields).
-                          "  FROM radacct
-                             $where
-                             ORDER BY AcctStartTime DESC
-  ") or die $dbh->errstr;                                 
+                          "  FROM radacct $where $groupby $orderby
+                        ") or die $dbh->errstr;                                 
   $sth->execute(@param) or die $sth->errstr;
 
   [ map { { %$_ } } @{ $sth->fetchall_arrayref({}) } ];
index cca1211..5363944 100644 (file)
@@ -57,6 +57,7 @@
 %            'svc_acct'        => $cgi_svc_acct,
 %            'ip'              => $ip,
 %            'prefix'          => $prefix, 
+%            'summarize'       => $summarize,
 %          } )
 %       }
 %   ) {
@@ -96,6 +97,9 @@ die "access denied"
 # parse cgi params
 ###
 
+my $summarize = 0;
+$summarize = 1 if $cgi->param('summarize') eq 'Y';
+
 #sort of false laziness w/cust_pay.cgi
 my( $beginning, $ending ) = ( '', '' );
 if ( $cgi->param('stoptime_beginning')
@@ -265,7 +269,42 @@ my $octets_format = sub {
 # the fields
 ###
 
-tie my %fields, 'Tie::IxHash', 
+my %fields;
+if ( $summarize ) {
+tie %fields, 'Tie::IxHash', 
+  'username'          => {
+                           name    => 'User',
+                           attrib  => 'UserName',
+                           fmt     => $user_format,
+                           align   => 'left',
+                         },
+  'dummy'             => {
+                           name    => 'Customer',
+                           attrib  => '',
+                           fmt     => $customer_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',
+                         },
+;
+} else {
+tie %fields, 'Tie::IxHash',
   'username'          => {
                            name    => 'User',
                            attrib  => 'UserName',
@@ -322,6 +361,7 @@ tie my %fields, 'Tie::IxHash',
                            align   => 'right',
                          },
 ;
+}
 $fields{$_}->{fmt} ||= sub { length($_[0]) ? shift : '&nbsp'; }
   foreach keys %fields;
 
index 8c40598..7b9fce3 100644 (file)
@@ -8,6 +8,12 @@
   <TD ALIGN="right">Username: </TD>
   <TD><INPUT TYPE="text" NAME="username"></TD>
 </TR>
+<% include( '/elements/tr-checkbox.html',
+            'field' => 'summarize',
+            'label' => 'Summarize',
+            'value' => 'Y',
+          )
+%>
 <TR>
   <TD></TD>
   <TD><FONT SIZE="-1"><I>(leave blank to show all users)</I></FONT></TD>