A modern .NET 9.0 Web API for managing game server instances through the Krystal Game Server Manager (KGSM).
src/
├── Controllers/ # API Controllers
│ ├── BlueprintsController.cs # Blueprint management endpoints
│ ├── InstancesController.cs # Instance management endpoints
│ └── SystemController.cs # System metrics endpoints
├── Services/ # Business Logic Services
│ ├── ISystemMetricsService.cs # System metrics interface
│ ├── SystemMetricsService.cs # System metrics implementation
│ ├── ILogStreamingService.cs # Log streaming interface
│ └── LogStreamingService.cs # Log streaming implementation
├── Models/ # Data Models (One class per file)
│ ├── SystemMetrics.cs # Main system metrics container
│ ├── CpuMetrics.cs # CPU usage metrics
│ ├── CpuCoreInfo.cs # CPU core information
│ ├── CpuHistoryPoint.cs # CPU history data point
│ ├── MemoryMetrics.cs # Memory usage metrics
│ ├── DiskMetrics.cs # Disk usage metrics
│ ├── NetworkMetrics.cs # Network usage metrics
│ ├── NetworkDataPoint.cs # Network data point
│ ├── NetworkTotal.cs # Network totals
│ ├── SystemInfo.cs # System information
│ ├── LogStreamStatus.cs # Log stream status
│ └── Dtos/ # Data Transfer Objects (One class per file)
│ ├── InstanceInstallDto.cs # Instance installation request
│ ├── InstanceCommandDto.cs # Instance command request
│ ├── LogDisconnectDto.cs # Log disconnect request
│ ├── ApiResponse.cs # Generic API response
│ └── ApiErrorResponse.cs # API error response
├── Configuration/ # Configuration Classes
│ └── KgsmApiOptions.cs # KGSM API configuration options
├── Hubs/ # SignalR Hubs
│ └── LogStreamingHub.cs # Real-time log streaming
├── Program.cs # Application entry point
├── appsettings.json # Configuration file
└── api.csproj # Project file
- Project Structure: Clean architecture with separation of concerns
- Dependency Injection: Proper DI container setup
- CORS Configuration: Development-friendly CORS policy
- KGSM Library Integration: Uses TheKrystalShip.KGSM.Lib
- SignalR Support: Real-time WebSocket communication
- Health Checks: Basic health monitoring
- OpenAPI/Swagger: API documentation
- Logging: Structured logging with different levels
- System Metrics Collection: CPU, Memory, Disk, Network monitoring
- Log Streaming: Real-time log streaming with buffering
- KGSM Operations: All CRUD operations for blueprints and instances
GET /api/kgsm/blueprints- Get all available blueprints
GET /api/kgsm/instances- Get all instancesPOST /api/kgsm/instances- Install new instanceDELETE /api/kgsm/instances/{name}- Uninstall instancePOST /api/kgsm/instances/{name}/start- Start instancePOST /api/kgsm/instances/{name}/stop- Stop instancePOST /api/kgsm/instances/{name}/restart- Restart instanceGET /api/kgsm/instances/{name}/logs- Get instance logs
GET /api/system/metrics- Get system metrics
/hubs/logs- Real-time log streaming hub
/health- Health check endpoint/openapi/v1.json- OpenAPI specification/swagger- Swagger UI (Development only)
{
"KgsmApi": {
"KgsmPath": "kgsm",
"SocketPath": "/tmp/kgsm.sock",
"Port": 5167,
"AllowedOrigins": [
"http://localhost:3000",
"http://127.0.0.1:3000"
],
"MaxLogBufferLines": 1000,
"LogCleanupIntervalSeconds": 30
}
}- .NET 9.0: Latest .NET framework
- TheKrystalShip.KGSM.Lib: KGSM interop library
- Microsoft.AspNetCore.SignalR: Real-time communication
- Microsoft.Extensions.Diagnostics.HealthChecks: Health monitoring
- Swashbuckle.AspNetCore: API documentation
- SOLID Principles: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
- Clean Architecture: Separation of concerns with clear boundaries
- Single Class Per File: Each class, interface, and record gets its own file for better maintainability
- Dependency Injection: Constructor injection for all dependencies
- Async/Await: Asynchronous programming throughout
- Structured Logging: Consistent logging with proper log levels
- Configuration Pattern: Strongly-typed configuration options
-
Prerequisites:
- .NET 9.0 SDK
- KGSM installed and available in PATH
-
Build:
dotnet build
-
Run:
dotnet run
-
Development:
- API available at:
https://localhost:7110orhttp://localhost:5167 - Swagger UI:
https://localhost:7110/swagger(Development only) - Health Check:
https://localhost:7110/health
- API available at:
This scaffolding provides a solid foundation. To complete the implementation:
- System Metrics: Replace placeholder implementations with actual system monitoring
- Log Streaming: Implement real process spawning for KGSM log tailing
- Error Handling: Add comprehensive error handling and validation
- Authentication: Add authentication/authorization if needed
- Testing: Add unit and integration tests
- Deployment: Configure for production deployment
- SignalR over Socket.IO: Native .NET real-time communication
- Minimal APIs: Used traditional controllers for better OpenAPI support
- Service Lifetime: Scoped services for request-bound operations
- Configuration: Options pattern with strongly-typed configuration
- Logging: Built-in .NET logging with structured output