Working with Caliper Analytics


Caliper Analytics is a data standard and management API tool provided by the IMS Global Learning Consortium.  It is designed to help educational technologies used in schools and colleges, and in corporate training environments, to share information with each other about student learning practices. Teachers and trainers can use this information to better understand how modern educational technologies work and how to apply them more effectively. Caliper Analytics version 1.1, released in May of 2017, can capture and share data about how students use learning apps and software.

With Caliper, a teacher could look at how a group of students are using an e-Learning tool (like READynamic), in terms of how many times the students attempt to complete an assignment on a tool and maybe provide clues on exactly where the students tend to get stuck or lose interest. Caliper can compile and share data related to students’ online activities, such as their answers to quiz questions, responses on worksheets, and the videos they view. It can also capture the exact start and stop times for these activities. Caliper compiles records of student transactions in the form of Javascript Object Notification (JSON) formatted files.

Note that Learning Tools Interoperability (LTI) is designed to provide support for Caliper when working with READynamic and a LMS system.  But you aren’t required to work with Caliper if you don’t want to. You will need to configure Caliper to work with READynamic.

To implement Caliper consider the IMS Global Best Practice Guide.

You can find Caliper specifications and documentation at the same site.

IMS Global also offers a series of github repositories for the Caliper Sensor API code, for Java, JavaScript, Ruby, Python, .NET, and PHP.

SensorAPI is a set of interfaces that define learning events and provide standards for gathering and processing data related to learning transactions. For each repository, a README file is provided to describe how to install and build the Caliper project.

Server configuration

Open the copy of the server_configuration_overrides.yml file found with your READynamic installation package.  Look for the Caliper settings, and change the caliper “enabled” value to “true” and to provide an endpoint web address:

     enabled: false
     event_store_url: "web address"
     consumer_key: key
     consumer_secret: secret

For this to work the lti_enabled setting must be set to “true.”

Copy the consumer_key and the consumer_secret values from the LTI Consumer screen for your LMS system (such as Moodle) in READynamic.  Click LTI Consumers in the READynamic Administrator Portal to find your Consumer record.

Finally, create an HTTPS endpoint.  This endpoint is a web address where your service can be accessed by a client application.  If you set up Caliper to work with your LMS system and READynamic, whenever your students use READynamic on their mobile devices or from a browser window to work with an eBook, Caliper will send detailed information about their activities to this endpoint (in the form of a JSON file) and store that data there.

You will probably want to set up your own private HTTPS endpoint on your local web server.  You can also use a free service like RequestBin or HookBin to automatically generate an endpoint for you. This might be useful for testing your Caliper system.  Either site will randomly generate an endpoint URL you can apply to READynamic to work with Caliper.  It might look like this:">

or this:">

When you are finished, your Caliper settings in the YML configuration file should look something like this:

Server configuration YML file settings for Caliper

After you have configured READynamic to work with Caliper, you can compile and review data related to student activity, provided by Caliper, from the endpoint you set up.

Information Available from Caliper Event Statements

Student event and activity records compiled by Caliper are defined within groups of metric profiles. The metric profiles are organized by the type of learning activity, such as Reading or use of Media.

The Caliper Reading Metric Profile describes a student reading text in an eBook.  The Annotation Metric Profile relates to a student using or working with annotations within an eBook, such as clicking on a bookmark to move to a different location in the eBook or viewing an embedded video.

For more detail, see the section of the Caliper specification that describes these two profiles at the IMS Global web site.

READynamic supports two actions within the Reading Metric Profile, the Navigated To action in Caliper, which corresponds to a NavigationEvent, and a Viewed action, which corresponds to a ViewEvent. In the Annotation Profile, READynamic supports the Highlighted action, which is an AnnotationEvent.

That is, if you set up Caliper to work with your LMS system and READynamic, Caliper can accept and store records about student activity with eBooks, but only for these transactions:

  • Viewing a page or other object in an eBook
  • Highlighting text on a page
  • Navigating to a page or other object in an eBook

Caliper JSON statement format

In Caliper a valid response record for an event will be formatted as a JSON file and include an actor, an action, an object (or entity), a time stamp, and an identifier, in the form of a Universal Unique Identifier (UUID).  A UUID is a randomly generated 128-bit key. It does not need to be registered to a Certification Authority to verify that it is unique.  Note that READynamic also makes use of UUID codes to identify hardware devices. In Caliper, the UUID identifies the event or transaction being described.

Each Caliper event uses this format for the UUID:


A UUID record might look like this:

"id": "urn:uuid:3a648e68-f00d-4c08-aa59-8738e1884f2c",

This is an example of a Caliper ViewEvent response statement, in JSON format. This event statement shows that a student (person) viewed page 10 in an eBook file on June 1 of 2016, around 8 AM:

 "@context": "",
 "id": "urn:uuid:3a648e68-f00d-4c08-aa59-8738e1884f2c",
 "type": "ViewEvent",
 "action": "Viewed",
 "actor": {
    "id": "unizin://engage/user/18059",
    "type": "Person"
 "eventTime": "2016-06-01T17:52:05.174855+00:00",
 "object": {
   "id": "unizin://engage/slug/9782341233/page/10",
   "type": "Page"