Pular para o conteúdo

Rastreamento

Trechos com pai e filho: a árvore de onde o tempo de um pedido foi gasto, e em qual etapa ele falhou.

A métrica diz que o pedido levou 800 ms; o rastreamento diz em quê. Cada etapa abre um trecho, com o trecho de fora como pai, e fecha com o estado. A árvore resultante mostra onde o tempo foi — e qual trecho falhou.

dataforge
adopt Arcane.Observar as O

p := O.painel("importacao")
tudo := O.abrir(p, "importar")
baixar := O.abrir(p, "baixar", tudo)
O.fechar(p, baixar)
validar := O.abrir(p, "validar", tudo)
O.fechar(p, validar, "falhou", "linha 812: CPF inválido")
O.fechar(p, tudo, "falhou")

trechos := O.trechos(p)
falhou := [t cycle t in trechos given t["estado"] is "falhou" and t["pai"] is not void]
assert falhou[0]["nome"] is "validar"
assert falhou[0]["detalhe"].contains("linha 812")

Fechar sempre, até no erro#

Um trecho aberto que nunca fecha some do relatório — justamente o da etapa que falhou. O.cronometrar abre, roda e fecha com o estado certo, mesmo quando a ação levanta:

dataforge
adopt Arcane.Observar as O

p := O.painel("job")
monitor:
    O.cronometrar(p, "calcular", lambda => 1 / 0)
handle Error:
    out "falhou — e o trecho foi fechado assim mesmo"
assert O.trechos(p)[0]["estado"] is "falhou"

Entre serviços, o id do rastreamento atravessa a rede no cabeçalho: ver `Arcane.Malha` e Contexto.propagar.