Find

Article
· Mar 25, 2021 1m read

Dicas e truques do VSCode - Terminal da Web

Você gostaria de poder acessar o Terminal da Web diretamente de seu VSCode?

 

Esta é outra entrada no VSCode Tips & Tricks - e é bastante semelhante à anterior sobre o SOAP Wizard.

Mesmo princípio e mesmo resultado, embora diferentes casos de uso.

Portanto, suponha que você queira abrir o Terminal da Web (e para aqueles de vocês que ainda não estão familiarizados com esta excelente ferramenta do incrível @Nikita Savchenko, verifique sua home page) do VSCode - você pode usar uma abordagem semelhante à que descrevi no artigo anterior.

Vou mostrar as etapas novamente -

- Abra as configurações de JSON da extensão ObjectScript
- No objeto 'conn', adicione um objeto 'links'
- Dentro dos 'links' adicione esta linha

 "$(terminal) WebTerminal": "${serverUrl}/terminal/?ns=${ns}${serverAuth}" 

Isso parecerá assim -

 

Depois de fazer isso, ao clicar em Conexão na barra de status inferior do VSCode, você deve encontrar o Terminal da Web no menu.

Isso é mencionado nesta discussão de problemas do GitHub do VSCode ObjectScript (sobre as variáveis $ {...} usadas na URL acima), por @John Murray

Aqui está um pequeno GIF demonstrando esse processo (começando com o menu padrão e terminando com a opção de iniciar o Terminal da Web) -

 

Discussion (0)0
Log in or sign up to continue
Article
· Mar 22, 2021 1m read

"Baú do Tesouro" é a solução para navegar em sua coleção multimídia.

Bom dia, desenvolvedores!

O projeto "apptools-admin" não é apenas um conjunto de ferramentas para o administrador, mas uma plataforma para a criação rápida de um protótipo de qualquer solução.
Por exemplo, álbum de fotos, reprodutor de música e biblioteca pessoal, todos juntos em um design de baú de tesouro amigável.

Carregue http: // seu-host: sua-porta / apptoolsrest / a / infochest

Mude o caminho para seus arquivos de tesouro e comece a ver, ouvir ou ler de qualquer dispositivo conveniente: desktop, tablet ou smartphone.

O exemplo estará localizado em $ {CSPdir} / apptools / files

Depois de salvar e atualizar o painel, você pode selecionar uma faixa de música.

O player HTML5 embutido é usado para tocar música.

O componente Lightbox é usado para visualizar fotos e vídeos: UiKit.

Todo o código "baú" está localizado na classe apptools.lte.infochest e pode ser facilmente modificado para atender às suas necessidades.
Vote neste projeto apptools-admin.

Boa codificação!

Verifique o aplicativo relacionado no InterSystems Open Exchange

Discussion (0)0
Log in or sign up to continue
Article
· Mar 22, 2021 2m read

Monitor Docker containers usando SAM and cAdvisor

cAdvisor (abreviação de contêiner Advisor) analisa e expõe o uso de recursos e dados de desempenho de contêineres em execução. O cAdvisor expõe as métricas do Prometheus fora da caixa.

https://prometheus.io/docs/guides/cadvisor/

O Prometheus está integrado no SAM. Isso torna possível aproveitar as métricas do cAdvisor e expô-las por meio do Prometheus e do Grafana.

Como o cAdvisor escuta na porta 8080, que está em conflito com a porta Nginx, você pode escolher alterar a porta Nginx para acomodar isso.

Etapas de configuração:

1. Altere a porta nginx.

modificar nghix.conf:

    servidor {

        escute 9991;

Isso permite que você acesse a IU do cAdvisor via http: // server: 8080 /, que vem com muitos painéis de exemplo.

2. Configure docker-compose para adicionar o contêiner cAdvisor:

em docker-compose.yml, adicione o seguinte:

  cadvisor:

    imagem: google / cadvisor: mais recente

    portas:

      - 8080: 8080

    volumes:

      - /: / rootfs: ro

      - / var / run: / var / run: rw

      - / sys: / sys: ro

      - / var / lib / docker /: / var / lib / docker: ro

 

3. Configure o prometheus para adicionar trabalho ao cAdvisor:

modifique isc_prometheus.yml e adicione:

- job_name: cadvisor

  scrape_interval: 5s

  static_configs:

  - rótulos:

      cluster: "1"

      grupo: nó

    alvos:

    - cadvisor: 8080

Você Terminou! Para ter certeza de que o prometheus está puxando as métricas do cAdvisor, vá para prometheus UI http: // server: 9090 /, em Status-> Targets, você deve ver o endpoint e o status do cAdvisor.

você pode baixar alguns excelentes painéis pré-construídos com métricas cAdvisor, basta adicionar o parâmetro cluster em cada consulta.

 

 

Discussion (0)0
Log in or sign up to continue
Discussion (5)1
Log in or sign up to continue
Article
· Mar 18, 2021 3m read

Aproveitando ao máximo $ Query

Encontrei um caso de uso interessante do ObjectScript hoje com uma solução geral que gostaria de compartilhar.

Caso de uso:  

Eu tenho uma matriz JSON (especificamente, no meu caso, uma matriz de problemas de Jira) que desejo agregar em alguns campos - digamos, categoria, prioridade e tipo de problema. Em seguida, desejo nivelar os agregados em uma lista simples com o total de cada um dos grupos. Claro, para a agregação, faz sentido usar uma matriz local na forma:

agg(category, priority, type) = total

De modo que, para cada registro na matriz de entrada, posso apenas:

Do $increment(agg(category, priority, type))

Mas depois de fazer a agregação, quero colocá-la em uma forma mais fácil de iterar, como uma matriz subscrita por inteiro:

summary = n
summary(1) = $listbuild(total1, category1, priority1, type1)
...
summary(n) = $listbuild(totalN, categoryN, priorityN, typeN)

Solução Básica:

A abordagem simples é ter três loops For aninhados com $ Order - por exemplo:

Set category = ""
For {
    Set category = $Order(agg(category))
    Quit:category=""
    
    Set priority = ""
    For {
        Set priority = $Order(agg(category,priority))
        Quit:priority=""
        
        Set type = ""
        For {
            Set type = $Order(agg(category,priority,type),1,total)
            Quit:type=""
            
            Set summary($i(summary)) = $listbuild(total,category,priority,type)
        }
    }

Foi com isso que comecei, mas é muito código, e se eu tivesse mais dimensões para agregar sobre ele ficaria complicado rapidamente. Isso me fez pensar - existe uma solução geral para realizar a mesma coisa? Acontece que existe!

Melhor solução com $ Query:

Decidi que usar $ query ajudaria. Observe que esta solução assume uma profundidade uniforme de subscritos / valores em todo o array local; coisas estranhas aconteceriam se essa suposição fosse violada.  

 

ClassMethod Flatten(ByRef deep, Output flat) [ PublicList = deep ]
{
    Set reference = "deep"
    For {
        Set reference = $query(@reference)
        Quit:reference=""
        Set value = $listbuild(@reference)
        For i=1:1:$qlength(reference) {
            Set value = value_$listbuild($qsubscript(reference,i))
        }
        Set flat($i(flat)) = value
    }
}

Portanto, o snippet acima é substituído por:

Do ..Flatten(.agg,.summary)

Algumas coisas a serem observadas sobre esta solução:

deep precisa estar na PublicList para que $ query possa operar nela em cada iteração, a referência é alterada para fazer referência ao próximo conjunto de subscritos em profundidade que tem um valor - por exemplo, o valor pode ser: deep ("foo", "bar") $ qlength retorna o número de subscritos em referência $ qsubscript retorna o valor do i'ésimo subscrito de referência Quando as listas $ listbuild são concatenadas, o resultado é uma lista $ listbuild válida com as listas combinadas (isso é muito melhor do que usar qualquer outro delimitador!) Resumo $ query, $ qlength e $ qsubscript são úteis para lidar com matrizes globais / locais de profundidade arbitrária.

Leitura Adicional

$Query: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_FQUERY

$QSubscript: https: //docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.c ... 

$QLength: https: //docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.c ...

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