New post

検索

Article
· Feb 13 1m read

Gerenciando corretamente o horário do sistema no meu container IRIS

Em um ambiente containerizado, você pode gerenciar o horário do seu container usando a variável TZ ou por meio dos arquivos /etc/timezone e /etc/localtime:

environment:
      - TZ=Europe/Paris
volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

Você pode encontrar exemplos completos aqui:

IRIS Community

IRISHealth_Community

IRIS production

IRISHealth production

Discussion (0)1
Log in or sign up to continue
Article
· Feb 13 2m read

Usando o InterSystems Lite Terminal a partir do Python

As versões recentes do IRIS já vêm com o Lite Terminal disponível no VSCode. Ele funciona como um servidor WebSocket, com comunicação via mensagens JSON. Aqui está como se conectar a ele a partir do Python:

import websocket
import argparse
import requests
import json


def terminal(host, port, namespace, username, password, command, secure):
    session = requests.Session()
    r = session.get(f"http{"s" if secure else ""}://{host}:{port}/api/atelier/", auth=(username, password))
    cookies = session.cookies.get_dict()
    ws = websocket.WebSocket()
    ws.connect(f"ws{"s" if secure else ""}://{host}:{port}/api/atelier/v8/%25SYS/terminal",
               cookie="; ".join(["%s=%s" % (i, j) for i, j in cookies.items()]))
    print(ws.recv())
    ws.send(json.dumps({"type": "config", "namespace": namespace, "rawMode": False}))
    print(ws.recv())
    ws.send(json.dumps({"type": "prompt", "input": command}))
    print(ws.recv())
    ws.close()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Connect to VSCode Terminal and execute a command')
    parser.add_argument('--username', default="_SYSTEM", help='InterSystems IRIS User')
    parser.add_argument('--password', default="SYS", help='Corresponding password')
    parser.add_argument('--host', default="localhost", help='IRIS Server')
    parser.add_argument('--port', default=52773, help='IRIS Web Server Port')
    parser.add_argument('--namespace', default="USER", help='IRIS Namespace')
    parser.add_argument('--command', default="w $zv", help='IRIS Command to execute')
    parser.add_argument('--secure', default=False, help='Use HTTPS/WSS')
    args = parser.parse_args()
    terminal(args.host, args.port, args.namespace, args.username, args.password, args.command, args.secure)

Ao executá-lo, será gerada a seguinte saída:

{"type":"init","protocol":1,"version":"IRIS for Windows (x86-64) 2025.1 (Build 223U) Tue Mar 11 2025 18:14:42 EDT"}
{"type":"prompt","text":"\u001b[1mUSER>\u001b[0m"}
{"type":"output","text":"IRIS for Windows (x86-64) 2025.1 (Build 223U) Tue Mar 11 2025 18:14:42 EDT"}

Para depurar a conexão, defina ^IRIS.Temp.Atelier("terminal") como 1; toda a comunicação será registrada nessa mesma global.

Discussion (0)1
Log in or sign up to continue
Article
· Feb 13 3m read

hc-export-editor: Fazendo alterações nas interfaces exportadas antes de implantar em produção

Você já precisou alterar um IP ou porta antes de implantar uma interface em produção? Precisou remover itens de uma exportação? Ou modificar valores em uma tabela de lookup antes de implantar? Já quis desativar uma interface antes da implantação? Ou ainda adicionar um comentário, categoria ou configuração de alerta a uma interface antes de enviá-la para produção?

Se você já precisou fazer qualquer alteração em uma interface ou tabela de lookup antes de implantar em produção, então o Export Editor é para você!

O Export Editor é uma aplicação web Python/WSGI que fornece uma maneira de editar exportações antes de implantá-las em uma produção do IRIS/Health Connect.

Esta ferramenta permite que você:

  • altere qualquer configuração em uma interface (seja um Business Service, Process ou Operation)
  • modifique qualquer valor em uma tabela de lookup
  • remova itens de uma exportação.

Exemplo de uso

Então, como usar o Export Editor? Acompanhe os passos a seguir para ver como você pode utilizar o Export Editor para migrar interfaces e tabelas de um ambiente de teste para um ambiente de produção, alterando os endereços IP configurados para apontar para um servidor de produção, ajustando as portas para as portas de produção, desativando as interfaces antes da implantação em produção e editando os dados das tabelas para os valores apropriados de produção.

Primeiro, você precisa gerar uma exportação a partir de uma Produção de Interoperabilidade, provavelmente do seu ambiente não produtivo.

Create an Export

Após adicionar todos os itens desejados à exportação (e remover quaisquer itens indesejados), salve o arquivo em um dos diretórios configurados para serem lidos pelo Export Editor.

Agora, você deverá conseguir abrir a exportação no Export Editor.

Após abrir a exportação, note que existem várias seções. Você pode ler sobre cada seção na documentação do projeto (veja o link abaixo). Por enquanto, vamos focar na seção "Interface Settings". Essa seção permite editar quaisquer propriedades de Services, Processes ou Operations incluídos na exportação. Por exemplo, podemos alterar a configuração FilePath do HL7FileService que exportamos de "/test-filesystem" para "/prod-filesystem".

Usando a caixa de filtro no canto superior direito da seção Interface Settings, podemos filtrar as configurações para mostrar apenas aquelas que contêm a palavra "server". Isso nos permite focar em configurações específicas de todas as interfaces de uma só vez. Vamos alterar os valores de "test-server" para "prod-server".

Da mesma forma, podemos usar o filtro para mostrar apenas as configurações de portas. Vamos alterar as portas para corresponder às portas de produção desejadas para essas operações (1111, 2222 e 3333 neste exemplo).

Vamos alterar todos os atributos "Enabled" das operações de "true" para "false":

Por fim, vamos modificar os valores da tabela "User.ExampleTable" para que façam referência a "prod" em vez de "test":

Agora, clique no botão "Generate Modified Export" (ou pressione "Enter" enquanto estiver em um dos campos editáveis) e salve a exportação modificada com o nome/local desejado. Lembre-se desse caminho, pois usaremos este arquivo para implantar nossas alterações em produção.

Agora, navegue até o seu ambiente de produção e abra "Interoperability > Manage > Deployment Changes > Deploy" para o seu namespace de produção:

Clique no botão "Open Local Deployment" no topo da página e selecione a exportação modificada que você salvou nos passos anteriores:

Verifique se a implantação inclui todos os itens desejados. Além disso, clique no botão "Select Target Production" no lado direito para selecionar o ambiente de produção desejado. Quando estiver pronto, clique no botão "Deploy" no topo para implantar em produção:

Você agora editou e implantou uma exportação com sucesso! Verifique se suas alterações foram aplicadas em produção (ou seja, se as operações foram desativadas e se os caminhos de arquivo, nomes de servidores, portas e valores das tabelas foram atualizados para os valores desejados).

Mais informações

Para mais informações sobre como instalar e usar o Export Editor, consulte o projeto hc-export-editor no Open Exchange.

Discussion (0)1
Log in or sign up to continue
Article
· Feb 13 3m read

Como gerenciar uma configuração do InterSystems API Manager em um pipeline de CI/CD?

A Kong fornece uma ferramenta open source de gerenciamento de configuração (escrita em Go), chamada decK (que significa Kong declarativo).

  • Verifique se o decK reconhece sua instalação do Kong Gateway por meio do comando deck gateway ping
deck gateway ping   
Successfully connected to Kong!
Kong version:  3.4.3.11

  • Exporte a configuração do Kong Gateway para um arquivo chamado "kong.yaml" por meio do comando deck gateway dump
deck gateway dump -o kong.yaml

  • Após modificar os endereços IP no arquivo kong.yaml, verifique as diferenças por meio do comando deck gateway diff  
deck gateway diff kong.yaml

updating service test-iris  {
   "connect_timeout": 60000,
   "enabled": true,
-  "host": "192.168.65.1",
+  "host": "172.24.156.176",
   "id": "8fc9849d-9e61-402d-bcad-c3e611808892",
   "name": "test-iris",
   "port": 9092,
   "protocol": "http",
   "read_timeout": 60000,
   "retries": 5,
   "write_timeout": 60000
 } updating service uct  {
   "connect_timeout": 60000,
   "enabled": true,
-  "host": "192.168.65.1",
+  "host": "172.24.156.176",
   "id": "96ad587e-8921-4d6c-acb7-3f7f7a7cc072",
   "name": "uct",
   "path": "/api/uct/",
   "port": 9092,
   "protocol": "http",
   "read_timeout": 60000,
   "retries": 5,
   "write_timeout": 60000
 } Summary:
  Created: 0
  Updated: 2
  Deleted: 0
deck gateway sync kong.yaml

updating service uct  {
   "connect_timeout": 60000,
   "enabled": true,
-  "host": "192.168.65.1",
+  "host": "172.24.156.176",
   "id": "96ad587e-8921-4d6c-acb7-3f7f7a7cc072",
   "name": "uct",
   "path": "/api/uct/",
   "port": 9092,
   "protocol": "http",
   "read_timeout": 60000,
   "retries": 5,
   "write_timeout": 60000
 } updating service test-iris  {
   "connect_timeout": 60000,
   "enabled": true,
-  "host": "192.168.65.1",
+  "host": "172.24.156.176",
   "id": "8fc9849d-9e61-402d-bcad-c3e611808892",
   "name": "test-iris",
   "port": 9092,
   "protocol": "http",
   "read_timeout": 60000,
   "retries": 5,
   "write_timeout": 60000
 } Summary:
  Created: 0
  Updated: 2
  Deleted: 0
deck gateway dump --workspace workspace1
deck gateway sync workspace1.yaml --workspace workspace1

Para mais informações:

https://docs.konghq.com/deck/get-started

https://docs.konghq.com/deck/reference/faq/

https://github.com/Kong/deck/blob/main/CHANGELOG.md/

Discussion (0)1
Log in or sign up to continue
Article
· Feb 13 2m read

Use InterSystems Lite Terminal from python

Recent versions of IRIS come with Lite Terminal available from VSCode. It's a websocket server, with JSON messaging. Here's how to connect to it from Python:

import websocket
import argparse
import requests
import json


def terminal(host, port, namespace, username, password, command, secure):
    session = requests.Session()
    r = session.get(f"http{"s" if secure else ""}://{host}:{port}/api/atelier/", auth=(username, password))
    cookies = session.cookies.get_dict()
    ws = websocket.WebSocket()
    ws.connect(f"ws{"s" if secure else ""}://{host}:{port}/api/atelier/v8/%25SYS/terminal",
               cookie="; ".join(["%s=%s" % (i, j) for i, j in cookies.items()]))
    print(ws.recv())
    ws.send(json.dumps({"type": "config", "namespace": namespace, "rawMode": False}))
    print(ws.recv())
    ws.send(json.dumps({"type": "prompt", "input": command}))
    print(ws.recv())
    ws.close()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Connect to VSCode Terminal and execute a command')
    parser.add_argument('--username', default="_SYSTEM", help='InterSystems IRIS User')
    parser.add_argument('--password', default="SYS", help='Corresponding password')
    parser.add_argument('--host', default="localhost", help='IRIS Server')
    parser.add_argument('--port', default=52773, help='IRIS Web Server Port')
    parser.add_argument('--namespace', default="USER", help='IRIS Namespace')
    parser.add_argument('--command', default="w $zv", help='IRIS Command to execute')
    parser.add_argument('--secure', default=False, help='Use HTTPS/WSS')
    args = parser.parse_args()
    terminal(args.host, args.port, args.namespace, args.username, args.password, args.command, args.secure)

Running it produces the following output:

{"type":"init","protocol":1,"version":"IRIS for Windows (x86-64) 2025.1 (Build 223U) Tue Mar 11 2025 18:14:42 EDT"}
{"type":"prompt","text":"\u001b[1mUSER>\u001b[0m"}
{"type":"output","text":"IRIS for Windows (x86-64) 2025.1 (Build 223U) Tue Mar 11 2025 18:14:42 EDT"}

To debug the connection set ^IRIS.Temp.Atelier("terminal") to 1, all communication would be logged to the same global.

Discussion (0)2
Log in or sign up to continue