diff --git a/opentrafficshaper/plugins/configmanager.pm b/opentrafficshaper/plugins/configmanager.pm index ff4eb58b52affe1e452816bbb031e4e9823f2c35..54d26837c7d5348f1a937d80e13998bd5da320f5 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}; }