Open Exchange App Dashboard IRIS History Monitor

Hi, everyone!

I want to share a personal project that started with a simple request at work: 

Is it's possible to know how many Caché licenses we are using? 

Reading other articles here in the community, I found this excellent article by  David Loveluck 

APM - Using the Caché History Monitor

So, using David's article, I started using Caché History Monitor and to show all that information. 

When facing the question: Which cool tech should I use? 

My decision was CSP, simple and powerful, so the customer that I'm working for can realize that Caché it's more than just MUMPS/Terminal.

After creating the pages to show the history of Licensing, Database Growth, and CSP Sessions, I've decided to create a new design for the System Dashboard and Processes page.

Everything works great with my Caché instance.

However, how about IRIS? 

Following the article by Evgeny Shvarov

Using Docker with your InterSystems IRIS development repository

I dockerized and put the code on GitHub, so now, everyone can try with a few steps.

How to Run

To start coding with this repo, you do the following:

1. Clone/git pull the repo into any local directory
$ git clone

2. Open the terminal in this directory and run:
$ docker-compose build

3. Run the IRIS container with your project:
$ docker-compose up -d

How to test

Open the browser and go

Ex.: http://localhost:52773/csp/irismonitor/dashboard.csp

The username _SYSTEM can run the dashboard and the other features.

System Dashboard

System Dashboard shows the following items:


  • Licensing
  • System Time
  • Application Errors
  • Cache Processes
  • CSP Sessions
  • Lock Table
  • Journal Space
  • Journal Status
  • ECP AppServer
  • ECP DataServer
  • Write Daemon
  • Cache Efficiency
  • Serious Alerts

The line charts widgets plot a point every 5 seconds


 System Menu


System Processes

Processes Filters

Use different filters to achieve the result that you need. You can also use Multiple Sorts, pressing Shift + clicking on the column header. And even export the data grid to Excel!


History Monitor

The History Monitor for CSP Sessions and Licensing shows the information between three sections:

  • Every 5 Minutes
  • Daily
  • Hourly

Database Growth only shows Daily information.

The history pages share the features below:

Date Range Picker

The default value is "Last 7 Days."

Chart / Data Table

On the top right of every each section, there are two buttons (Chart/Data Table)

The Data Table shows the information that creates the chart, and you can also download in Excel format.

The excel shows the same format, content, and group defined in the CSP.


All charts have the Zoom option to visualize the information with more details.


Average and Maximum

For the Sections Hourly and Daily, the charts show Average and Maximum values.






This looks really good!

Any idea how I'd be able to use this in a non-docker environment?

@Julian Matthews the original project was in a non-docker environment.

But my suggestion is to put the folder Csp  in the same path that you choose in: <Default Name="APPPATH" Dir="/opt/app/" /> 

Change the /opt/app/ to whatever directory you want.

Next, you can use the class Installer.cls to create the Database, Namespace, and Web Application.

So, run the following lines of the Dockerfile in the Caché Terminal: 

Do $system.OBJ.Load("/opt/app/Installer.cls","ck")

Set sc = ##class(App.Installer).setup(,3)

Or you can also go totally Old School and create everything manually and import all classes and CSP files smiley

Let me know if you want a Studio Project in an XML format. So you can import CLS and CSP files easily using the Studio.

I did consider going the oldschool route, but your guidance above worked perfectly for me smiley

Hi Henrique!

Have a question: do you really need to install MSGViewer to a separate namespace?

I mean - do you really need two namespaces to work with your monitoring?

Hi @Evgeny Shvarov 

Discussing the system monitoring with @Renan Lourenco He gave me the idea for a new Message Viewer.

So I decided to try in a different Namespace using Interoperability to use Manifest features a little more :) 

Should I make it simpler to avoid people getting confused?

Everything is perfect with your solution!

I was going to publish it on Package Manager which installs packages only in one namespace - the namespace where you call:

zpm:NAMESPACE>install package-name