From 16ebdd8007a9bfa99c3390f727ac5a85d1139775 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Sat, 2 May 2009 16:00:23 +0000 Subject: [PATCH] * Fixed up templating engine macros * Use internal timestamp instead of the one in the packet which is not always present --- .../modules/accounting/mod_accounting_sql.pm | 110 +++++++++--------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/smradius/modules/accounting/mod_accounting_sql.pm b/smradius/modules/accounting/mod_accounting_sql.pm index fb9d4735..6664be19 100644 --- a/smradius/modules/accounting/mod_accounting_sql.pm +++ b/smradius/modules/accounting/mod_accounting_sql.pm @@ -26,7 +26,6 @@ use smradius::dblayer; use smradius::logging; use smradius::util; -use DateTime; use POSIX qw(ceil); @@ -94,61 +93,61 @@ sub init ) VALUES ( - %{accounting.User-Name}, - %{accounting.Service-Type}, - %{accounting.Framed-Protocol}, - %{accounting.NAS-Port}, - %{accounting.NAS-Port-Type}, - %{accounting.Calling-Station-Id}, - %{accounting.Called-Station-Id}, - %{accounting.NAS-Port-Id}, - %{accounting.Acct-Session-Id}, - %{accounting.Framed-IP-Address}, - %{accounting.Acct-Authentic}, - %{accounting.Event-Timestamp}, - %{accounting.Acct-Status-Type}, - %{accounting.NAS-Identifier}, - %{accounting.NAS-IP-Address}, - %{accounting.Acct-Delay-Time} + %{request.User-Name}, + %{request.Service-Type}, + %{request.Framed-Protocol}, + %{request.NAS-Port}, + %{request.NAS-Port-Type}, + %{request.Calling-Station-Id}, + %{request.Called-Station-Id}, + %{request.NAS-Port-Id}, + %{request.Acct-Session-Id}, + %{request.Framed-IP-Address}, + %{request.Acct-Authentic}, + %{request.Timestamp}, + %{request.Acct-Status-Type}, + %{request.NAS-Identifier}, + %{request.NAS-IP-Address}, + %{request.Acct-Delay-Time} ) '; $config->{'accounting_update_query'} = ' UPDATE @TP@accounting SET - AcctSessionTime = %{accounting.Acct-Session-Time}, - AcctInputOctets = %{accounting.Acct-Input-Octets}, - AcctInputGigawords = %{accounting.Acct-Input-Gigawords}, - AcctInputPackets = %{accounting.Acct-Input-Packets}, - AcctOutputOctets = %{accounting.Acct-Output-Octets}, - AcctOutputGigawords = %{accounting.Acct-Output-Gigawords}, - AcctOutputPackets = %{accounting.Acct-Output-Packets}, - AcctStatusType = %{accounting.Acct-Status-Type} + AcctSessionTime = %{request.Acct-Session-Time}, + AcctInputOctets = %{request.Acct-Input-Octets}, + AcctInputGigawords = %{request.Acct-Input-Gigawords}, + AcctInputPackets = %{request.Acct-Input-Packets}, + AcctOutputOctets = %{request.Acct-Output-Octets}, + AcctOutputGigawords = %{request.Acct-Output-Gigawords}, + AcctOutputPackets = %{request.Acct-Output-Packets}, + AcctStatusType = %{request.Acct-Status-Type} WHERE - UserName = %{accounting.User-Name} - AND AcctSessionID = %{accounting.Acct-Session-Id} - AND NASIPAddress = %{accounting.NAS-IP-Address} + UserName = %{request.User-Name} + AND AcctSessionID = %{request.Acct-Session-Id} + AND NASIPAddress = %{request.NAS-IP-Address} '; $config->{'accounting_stop_query'} = ' UPDATE @TP@accounting SET - AcctSessionTime = %{accounting.Acct-Session-Time}, - AcctInputOctets = %{accounting.Acct-Input-Octets}, - AcctInputGigawords = %{accounting.Acct-Input-Gigawords}, - AcctInputPackets = %{accounting.Acct-Input-Packets}, - AcctOutputOctets = %{accounting.Acct-Output-Octets}, - AcctOutputGigawords = %{accounting.Acct-Output-Gigawords}, - AcctOutputPackets = %{accounting.Acct-Output-Packets}, - AcctStatusType = %{accounting.Acct-Status-Type}, - AcctTerminateCause = %{accounting.Acct-Terminate-Cause} + AcctSessionTime = %{request.Acct-Session-Time}, + AcctInputOctets = %{request.Acct-Input-Octets}, + AcctInputGigawords = %{request.Acct-Input-Gigawords}, + AcctInputPackets = %{request.Acct-Input-Packets}, + AcctOutputOctets = %{request.Acct-Output-Octets}, + AcctOutputGigawords = %{request.Acct-Output-Gigawords}, + AcctOutputPackets = %{request.Acct-Output-Packets}, + AcctStatusType = %{request.Acct-Status-Type}, + AcctTerminateCause = %{request.Acct-Terminate-Cause} WHERE - UserName = %{accounting.User-Name} - AND AcctSessionID = %{accounting.Acct-Session-Id} - AND NASIPAddress = %{accounting.NAS-IP-Address} + UserName = %{request.User-Name} + AND AcctSessionID = %{request.Acct-Session-Id} + AND NASIPAddress = %{request.NAS-IP-Address} '; - $config->{'get_usage_query'} = ' + $config->{'accounting_usage_query'} = ' SELECT SUM(AcctInputOctets) AS InputOctets, SUM(AcctOutputOctets) AS OutputOctets, @@ -158,7 +157,7 @@ sub init FROM @TP@accounting WHERE - Username = %{accounting.User-Name} + Username = %{request.User-Name} '; # Setup SQL queries @@ -191,13 +190,13 @@ sub init $config->{'accounting_stop_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}; } } - if (defined($scfg->{'mod_accounting_sql'}->{'get_usage_query'}) && - $scfg->{'mod_accounting_sql'}->{'get_usage_query'} ne "") { - if (ref($scfg->{'mod_accounting_sql'}->{'get_usage_query'}) eq "ARRAY") { - $config->{'get_usage_query'} = join(' ', - @{$scfg->{'mod_accounting_sql'}->{'get_usage_query'}}); + if (defined($scfg->{'mod_accounting_sql'}->{'accounting_usage_query'}) && + $scfg->{'mod_accounting_sql'}->{'accounting_usage_query'} ne "") { + if (ref($scfg->{'mod_accounting_sql'}->{'accounting_usage_query'}) eq "ARRAY") { + $config->{'accounting_usage_query'} = join(' ', + @{$scfg->{'mod_accounting_sql'}->{'accounting_usage_query'}}); } else { - $config->{'get_usage_query'} = $scfg->{'mod_accounting_sql'}->{'get_usage_query'}; + $config->{'accounting_usage_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_usage_query'}; } } } @@ -212,12 +211,12 @@ sub getUsage # Build template my $template; foreach my $attr ($packet->attributes) { - $template->{'accounting'}->{$attr} = $packet->rawattr($attr) + $template->{'request'}->{$attr} = $packet->rawattr($attr) } $template->{'user'} = $user; # Replace template entries - my @dbDoParams = templateReplace($config->{'get_usage_query'},$template); + my @dbDoParams = templateReplace($config->{'accounting_usage_query'},$template); # Fetch data my $sth = DBSelect(@dbDoParams); @@ -286,14 +285,11 @@ sub acct_log # Build template my $template; foreach my $attr ($packet->attributes) { - $template->{'accounting'}->{$attr} = $packet->rawattr($attr) + $template->{'request'}->{$attr} = $packet->rawattr($attr) } - - # Fix up timestamp a bit - $template->{'accounting'}->{'Event-Timestamp-Unix'} = $template->{'accounting'}->{'Event-Timestamp'}; - my $dt = DateTime->from_epoch( epoch => $template->{'accounting'}->{'Event-Timestamp'} ); - - $template->{'accounting'}->{'Event-Timestamp'} = $dt->strftime('%Y-%m-%d %H:%M:%S'); + # Fix event timestamp + $template->{'request'}->{'Timestamp'} = $user->{'_Internal'}->{'Timestamp'}; + # Add user $template->{'user'} = $user; -- GitLab