1.14.11
Add support for ElasticSearch 8.x
Enhancements
- Allow additional sandbox options in VQL renderer Iframe
- Add support for ElasticSearch 8.x
Known Issues
- The $punchCard day of week aggregation is not currently supported when using Elastic 8.
Bug Fixes
- Fix an issue that prevents the VQL render integration script from rendering $lists
1.14.10
This is a relatively large update with several quality of life improvements in the analytics package.
Enhancements
- Add a new widget type, "Bucket Reaggregate". This tool allows you to first build buckets (like you would with a pie or bar chart) and then pull a metric over those values. For instance, you can count the number of attempts each learners makes by selecting a verb and using the "count" as the bucket metric, then pull a histogram or average over those counts.
- Allow customization of the VQL generated by both individual series and the full render of a ChartBuilder widget. The series additional pipeline code can be used to process the data, and the post-render additional VQL stages are useful for customizing the render.
- Add an option to remove outliers from bar and pie charts, based on the interquartile range.
- The interaction widget and the $report VQL stage now support the global dashboard filter and timerange filter.
- Lists in the ListBuilder widget can be sorted by their rendered title.
- The server can now set the admin credentials on startup and then continue running. The old behavior would stop the process and restart in this case, which causes issues with containers that use the distroless base.
- The top level of the table generated by the $report stage can now accept custom CSS rules
- A new widget is available "Arcs". This tool is great for showing the movement of a population through a defined path. Paths are defined by a list of xAPI objects.
- Minor security update: We now mask additional properties in the "Current Configuration" interface, and no longer send the X-Powered-By header.
- The interaction widget has additional logic to properly render response and success ratios, even when the xAPI canonical data is broken in various ways.
- There is a new options to resync an ES index - by date. This resync method makes no attempt to keep track of what has and has not been stored already, but just sends the data from a given date to ES. It does not destroy nor recreate the index. This is very useful in cases where ES has missed some data, but you know when the problem began. Duplicate records will be rejected by ES. '
- The Interaction widget matching display now includes labels.
- The video histogram can now be placed into a mode that does not require the content player to send the "terminated" event. This mode is less efficient and should be avoided when the content player properly sends termination data.
1.14.9
Enhancements
- The $report stage now renders the same in the VQL workshop as well as the dashboard system
- $median is available as a metric in VQL.
- Canonical Activities can be exported and restored from the UI
- Statement viewer reports can be updated in place without creating new versions
- Reenable JSON6 parsing for saved VQL scripts in order to support multiline strings
- When using a boolean as an aggregation key in ElasticSearch mode, the values are interpreted as the strings "true" and "false" instead of boolean values. The makes the charts look more like one would expect
- Most API calls from the front end will now redirect the page to the login screen if the user is logged out
1.14.8
1.14.7
Enhancements
- Better feedback from the Elasticsearch resync job.
- JSON6 fails to parse some valid inputs! We've swapped all loose parsing to JSON5
Bugfixes
- Fix an issue that prevented scripted keys from running after they were edited
1.14.6
Bugfixes
- Fix a dashboard refresh issue, when changing parameters would not prompts some charts to refresh
Enhancements
- Across all forms, don't allow the submit button to be clicked twice
- Add a beta Tableau report integration
1.14.5
MongoDB connection strings that include the term "localhost" may need to be updated. If the LRS does not connect to your local database, please change "localhost" to "127.0.0.1".
The 1.14 branch represents a major update to the LRS platform. Like all versions, it is backwards compatible, and can be installed in the same manner as other updates. This section is a work in progress and will be updated over time.
LRS.io has been configured to allow a browser to choose which version to interact with, 12.x or 14.x. This behavior is controlled by a cookie called 'proxy_override'. Setting this cookie to 'true' will cause our load balancer to route the request to the 1.14.x server pool. Any value other than 'true', or no value at all, will send the request to the 12.x pool. The user interface in LRS.io mode includes a switch to set this cookie. In January 2024, we will change the default behavior to route all traffic to the 14.x pool, unless the cookie value is explicitly 'false'. By the end of the first quarter 24, we will stop honoring the cookie altogether and route all traffic to 1.14.
The most visible change in this version is a complete rewrite of the front end user interface. We expect this will significantly increase usability. All customizations of the front end CSS will no longer have any effect, and you'll need to provide an MUI style in JSON format to style the UI.
Additional changes include
xAPI 2.0 support
Update to some edge case VOID logic
More direct column analytics in the Statement Viewer
Update underlying script engine to Node 18
Password dictionary blacklisting
Permissions on saved reports
1.12.11
Bug Fixes
- Disable the automatic layout of new chart widgets. In some cases, this function would inappropriately move widgets.
- Update the statement voiding logic to use JSON paths that have DB indexes. This prevents some timeout errors when voiding statements in a large data set
- Some functions that would be expected to be assigned to the "lrs.analytics" or "lrs.settings.edit" permissions were incorrectly limited to top level "lrs" permission. This has been fixed.
- Add a system counter to track the number of anonymous content launches.
- Add CSRF logic to all PUT, POST and DELETE calls where the user is expected to be logged in. Checks the referrer header to prevent CSRF.
- Additional properties for configuring outgoing email. Now supports unauthenticated SMTP
- Fix a bug related to logging in with email accounts that have capital letters in specific locations.
- Several updates on the LRS.io version to account for the "Try our new UI" button.
1.12.10
The release adds a new VQL stage focused on building tabular reports.
New Features
Bug Fixes
Changes
- The "Run Script" in the "Manage Saved Scritps" UI will now show a single chart, if the process calls for a chart render. It will not automatically format JSON data into a table. If you wish to render the saved script as a table, it must include the $table command, as it would in the VQL workshop and the analytics system.
- Add additional properties to the VQL workshop schema
- When an $inlineSubQuery (or $inlineExpression) contains a call to $context that is not resolved, the subquery will not be evaluated, but passed unmodified deeper into the planning process. This allows an $inlineSubQuery to properly exist within a stage that includes its own VQL code, like a $query or a $report stage. Otherwise, selectors in the $report could not include inlineSubQueries, because those queries would be evaluated at plantime for the top level VQL that contained the $report. We don't expect this to have any real ramifications for existing, working VQL scripts. The error path may differ in some cases.
1.12.9
The release adds a few query updates to the statement viewer, and includes updates to our internal build process.
New Features
- Add the "$exists" operator to the statement viewer. When set to true or false, the query will identify whether or not ANY value exists on the given path, or whether the value at the path is undefined
- Add sorting to custom columns in the statement viewer
- Builds are now released as container images on DockerHub. The official LRS container image can be found here: https://hub.docker.com/r/veracitylrs/veracitylrs
- The release of builds to the file distro server are now a separate step from the deployment to production lrs.io
Bug Fixes
- Fix an error that causes a page refresh when clicking the "apply" button while adding a type-in path segment to a custom column definition in the statement viewer
- In general, much better data type handling for statement filters in the statement viewer. Boolean and date types are properly respected in the $in and $nin operators
- Fix an issue where the filter layers that are applied to the query are not always reflected in the configuration dialog, which could sometimes show older configurations
1.12.8
This release primarily focuses on under-the-hood updates, including allowing more VQL queries to use ElasticSearch, plus some user interface updates.
New Features
- Compute and display overall package completion of content packages
- Add an endpoint on the learner portal UI to facilitate the use of an API generated launch token as a mechanism to allow a user to access content
- When the API is used to generate a launch token, the UUID of that token can be passed to this address
- https://${yourlrs}.lrs.io/portal/launch/${launch_token_uuid}/consume
- The learner associated with the launch will be logged in, and the content presented
- The token cannot be used a second time
- The token must be used with one minute of allocation
- Allow the activity explorer to use either parent or grouping context type
- Record the assumed language of a statement and create a new meta field, meta.language.
- The analytics custom dashboard system will automatically lay out widgets when they overlap.
Bug Fixes
- Fix a bug that caused some embedded dashboard to use specific parameter values, even when the embed link was generated with "allow parameter modification" set to true
- Fix a rare bug in the automatic escaping of some xAPI extensions
Other Changes
- Add additional column for 'display name' to the LRS management list.
- Add additional column for 'override name' to the canonical activities list.
- Update internal test suite to use newer MongoDB
- Report status of the resync upstream and harvest statements jobs in the UI
- Additional locations in the UI now respect the override canonical name
- The video histogram now uses ElasticSearch when available
- The VQL query planner will translate filters with $like, $exists and $nin to ES
- Allow the $parseDate VQL operator to take a proper date input, for cases where the value has been previously parsed
- Support $exists in ES mode.
- Allow accumulator VQL stages to work normally when they are not the first operation in a process
- Add a plugin hook to allow plugins to intercept the canonicalization of agents and activities
- Serve a robots.txt file to disable crawling
- Add the timestamp to statements on upload if they don't include one.
- On content upload of Tincan packages, default the content record to use the activity ID inside the manifest, instead of generating our own.
- Hide activity cards on the homepage when there is no data
- Add build pipeline stages to construct a container and push to DockerHub
Migrations
No migrations are necessary. There are additional database indexes called for, and you may see the "This LRS appears to need database maintenance" warning. This can be cleared by rebuilding the indexes.
1.12.7
Major update to the Analytics debugging tool. Refactored to use Monaco editor with VQL autocomplete!
Major new features in the Analytics Debugger
- Multi-tab editing
- Save/load scripts
- Visualization of pipeline stages
- Run a pipeline to a single stage, or execute just the filter or sub-query portions
- Autocomplete based on the VQL schema
- Resizable tabs
Bug fixes
- Fixed the $forEach analytics stage (Not used internally, but useful for some specific clients)
- Don't sanitize content launch URLs, to allow query string parameters to be properly passed to clientside content.
- Fix the display of the --help output on the command line.
Updates
- Update VQL examples to work better with the generated sample data sets.
- Update UI to reference the new documentation location
- Improve the usability of the --no-color flag.
- Allow the inline editing of statement viewer filters, rather than forcing the user to destroy and recreate a filter layer to edit
- Add a setting to control the total post size allowed for JSON POSTS
Migrations Notes
- In some cases, the new JSON post limit (--jsonPostLimit=100kb) default may be to small. This can cause large batch xAPI POSTs to fail. Prior to build 11, the default was 100kb. Post build 11, the default is raised to 50mb to prevent upgrade complexities.
1.12.6
Update underlying Mongoose library. Refactor internal connection pool to use driver side DB selection, greatly reducing the number of total database connections necessary to server a large number of LRSs. Remove old connection pooling logic. Add a new "picker" interface and UI element to abstract out the task of allowing the user to locate a verb, activity or object when building filters in the statement viewer and analytics.
Bug Fixes
- When a VQL pipeline explicitly returns null in the context of the xapi/analyze endpoint, return a 200 instead of a 400
- Fix connection string parsing for a specific form of MongoDB connection strings.
Updates
- Display path suggestions for array fields in the path picker autocomplete when in MongoDB mode.
- Improve the performance of canonical table updates for Agents
- Add a mechanism for a super-admin to easily log in as a given user to check their permissions
- In LRS.IO SaaS mode, add a report for which tenants are active, and which are approaching quota limits.
- Add a canonical name override field to activity definitions.
- Add the text "key" and "secret" to access key display, as part of a long term strategy to begin using these terms.
- Add a "not in population" ($ninpop) operator to the analytics UI
- Allow playback of Youtube videos in the integrated video player
- Add the saved statement viewer reports to the LRS API
- Change the scope of the session cookie to use the webRoot settings
Migration Notes
- The update to the session cookie path can sometimes cause users to have strange login behaviors. Users may need to clear cookies or clear all site data to avoid unexpected redirects on login or logout.
1.12.5
Add server queueing mechanism for analytics. This better shares access to a server in a deployment with many different LRSs.
Updates
- Improved UI in the Activity Explorer.
- Better results when clicking "all statements" from the Activity Explorer. This now shows statements where meta.relatedActivities includes the ID in question
- Allow the use of meta fields in filters in the statement viewer
- Use ElasticSearch to speed up the statement viewer when possible
1.12.4
Update UI Bootstrap version to 5. Rebuild UI as necessary. Add the Gauge render type and single Metric analytics widget
Updates
- Use the minimum of storageSize and dataSize when computing quota percentage.
- Parse time ranges server side except in the case of custom ranges, so embeddable dashboards dont end up baking in the end date
1.12.3
Refactor to the Learning Locker migration plugin. Use a websocket to upload content packages when possible.
Updates
- Send an initialized statement on anon launch
- Parse time ranges server side except in the case of custom ranges, so embeddable dashboards don't end up baking in the end date
- Fix the display of the default time range, and make sure the activity pickers don't incorrectly specify a type filter
- Fix error in logging print statement when lite version does not support a MongoDB replicaset
1.12.2 - 1.12.1
- Refactor codebase to no longer use separate build paths and executables for enterprise vs lite. Now, the feature level is controlled by the license key.
- Integrate API keys with the permissions system. API Keys can now have specific permissions.
- Allow the res.message command to render pretty JSON with the React JSON viewer, rather than displaying the raw text
- The server will now attempt to reconnect to ElasticSearch if a connection is lost.
- Fix a bug in counting the number of bytes in an uploaded ZIP package
- Get a small performance boost by never upserting data that would change the canonical agent ID anyway
- Encrypt instead of hashing the processor configuration. Fix the intersection of filters on dashboards
- New VQL pipeline renderer - Handlebars.