From df8877580671426e2d32f5c7d3542e5ede9e4ce0 Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Tue, 4 Aug 2009 10:08:51 +0000 Subject: [PATCH] Fixed server getting usage for current month when getUsage called from capping module --- smradius/modules/accounting/mod_accounting_sql.pm | 9 +++++++-- smradius/modules/features/mod_feature_capping.pm | 6 ++++-- smradiusd.conf | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/smradius/modules/accounting/mod_accounting_sql.pm b/smradius/modules/accounting/mod_accounting_sql.pm index fc13b757..fe1c6c34 100644 --- a/smradius/modules/accounting/mod_accounting_sql.pm +++ b/smradius/modules/accounting/mod_accounting_sql.pm @@ -165,6 +165,7 @@ sub init @TP@accounting WHERE Username = %{request.User-Name} + AND EventTimestamp >= %{query.From} '; # Setup SQL queries @@ -213,7 +214,7 @@ sub init # Function to get radius user data usage sub getUsage { - my ($server,$user,$packet) = @_; + my ($server,$user,$packet,$month) = @_; # Build template my $template; @@ -221,9 +222,13 @@ sub getUsage $template->{'request'}->{$attr} = $packet->rawattr($attr) } $template->{'user'} = $user; + # Query parameters + $template->{'query'}->{'From'} = $month; # Replace template entries - my @dbDoParams = templateReplace($config->{'accounting_usage_query'},$template); + my ($queryString, @params) = templateReplace($config->{'accounting_usage_query'},$template); + # Add month to our params + my @dbDoParams = ($queryString, @params); # Fetch data my $sth = DBSelect(@dbDoParams); diff --git a/smradius/modules/features/mod_feature_capping.pm b/smradius/modules/features/mod_feature_capping.pm index 2972822a..17232780 100644 --- a/smradius/modules/features/mod_feature_capping.pm +++ b/smradius/modules/features/mod_feature_capping.pm @@ -118,13 +118,14 @@ sub post_auth_hook # Get the users' usage my $accountingUsage; + my $month = DateTime->from_epoch( epoch => $user->{'_Internal'}->{'Timestamp-Unix'} )->strftime('%Y-%m'); # Loop with plugins to find anyting supporting getting of usage foreach my $module (@{$server->{'module_list'}}) { # Do we have the correct plugin? if ($module->{'Accounting_getUsage'}) { $server->log(LOG_INFO,"[MOD_FEATURE_CAPPING] Found plugin: '".$module->{'Name'}."'"); # Fetch users session uptime & bandwidth used - my $res = $module->{'Accounting_getUsage'}($server,$user,$packet); + my $res = $module->{'Accounting_getUsage'}($server,$user,$packet,$month); if (!defined($res)) { $server->log(LOG_ERR,"[MOD_FEATURE_CAPPING] No usage data found for user '".$packet->attr('User-Name')."'"); return MOD_RES_SKIP; @@ -310,13 +311,14 @@ sub post_acct_hook # Get the users' usage my $accountingUsage; + my $month = DateTime->from_epoch( epoch => $user->{'_Internal'}->{'Timestamp-Unix'} )->strftime('%Y-%m'); # Loop with plugins to find anyting supporting getting of usage foreach my $module (@{$server->{'module_list'}}) { # Do we have the correct plugin? if ($module->{'Accounting_getUsage'}) { $server->log(LOG_INFO,"[MOD_FEATURE_CAPPING] Found plugin: '".$module->{'Name'}."'"); # Fetch users session uptime & bandwidth used - my $res = $module->{'Accounting_getUsage'}($server,$user,$packet); + my $res = $module->{'Accounting_getUsage'}($server,$user,$packet,$month); if (!defined($res)) { $server->log(LOG_ERR,"[MOD_FEATURE_CAPPING] No usage data found for user '".$packet->attr('User-Name')."'"); return MOD_RES_SKIP; diff --git a/smradiusd.conf b/smradiusd.conf index 31e88094..1719bad6 100644 --- a/smradiusd.conf +++ b/smradiusd.conf @@ -306,6 +306,7 @@ accounting_usage_query=<<EOT @TP@accounting WHERE Username = %{request.User-Name} + AND EventTimestamp >= %{query.From} EOT -- GitLab