Question Oliver Wilms · Jun 23, 2024

I have JSON object which contains file references. I need to replace the file reference with base64 encoded file which is up to 10MB.

I tried the following but it did not work as expected:

do dynObj.%Set("data",pStream.ReadLineIntoStream(.tSC))

9
0 230
Question Oliver Wilms · Jun 23, 2024

I am working on JSON and want to be prepared to handle large Objects. I try this code:

ClassMethod MaxLen() As %Status

{

    set longStr=""

    for i=1:1:$SYSTEM.SYS.MaxLocalLength() { set longStr = longStr_"x" }

    write "Maximum string length = "_$LENGTH(longStr)

    ;

    set longObject = {"a":(longStr),"b":(longStr)}

    set file=##class(%File).%New("/tmp/longObjectFile.txt")

    do file.Open("WSN")

    do longObject.%ToJSON(file)

    do file.Close()

    ;

    do file.Open("RS")

    set newObject = {}.%FromJSONFile(file)

    write !,"Property newObject.a is "_$LENGTH(newObject.a)_" characters long.

5
0 378
Article Oliver Wilms · Feb 3, 2024 2m read

The architect of the JSON schema (MS) asked if IRIS could  perform schema validation. I asked on Discord objectscript channel how we could validate a Dynamic Object against a JSON schema. Dmitry Maslennikov replied that probably the easiest way would be to use python, but it would require converting ObjectScript JSON to Python dict.

I refer to this as my first real use case for Embedded Python, because previous examples I had tried I could have implemented in ObjectScript just as easily as in Python.

0
1 313
Article Oliver Wilms · Jan 31, 2024 2m read

An App that converts HL7 messages to JSON objects. About a year ago I started a GitHub repo for collecting stuff related to HL7. Recently my team added an HL7 interface to our Interoperability Production and we were asked to persist HL7 messages. We created a Kafka topic to receive HL7 messages. We use Kafka Bridges to send messages to Kafka topics. Kafka messages are sent to the Kafka Bridge in JSON format.

I contemplated how to transform HL7 messages to JSON. HL7 message Raw Content property provides the HL7 message in String format.

0
0 284
Question Oliver Wilms · Jan 11, 2024

Hello, I tried to convert HL7 message to JSON in a business process and I got errors. Has anybody converted HL7 to JSON? Are certain characters not allowed in JSON?

I just tried to set a property to quote request.RAWContent and quote. I will try to put example in GitHub and share here later.

5
0 1275
Question Oliver Wilms · Jan 10, 2024

Hello, we deploy IRIScluster using IKO on Red Hat OpenShift deployed in AWS. For DR, we have another AWS region on stand by. We do daily backups. I run a standalone IRIS in the second region. I want to add it as async member to the mirror to have some essential data available in the standby region. Is this possible?

5
0 297
Article Oliver Wilms · Nov 28, 2023 2m read

My newest app includes a java routine to read data from Excel 95, 97, 2000, XP, and 2003 workbooks and write the data into IRIS globals using Java Native API library.

If you have Git and Docker installed, clone/git pull the repo into any local directory

$ git clone https://github.com/oliverwilms/excel-java-iris.git

Open the terminal in this directory and run:

$ docker-compose up -d

Execute java class IRISNative

$ docker-compose exec -it iris java IRISNative

Press Enter to accept the default /opt/irisapp/excel/money.xls.

>>> Input File [/opt/irisapp/excel/money.
1
0 295
Discussion Oliver Wilms · Jun 29, 2023

I want to deploy IRIS apps running in containers in Kubernetes with user accounts configured.

I have a %ZSTART routine which looks for an XML file with Users export data and if the %ZSTART routine finds this file, it imports it. This Users export data can be obtained by running a class method.

I have defined a task which can be scheduled or run on demand. This tasks imports user data from an XM file.

In Kubernetes I can provide a ConfigMap to stage the Users data for the %ZSTART routine.

2
0 258
Article Oliver Wilms · Apr 21, 2023 2m read

We have a rule to disable a user account if they have not logged in for a certain number of days. IRIS Audit database logs many events such as login failures for example. It can be configured to log successful logins as well. We have IRIS clusters with many IRIS instances. I like to run queries against audit data from ALL IRIS instances and identify user accounts which have not logged into ANY IRIS instance.

1
0 243
Article Oliver Wilms · Apr 21, 2023 1m read

Within IRIS I defined a task to export audit data every day.

I provide some sample files in my GitHub repo.

I wrote ObjectScript code to import all files into otw.audit.consolidator class.

I want to use Python SQLAlchemy, pandas and sqlalchemy-iris (created by Dmitry Maslenikov) to copy consolidated audit data from my consolidator class in my IRIS container to my InterSystems Cloud SQL deployment.

I updated my Dockerfile to pip3 install sqlalchemy-iris and pandas (dataframes).

docker-compose build –no-cache in my personal AWS took 700 seconds.

1
0 239
Article Oliver Wilms · Apr 18, 2023 2m read

I have Audit consolidator deployed in AWS where I scheduled Audit Export task to run daily.

Xml files are stored in mgr directory because the task runs in %SYS namespace.

/usr/irissys/mgr

-rwxrw-r--. 1 irisowner irisowner 249080 Apr  9 21:48 8eedba82d0ee_2023-04-09_auditexport.xml*

-rwxrw-r--. 1 irisowner irisowner  19487 Apr 10 00:02 8eedba82d0ee_2023-04-10_auditexport.xml*

-rwxrw-r--. 1 irisowner irisowner  23554 Apr 11 00:02 8eedba82d0ee_2023-04-11_auditexport.xml*

-rwxrw-r--. 1 irisowner irisowner  27624 Apr 12 00:02 8eedba82d0ee_2023-04-12_auditexport.xml*

-rwxrw-r--.

0
0 170
Question Oliver Wilms · Apr 13, 2023

I am trying to read binary data from HTTP Request Stream and build a Dynamic Object with multiple properties. I am getting MAXSTRING error with this code:

 Set dynObject1 = ##class(%DynamicObject).%New()
 Set dynObject1.OriginalFilename = $P($P(request.HTTPHeaders.GetAt("RawParams"),"&",2),"=",2)
 Set dynObject1.SiteId = $P($P(request.HTTPHeaders.GetAt("RawParams"),"&",1),"=",2)
 For {
   Set len = 1000000
   Set tRead = request.Stream.Read(.len,.sc)
   Set ^TESTutil($INCREMENT(^TESTutil),"len") = len
   Set ^TESTutil($INCREMENT(^TESTutil),"sc") = $Get(sc)
   If (len < 1) Quit }
   Set dynObject1.

5
0 778
Article Oliver Wilms · Apr 7, 2023 2m read

This week I was able to demo a proof of concept for our FMS interface on traffic cop architecture to my team. We are working on modernizing an Interoperability production running on mirrored Health Connect instances. We deploy IRIS workloads on Red Hat OpenShift Container Platform using InterSystems Kubernetes Operator (IKO). We can define any number of replicas for the compute stateful set where each compute pod runs our Interoperability production. We introduced Horizontal Pod Autoscaler (HPA) to scale up the number of compute pods based on memory or CPU utilization.

0
0 472
Article Oliver Wilms · Apr 4, 2023 6m read

IRIS configurations and user accounts contain various data elements that need to be tracked, and many people struggle to copy or sync those system configurations and user accounts between IRIS instances. So how can this process be simplified?

In software engineering, CI/CD or CICD is the set of combined practices of continuous integration (CI) and (more often) continuous delivery or (less often) continuous deployment (CD). Can CI/CD eliminate all our struggles?

I work in a team which develops and deploys IRIS clusters. We run IRIS in containers on Red Hat OpenShift container platform.

1
2 832
Question Oliver Wilms · Mar 21, 2023

Hello, I want to show a fellow DC member how to convert JSON file into HL7 message. I personally do not work with HL7. I set up a production with EnsLib.File.PassthroughService. It passes Ens.StreamContainer to BPL process. I call a DTL to transform StreamContainer to HL7 message. I run into an error:

ERROR <Ens>ErrBPTerminated: Terminating BP JSON2HL7 # due to error: ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''
> ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''

The code is in this GitHub repo:

https://github.com/oliverwilms/HL7

2
0 848
Article Oliver Wilms · Mar 19, 2023 5m read

csp-log-tutorial

Prerequisites

Make sure you have git installed.

I created a git folder inside the IRIS mgr directory. I right clicked the git folder and chose Git Bash Here from the context menu.

git clone https://github.com/oliverwilms/csp-log-tutorial.git

Clone my csp-log-tutorial GitHub repo if you like to try it out for yourself.

I will describe in this tutorial how I try to use access.log and CSP.log files in webgateway pods to track requests and responses.

My team works with IRIS containers running on Red Hat OpenShift Container Platform (Kubernetes) in AWS.

1
0 421
Article Oliver Wilms · Feb 5, 2023 2m read

As my entry into InterSystems Developer Tools Contest happening now I have been working on an alternative to the Console Log Viewer web page provided as part of InterSystems IRIS Management Portal. Console log is a file called messages.log. It is what InterSystems support asks me to send to them when I open a support ticket. Working on IRIS containers deployed in the cloud it is not straight forward to copy the messages.log file to a place where I can attach it to an email. Iris-log-viewer app provides a Download link to download messages.log from any browser.

0
1 242
Question Oliver Wilms · Feb 5, 2023

I copied a 5 MB messages.log file to AWS where I have iris-log-viewer app deployed. I ran the test to see how it takes in IRIS code to import the lines into a persistent table:

IRISAPP>set m5mb="/home/irisowner/irisdev/messages.old_20221231.log"

IRISAPP>

IRISAPP>do ##class(otw.log.irislogreader).Test1(m5mb)
Test1 begins at 02/05/2023 12:49:30
ReadLogLines
/home/irisowner/irisdev/messages.old_20221231.log
Open
Test1 ends at 02/05/2023 12:49:34
Test1 execution time: 3.500789

select count(*) from otw_log.Log

63239

It took 3.5 seconds and I had 63239 lines in the table.

7
0 344
Article Oliver Wilms · Feb 4, 2023 1m read

I developed iris-log-viewer on a work laptop using an older version of IRIS. My messages.log file has nearly 10k lines. I noticed it takes a couple of seconds to read messages.log file line by line, import each line into a persistent class, and display messages on my screen. I wonder if Python can speed up the process.

I developed EmbeddedPython class. Initially I imported a python script file to read messages.log file in Python. Later I figured out how to write a Python classMethod where I invoke IRIS classMethod to import one line at a time while reading messages.log.

0
0 303
Article Oliver Wilms · Feb 2, 2023 1m read

Messages.log file contains lots of useful information about IRIS. Sometimes the file gets big, and it is not easy to get to the data I am interested to review. It would be nice to jump to a specific date and time we suspect a problem may have started.

Whenever I need support from InterSystems, WRC will ask to send them messages.log file. Dependent on where IRIS is deployed, it may be cumbersome to obtain messages.log file for sending it to InterSystems.

My team works on deploying IRIS containers in Kubernetes in the cloud.

1
0 320
Question Oliver Wilms · Jan 6, 2023

Has anybody tried to write custom code to empty out queues when Interoperability shuts down? We run IRIS in Kubernetes cluster and we have compute pods scaling up and down. We have Message Bank operation to keep all messages in one place. We want to see all messages in Message Bank.

3
0 377
Article Oliver Wilms · Dec 1, 2022 1m read

I participated in InterSystems Women’s Health FHIR contest, because I loved the challenge to learn a new-to-me technology. I wanted to develop an app that receives data from a mobile device like my Fitbit or a Smart Watch. I did not get access to such data except when I downloaded a spreadsheet (CSV file) showing my daily steps and sleep data. I saw in iris-fhir-template it imported some patient data to a FHIR server. I figured out how to use a Data Transformation to transform a record from a delimited file into FHIR data which I could store into the FHIR server.

1
0 411
Question Oliver Wilms · Nov 23, 2022

My team works on implementing an Interoperability solution utilizing InterSystems Kubernetes Operator on Red Hat OpenShift container platform. 

We are trying to determine how many messages we can process in any given time. We have a Feeder app running in 10 containers sending 50k messages each to a load balancer all beginning at the same time.

Messages are received via HTTPS protocol by webgateway containers. 

Interoperability production runs in compute pods with persistent data, journals, and WIJ volumes.

We implemented Horizontal Pod Autoscaler to scale compute pods when CPU utilization is high.

1
1 522
Article Oliver Wilms · Sep 16, 2022 1m read

My team is working on redesigning and implementing an Ensemble production on Red Hat OpenShift Container Platform. We had to learn about Kubernetes and IKO.

We have webgateway pods that route incoming web traffic to compute pods where the Interoperability production is running.

Recently we had trouble while testing a SOAP interface. It’s a Generic SOAP Service passing a SOAP message to a Generic SOAP Operation. Sounds simple enough.

I got 404 response when we sent from Postman requests to the load balancer for our IRIS cluster. I could see the request in webgateway Access Log.

0
0 273
Article Oliver Wilms · Sep 11, 2022 1m read

I deployed online demo here:

https://production-monitor.demo.community.intersystems.com/csp/user/EnsPortal.ProductionConfig.zen?PRODUCTION=dc.Demo.Production#

I updated several settings (File paths and URLs) and I switched Dispatch class to dc.rest.GenericService.

I resent the message from File Service. I saw messages received by both Auth and Api services.

Api process does not (yet) return the desired response. More to come ...

0
0 335
Article Oliver Wilms · Sep 11, 2022 2m read

I cloned iris-interoperability-template for my app interoperability-test. I wanted to develop an app to test interfaces in Interoperability productions.

I have never run a container in Docker Desktop. I always run containers in AWS. My first problem was that I got an error when I tried to build the image using docker-compose. The error was about BuildKit. I worked around the error by building the image with a docker build command relying on DOCKER_BUILDKIT environment variable:

DOCKER_BUILDKIT=1 docker build --progress=plain --no-cache --tag testint .

Next I updated docker-compose.

1
1 428