Admin Dashboard
The titan-dashboard is a React-based admin interface for monitoring and managing the Titan backend.
Overview
Features
| Feature | Description |
|---|---|
| Admin Authentication | Separate login from game authentication |
| Rate Limiting | View and manage rate limit policies |
| Real-time Metrics | Live graphs of request rates and limits |
| User Management | Manage admin users and roles |
| Health Monitoring | Service health status |
Running Locally
With Aspire (recommended):
# Dashboard starts automatically at http://localhost:5173
dotnet run --project src/Titan.AppHost
Standalone:
cd src/titan-dashboard
npm install
npm run dev
Authentication
The admin dashboard uses a separate authentication system from game users:
- Admin users are stored in PostgreSQL (
titan-admindatabase) - JWT tokens with
httpOnlycookies for refresh - Roles: SuperAdmin, Admin, Viewer
Default Admin
On first run, a default admin is created:
| Field | Value |
|---|---|
admin@titan.local | |
| Password | Admin123! |
| Roles | SuperAdmin, Admin |
[!WARNING] Change the default password in production!
Admin Roles
| Role | Permissions |
|---|---|
| SuperAdmin | Full access, manage other admins |
| Admin | Manage game data and configuration |
| Viewer | Read-only access to metrics |
Rate Limiting Dashboard
View and manage rate limiting in real-time:
Configuration
- Enable/disable rate limiting globally
- Create, edit, and delete policies
- Manage endpoint-to-policy mappings
- Set default policy
Metrics
- Active request buckets per client
- Active timeouts
- Request rate graphs
- Policy hit counts
Real-time Updates
The dashboard connects to AdminMetricsHub for live updates:
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hubs/admin-metrics", {
accessTokenFactory: () => adminToken
})
.build();
connection.on("MetricsUpdate", (metrics) => {
updateCharts(metrics);
});
await connection.start();
await connection.invoke("JoinMetricsGroup");
API Endpoints
The dashboard uses these admin APIs:
Authentication
| Endpoint | Description |
|---|---|
POST /api/admin/auth/login | Admin login |
POST /api/admin/auth/refresh | Refresh token |
POST /api/admin/auth/logout | Logout |
Rate Limiting
| Endpoint | Description |
|---|---|
GET /api/admin/rate-limit/config | Get configuration |
PUT /api/admin/rate-limit/enabled | Enable/disable |
PUT /api/admin/rate-limit/policies | Upsert policy |
DELETE /api/admin/rate-limit/policies/{name} | Delete policy |
GET /api/admin/rate-limit/metrics | Get current metrics |
User Management
| Endpoint | Description |
|---|---|
GET /api/admin/users | List admin users |
POST /api/admin/users | Create admin user |
PUT /api/admin/users/{id} | Update admin user |
DELETE /api/admin/users/{id} | Delete admin user |
Configuration
Dashboard settings in vite.config.ts:
export default defineConfig({
server: {
proxy: {
'/api': 'https://localhost:7001',
'/hubs': {
target: 'https://localhost:7001',
ws: true
}
}
}
});