DHIS version 2.35 is released

Dear all,

DHIS2 version 2.35 is out with many new features, apps, improvements and bug fixes. This version is fully compatible with the DHIS2 Android Capture App 2.3.


ANALYTICS FEATURES


Dashboard printing: You can now easily print a dashboard, either with a single item per page or in the preset dashboard layout. This enables you to create a dashboard as a standard printed report for routine meetings or plannings. You can also save a dashboard as a PDF to be shared via email or messaging.

Screenshot 1 | 2 | Jira | Docs

Time periods in indicators: The analytics engine now supports comparing various time periods relative to the aggregation periods within indicator expressions. This allows you to compare data in previous (or future) periods, which is useful for calculating trends, stock consumption, performance against targets and much more.

Docs

Combination charts: You can now create a line and bar combination chart. For example this is useful for showing a cumulative case count as bars and an infection rate as a line over time on the same chart.

Screenshot 1 | 2 | Docs

Two-category charts: Data items can now be grouped by multiple categories. For example you can group a bar chart of health facilities by facility type or ownership.

Screenshot 1 | 2 | Docs

Chart color sets: Many new color sets can now be applied to charts. These include light, dark, color-blind, grey scale, and patterns. This allows you to make more customized and printer friendly charts.

Screenshot 1 | 2

Text styling in charts: You can now edit the style, color, and size of all text in the data visualizer app. This enables you to have larger or more interesting text for charts that are downloaded.

Screenshot | Docs

Axis management: Chart axis management is improved, with a new user interface and up to four axis supported. For each data item you can select which axis to assign as well as the visualization type to use in a single screen.

Screenshot 1 | 2 | 3 | Docs

Visualization type menu: A new menu is available for selecting the type of visualization, which offers nicer icons and a description of the visualization type, making it easier to select an appropriate way to explore your data.

Screenshot | Jira

Bubble maps: This allows you to make a thematic map that represents each org unit as a single point/bubble. The size and the color of the bubble proportional to the value of that org unit compared to the range or legend. This is a popular way to visualize COVID-19 and other disease maps where hotspots need to be easily identifiable.

Screenshot 1 | 2

Event data table: The new data table for event layers allows you to search and filter events. The filtering is happening as you type and provides a quick way to look for cases and patterns.

Screenshot 1 | 2

Tracked entities map layer improvements: Several improvements to the TEI layer are available.

  • Under “Program status” you can select “All” to show entities which are active, completed and cancelled.
  • Under “Period” you can select start/end dates for either the period the entities were last updated, or the program/enrollment date.

Screenshot

Maps “no data” handling: The Maps app is now able to allow users to define a color in a legend for those org units that do not have data. This makes it much more apparent which org units did not report any data.

Screenshot

Event status filter: A new “event status” option in the Maps allows you to only show events that are active, completed, scheduled, overdue or skipped.

Screenshot

TRACKER AND EVENT FEATURES


Performance enhancements: The service for reading and writing tracker data is rewritten to improve performance. Reading and writing tracker data is now around 3 x faster, and can handle more than 100 concurrent users/requests. This will have a significant positive impact on overall server performance for tracker and event-focused DHIS2 installations.

Program rule expression validation: Program rule expressions will be validated as the user types it in. This will help the user avoid spelling errors and other preventable mistakes, as well as saving the user time when configuring program rules.

Screenshot | Jira

Year selector in date picker in Capture app: The capture app date picker is now improved, allowing direct year selection. This will make selection of dates far in the past quicker and easier. One example of this benefit is a user entering birth dates - being able to quickly select the birth year.

Screenshot

Completed date in program rules: It is now possible to write program rules that evaluate and react to the completed date of an event. This is done with the variable called V{completed_date}.This can be useful when scheduling messages to be sent at a certain number of days after a patient visit was completed.

Screenshot | Jira | Docs

User selection without explicit authority: It is no longer necessary to assign the “View user” authority to end users in order to use tracker and messaging apps. I.e. in Tracker capture, program stage user assignment and data elements of type username no longer requires any special authority.

Metadata cache in Capture: In previous versions it was necessary to clean the cache with the cache cleaner to pick up certain changes to metadata. This is no longer necessary. When the version number is increased in the maintenance app, the Capture app will detect this and download the program and all dependencies, as well as all relevant independent metadata objects like constants and org unit groups.

Docs

PLATFORM FEATURES


Continuous application delivery: Going forward, several core DHIS 2 apps will be released monthly. You can now install such core apps directly from the App Hub, and have the new version override the bundled version in DHIS 2. This can now be done from the App management app. This is beneficial as you can start using new features more quickly, and upgrade to receive bug fixes without having to test the entire system.

SMS configuration app: A new SMS configuration app is introduced, which provides a modern and more user-friendly user interface and additional options for configuring SMS in DHIS2. This app will replace the existing Mobile configuration module, which will be removed in 2.36.

Screenshot 1 | 2 | 3

Import/Export app: This app is completely rewritten, and provides a better user interface and increased stability.

Screenshot 1 | 2

OpenID Connect: Basic support for the OpenID Connect (OIDC) authentication layer is introduced. So far Google is supported as a provider, while several additional providers will be added in the upcoming releases. OIC can support Single Sign-On solutions, where DHIS 2 can utilize an existing directory of user accounts.

Docs

Disable changelog: The changelog (aka. audit log) for aggregate data and tracker data which is persisted in the database can now be disabled in dhis.conf. This is helpful for instances where audit is not necessary or relevant, as it will reduce the size of the database and improve performance of data import.

Docs | Jira

App rewrites: The cache cleaner and reports apps have been rewritten internally using the new App platform, which offers better stability and performance.

Icon Library review: The DHIS2 icon library has been reviewed. Some icons have been modified to be more neutral when it comes to race and gender representations. Also some domains like Education and Covid-19 have been added following the requests from the community.

Screenshot

API FEATURES


User lookup: A new user lookup API is available. This provides essential user information like ID, username and name, without exposing other sensitive properties. The endpoint is open for all authenticated users. The main user API is now protected with the “View user” authority.

Docs

User API restrictions: The metadata and users endpoints are now protected with the “View User” authority. The API field filtering is now restricted for user information, allowing only basic user information to be exposed. This provides better privacy and protection of user information.

Note 1 | Note 2

RELEASE INFO


Release Information Link
Download release and sample database Downloads - DHIS2
Documentation https://www.dhis2.org/documentation
Upgrade notes Upgrade notes on GitHub
Details about each feature on JIRA https://jira.dhis2.org/issues/?filter=11902
Overview of bugs fixed on JIRA https://jira.dhis2.org/issues/?filter=11907
Source code on Github DHIS2 · GitHub
Demo instance https://play.dhis2.org/2.35/
Docker docker pull dhis2/core:2.35.0
for more docker image variants see dockerhub
DHIS 2 community https://community.dhis2.org/
9 Likes

Hi Philip, I have installed version 2.35 on production it looked good until we had all our data entry operators working on the app.

This 2.35 crashes under load and dhis2-logview produces following output. This happens every few minutes the HTTP/HTTPS goes offline while you can still ping server.

Oct 27 15:11:16 natm tomcat9[262]: * WARN 2020-10-27T10:11:16,065 AMQ222061: Client connection failed, clearing up resources for session bfd7afec-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-3 (activemq-netty-threads)])
Oct 27 15:11:16 natm tomcat9[262]: * WARN 2020-10-27T10:11:16,065 AMQ222107: Cleared up resources for session bfd7afec-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-3 (activemq-netty-threads)])
Oct 27 15:11:16 natm tomcat9[262]: * WARN 2020-10-27T10:11:16,549 AMQ222061: Client connection failed, clearing up resources for session c0218a2e-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-4 (activemq-netty-threads)])
Oct 27 15:11:16 natm tomcat9[262]: * WARN 2020-10-27T10:11:16,549 AMQ222107: Cleared up resources for session c0218a2e-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-4 (activemq-netty-threads)])
Oct 27 15:11:17 natm tomcat9[262]: * WARN 2020-10-27T10:11:17,080 AMQ222061: Client connection failed, clearing up resources for session c0729060-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-0 (activemq-netty-threads)])
Oct 27 15:11:17 natm tomcat9[262]: * WARN 2020-10-27T10:11:17,080 AMQ222107: Cleared up resources for session c0729060-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-0 (activemq-netty-threads)])
Oct 27 15:11:17 natm tomcat9[262]: * WARN 2020-10-27T10:11:17,633 AMQ222061: Client connection failed, clearing up resources for session c0c6f1f2-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-1 (activemq-netty-threads)])
Oct 27 15:11:17 natm tomcat9[262]: * WARN 2020-10-27T10:11:17,633 AMQ222107: Cleared up resources for session c0c6f1f2-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-1 (activemq-netty-threads)])
Oct 27 15:11:18 natm tomcat9[262]: * WARN 2020-10-27T10:11:18,344 AMQ222061: Client connection failed, clearing up resources for session c130fe64-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-2 (activemq-netty-threads)])
Oct 27 15:11:18 natm tomcat9[262]: * WARN 2020-10-27T10:11:18,344 AMQ222107: Cleared up resources for session c130fe64-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-2 (activemq-netty-threads)])
Oct 27 15:11:19 natm tomcat9[262]: * WARN 2020-10-27T10:11:19,223 AMQ222061: Client connection failed, clearing up resources for session c1b98f56-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-3 (activemq-netty-threads)])
Oct 27 15:11:19 natm tomcat9[262]: * WARN 2020-10-27T10:11:19,223 AMQ222107: Cleared up resources for session c1b98f56-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-3 (activemq-netty-threads)])
Oct 27 15:11:20 natm tomcat9[262]: * WARN 2020-10-27T10:11:20,051 AMQ222061: Client connection failed, clearing up resources for session c237c008-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-4 (activemq-netty-threads)])
Oct 27 15:11:20 natm tomcat9[262]: * WARN 2020-10-27T10:11:20,051 AMQ222107: Cleared up resources for session c237c008-183c-11eb-bb8d-00163e94a233 (ServerSessionImpl.java [Thread-4 (activemq-netty-threads)])

1 Like

This is only reproducible when there are many users working on the system simultaneously. For just a few user there is no downtime or its not noticeable.

1 Like

Hi @Junaid_Mufti

This sounds a bit worrying. Thank you for raising it here! I will pass it on to our team so that we can investigate the issue.
Perhaps you could provide a little more information about the scale of your implementation, the number of users that causes the problem, and exactly what actions they are performing?

Kind regards,
Phil

Hi @Junaid_Mufti is Audit service enabled on your instance ?

We are running National Database of TB, HIV and Malaria for Pakistan. Approximately 50 or so concurrent data entry users. When we tested it out at headoffice with just 5-6 users everything looked okay. So we decided to go ahead. Unfortunately as soon as all the users came onboard the system would crash every few mins. We have decided to discontinue data entry for next 2 days to sort out this issue. Perhaps we would have to resort to loading a week old database when we were running 2.32.

Is that a new requirement or was it always there because we just moved from 2.32 and I don’t think we have been explicitly installing ActiveMQ Artemis package.

@Junaid_Mufti

The audit service is fairly new (from 2.34 I believe).
It is documented here (which also explains how to disable it):

I can see in documentation that this feature was added in 2.34 but we came from 2.32, and this is not mentioned in Upgrade Notes in either 2.34 or 2.35.

@Junaid_Mufti

Yes, it probably should be in the upgrade notes. We can fix that.

On the other hand, it should be able to operate at scale. Hopefully disabling it can help to avoid your problem, but it should be safe to have it enabled, and we will need to fix the underlying problem if it is not capable of supporting 50+ DE users.

Please let us know if it helps to disable the service.

Thank you Philip that is most helpful we will try WITH ActiveMQ & Disabled audit state and post our findings.

@Junaid_Mufti Just to be clear. Artemis ActiveMQ is embedded into dhis2 and there is no need to explicitly install anything.
You just have to disable the audit service using the dhis.conf parameters as documented in the link shared by Phil.

1 Like

Hello everyone,
@phil could you have a look at this issue as well please:
[DHIS2-9849] - Jira
Cos this is strange.
Thanks

Hi @Ulanbek

I can reproduce the same double forward slash on our play demo instance, but there I can also still access the URL. Have you only had this error on a local installation?

I have checked with the team and they have (very) recently rewritten the function that does this, so it should be fixed in subsequent patches.

Kind regards,
Phil

Phil,
The Audit - DHIS2 docs for 2.35 has stuff like
“data bytea Compressed Json string of the Audit Entity. It is currently in byte array format and not human-readable, but a mechanism will be introduce in 2.34.1”.

Does that mean this mechanism to read the bytea data has not yet been introduced?

Regards
Calle

Well spotted @Calle_Hedberg. I’ll clarify with the team and we will update that table.

In my case we were using container based LXC system for postgres, application instance & a proxy instance. It did not workout for us. We did try multiple combinations of configurations.

Anyways after moving to a flat installation 2.35, it works beautifully.

Hi @Junaid_Mufti,

Great to hear that it is working fine for you now!

Can you confirm if you are also able to operate 2.35.0 with the default audit service enabled? (i.e. it sounds like some limitation of the containers may have been causing the issue?).

Thanks and kind regards,
Phil

Yes audit service is enabled and its running pretty well so far.

Thank you so much for all the help here.

Hi Junaid

It seems unlikely that this is a container specific issue. To my knowledge the artemis is only communicating internally within DHIS2 on a tcp localhost socket. If, as it sounds, it is working for a while and then failing, this seems much more likely to be a resource leak problem (eg file descriptors). This would cause failure in container before it would on “flat” machine so we need to investigate a little urgently as to what is happening rather than assume the problem is solved. I’ll follow up with you separately.

Cheers
Bob