Skip to main content

Admin Dashboard

The titan-dashboard is a React-based admin interface for monitoring and managing the Titan backend.

Overview

Features

FeatureDescription
Admin AuthenticationSeparate login from game authentication
Rate LimitingView and manage rate limit policies
Real-time MetricsLive graphs of request rates and limits
User ManagementManage admin users and roles
Health MonitoringService 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-admin database)
  • JWT tokens with httpOnly cookies for refresh
  • Roles: SuperAdmin, Admin, Viewer

Default Admin

On first run, a default admin is created:

FieldValue
Emailadmin@titan.local
PasswordAdmin123!
RolesSuperAdmin, Admin

[!WARNING] Change the default password in production!

Admin Roles

RolePermissions
SuperAdminFull access, manage other admins
AdminManage game data and configuration
ViewerRead-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

EndpointDescription
POST /api/admin/auth/loginAdmin login
POST /api/admin/auth/refreshRefresh token
POST /api/admin/auth/logoutLogout

Rate Limiting

EndpointDescription
GET /api/admin/rate-limit/configGet configuration
PUT /api/admin/rate-limit/enabledEnable/disable
PUT /api/admin/rate-limit/policiesUpsert policy
DELETE /api/admin/rate-limit/policies/{name}Delete policy
GET /api/admin/rate-limit/metricsGet current metrics

User Management

EndpointDescription
GET /api/admin/usersList admin users
POST /api/admin/usersCreate 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
}
}
}
});