3.0.0 release notes

Upgrade notes

  1. The supported versions for client and server software have been changed significantly. Make sure your software meets the requirements before upgrading to 3.0.0.
  2. The /api/v1/messages endpoint has been removed as it was no longer actively used, and contained bugs. [#3971]
  3. The ANC analytics page and the following APIs have been removed as they are no longer used. [#1002]
    • /api/active-pregnancies
    • /api/upcoming-appointments
    • /api/missed-appointments
    • /api/upcoming-due-dates
    • /api/high-risk
    • /api/total-births
    • /api/missing-delivery-reports
    • /api/delivery-location
    • /api/visits-completed
    • /api/visits-during
    • /api/monthly-registrations
    • /api/monthly-deliveries
  4. The /api/v1/export/messages, /api/v1/export/forms, and /api/v1/export/contacts endpoints have been removed in favor of /api/v2/export/messages, /api/v2/export/reports, and /api/v2/export/contacts respectively. [#1002]
  5. The /api/v1/fti endpoint has been removed due to security concerns and lack of use. [#1002]

What’s New

Database upgraded to the latest CouchDB

Our stack now runs on the latest and greatest version of CouchDB (v2.2) which is a major upgrade and supports clustering for better performance on large projects and more efficient replication.

Support running our stack on Docker

We have implemented a containerization solution (Docker) which means our stack can run safely on a range of operating systems, and multiple deployments can run on the same instance. The end result is to better support a project self-hosting the deployment and to save money on deployment by combining some or all of our AWS instances. [#3983]

Import and export of Settings in Admin Console

This feature provides UI support to import and export settings. There is now third tab to the Settings page called “Backup/Restore” and includes instructions for downloading as well as uploading. [#3868]

Uses Horticulturalist for installation and upgrades

Previous Situation: To install and update the Medic webapp on a server we used an application called Gardener. It is a web-based tool to manage CouchDB applications. It includes a tool, called Dashboard, which lets you install Medic. You could then upgrade the Medic application using that same web-based tool.

Problem: Although Dashboard made it easy to install and upgrade an application, it was problematic when managing many deployments. For instance, upgrading all instances required manually clicking the Upgrade button in a webpage. This process is tedious, and only worked if you were on a good internet. We learned the hard way that doing an upgrade from a spotty connection could leave your instance in a broken state. Also, you only had the choice to upgrade to the very latest version of the app. That means that if you are on 2.14.0, you could not update just to 2.14.5, the same version but with fixes for bugs. You’d have to upgrade all the way to 2.18.0.

Solution: Horticulturalist is a new and easy way to deploy and update Medic. Horti replaces the Market, Gardener and Dashboard as our standard way to deploy and manage our software. It can be used from the Medic Mobile admin webapp to select the specific version that you want to upgrade to. You can even select versions from a different branch to help with acceptance testing of new features. It can also be used via a computer terminal using the command line interface. This makes it easy for the Site Reliability Engineering team to manage instances, making sure that projects quickly get updates to use the most stable version of Medic tools.

[#3993 ….]


Value for db-doc attribute is case sensitive

Previously the db-doc attribute in XLSforms only accepted the lower-case “true.” It now accepts “TRUE” as well, which is what we got often got with Excel doing autocorrect. [#3973]

Targets tab has no Loading spinner on initial load

There is now a loading spinner on the Targets tab on initial load. [#4241]

Person with self as parent

It used to be possible to edit URLs to create a person with themselves as a parent. This has now been fixed. [#4487]

Replace medic-reporter

Medic-reporter was a standalone couchapp that we used for sending test messages without needing an SMS or gateway device. Because it was standalone, it frequently broke and was difficult to install.

We have now reproduced the main functionality of medic-reporter in the admin app, so it’s shipped with the webapp, can be tested and maintained easily, and works. [#4516]

Enketo summary label icons are misaligned

Previously, icons on the summary screen were misaligned into a corner. We’ve added padding to center them vertically and horizontally on the summary bar. [#4530]

Make sure we can’t infinitely recurse in the lineage shared library

We put guards in place to cleanly throw errors if we detect that we’re hitting an infinite loop. We did this by putting depth guards on potentially problematic loops and throw the error if the number gets outrageously high. This will prevent app hangs and crashes. [#4604]

Implement access logging in API

We implemented logging of requests in API for the response status, size, time, etc. [#4622]

Performance Fixes

Pull sentinel data out into its own database

We have taken data that is specific to the running of sentinel and doesn’t need to be replicated down to users out into its own database. This makes our changes feed half the size (or so). [#3423]

Split the admin tab out as a new app

Previously, non-admin users have to download and run the admin only code, which was a waste of bandwidth, memory, and disk space. We split it out as a separate webapp. The new app is a desktop-only, online-only single page. The new admin app preserves all the same functionality as before, and will be revisited with a UX/UI update in the near future. [#4145]

Changes requests are unsustainably large

Previously, requests to changes feed got very big because we submitted all known doc IDs. Now, whenever a delete comes through in the changes feed, we manually run the view code over it to determine who should see the delete which means docs ids are not included as parameters on the request. [#4172]

Improve the filtered replication algorithm

We made significant performance improvements to our filtered replication algorithm. [#4185]

Write a scalability testing framework

We wrote a scalability testing framework to determine how many users our app can support. This will help us to work out which aspects to focus on, prove improvements work as expected, and test for regressions. [#4244]

Subject summaries are loaded one at a time

Reduce the time it takes to load the Reports and Contacts lists by up to 50% by requesting subject summaries in a batch rather than individually. [#4669]

And lots more…

Over 100 individual issues have been fixed in this release - read more.