# Distributed Service Performance Monitor A real-time performance monitoring server to test distributed systems, featuring live metrics visualization and robust data collection. ## Features ### Metrics Collection - Real-time service performance monitoring - Database operation timing - Cache performance tracking - Automatic data aggregation and processing ### Storage & Processing - Distributed SQLite storage (Turso) - Redis caching layer - Asynchronous processing queue - Retry mechanisms with exponential backoff - Connection pooling and transaction management ### Dashboard - Real-time metrics visualization - Customizable time ranges (30m, 1h, 24h, 7d, custom) - Performance statistics (avg, P50, P95, P99) - Database and cache activity monitoring - CSV export functionality - Interactive time series charts ## Architecture The system uses a multi-layered architecture: 1. Frontend: React-based dashboard with Chart.js 2. Storage: Turso Database (distributed SQLite) + Redis cache 3. Processing: Async queue with multiple workers 4. Collection: Distributed metrics collection with retry logic ## Technical Stack - **Frontend**: React, Chart.js, Tailwind CSS - **Database**: Turso (distributed SQLite) - **Cache**: Redis - **Language**: Go 1.23 - **Deployment**: Docker + Fly.io ## Setup 1. Deploy using fly.io: ```bash fly launch fly deploy ``` ## Development For local development: 1. Install dependencies: ```bash go mod download ``` 2. Start the service: ```bash go run main.go ``` 3. Access the dashboard at `http://localhost:8080` ## Architecture Notes - The system uses a queue-based architecture for processing metrics - Implements automatic retries for failed operations - Features connection pooling for database operations - Supports distributed deployment through Fly.io - Uses websockets for real-time metric updates ## Performance Considerations - Metrics are processed asynchronously to prevent blocking - Connection pooling optimizes database access - Redis caching reduces database load - Configurable retry mechanisms ensure reliability - Dashboard uses data bucketing for better visualization