Proposal for online users

Brian Candler b.candler at pobox.com
Mon Jan 23 16:15:12 CET 2017


On 23/01/2017 11:35, Haviaras Kostas wrote:
> Hello, I would like somehow to count the online users inside the
> freeradius!

If this is a busy server, then I suggest you should look at rlm_redis as 
the backend.

You can create a new redis "hash" for each username, with a hash key of 
<session-id> and the value of <timestamp> which is the time of the most 
recent Start or Interim-Update record.


* On receiving Start or Interium-Update, update the key:

HSET acct:<username> <unique-session-id> <timenow>

* On receiving Stop, delete the key:

HDEL acct:<username> <unique-session-id>

* At login time, use a HLEN query to see how many sessions are currently 
active

HLEN acct:<username>

All the above can be done in unlang, without writing any new modules.

Plus you probably want to deal with stale sessions, where for some 
reason the Stop record hasn't arrived, or a Stop and Interim-Update 
arrived in the wrong order. Either:

* Periodically scan the acct:* keyspace to look for stale sessions 
(where timenow is more than say 3x the accounting interim update 
interval from your NAS), and delete them;

and/or

* after every HSET/HDEL also send "EXPIRE acct:<username> numsecs".  But 
this will only clean up stale sessions if the user doesn't have any 
sessions open at all.

HTH,

Brian.



More information about the Freeradius-Users mailing list