A library to perform daily-active-user (and similar) tracking.
Install the package activity-tracker
from PyPI using pip:
$ pip install -U activity-tracker
import six
from activity_tracker.tracker import ActivityTracker
tracker = ActivityTracker(
periods=[ActivityTracker.PERIOD_DAILY],
backend='redis')
# Record activity for a couple users.
tracker.track(id=123)
tracker.track(id=123)
tracker.track(id=456)
# At the end of the time period (days in this example), collapse the raw
# data into counts.
tracker.collapse()
# After the data is collapsed, it can be queried. In this example, bucket
# is always None, since no bucket was provided to track (and collapse).
import datetime
today = datetime.date.today()
week_ago = today - datetime.timedelta(days=7)
for date, date_data in tracker.lookup_daily(start=week_ago, end=today):
print date
for bucket, count in six.iteritems(date_data):
print ' {}: {}'.format(bucket, count)
You can use multiple buckets for tracking different types of users, devices, etc.
tracker.track(id='random-session-1', bucket='anon')
tracker.track(id='random-session-2', bucket='anon')
tracker.track(id=456, bucket='auth')
tracker.collapse(buckets=['anon', 'auth'])
data = tracker.lookup_daily(
start=week_ago, end=today,
buckets=['anon', 'auth'])
You can also change a user's id and/or bucket, primarily to allow replacing an anonymous session id with an authenticated user's id.
tracker.track(id='random-session-1', bucket='anon')
tracker.track(id='random-session-2', bucket='anon')
# User logs in; replace ('anon', 'random-session-2') with ('auth', '123')
tracker.track(
id=123, bucket='auth',
old_id='random-session-2', old_bucket='anon')
When collapsing data, you can also create aggregate buckets which contain the count of the union of 2 or more other buckets. This is useful for computing totals of sets of users that may overlap.
tracker.track(id='[email protected]', bucket='site1')
tracker.track(id='[email protected]', bucket='site1')
tracker.track(id='[email protected]', bucket='site2')
tracker.track(id='[email protected]', bucket='site2')
tracker.collapse(
buckets=['site1', 'site2'],
aggregate_buckets={'total': ['site1', 'site2']})
When looking up data for this day, there will be 3 buckets:
site1: 2 site2: 2 total: 3
Copyright © 2023, Educreations, Inc under the MIT LICENSE.