This is the first part of revamping how Figures captures monthly active users. At the core of this is a new model, MonthlyActiveEnrollment that says if a given user was active in a course for a given month, a unique user + course aka 'enrollment', so we simply call it 'monthly active enrollment'. This model then forms a foundation to quickly query for such things as
active users in a site for a given month or set of months
active users in a cohort for a given month or set of months
which courses a user was active in for a given month or set of months
Adds new model, figures.models.MonhtlyActiveEnrollment
This model exists to capture user activity in a course in a month
This forms a foundation from which per-user or per-course or per-site monthly active users can be derived
Added model unit tests and updated test infra for support
Add admin interface for MonthlyActiveEnrollment and update admin test
What's next?
After this PR is merged, the models won't update right away. We're adding Django signals to trigger the check and creating of a MonthlyActiveEnrollment if it doesn't exist. The signals will be configurable, at least at the deployment level via server-vars with the option to toggle on/off at the site level
What's this PR about?
This is the first part of revamping how Figures captures monthly active users. At the core of this is a new model,
MonthlyActiveEnrollment
that says if a given user was active in a course for a given month, a unique user + course aka 'enrollment', so we simply call it 'monthly active enrollment'. This model then forms a foundation to quickly query for such things asWe're generally following this design: https://appsembler.atlassian.net/wiki/spaces/RT/pages/350552808
What's in this PR?
What's next?
After this PR is merged, the models won't update right away. We're adding Django signals to trigger the check and creating of a
MonthlyActiveEnrollment
if it doesn't exist. The signals will be configurable, at least at the deployment level viaserver-vars
with the option to toggle on/off at the site level