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:
BEGINe abertura de snapshot da transação. - ● Cinza:
SELECTe leituras intermediárias. - ● Laranja:
UPDATE,INSERTe mutações de escrita. - ● Verde:
COMMITfinalizado com sucesso. - ● Vermelho:
ROLLBACKou falha de concorrência.
- ● Roxo / Azul:
- 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 = 1em 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.