Files
proffesor-for-testing__agen…/tests/phase3/generate-test-data.js
Profa 744ea46425 feat: Phase 3 complete - Dashboards & Visualization (v1.9.0)
🎉 Major Release: Phase 3 Dashboards & Visualization

This release completes Phase 3 from the Unified GOAP Implementation Plan,
delivering a production-ready real-time visualization system for agent
observability and decision-making transparency.

## Key Achievements (10/12 actions complete - 83%)

### Grafana Dashboards (2,280 LOC)
- Executive dashboard with quality trends and costs
- Developer dashboard with trace explorer and logs
- QA dashboard with test metrics and coverage

### Backend Visualization API (2,004 LOC)
- REST API with 6 endpoints for historical data
- WebSocket server for real-time streaming (587 LOC)
- Data transformer for graph visualization (556 LOC)

### Interactive React Frontend (12,969 LOC)
- MindMap Component (Cytoscape.js): 6 layout algorithms, 1000+ nodes
- QualityMetrics Panel (Recharts): 7-dimension radar chart, trends
- Timeline View (react-window): Virtual scrolling for 1000+ events
- Detail Panel: Drill-down functionality

### Infrastructure
- React 18.3.1 + TypeScript 5.8.3 + Vite 6.4.1
- React Query 5.90.10 for data fetching
- WebSocket client with reconnection logic
- Complete type definitions (306 lines)

### Comprehensive Tests (3,681 LOC)
- Integration tests (14/14 passing)
- Component unit tests (22 files)
- Performance tests for MindMap
- Test-to-code ratio: 17%

## Performance Results (9/9 criteria PASSED)

Backend:
- ✅ 185.84 events/sec write (186% of target)
- ✅ <1ms query latency (99% better than target)
- ✅ 10-50ms WebSocket lag (95% better than target)

Frontend:
- ✅ <100ms render (100 nodes)
- ✅ <500ms render (1000 nodes)
- ✅ 0 TypeScript errors
- ✅ 6.38s build time

## Documentation (8,161 LOC)
- PHASE3-COMPLETE.md - Quick start guide
- Phase 3 completion reports and reviews
- Frontend architecture and testing guides
- Component implementation documentation

## Services Running
- Backend WebSocket: ws://localhost:8080
- Backend REST API: http://localhost:3001
- Frontend: http://localhost:3000
- Database: ./data/agentic-qe.db (1040+ events)

## Grade: B (83/100) - Production Ready

## Deferred to Phase 4 or v1.9.1
- OTEL Collector integration (#71)
- Prometheus/Jaeger deployment (#71)
- Test coverage metrics (#71)
- Bundle code-splitting (#71)

## References
- Issue #63 - Phase 3: Dashboards & Visualization (CLOSED)
- Issue #69 - Phase 4: Integration & Orchestration
- Issue #70 - Phase 5: Production Readiness
- Issue #71 - Phase 3 Remaining Work

Total Phase 3 Code: 21,434 LOC
Total Documentation: 8,161 LOC
Files Changed: 137

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 10:09:28 +00:00

70 lines
2.6 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* Generate test data for Phase 3 visualization testing
*/
const { EventStore } = require('../../dist/persistence/event-store.js');
const { ReasoningStore } = require('../../dist/persistence/reasoning-store.js');
async function generateTestData() {
console.log('📊 Generating test data for Phase 3 visualization...\n');
// Initialize stores
const eventStore = new EventStore({ dbPath: './data/agentic-qe.db' });
const reasoningStore = new ReasoningStore({ dbPath: './data/agentic-qe.db' });
const sessionId = 'test-session-' + Date.now();
const agents = ['qe-test-generator', 'qe-coverage-analyzer', 'qe-api-tester', 'qe-perf-tester'];
const eventTypes = ['test_generated', 'coverage_analyzed', 'test_executed', 'performance_tested'];
console.log(`Session ID: ${sessionId}`);
console.log(`Generating events for ${agents.length} agents...\n`);
// Generate events for each agent
for (let i = 0; i < 20; i++) {
const agent = agents[i % agents.length];
const eventType = eventTypes[i % eventTypes.length];
const event = eventStore.recordEvent({
session_id: sessionId,
agent_id: agent,
event_type: eventType,
payload: {
test_count: Math.floor(Math.random() * 100),
coverage: Math.floor(Math.random() * 100),
duration_ms: Math.floor(Math.random() * 5000),
status: i % 5 === 0 ? 'error' : 'completed',
metadata: {
iteration: i + 1,
total_iterations: 20
}
}
});
console.log(`✅ Event ${i + 1}/20: ${agent} - ${eventType}`);
}
// Skip reasoning chains for now - focusing on event data
console.log('\n⏭️ Skipping reasoning chains (not required for visualization test)\n');
// Get statistics
const eventStats = eventStore.getStatistics();
const reasoningStats = reasoningStore.getStatistics();
console.log('\n📈 Statistics:');
console.log(` Total Events: ${eventStats.totalEvents}`);
console.log(` Unique Agents: ${eventStats.uniqueAgents}`);
console.log(` Unique Sessions: ${eventStats.uniqueSessions}`);
console.log(` Total Chains: ${reasoningStats.totalChains}`);
console.log(` Total Steps: ${reasoningStats.totalSteps}`);
console.log(` Avg Steps/Chain: ${reasoningStats.avgStepsPerChain}`);
console.log('\n✅ Test data generated successfully!');
console.log(`\nTest the APIs:`);
console.log(` curl http://localhost:3001/api/visualization/events`);
console.log(` curl http://localhost:3001/api/visualization/metrics`);
console.log(` curl http://localhost:3001/api/visualization/sessions/${sessionId}`);
}
generateTestData().catch(console.error);