feat: navegação por correlação e leitura de tracing OpenTelemetry/Seq - #13
Merged
Conversation
Um erro raramente se explica sozinho: o que interessa é a sequência que levou até ele. Até aqui só o "X-Correlation-Id" era clicável, e ainda assim o caminho era filtrar a consulta — perdendo o contexto anterior. O que entra: - Campos reservados de tracing do CLEF no parser e na exportação: @tr, @sp, @ps e @st viram TraceId/SpanId/ParentSpanId/SpanStart em ClefEvent, fora de Properties para não virarem colunas dinâmicas. @sk, @sc e @ra chegam em MetadadosClefObservabilidade. Exportar e reabrir preserva a navegação. - NavegacaoCorrelacao monta a sequência de eventos que compartilham identificador com o evento de origem, sem tocar nos filtros da consulta. TraceId, SpanId, RequestId e CorrelationId valem sempre; outros nomes entram por alias configurável. - AnaliseTemporalCorrelacao classifica durações, intervalos e a hierarquia pai/filho. Duração só é duração quando o evento a declara (@st, campo OTLP ou alias com unidade) — número solto nunca é convertido por inferência, senão a linha do tempo passaria a mostrar um dado que ninguém publicou. - UI: painel "Eventos correlacionados" com sequência e linha do tempo, spans no detalhe do evento e destaque das linhas correlacionadas na lista/tabela. À direita os painéis empilham; com o detalhe abaixo, ficam lado a lado. - Configurações: aliases de correlação e de observabilidade, com os campos padrão reconhecidos sem configuração alguma. 576 testes passando. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Esta PR adiciona suporte completo a navegação por correlação e leitura/propagação de metadados de tracing (OpenTelemetry/Seq) no ClefExplorer, preservando campos reservados CLEF fora de Properties e habilitando UI dedicada para sequência e linha do tempo.
Changes:
- Leitura e exportação de campos reservados de tracing do CLEF (
@tr,@sp,@ps,@st) e extensões Seq (@sk,@sc,@ra) no modeloClefEvent. - Implementação de navegação por correlação e análise temporal (sequência + hierarquia de spans + linha do tempo).
- UI/Configurações: botão “Correlação”, painel “Eventos correlacionados”, destaque visual, e editor de aliases para correlação/observabilidade.
Reviewed changes
Copilot reviewed 31 out of 31 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| test/ClefExplorer.Tests/PersistenceTests.cs | Testa persistência e normalização das novas configurações de aliases. |
| test/ClefExplorer.Tests/NavegacaoCorrelacaoTests.cs | Testa extração e localização de eventos correlacionados (trace/span/request/correlation). |
| test/ClefExplorer.Tests/LogExporterTests.cs | Garante exportação e roundtrip dos novos campos reservados CLEF/Seq. |
| test/ClefExplorer.Tests/LeituraMetadadosObservabilidadeTests.cs | Valida extração de metadados OTLP/Seq e aliases configurados. |
| test/ClefExplorer.Tests/LeitorClefTests.cs | Amplia validações do leitor para novos campos reservados e preservação fora de Properties. |
| test/ClefExplorer.Tests/AnaliseTemporalCorrelacaoTests.cs | Testa cálculo de intervalos/durações e construção de hierarquia de spans. |
| src/wwwroot/css/app.css | Estilos para destaques correlacionados, painel de correlação, linha do tempo e editor de aliases. |
| src/Services/SettingsService.cs | Normaliza settings no save/load para deduplicar/limpar aliases. |
| src/Services/NavegacaoCorrelacao.cs | Serviço de navegação por correlação (extração/normalização de identificadores e busca na amostra). |
| src/Services/LogExporter.cs | Exporta trace/span e extensões Seq como campos reservados no CLEF. |
| src/Services/LeituraMetadadosObservabilidade.cs | Converte Seq/CLEF + OTLP conhecidos + aliases em metadados unificados para UI. |
| src/Services/LeitorClef.cs | Passa a ler/validar @tr/@sp/@ps/@st e @sk/@sc/@ra para o modelo. |
| src/Services/AnaliseTemporalCorrelacao.cs | Classifica itens temporais e monta árvore pai/filho de spans + anexação de logs. |
| src/Program.cs | Registra os novos serviços no DI container. |
| src/Models/Settings.cs | Adiciona seções Correlacao e Observabilidade + normalização. |
| src/Models/ResultadoNavegacaoCorrelacao.cs | Modelos para resultado de correlação (identificadores e eventos com correspondências). |
| src/Models/ResultadoAnaliseTemporalCorrelacao.cs | Modelos para resultado temporal (itens, janela e flags de tipos de medida). |
| src/Models/NoHierarquiaSpan.cs | Modelo de nó imutável para a hierarquia do trace. |
| src/Models/MetadadosObservabilidadeEvento.cs | Modelo normalizado de metadados de observabilidade (origem de duração + início/fim). |
| src/Models/MetadadosClefObservabilidade.cs | Modelo para extensões reservadas Seq/CLEF (@sk/@sc/@ra). |
| src/Models/ClefEvent.cs | Inclui propriedades de trace/span e observabilidade fora de Properties. |
| src/Helpers/FormatacaoTempo.cs | Formatação compacta de intervalos (usada na UI da linha do tempo). |
| src/Components/SettingsDialog.razor | Adiciona seções recolhíveis para aliases de correlação e observabilidade. |
| src/Components/ObservabilityAliasEditor.razor | Novo componente para editar listas de aliases (add/remove). |
| src/Components/LogViewer.razor | Integra o fluxo de busca/cancelamento de correlação + painel “Eventos correlacionados”. |
| src/Components/LogList.razor | Destaca itens correlacionados e inclui indicação no rótulo acessível. |
| src/Components/LogGrid.razor | Destaca linhas correlacionadas na tabela. |
| src/Components/LogDetails.razor | Botão “Correlação”, exibição de metadados de span e chips para correlação/OTel. |
| src/Components/LogCorrelationTiming.razor | Novo componente de linha do tempo/hierarquia (tree) para correlação. |
| src/Components/LogCorrelationNavigator.razor | Novo painel com abas de sequência e tempos + popover de critérios. |
| README.md | Documenta navegação por correlação, linha do tempo de spans e aliases. |
Suppressed comments (1)
src/Components/LogDetails.razor:146
- A UI agora divide por vírgula qualquer campo reconhecido como
CorrelationId(viaEhCampoCorrelacao). Isso contradiz a regra implementada emNavegacaoCorrelacao(apenasX-Correlation-Idé cabeçalho concatenado) e pode quebrar IDs válidos que contenham vírgulas.
else if (Navegacao.EhCampoCorrelacao(p.Key) && p.Value is ScalarValue svCorr && svCorr.Value is string sCorr)
{
var ids = sCorr.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
<div class="clef-chips">
@foreach (var id in ids)
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
afernandes
added a commit
that referenced
this pull request
Aug 8, 2026
Navegação por correlação e leitura de tracing OpenTelemetry/Seq (PR #13): trace/span deixam de ser propriedade comum e passam a montar a sequência de eventos de uma requisição, com linha do tempo e hierarquia pai/filho. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Por quê
Um erro raramente se explica sozinho — o que interessa é a sequência que levou até ele. Até aqui o app só reconhecia
X-Correlation-Id, e a única forma de seguir o rastro era filtrar a consulta, perdendo o contexto anterior. Logs produzidos por Serilog + OpenTelemetry (ou enviados ao Seq) já trazem trace/span, mas o ClefExplorer os tratava como propriedades comuns.O que entra
Parser e exportação — campos reservados de tracing do CLEF
@tr,@sp,@pse@stviramTraceId/SpanId/ParentSpanId/SpanStartemClefEvent, fora dePropertiespara não virarem colunas dinâmicas comuns.@sk,@sce@rachegam emMetadadosClefObservabilidade. A exportação CLEF grava esses campos de volta, então exportar o conjunto filtrado e reabrir preserva a navegação.NavegacaoCorrelacaoMonta a sequência de eventos que compartilham identificador com o evento de origem — sem tocar nos filtros da consulta atual.
TraceId,SpanId,RequestIdeCorrelationIdsão contratos próprios e valem sempre; outros nomes entram por alias configurável.AnaliseTemporalCorrelacaoClassifica durações, intervalos entre eventos e a hierarquia pai/filho dos spans. Regra deliberada: duração só é duração quando o evento a declara (
@st, campo OTLP, ou alias cujo valor traz unidade). Número solto nunca é convertido por inferência — senão a linha do tempo passaria a exibir um dado que ninguém publicou.UI
Configurações
Duas seções recolhíveis para aliases de correlação e de observabilidade (nome da operação, serviço, tipo do span, duração). Os campos padrão Seq/CLEF e OTLP continuam reconhecidos sem configuração alguma — o alias existe só para quem usa nomes próprios.
Testes
576 testes passando (
dotnet test -c Release), incluindo três suítes novas:NavegacaoCorrelacaoTests,AnaliseTemporalCorrelacaoTestseLeituraMetadadosObservabilidadeTests.🤖 Generated with Claude Code