Reporting and data retrieval app for Open edX.
This release includes a performance fix for the site-monthly-metric API.
This release includes bug fixes. Of note:
- Fix tasks for standalone and fix average progress validation error
- Enable daily metrics models backfill of historical data in platform, but not progress
- Update SDM historic course count calculation
- Enrollment data handling fixes
- Fix broken devsite data seeding
- Front end package dependency updates
Also includes a foundational update for MAU 2:
This release adds an optionan new pipeline workflow
For details, please read here
To enable this feature, you need to update the LMS settings (aka 'server-vars.yml') as follows:
server-vars.yml:
FIGURES: DAILY_TASK: 'figures.tasks.populate_daily_metrics_next'
In Django settigs, you would check the var here:
from django.conf import settings settings.ENV_TOKENS['FIGURES'].get('DAILY_TASK')
PR about the workflow update:
- Pipeline improvement prerequisites
- Figures pipeline performance improvement
- Fix enrollment data backfill Django management command
Other PRs
- Revert devsite 'courseware' app namepace back to originial
- Bump url-parse from 1.5.1 to 1.5.10 in /frontend
- Bump urijs from 1.19.6 to 1.19.8 in /frontend
main is the new default branch
Figures 0.4.1 is finally here. After several development releases, we realized it was time to just move to production releases.
Figures 0.4.x release series supports Open edX Juniper, Hawthorn, and Ginkgo
Please visit Figures releases page for details on specific releases.
- FIX - Removed dependency on 'packaging.versions'
- #272
- NOTE: This PR updates a previous commit that required the packaging package
- Reworked SiteMonthlyMetrics registered users metric. This was causing the /figures/api/site-monthly-metrics/registered_users endpoint to timeout with a 500 error
- Fixed Ginkgo (Django Filter 0.11.0) Backward compatibility issues
- UI Bug fix: Add success feedback to csv export dialog
- Bump http-proxy from 1.18.0 to 1.18.1 in /frontend
- Add Learners Progress Overview to main menu
- Performance and test improvement for LearnerMetricsViewSet
- Fix code that doesn't work on Ginkgo (Django 1.8)
- Learner progress overview UI improvements
- Added multi-course filtering to the learner-metrics API endpoint
- Small cosmetic issues in new Learners Progress Overview page
- Learner metrics Prerelease API and UI
- Improve logging for monthly metrics pipeline and set default to run the monthly metrics pipeline task
- Bug fix: Site level certificate metrics
- Adds enrollment metrics API endpoint
- Site monthly metrics API performance improvement
- Initial implementation of Celery support for Figures devsite
- Fixes incorrect site monthly metrics course completion data
- Fixes CourseDailyMetricsSerializer when average_progress is 1.00
- Updates pipeline enrollment metrics queries to improve performance
- Added site pipeline progress indicator to logging
- Bump devsite Django 1.11 to version 1.11.29
- Bump websocket-extensions from 0.1.3 to 0.1.4 in /frontend
- Updated UI, MAU fix, style fixes, label changes
- Added site monthly metrics scheduled tasks to fill last month's MAU
- Added Django Debug Toolbar to devsite
- Performance improvement to "Site Monthly Metrics" active users endpoint
- Updated UI to improve performance and usability
- Added "Course Monthly Metrics" set of API endpoints
- Updated UI to address performance issues
- Added missing organizations to devsite settings INSTALLED_APPS
Client (UI and API) facing updates
- Site Monthly Metrics pipeline and new API endpoints
- Added Course MAU metrics API endpoint and pipeline
- Added user email address to general user data
- Bug fix - URL pattern fix for figures/
Developer facing updates
- Updated Django micro version to Figures devsite
- Added missing .env file for Makefile support
- Added Pylint to testing
- Refactored permissions module
- Hawthorn support since release 0.3.0
- This release includes bug fixes, UI improvements, and backport support for Ginkgo
- Includes a standalone development mode. See the developer quickstart guide
Figures is a reporting and data retrieval app. It plugs into the edx-platform LMS app server. Its goal is to provide site-wide and cross-course analytics that compliment Open edX's traditional course-centric analytics.
To evolve Figures to meet community needs, we are keeping in mind as principles the following features, which Jill Vogel outlined in her lightweight analytics post on ed Xchange:
- Real time (or near real time) updates
- Lightweight deployment
- Flexible reporting
- Simpler contributions
Please refer to the Figures design document for more details on goals and architecture.
For all Open edX releases:
- Python (2.7)
For Hawthorn:
- Django (1.11)
For Ginkgo:
- Django (1.8)
NOTICE: Installation instructions are out of date and backlogged for update
Go here for instructions to install and run Figures in devstack.
Go here for instructions to install Figures in production.
The Figures user interface is a JavaScript Single Page Application (SPA) built with React and uses the create-react-app build scaffolding generator.
The Figures back-end is a reusable Django app. It contains a set of REST API endpoints that serve a dual purpose of providing data to the front-end and to remote clients.
TODO: Improve the testing instructions
The unit tests should be able to run on any OS that supports Python 2.7.x
Clone the repo:
[email protected]:appsembler/figures.git
Go to the project directory:
cd figures
Create a virtualenv for Python 2.7.x.
Install required Python packages:
pip install -r devsite/requirements.txt
From the figures repository root directory:
py.test
If all goes well, the Figures unit tests will all complete succesfully
Figures can be configured via Django settings' FIGURES
key. Open edX reads configuration from
the /edx/etc/lms.yml
file both in devstack and production servers. In releases before Juniper it
was the lms.env.json
file.
A Figures configuration may look like the following:
FEATURES: # The standard Open edX feature flags # ... other features goes here ... FIGURES_IS_MULTISITE: True # ... more features goes there ... FIGURES: # Other Figures configurations SITES_BACKEND: 'openedx.core.djangoapps.appsembler.sites.utils:get_active_sites' REQUESTED_SITE_BACKEND: 'tahoe_figures_plugins.sites:get_current_site_or_by_uuid' FIGURES_PIPELINE_TASKS_ROUTING_KEY: 'edx.lms.core.high' DAILY_METRICS_IMPORT_HOUR: 13 DAILY_METRICS_IMPORT_MINUTE: 0
Settings like SITES_BACKEND
require a path to a Python function or class. The path is consists of two parts:
a Python module e.g. my_plugin_package.helpers
and an object e.g my_helper
separated by a colon e.g.
my_plugin_package.helpers:my_helper
.
This object would be imported by the import_from_path
helper in the
figures/helpers.py module.
FEATURES.FIGURES_IS_MULTISITE
(defaultFalse
): Boolean feature flag to run Figures in a single-site mode by default (when set toFalse
) most popular Open edX installation option. The multisite mode requires a customedx-organizations
fork that is used for Appsembler Tahoe clusters.FIGURES.SITES_BACKEND
(defaultNone
): A Python path to function to list figures sites. For example, this is useful to customize which sites are processed and which are considered inactive. By default (whenNone
is used) all sites are listed in the multi-site mode.REQUESTED_SITE_BACKEND
(defaultNone
): Python path to a function that gets the current site. For example it can be used for API purposes to pass a Site ID to get a different site. By default (whenNone
is used) the Django'sget_current_site()
helper is used.
TBD: Document FIGURES_PIPELINE_TASKS_ROUTING_KEY
, DAILY_METRICS_IMPORT_HOUR
and DAILY_METRICS_IMPORT_MINUTE
.
- Open edX "Hawthorn" will provide a plug-in architecture. This will hopefully simplify Figures installation even more
- Downloadable report files
- Plugin architecture to extend Figures for custom data sources
TODO: Add details here or separate CONTRIBUTING file to the root of the repo
If you find bugs or run into issues, please submit an issue ticket to the Figures issue tracker on Github.
Please do not report security issues in public. Please email [email protected].