Escrito por

Developer
Artigo Bruno Santos · 11 hr atrás 8m read

IRIS Configuration Manager - Uma extensão de navegador open-source para tornar a comparação entre diferentes instâncias de IRIS/Cache uma tarefa fácil!

O problema

Quantas vezes migramos uma instância do IRIS para outra máquina, talvez até para outra versão, e depois de alguns dias percebemos que esquecemos aquela configuração de SSL essencial para que um Business Operation funcione? Ou talvez uma credencial, ou até uma classe solitária em um pacote isolado?

A solução

A solução simples é fazer um checklist¹. Um checklist das entidades que precisamos mover. Porém, checklists simples em documentos do Word muitas vezes são esquecidos ou simplesmente ignorados. Existe um princípio básico de gestão que diz que, se você quer que as pessoas sigam processos, você pode:

  1. Forçá-las a fazê-lo monitorando suas ações;
  2. Bloquear sistematicamente uma atividade atrás de um processo (como usar pipelines para fazer deploy de código e exigir testes automatizados para aprovar um PR);
  3. Tornar o processo mais fácil e mais conveniente do que a ação manual. Assim, as pessoas vão querer usar o processo. (É aqui que estou tentando chegar)

Um script em Python teria sido igualmente fácil. Mas as pessoas podem esquecer onde está o script ou de onde baixá-lo. Novas versões teriam que ser baixadas novamente por todos que o utilizam. Uma classe ou tarefa no IRIS também parece ideal, até você perceber que às vezes está migrando para um servidor em outra rede, e uma instância simplesmente não consegue acessar a outra.

Por isso escolhi criar uma extensão de navegador. Uma vez instalada, ela está sempre a apenas um clique de distância, mesmo que você não a utilize por meses. As atualizações são instaladas automaticamente. Mesmo que você troque de navegador ou perca a extensão por qualquer motivo, a instalação pela loja também é apenas um clique. E considerando que você sempre precisará acessar o Portal de Administração de ambos os servidores (talvez nem ao mesmo tempo, caso precise trocar de VPN, por exemplo), a extensão também sempre conseguirá acessar ambos.

¹A solução mais complexa (e melhor) seria automatizar o próprio processo de migração. Porém, com diferentes versões de IRIS/Cache, isso se torna uma dor de cabeça ainda maior.

O que exatamente ele compara?

No momento em que estou escrevendo isto, ele compara 8 configurações do %SYS e 5 para cada namespace. Mas a implementação é extremamente simples, então sempre que surgirem novas ideias de configurações para exportar, adicioná-las é muito fácil.

Escopo Entidade
%SYS Namespaces
%SYS Tasks
%SYS WebApplications
%SYS SqlConnections
%SYS Users
%SYS Roles
%SYS Resources
%SYS Ssl
Namespaces Classes
Namespaces Globals
Namespaces Credentials
Namespaces ProductionItems
Namespaces Lookups

Como eu uso?

  1. Instale a extensão no seu navegador. Atualmente Chrome e Firefox são suportados.
  2. Abra o Portal de Administração da instância de origem.
  3. Clique em “Save Server Data”.

  1. Adicione as credenciais do seu usuário e clique em “install”. (necessário apenas na primeira vez que configurar um servidor)

Nesta instância de exemplo usei o usuário _SYSTEM apenas para fins demonstrativos. Deve ser usado o mesmo usuário que você acessa o Portal.

  1. Abra o Portal de Administração da instância de destino.
  2. Clique em “Compare to saved server”.

 

  1. Repita os passos de instalação demonstrados na instância anterior (necessário apenas na primeira vez que configurar um servidor).
  2. Veja os resultados.

Como funciona?

Lembre-se de que você sempre pode ver tudo em detalhes no GitHub!

A funcionalidade principal está em uma única classe ObjectScript. Ela possui:

  • Um método principal chamado pela Web Application que retorna todo o JSON.
  • Um método para recuperar cada configuração e retorná-la como um objeto dinâmico para o método principal.
  • Um método de setup que cria a Web Application programaticamente, pensado para ser chamado como stored procedure usando o endpoint /api/atelier/query.

Estas são as queries que estou utilizando atualmente para cada entidade:

Entidade Query
Namespaces SELECT * FROM Config.Namespaces_List()
Tasks SELECT * FROM %SYS.Task WHERE Type = 2
WebApplications SELECT * FROM Security.Applications WHERE Type = 2
SqlConnections SELECT * FROM %Library.sys_SQLConnection
Users SELECT * FROM Security.Users
Roles SELECT * FROM Security.Roles
Resources SELECT * FROM Security.Resources
Ssl SELECT * FROM Security.SSLConfigs
Classes SELECT * FROM %Library.RoutineMgr_StudioOpenDialog('*.cls',1,1,0,1,0,0) WHERE Name NOT LIKE 'Ens.%' AND Name NOT LIKE 'EnsLib.%' AND Name NOT LIKE 'EnsPortal.%' AND Name NOT LIKE 'CSPX.%' AND Name NOT LIKE 'HS.%' AND Name NOT LIKE 'HSMOD.%' AND Name NOT LIKE 'SchemaMap.%' AND Name NOT LIKE 'WebTerminal.%'
Globals SELECT * FROM %SYS.GlobalQuery_NameSpaceList()
Credentials SELECT * FROM Ens_Config.Credentials
ProductionItems SELECT * FROM Ens_Config.Item WHERE Production = ?
Lookups SELECT * FROM Ens_Util.LookupTable

Conclusão

Este ainda é um trabalho em andamento, e eu realmente apreciaria todo tipo de feedback. Então, por favor, se você tiver algum conselho ou perceber algum problema, deixe um comentário abaixo ou abra uma issue no meu repositório do GitHub.

Se quiser contribuir diretamente, crie seu próprio fork e envie pull requests. Ou, se quiser participar de forma mais ativa, entre em contato comigo para que eu possa adicioná-lo como colaborador direto no repositório.

TL;DR

Criei uma extensão open source de navegador para exportar e comparar configurações entre diferentes instâncias de IRIS/HS. Você pode ver o código aqui, instalar no Chrome ou Firefox.