Thank you so much for your recognition (!)
- Log in to post comments
Thank you so much for your recognition (!)
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
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"
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.
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
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.
I would day that the bot answer is not relevant to what you asked.
there is no directive to do looping in macro definitions, however, you could look at a directive called #execute where you should be able to execute any valid COS code, but there are some limitations:
#execute | ObjectScript Reference | InterSystems IRIS Data Platform 2025.2
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!
The is a core process called GARCOL which is used to handle large global kills.
Securing Caché, Ensemble, And Operating System Resources | Caché & Ensemble 2018.1.0-2018.1.3
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.
aha I got it. then look at class: EnsPortal.SVG.ProductionConfigurationLegend
look at Ens_Config.Item there is a property called "Enabled"
See those articles:
Accessing the IRIS Terminal: A Comprehensive Guide for Visual Studio Code
How to run ObjectScript commands in the VS Code integrated terminal |
and documentation:
Run and Debug Your ObjectScript Code | Use Visual Studio Code as a Development Environment for InterSystems Applications | InterSystems Components and Tools
try to change:
<Route Url="/{id:[0-9]+}" Method="GET" Call="NewsGetItem"/>
try to open developer tools (shift-ctrl-P) then search for "developer tools" - check in console if there are any errors
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
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.
in retrieval code use: Set {*} = ...
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).
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
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).
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)
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.
You can call directly to: Do BACK^%ETN it will save the $ZE + the stack. (LOG is also calling this one)
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
try $GET(%Request.Data("action",1))
Don't forget that you need to have the <input...> in a <form...> ... </form>
You need to map static files in IIS to the CSPms (for default website).png)
Look at XData css in class: WebTerminal.StaticContent
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
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