App that continuously monitors Enketo's loading and validation performance of a set of benchmark XForms and posts results to a Graphite server.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE Initial commit Mar 18, 2015
config.json launch Mar 20, 2015
package.json changed: use puppeteer + modernize, closes #6 Aug 7, 2018

Enketo Core Performance Monitor

An app that continuously monitors Enketo Core's loading performance in PhantomJS for a set of benchmark XForms. It posts results to a Graphite server.

The app runs forms in Chrome Headless. We'll also try to update this browser regularly, so performance changes could be caused by Chrome updates or Enketo Core updates. This reflects the user experience well which is what really matters.

Unfortunately the server running this app is not always constant. In the past Digital Ocean has throttled this server.

Live Results


  • For all graphs between 22/02/2018 and 08/07/2018 grunt failed which meant the javascript built file was not updated. The results are useless in this period.
  • From the 7th of August 2018 onwards the app switched to Chrome headless. Best to discard data from before this date.


  1. Install graphite server and configure (after many failures I finally settled on these retentions with the default average aggregation: 1h:1d,1d:5y,7d:10y)
  2. Install node 8.x, and grunt-cli
  3. Install build-essential apt-get install build-essential
  4. git clone enketo-core and build with npm install && grunt
  5. git clone this app as a sibling of enketo-core and run 'npm install'
  6. configure in config.json
  7. test by running node /path/to/enketo-core-performance-monitor/benchmark -f widgets.xml
  8. setup cron job for node /path/to/enketo-core-performance-monitor/benchmark -a every hour with the above retention. cronjob frequency = smallest retention frequency
  9. set up post-commit hook - run with pm2 or forever - to always keep enketo-core up-to-date and rebuild using a shell script.
  10. drop any additional forms you would to include in /forms.