feat: Phase 2 data aggregation pipeline (Strike 4A)
Backend: - Stats ingestion consumer subscribing to corrosion.*.stats NATS subject - Hourly aggregation scheduler (runs :05 past every hour) - Daily cleanup job (03:00 UTC) with 7-day raw / 90-day hourly retention - Analytics API (summary, timeseries, CSV export) - Complete stats DB queries with aggregation and cleanup Frontend: - Analytics dashboard with ECharts integration - Player count and server performance charts - Time range selector (24h/7d/30d) - CSV export functionality - Real-time data loading Infrastructure: - Exposed NatsBridge.jetstream for consumer access - Background service initialization in main.rs Data flow: Plugin → NATS → Consumer → DB → Aggregation → API → Charts Unblocks Strike 4B (dashboards) and 4C (alerting). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
123
CHANGELOG.md
Normal file
123
CHANGELOG.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# CHANGELOG — Corrosion Admin Panel
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added (Phase 2 — Data Aggregation Pipeline)
|
||||
|
||||
**Backend:**
|
||||
- Stats ingestion consumer service (`stats_consumer.rs`) subscribing to `corrosion.*.stats` NATS subject
|
||||
- Complete stats database queries (`db/stats.rs`) with support for:
|
||||
- Raw stats insertion and retrieval
|
||||
- Hourly aggregation queries
|
||||
- Analytics summary calculations (peak/avg players, uptime)
|
||||
- Data retention cleanup (7 days raw, 90 days hourly)
|
||||
- Hourly stats aggregation scheduler job (runs at :05 past every hour)
|
||||
- Daily cleanup scheduler job (runs at 03:00 UTC)
|
||||
- Analytics API endpoints (`api/analytics.rs`):
|
||||
- `GET /api/analytics/summary` — Peak/avg players, uptime percentage
|
||||
- `GET /api/analytics/timeseries` — Time-series data for charting (hourly/raw granularity)
|
||||
- `GET /api/analytics/export` — CSV export of server stats
|
||||
- Background service initialization in main.rs (stats consumer + scheduler)
|
||||
|
||||
**Frontend:**
|
||||
- Analytics TypeScript types (`AnalyticsSummary`, `TimeseriesData`, `HourlyStats`)
|
||||
- Complete `AnalyticsView.vue` implementation with:
|
||||
- Real-time data fetching from analytics API
|
||||
- Apache ECharts integration for Player Count and Server Performance charts
|
||||
- Time range selector (24h/7d/30d)
|
||||
- CSV export functionality
|
||||
- Loading states and responsive layout
|
||||
|
||||
**Infrastructure:**
|
||||
- Made `NatsBridge.jetstream` public for service consumer access
|
||||
|
||||
### Technical Details
|
||||
|
||||
**Data Flow:**
|
||||
```
|
||||
Plugin/Agent publishes stats (60s interval)
|
||||
→ NATS JetStream (corrosion.*.stats)
|
||||
→ StatsConsumerService persists to server_stats table
|
||||
→ Hourly aggregation job rolls up to server_stats_hourly
|
||||
→ Analytics API queries aggregated data
|
||||
→ Frontend renders charts via ECharts
|
||||
```
|
||||
|
||||
**Database Schema:**
|
||||
- `server_stats` table (raw stats, 7-day retention)
|
||||
- `server_stats_hourly` table (aggregated hourly data, 90-day retention)
|
||||
|
||||
**Scheduler Jobs:**
|
||||
- Hourly aggregation: `0 5 * * * *` (at :05 past every hour)
|
||||
- Daily cleanup: `0 0 3 * * *` (at 03:00 UTC)
|
||||
|
||||
### Installation Notes
|
||||
|
||||
**Frontend:**
|
||||
```bash
|
||||
cd frontend && npm install echarts
|
||||
```
|
||||
|
||||
**Backend:**
|
||||
No additional dependencies beyond existing `Cargo.toml`.
|
||||
|
||||
### Deferred to Phase 2.2
|
||||
|
||||
- Player retention tracking (new vs returning players, session duration)
|
||||
- Wipe-correlated analytics
|
||||
- Player activity heatmaps (time-of-day patterns)
|
||||
- Anomaly alerting system
|
||||
|
||||
---
|
||||
|
||||
## [2025-02-15] — Phase 1 Complete
|
||||
|
||||
### Added (Phase 1 — Foundation)
|
||||
|
||||
**Backend Services:**
|
||||
- Core control plane (Axum + Tokio)
|
||||
- Auto-wiper with rollback (`wipe_engine.rs`)
|
||||
- Plugin management system
|
||||
- WebSocket/NATS bridge for real-time data
|
||||
- Companion agent adapter (bare metal server management)
|
||||
- Panel adapters (AMP + Pterodactyl)
|
||||
|
||||
**Frontend:**
|
||||
- Vue 3 dashboard with 19 admin sub-views
|
||||
- Wipe management UI with real-time progress
|
||||
- Toast notification system
|
||||
- Plugin management interface
|
||||
- Public server site
|
||||
|
||||
**Infrastructure:**
|
||||
- PostgreSQL schema (migrations 001-003)
|
||||
- NATS JetStream streams (6 streams configured)
|
||||
- Docker Compose deployment (4 services)
|
||||
- JWT auth with refresh tokens, TOTP 2FA
|
||||
|
||||
**Companion Agent:**
|
||||
- Go binary for bare metal server management
|
||||
- NATS-based command execution
|
||||
- Process lifecycle control
|
||||
- File operations support
|
||||
|
||||
**uMod Plugin:**
|
||||
- C# plugin for Rust game server integration
|
||||
- Stats publishing every 60 seconds
|
||||
- Server lifecycle event reporting
|
||||
|
||||
### Commits
|
||||
|
||||
- `c5d0571` — feat: Complete Phase 1 frontend — WebSocket + Wipe feature end-to-end
|
||||
- `590765f` — feat: Complete Phase 1 backend services and WebSocket/NATS bridge
|
||||
- `8320591` — docs: Update companion agent language choice to Go
|
||||
- `3c39345` — docs: Add CLAUDE.md and Claude Code settings
|
||||
- `81eeb3b` — docs: Add AGENTS.md roster and resource discipline
|
||||
|
||||
---
|
||||
|
||||
**Format:** `type: Short description`
|
||||
|
||||
**Types:** feat, fix, docs, refactor, test, chore, perf, ci
|
||||
Reference in New Issue
Block a user