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.