検索

記事
· 2021年3月25日 8m read

将 Python ODBC 连接到 IRIS 数据库 - 第 2 条快速笔记

关键字:PyODBC,unixODBC,IRIS,IntegratedML,Jupyter Notebook,Python 3

目的

几个月前,我简单谈到了关于“将 Python JDBC 连接到 IRIS”的话题。我后来频繁提起它, 因此决定再写一篇 5 分钟的笔记,说明如何“将 Python ODBC 连接到 IRIS”。

在 Windows 客户端中通常很容易设置 ODBC 和 PyODBC,不过我每次在 Linux/Unix 风格的服务器中设置 unixODBC 和 PyODBC 客户端时,都会遇到一些麻烦。

有没有一种简单连贯的方法,可以不安装任何 IRIS,在原版 Linux 客户端中让 PyODBC/unixODBC 针对远程 IRIS 服务器运行?

1 Comment
ディスカッション (1)2
続けるにはログインするか新規登録を行ってください
記事
· 2021年3月22日 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

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2021年3月22日 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.

 

 

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
ディスカッション (5)1
続けるにはログインするか新規登録を行ってください
記事
· 2021年3月18日 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 ...

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください