to feed any monitoring system best is to use: /api/monitor/metrics
if you enable interoperability monitoring, you should have: "iris_interop_hosts" which will have "status" (ok, Inactive etc.) per any host in any production.
you may also look into the property "Enabled" in class: Ens_Config.Item
if this is not enough, and you need your own code, than do a "user defined metric" than can be added to the /api/monitor/metrics results

Yaron Munz · Dec 22, 2025 go to post

when you have 2 applications, with the same namespace, and difference path you need to set "Package Name" to some (different) values for both applications. When "Package Name" is not set, the default prefix is "csp"

Yaron Munz · Nov 14, 2025 go to post

As InterSystems Technology is not an open source, it is not fair, in my opinion to compare the community open-source library of tools and examples to others (e.g. Linux, Apache etc.) since its not possible to use them without a valid license of a product (IRIS, Cache). As such its InterSystems motivation and also a rational should be to support this library, similar to their (massive) support for the community.

Yaron Munz · Nov 6, 2025 go to post

Norman,
If terminal is ok for you, but studio isn't, maybe you should try the VSCODE Lite terminal.

I'm using: IRIS for Windows (x86-64) 2024.1.4 (Build 516_1U) Sat May 31 2025 13:15:40 EDT
I get the same in Terminal (Telnet) and also in VS-Code Lite terminal:
MSCEME>write $ascii("♥") 
9829
 

Yaron Munz · Oct 28, 2025 go to post

HTTP 401 means "Unauthorized" check that the web application /terminal has the correct credentials and correct authentication methods (password, LDAP etc.)
(the /terminalsocket should be always unauthenticated, its the default)
to help you resolve this, you may use auditing, to see if there is a "login failure" when you try to access.

Yaron Munz · Oct 22, 2025 go to post

for sure direct global access, especially looping on indexes is faster than SQL. It seems that the index global you used: ^PatientD("Date",FromDate)) should be: ^PatientI("Date",FromDate)) 

Using queue manager (for each "FromDate") will do this in parallel which will speed things much more!

Yaron Munz · Sep 23, 2025 go to post

I would consider, replacing the lock + and lock - with setting/killing a (temporary) global, which can be mapped to IRISTEMP for better performance, and avoid journaling. It might be easy to implement such in parallel to the current lock mechanism (add those while keep the old in place) then migrate the management page in the application to loop on this global instead of the entries in lock table. The new approach can also have the timestamp for the lock and then have a function that will auto-retain locks (kill) based on a time interval.

Yaron Munz · Sep 17, 2025 go to post

aha I got it. then look at class:  EnsPortal.SVG.ProductionConfigurationLegend

Yaron Munz · Aug 22, 2025 go to post

try to change:
<Route Url="/{id:[0-9]+}" Method="GET" Call="NewsGetItem"/>

Yaron Munz · Aug 22, 2025 go to post

try to open developer tools (shift-ctrl-P) then search for "developer tools" - check in console if there are any errors 

Yaron Munz · Aug 21, 2025 go to post

on any class that extends  Ens.Request or Ens.Response you may use:

Parameter COMPRESS = 2;
Property JSON As %Stream.GblChrCompress;
On large messages (or in a system with billions of messages per day) the save on storge is huge!
- Visual trace working fine
- You may search within the compressed property (but it will take time)
- Property is visible in SQL queries against Ens.MessageHeader / Ens.MessageBody 
- The "out of the box" purge working fine

Yaron Munz · Aug 21, 2025 go to post

instead of having each property stored with its name as a subscript, (e.g. ^Student(1,"Name") = "Alice" / ^Student(1,"Age") = 29 etc.)
its much better to use the same format the class compiler is storing data on the D global:
^Student(1)=$LB("Alice",29 ... )

when having globals with millions (or billions) of records it will have a huge impact on performance and storage footprint.

Yaron Munz · Jul 29, 2025 go to post

There are 2 options:

1. access the raw code for classes is stored in ^oddDEF global. all class methods are store in this format: ^oddDEF(className,"m",methodName,11)=sequence
where the sequence is 1,2,3...
If you are going to manually manipulate this don't forget to compile: do $system.OBJ.Compile("className","ckr")

2. using SQL:
SELECT ID,Name,SequenceNumber FROM %Dictionary.MethodDefinition where parent='className' order by SequenceNumber
I'm not sure if you need to compile after an UPDATE to this table (but its easy test).

Yaron Munz · Jul 28, 2025 go to post

1. Usually this indicates that the IRIS is sending an incomplete certificate chain
2. The fact that you can access IRIS SMP has nothing to do with the outgoing HTTPS request, which I assume you do with %Net.HttpRequest and using the SSL property that match the SSL config
3. I recommend accessing the  https://myserver.com/api/gap/... from a browser and to check the certificate chain. Usually you will see 3 certificates (root CA, intermediate authority, the certificate itself) - you should put all those certificates (one after the other) in the PEM file that is configured in the SSL config in IRIS. Depending on the CA (which might be public, or company self-generated) you need to ask your sys admin 

Yaron Munz · Jul 25, 2025 go to post

Hello Malcolm,

You should consider using a VIP (Virtual IP) to let users connect to the current primary regardless of a mirror switch.

Usually, the arbiter machine, does not require IRIS to be installed, only the ISCAgent service, but if you have IRIS there with a license server than you lose the HA for licensing (in case arbiter machine is down).

Yaron Munz · Jul 18, 2025 go to post

Very good article Ashok!

If someone is going to calculate age in a production system, one should divide by 365.25 (to take into consideration leap years)

Yaron Munz · Jul 10, 2025 go to post

As Alexey said, the issue could be with code, not ECP (as usually ECP is backward compatible)
Make sure that code on app. servers in not mapped (no routine, package mapping) to a remote DB (on database server) - all code should be local to app. server

If your 3 app. servers are identical (for HA, LB reasons) then if you can disable access to 1 app. server and still working with other 2 - it will give you an option to to the app. servers one by one without downtime.

Another issue to concern is cached queries - on such upgrades its good to have all cached queries "un-freeze" to make sure all are compiled.
 

Yaron Munz · Jul 10, 2025 go to post

You can call directly to: Do BACK^%ETN it will save the $ZE + the stack. (LOG is also calling this one)

Yaron Munz · Jul 9, 2025 go to post

add a debug to OnPreHTTP and check the ^%global
k ^%global S a="" F  s a=$O(%request.Data("")) Q:a=""  m ^%global(a)=%request.Data(a)

sometimes, better to check: $D(%request.Data("action",1)) and not $G

Yaron Munz · Jul 9, 2025 go to post

try $GET(%Request.Data("action",1))
Don't forget that you need to have the <input...> in a <form...> ... </form>

Yaron Munz · Jul 9, 2025 go to post

You need to map static files in IIS to the CSPms (for default website)

Yaron Munz · Jun 12, 2025 go to post

Hello Norman,

1. to build a sync mirror with the server, then you can "set no failover" on primary" and "play" withe the backup, you could take IRIS down in any time on the backup, it will re-sync when its up again

2. O/S defragmentation - either by O/S tool, or to copy the DB to a new clean disk

3. Internal defragmentation - there are some options:
A) to copy all data with GBLOCKCOPY to a new DB, with 1 process, to keep data as sequential as possible (will take a lot of time)
B) to use the internal defragmentation tool (will need 2 x space on that DB) then compact globals

4. In general, its a good practice to split indices to a different DB (and use mapping) since the data ("D" globals) are usually not getting so fragmented over time. This will also help on future defragmentation, compact globals, DB "shrink" and other maintenance on less volume 

Yaron Munz · Jun 12, 2025 go to post

Hello Alex,

I would suggest using MONLBL with all measures, to better understand any "bottlenecks" in code, memory issues or global access. In parallel, to monitor the VM to see if we hit CPU, disk I/O or memory thresholds there.
it might be that there are some "internal" functions that can be optimized or written definitely to speed up code.
I recommend that you open a WRC, since they have good tools to analyze almost every aspect of IRIS