ChaosSQL

Visualização

Visualizador Interativo de Traces (chaossql ui)

Arquitetura e recursos do visualizador web interativo embutido: navegação pelo Gantt swimlane em microssegundos, inspeção visual do grafo de conflitos de Adya (arestas rw, ww, wr), comparação de delta-debugging e inspetor de queries SQL.

Arquitetura do Visualizador Web Local (chaossql ui)

O Visualizador Interativo de Traces do ChaosSQL é uma aplicação web autônoma e editorial servida diretamente pelo servidor HTTP nativo em Go (net/http). Projetado sob o Design System oficial do Studio Bregalda, ele adota uma paleta tonal cinematográfica e relaxante (Deep Ink #120E1F, Bregalda Purple #4B2E83, Warm Cream #FCFBF8, Signal Yellow #F5C400 e Ship Green #22C55E) com tipografia monoespaçada de alta legibilidade (JetBrains Mono) e zero dependências externas (sem CDN, sem Node.js e sem trackers).

Como Iniciar o Visualizador

Opção 1: Visualização Imediata Pós-Execução

chaossql run specs/banking_lost_update.yaml --ui

Ao término da bateria de testes, o ChaosSQL inicia o servidor local e abre automaticamente o navegador do sistema operacional (usando wslview no WSL2, open no macOS, ou rundll32 no Windows).

Opção 2: Inspecionar Trace Salvo em Disco

chaossql ui trace_banking_run_42.json --port=8090

Os 4 Módulos Visuais de Inspeção

1. Concurrency Gantt Swimlane (Linha do Tempo em Microssegundos)

O Gantt Swimlane mapeia cada worker goroutine (W0, W1, W2, …) em sua própria raia temporal horizontal independente:

  • Eixo Temporal Monotônico: Marcações de tempo expressas em microssegundos (μs) desde o início da execução, permitindo identificar com precisão a sobreposição de transações.
  • Blocos de Operações Codificados por Cor:
    • ● Roxo / Azul: BEGIN e abertura de snapshot da transação.
    • ● Cinza: SELECT e leituras intermediárias.
    • ● Laranja: UPDATE, INSERT e mutações de escrita.
    • ● Verde: COMMIT finalizado com sucesso.
    • ● Vermelho: ROLLBACK ou falha de concorrência.
  • Diagnóstico Visual de Janela Crítica: Revela o momento exato em que o Worker 2 executou sua leitura antes que o Worker 1 realizasse o commit, evidenciando visualmente a leitura suja ou a perda de mutação.

2. Grafo Direcionado de Dependências de Adya (SVG Interativo)

O visualizador renderiza o Grafo de Serialização Direta (SG(S)) com nós representando transações concorrentes e arestas direcionadas representando conflitos de dados:

  • Aresta rw (Anti-Dependency / Anti-Leitura): Transação T1 leu uma versão antiga de um dado antes de T2 sobrescrevê-lo com uma versão mais recente.
  • Aresta ww (Overwrite / Sobrescrita): Transação T1 escreveu uma versão de registro que foi posteriormente sobrescrita por T2.
  • Aresta wr (Read Dependency / Dependência de Leitura): Transação T2 leu o valor gerado e comitado por T1.
  • Destaque de Ciclo Anômalo: Arestas que formam ciclos direcionados (T1  —rw→  T2  —ww→  T1) são destacadas em Ouro Bregalda (#F5C400) pulsante, demonstrando a prova matemática da quebra de serializabilidade (Teorema CSR).

3. Painel de Delta-Debugging (ddmin): Antes vs Depois

O módulo shrinker do ChaosSQL reduz o ruído de execuções longas para uma reprodução mínima. O cartão de ddmin exibe:

Métrica Valor Típico Significado
Trace Original 20 a 100 operações Histórico completo executado pelos workers durante o estresse caótico.
Trace Mínimo 2 operações Subconjunto 1-minimal irredutível que reproduz exatamente a mesma anomalia.
Taxa de Compressão 85% ou mais (meta do eval) Parcela do trace original removida por não ser necessária para reproduzir a falha.
Tempo de Convergência Menos de 2 s (meta do eval) Tempo gasto reexecutando subconjuntos candidatos para isolar o contraexemplo mínimo.

4. Inspetor Tabular de Queries & Parâmetros Resolvidos

Uma tabela interativa detalhada que lista cada instrução executada no banco de dados na ordem cronológica real:

  • Resolução de Parâmetros: Instruções SQL são exibidas com suas variáveis de interpolação resolvidas (ex: UPDATE accounts SET balance = 900 WHERE id = 1 em vez de expressões dinâmicas brutas).
  • Duração Individual: Medição do tempo de execução de cada comando no driver do banco em microssegundos.
  • Afinidade de Goroutine: Identificação do worker responsável pela query e status de sucesso ou erro retornado pelo motor SQL.

Exportação de Relatórios HTML Standalone

Você pode gerar relatórios estáticos autocontidos para anexar a Pull Requests ou compartilhar em discussões de arquitetura:

chaossql run specs/banking_lost_update.yaml --export-html=relatorio_auditoria.html

O arquivo HTML resultante possui aproximadamente 60KB, inclui todos os estilos, scripts e gráficos SVG embutidos, e pode ser aberto offline em qualquer navegador sem necessidade de conexão com a internet.