New post

Find

Question
· Sep 1, 2020

Bearer token in a HealthConnect Production world - Looking for best practise

Hi all,

a HealthConnect customer of ours came across with a question to use an external service via REST and OpenID within one of his HealthConnect  (2020.1) productions. The overal idea is to send data to the external system after receiving a baerer token to use for the communication between HealthConnect and this system.

Since I´ve never done such thing before I have an idea to solve this task but looking for a best practise way to do so. Using the RESt-Api of the external system is not the question here. More interesting is the mechanismn to receive a new bearer token and use it in the communication with the external system. From my perspective HealthConnect acts as a client for the remote system. That´s why I thought it would be the correct way to configure a OAuth2 client for authentication and to receive the bearer token fropm there. From within the customers production I would create some kind of a REST Operation and use code to authenticate/receive the bearer token via OAuth2 and use the token in further communication with the external system. Would this be the way here for my scenario? I´ve had a look in the documentation but couldn´t find anything fitting for my problem.

Thats why my question is - are there any best practises to accomplish my scenario? Or is my approach to do so completly wrong? Any ideas are highly appreciated.

Best regards,

Sebastian

4 Comments
Discussion (4)2
Log in or sign up to continue
Article
· Aug 28, 2020 2m read

Effective use of Collection Indexing and Querying Collections through SQL

Triggered by a question placed by @Kurro Lopez  recently 
I took a closer look at the indexing of collections.
My simple test setup is a serial class and a persistent class with a list of this serial.

Class rcc.IC.serItem Extends (%SerialObject, %Populate)
{ Property Subject As %String [ Required ]; 
  Property Change As %TimeStamp [ Required ]; 
  Property Color As %String(COLLATION = "EXACT", 
     VALUELIST = ",red,white,blue,yellow,black,unknown") [ Required ];
}
Class rcc.IC.ItemList Extends (%Persistent, %Populate) [ Final ]
{ Property Company As %String [ Required ]; 
  Property Region As list Of %String(COLLATION = "EXACT", POPSPEC = ":4",
     VALUELIST = ",US,CD,MX,EU,JP,AU,ZA") [ Required ];
  Property Items As list Of rcc.IC.serItem(POPSPEC = ":4") [ Required ];
 
  Index xitm On Items(ELEMENTS);
  Index ycol On Items(ELEMENTS).Color;
}

Related Docs
Index xitm holds the complete serial element. !!
With some records generated by %Populate utility  I could place this query

Select ID,Company from rcc_IC.ItemList
Where FOR SOME %ELEMENT(rcc_IC.ItemList.Items) ($list(%Value,3) in ('blue','yellow'))

This works OK but disassembling every serial object wasn't very promising for my performance considerations.
So I followed a hit from @Dan Pasco  recently seen in this forum a few days ago,
and expecting better performance I added 

Index ycol On Items(ELEMENTS).Color;

The result was rather disappointing.
No improvement.
Investigation of the query plan showed that the new index was just ignored.


 After some trials, this query satisfied my needs

Select ID,Company 
from %IGNOREINDEX xitm rcc_IC.ItemList
Where FOR SOME %ELEMENT(rcc_IC.ItemList.Items) ('blue,yellow' [ %Value )

with

During the investigation with many variations I found this rule:

IF you have more than one ELEMENT index on the same property the 
query generator always takes the alphabetic first index it finds.
And you have to explicitly exclude a non-fitting index.

As  there is no hint in the documentation I would like to know:

Is this observation correct or is it just an accidental effect in my case?

As ELEMENT index was designed for List of %String  I understand that  having
more than one index was just an unlikely case at the time of design.

GitHub

5 Comments
Discussion (5)0
Log in or sign up to continue
InterSystems Official
· Aug 27, 2020

August 27, 2020 – Alert: Possible Resource Starvation due to Orphaned Processes

InterSystems has corrected a defect that can cause a build-up of orphaned processes consuming system resources. In extreme cases, this can cause a system to become unresponsive.

This defect affects the following versions:

  • Caché and Ensemble 2018.1.4
  • InterSystems IRIS and InterSystems IRIS for Health 2019.4, 2020.1, and 2020.2
  • HealthShare Health Connect (HSAP) 15.032 built on Ensemble 2018.1.4
  • HealthShare Health Connect 2020.1

No other InterSystems product versions are affected by this issue.  Specifically, earlier versions of Caché and Ensemble, Health Connect 2019.1 and 2019.1.1 and all other HealthShare Health Connect (HSAP) versions, and all HealthShare Product versions through HealthShare 2020.1, including Unified Care Record, Information Exchange, Care Community, Clinical Viewer, Health Insight, Patient Index, Personal Community and Provider Directory, are not affected by this issue.

 

The defect results in a failure to properly shut down a %SYS.cspServer3 process when a web server connection is closed.  Over time, these orphaned processes accumulate, consuming resources (CPU, memory, etc.) and leading to an unresponsive system.  Depending on activity from the web server, the accumulation can be quite rapid.

These %SYS.cspServer3 processes are used for WebSockets and Gateway Registry methods, and they are created regardless of whether an application uses those features.

This defect affects any web servers connecting to affected versions (including the private (non-external use) Apache web server included with the product).

The correction for this defect is identified as SDK116. It will be included in all future releases of InterSystems products and is available by requesting an Ad hoc distribution from the InterSystems Worldwide Response Center

(WRC).

 

For applications that are not using WebSockets or the Gateway Registry, this problem can be resolved by preventing the Gateway from creating these connections, by following the steps listed below. If your application uses WebSockets or calls Gateway Registry methods, you cannot use this workaround.

To avoid this problem, follow these steps:

  1. Add the following line to the [System] section of the Gateway configuration file (CSP.ini):

REGISTRY_METHODS=Disabled

  1. Restart all web servers for the change to take effect.

This procedure should be done on each web server that connects to an affected instance. Existing orphaned processes will remain until the instance restarts, but no new processes will spawn after restarting the web server after this change.

If you have any questions regarding this alert, please contact the Worldwide Response Center.

1 Comment
Discussion (1)0
Log in or sign up to continue
Article
· Aug 27, 2020 2m read

Using FHIR to Interact with Natural Language

Whats NLP Stands For?

NLP stands for Natural Language Processing which is a field of Artificial Intelligence with a lot of complexity and
techniques to in short words "understand what are you talking about".

And FHIR is...???

FHIR stands for Fast Healthcare Interoperability Resources and is a standard to data structures for healthcare. There are
some good articles here explainig better how FHIR interact with Intersystems IRIS.

2 Comments
Discussion (2)1
Log in or sign up to continue
InterSystems Official
· Aug 21, 2020

Introducing InterSystems Container Registry

I am pleased to announce the availability of InterSystems Container Registry. This provides a new distribution channel for customers to access container-based releases and previews. All Community Edition images are available in a public repository with no login required. All full released images (IRIS, IRIS for Health, Health Connect, System Alerting and Monitoring, InterSystems Cloud Manager) and utility images (such as arbiter, Web Gateway, and PasswordHash) require a login token, generated from your WRC account credentials.

The WRC Distributions site will continue to provide released images as tarballs for the time being.  However, you can now configure your CI/CD pipelines to ‘docker pull’ images directly from InterSystems Container Registry.

The registry can be accessed at https://containers.intersystems.com. Please refer below or to the documentation (Using the InterSystems Container Registry) for full usage instructions. If you run into any issue or have any feedback to share please let us know in the comments below, or contact support@intersystems.com.

--------------------------------------------------------------

Using the InterSystems Container Registry

This document provides instructions for using InterSystems Container Registry (ICR), located at containers.intersystems.com.

Images in the ICR can be downloaded with the docker pull command, for example:

docker pull containers.intersystems.com/intersystems/iris-community:2020.4.0.547.0

 

For a full listing of all available images, please refer to Container Images Available from InterSystems
 

This document contains the following sections:

  • Authenticating to the ICR
  • Listing the ICR Inventory

 

Authenticating to the ICR

To log into the ICR, take the following steps:

  1. Load https://containers.intersystems.com/ in your browser and log in with your InterSystems/WRC credentials.
  2. Retrieve your Docker login token, or the full login command.
  3. In your Docker interface (for example, your PowerShell window or Linux command line), authenticate to the ICR using the provided credentials. You can do this by copying and pasting the full docker login command displayed, for example:
docker login -u="bbinstoc" -p="provided_password" containers.intersystems.com

For security reasons, however, you may want to instead enter the command docker login containers.intersystems.com, then enter your username at the Username prompt and paste your password into the Password: prompt.

Note: If you are logged into another Docker registry, the docker login command may result in an error; log out of the other registry before logging into containers.intersystems.com.

  1. You can now pull images from the ICR, for example:
docker pull containers.intersystems.com/intersystems/iris:2020.4.0.547.0

Listing the ICR Inventory

APIs are available to list images and tags in a Docker registry. An example of an open source third-party utility that can be used to list a registry’s inventory is docker-ls, available at https://github.com/mayflower/docker-ls.

There are several ways to obtain this utility. You can:

  • Download precompiled docker-ls binaries for a variety of platforms.
  • Install the utility directly on some platforms, for example on Linux systems with the command
sudo snap install docker-ls
  • Pull and run the image carinadigital/docker-ls:latest on Linux platforms to install the utility, for example:
docker run --rm carinadigital/docker-ls:latest

Once docker-ls is installed, you can use the following command to list the repositories in the ICR:

docker-ls repositories --registry https://containers.intersystems.com --user username --password password

Note:    Use the --interactive-password option to be prompted for the password rather than including it on the command line.

To list only the publicly available images, provide empty strings ("") as arguments to the --user and --password options, for example, the following lists only the tags of public InterSystems IRIS for Health images:

docker-ls tags --registry https://containers.intersystems.com --user "" --password "" intersystems/irishealth-community

If you wish to see the full list of non-public images, you will need to provide your username and password to this utility regardless of whether you are logged into containers.intersystems.com.

Further examples are available at https://github.com/mayflower/docker-ls

14 Comments
Discussion (14)2
Log in or sign up to continue