Capturing time intervals when somebody was online? How would you impement this feature?

Posted by Kirzilla on Stack Overflow See other posts from Stack Overflow or by Kirzilla
Published on 2010-04-18T14:03:10Z Indexed on 2010/04/18 14:13 UTC
Read the original article Hit count: 373

Filed under:
|

Hello,

Our aim is to build timelines saying about periods of time when user was online. (It really doesn't matter what user we are talking about and where he was online) To get information about onliners we can call API method, someservice.com/api/?call=whoIsOnline

whoIsOnline method will give us a list of users currently online. But there is no API method to get information about who IS NOT online.

So, we should build our timelines using information we got from whoIsOnline. Of course there will be a measurement error (we can't track information in realtime). Let's suppose that we will call whoIsOnline method every 2 minutes (yes, we will run our script by cron every 2 minutes).

For example, calling whoIsOnline at 08:00 will return

Peter_id
Michal_id
Andy_id

calling whoIsOnline at 08:02 will return

Michael_id
Andy_id
George_id

As you can see, Peter has gone offline, but we have new onliner - George.

Available instruments are Db(MySQL) / text files / key-value storage (Redis/memcache); feel free to choose any of them (or even all of them).

So, we have to get information like this

George_id was online...
12 May: 08:02-08:30, 12:40-12:46, 20:14-22:36 
11 May: 09:10-12:30, 21:45-23:00
10 May: was not online

And now question...

  1. How would you store information to implement such timelines?
  2. How would you query/calculate information about periods of time when user was online?

Additional information..

  1. You cannot update information about offline users, only users who are "currently" online.
  2. Solution should be flexible: timeline information could be represented relating to any timezone.
  3. We should keep information only for last 7 days.
  4. Every user seen online is automatically getting his own identifier in our database.

Uff.. it was really hard for me to write it because my English is pretty bad, but I hope my question will be clear for you.

Thank you.

© Stack Overflow or respective owner

Related posts about algorithm

Related posts about Solution