From 3d0974f3f8e988f4a11d2e8be7ee4ebea551a3b9 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Sat, 6 Jul 2013 18:03:30 +0000 Subject: [PATCH] Clean up old expired users in config manager --- opentrafficshaper/plugins/configmanager.pm | 38 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/opentrafficshaper/plugins/configmanager.pm b/opentrafficshaper/plugins/configmanager.pm index ff4eb58..54d2683 100644 --- a/opentrafficshaper/plugins/configmanager.pm +++ b/opentrafficshaper/plugins/configmanager.pm @@ -40,7 +40,14 @@ our (@ISA,@EXPORT,@EXPORT_OK); use constant { VERSION => '0.0.1', + + # After how long does a user get removed if he's offline TIMEOUT_EXPIRE_OFFLINE => 300, + + # After how long do we check users which have not been updated + TIMEOUT_EXPIRE_OLD => 7200, + + # How often our config check ticks TICK_PERIOD => 5, }; @@ -172,7 +179,10 @@ sub session_tick { my $now = time(); - # Loop with changes + # + # LOOP WITH CHANGES + # + foreach my $uid (keys %{$changeQueue}) { # Global user my $guser = $users->{$uid}; @@ -317,6 +327,28 @@ sub session_tick { } + # + # CHECK OUT CONNECTED USERS + # + foreach my $uid (keys %{$changeQueue}) { + # Global user + my $guser = $users->{$uid}; + + # Check for expired users + if ($now - $guser->{'LastUpdate'} > TIMEOUT_EXPIRE_OLD) { + # Looks like this user has expired? + # TODO: Check stats to make sure they 0 + my $cuser = { + 'Username' => 'Username', + 'Status' => 'offline', + 'LastUpdate' => $guser->{'LastUpdate'}, + }; + # Add to change queue + $changeQueue->{$uid} = $cuser; + } + } + + # Reset tick $kernel->delay(tick => 5); }; @@ -408,8 +440,8 @@ sub processChanges # Loop through what can change foreach my $item ('GroupID','ClassID','TrafficLimitTx','TrafficLimitRx','TrafficLimitTxBurst','TrafficLimitRxBurst') { - # Check if its changed... - if ($orig->{$item} ne $new->{$item}) { + # Check if its first set, if it is, check if its changed + if (defined($new->{$item}) && $orig->{$item} ne $new->{$item}) { # If so record it & make the change $res->{$item} = $orig->{$item} = $new->{$item}; } -- GitLab