# 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
