-
Notifications
You must be signed in to change notification settings - Fork 2
Developer Documentation
JLangisch edited this page Apr 1, 2025
·
2 revisions
The Stationeers Server UI provides comprehensive management for Stationeers dedicated servers through both web and Discord interfaces. This documentation outlines the codebase architecture, components, and integration points for developers.
The system employs a layered architecture with clear separation of concerns:
flowchart TD
%% Core Systems with expanded subsystems
subgraph "Core Systems"
direction TB
subgraph "Configuration Manager"
Config["Config Manager<br>• Config & Secrets<br>• Environment Integration"]:::config
end
subgraph "Core Operations"
direction TB
ArgBuilder["Argument Builder<br>• Command-line Construction<br>• Platform-specific Args"]:::core
ProcMgmt["Process Management<br>• Server Start/Stop<br>• Process Lifecycle"]:::core
CoreMain["Core Main<br>• Application Lifecycle<br>• Component Orchestration"]:::core
subgraph "Log Collection"
direction LR
LogWin["Windows Log Collector<br>• StdOut/StdErr Pipes"]:::core
LogLin["Linux Log Collector<br>• Log File Tailing"]:::core
end
APIEndpoints["API Endpoints<br>• HTTP Server<br>• Request Handling"]:::core
ConfigAPI["Configuration API<br>• Config Updates<br>• Settings UI"]:::core
UIServing["UI Serving<br>• Static Content<br>• Template Rendering"]:::core
BackupMgmt["Backup Management<br>(Legacy System)"]:::core
end
Sec["Security Module<br>• Authentication<br>• Authorization<br>• TLS Management"]:::security
end
%% Real-time Systems
subgraph "Real-time Systems"
direction TB
Det["Detection Module<br>• Log Analysis<br>• Event Classification<br>• Pattern Management"]:::detector
subgraph "SSE Module"
direction LR
SSEMgr["SSE Manager<br>• Connection Management"]:::sse
LogStream["Log Stream<br>• Console Output"]:::sse
EventStream["Event Stream<br>• Detection Events"]:::sse
end
end
%% Integration Systems
subgraph "Integration Systems"
direction TB
Disc["Discord Integration<br>• Bot Management<br>• Commands & Status<br>• Internal Log Detection (Legacy)"]:::discord
Install["Installation & Auto-Updater<br>• SteamCMD Integration<br>• Updates"]:::installer
end
%% Frontend Layer
subgraph "Frontend Layer"
direction TB
AdminUI["Admin Interface<br>• Dashboard<br>• Server Controls"]:::frontend
ConfigUI["Configuration Editor<br>• Server Settings"]:::frontend
DetectUI["Detection Manager<br>• Pattern Editor"]:::frontend
ConsoleUI["Real-time Console<br>• Log Viewer"]:::frontend
end
%% External Systems
subgraph "External Systems"
direction LR
DS["Discord Service"]:::external
GS["Game Server<br>(Stationeers)"]:::external
end
%% Deployment Layer
subgraph "Deployment"
Deploy["Containerization & Deployment"]:::deployment
end
%% Configuration Flows
Config -->|"Provides Secrets"| Sec
Config -->|"Loads Configuration"| ProcMgmt
Config -->|"Settings"| ArgBuilder
Config -->|"Server Options"| ConfigAPI
ConfigUI -->|"Updates"| Config
%% Core & Process Management Flows
CoreMain -->|"Controls"| ProcMgmt
ArgBuilder -->|"Builds Command Args"| ProcMgmt
ProcMgmt -->|"Platform Detection"| LogWin
ProcMgmt -->|"Platform Detection"| LogLin
ProcMgmt -->|"Manages Process"| GS
%% Log Collection Flows
GS -->|"Windows: Pipes Output"| LogWin
GS -->|"Linux: Writes File"| LogLin
LogWin -->|"Console Output"| LogStream
LogLin -->|"Console Output"| LogStream
%% API and UI Flows
APIEndpoints -->|"Routes Requests"| ProcMgmt
APIEndpoints -->|"Routes Requests"| ConfigAPI
APIEndpoints -->|"Routes Requests"| UIServing
UIServing -->|"Serves"| AdminUI
UIServing -->|"Serves"| ConfigUI
UIServing -->|"Serves"| DetectUI
UIServing -->|"Serves"| ConsoleUI
ConfigAPI -->|"Updates"| Config
%% SSE Flows
LogStream -->|"Broadcasts"| SSEMgr
SSEMgr -->|"Streams"| ConsoleUI
LogStream -->|"Forwards Logs"| Det
Det -->|"Publishes Events"| EventStream
EventStream -->|"Broadcasts"| SSEMgr
%% Security & Authentication
Sec -->|"Secures"| APIEndpoints
AdminUI -->|"Authenticates via"| Sec
%% Discord Integration
Disc <-->|"Bot Commands"| DS
Disc -->|"Internal Call"| ProcMgmt
LogStream -->|"Forwards Logs"| Disc
EventStream -->|"Forwards Events"| Disc
Disc -->|"Sends Logs & Events"| DS
%% Installation & Updates
CoreMain -->|"Triggers"| Install
Install -->|"Updates"| GS
%% Deployment
Deploy -->|"Runs Services"| Config
%% Frontend to Config Layer connections
AdminUI -->|"Reads/Updates"| Config
DetectUI -->|"Configures"| Det
%% Styling classes - Dark mode friendly colors
classDef config fill:#3a506b,stroke:#5bc0be,stroke-width:2px,color:#ffffff
classDef core fill:#1b263b,stroke:#778da9,stroke-width:2px,color:#ffffff
classDef detector fill:#415a77,stroke:#0d1b2a,stroke-width:2px,color:#ffffff
classDef discord fill:#7209b7,stroke:#f72585,stroke-width:2px,color:#ffffff
classDef installer fill:#4361ee,stroke:#4cc9f0,stroke-width:2px,color:#ffffff
classDef security fill:#7b2cbf,stroke:#c77dff,stroke-width:2px,color:#ffffff
classDef sse fill:#560bad,stroke:#f72585,stroke-width:2px,color:#ffffff
classDef frontend fill:#4d194d,stroke:#ff758f,stroke-width:2px,color:#ffffff
classDef external fill:#006400,stroke:#90ee90,stroke-width:2px,color:#ffffff
classDef deployment fill:#774936,stroke:#e09f3e,stroke-width:2px,color:#ffffff
flowchart LR
%% Core Systems
subgraph "Core Systems"
Config["Configuration Manager<br>• Config & Secrets<br>• Environment Integration"]:::config
Core["Core Operations<br>• Process Management<br>• Backup Handling<br>• API Endpoints<br>• Log Collection (serverlog.go)"]:::core
Sec["Security Module<br>• Authentication<br>• Authorization<br>• TLS Management"]:::security
end
%% Real-time Systems
subgraph "Real-time Systems"
Det["Detection Module<br>• Log Analysis<br>• Event Classification<br>• Pattern Management"]:::detector
SSE["SSE Module<br>• Log Stream<br>• Event Stream<br>• Connection Management"]:::sse
end
%% Integration Systems
subgraph "Integration Systems"
Disc["Discord Integration<br>• Bot Management<br>• Commands & Status<br>• Internal Log Detection (Legacy)"]:::discord
Install["Installation & Auto-Updater<br>• SteamCMD Integration<br>• Updates"]:::installer
end
%% Frontend Layer
subgraph "Frontend Layer"
UI["Web UI (UIMod)<br>• Admin Interface<br>• Real-time Console"]:::frontend
end
%% External Systems
subgraph "External Systems"
DS["Discord Service"]:::external
GS["Game Server<br>(Stationeers)"]:::external
end
%% Deployment Layer
subgraph "Deployment"
Deploy["Containerization & Deployment"]:::deployment
end
%% Primary Data Flows
Config -->|"Provides Secrets"| Sec
Config -->|"Loads Configuration"| Core
%% Core & Log Flow
Core -->|"Manages"| GS
GS -->|"Produces Logs"| Core
Core -->|"Broadcasts Logs"| SSE
SSE -->|"Forwards Logs"| Det
SSE -->|"Forwards Logs if Enabled"| Disc
%% Event Flow
Det -->|"Publishes Events"| SSE
%% User Interface Flows
Core -->|"Provides API"| UI
SSE -->|"Streams (Logs & Events)"| UI
%% Security & Authentication
Sec -->|"Secures"| Core
UI -->|"Authenticates via"| Sec
%% Discord Integration
Disc <-->|"Bot Commands"| DS
Core -->|"Status Updates"| Disc
%% Installation & Updates
Install -->|"Updates"| GS
Core -->|"Triggers"| Install
%% Deployment
Deploy -->|"Runs Services"| Core
%% Styling classes - Dark mode friendly colors
classDef config fill:#3a506b,stroke:#5bc0be,stroke-width:2px,color:#ffffff;
classDef core fill:#1b263b,stroke:#778da9,stroke-width:2px,color:#ffffff;
classDef detector fill:#415a77,stroke:#0d1b2a,stroke-width:2px,color:#ffffff;
classDef discord fill:#7209b7,stroke:#f72585,stroke-width:2px,color:#ffffff;
classDef installer fill:#4361ee,stroke:#4cc9f0,stroke-width:2px,color:#ffffff;
classDef security fill:#7b2cbf,stroke:#c77dff,stroke-width:2px,color:#ffffff;
classDef sse fill:#560bad,stroke:#f72585,stroke-width:2px,color:#ffffff;
classDef frontend fill:#4d194d,stroke:#ff758f,stroke-width:2px,color:#ffffff;
classDef external fill:#006400,stroke:#90ee90,stroke-width:2px,color:#ffffff;
classDef deployment fill:#774936,stroke:#e09f3e,stroke-width:2px,color:#ffffff;
%% Click Events for Component Mapping
click UI "https://github.com/jacksonthemaster/stationeersserverui/blob/main/UIMod/index.html" "Web UI code"
click Config "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/config/config.go" "Configuration code"
click Core "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/core/index.go" "Core operations code"
click Det "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/detection/detector.go" "Detection module code"
click SSE "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/ssestream/ssemanager.go" "SSE manager code"
click Disc "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/discord/discord.go" "Discord integration code"
click Install "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/install/install.go" "Installation code"
click Sec "https://github.com/jacksonthemaster/stationeersserverui/blob/main/src/security/auth.go" "Security module code"
click Deploy "https://github.com/jacksonthemaster/stationeersserverui/tree/main/Dockerfile" "Deployment files"
| Aspect | Details |
|---|---|
| Responsibilities | • Centralized configuration • Secrets handling • Environment variable integration |
| Key Files | • config.go: Main configuration structure• secrets.go: Sensitive data handling |
| Key Features | • JSON configuration with env overrides • Automatic JWT key generation • Config validation and defaults • Debug mode logging |
| Aspect | Details |
|---|---|
| Responsibilities | • Server process management • Backup handling • Configuration API endpoints • HTTP server setup |
| Key Files | • processmanagement.go: Process control• backups.go: Backup management• configuration.go: API handlers• serverlog.go: Log streaming |
| Key Features | • Cross-platform process management • Intelligent backup rotation • Configuration persistence • Server argument building |
| Aspect | Details |
|---|---|
| Responsibilities | • Real-time log analysis • Event detection and classification • Custom pattern management |
| Key Files | • detector.go: Core detection engine• handlers.go: Default event handlers• customdetections.go: User-defined patterns• logstream.go: Log processing pipeline |
| Key Features | • Regex and keyword matching • Custom detection rules • Event classification system • Extensible handler architecture |
| Aspect | Details |
|---|---|
| Responsibilities | • Discord bot management • Command processing • Status updates • Reaction-based controls |
| Key Files | • discord.go: Bot initialization• handleCommands.go: Command processing• reactControl.go: Reaction interactions• sendMessage.go: Message distribution |
| Key Features | • Rich Discord integration • Interactive control panel • Real-time status updates • Comprehensive command set |
| Aspect | Details |
|---|---|
| Responsibilities | • Initial setup • SteamCMD integration • Dependency management |
| Key Files | • install.go: Main installation logic• steamcmd.go: SteamCMD wrapper• steamcmd-helper.go: SteamCMD utilities |
| Key Features | • Automatic SteamCMD installation • Cross-platform support • Game server updates • Dependency checking |
| Aspect | Details |
|---|---|
| Responsibilities | • Authentication • Authorization • TLS management |
| Key Files | • auth.go: JWT-based authentication• tls.go: Certificate management |
| Key Features | • JWT authentication • Secure cookie handling • Automatic TLS certificate generation • Role-based access control |
| Aspect | Details |
|---|---|
| Responsibilities | • Real-time event streaming • Connection management • Message broadcasting |
| Key Files | • ssemanager.go: Core SSE implementation• sseutils.go: Utility functions |
| Key Features | • Efficient message broadcasting • Connection limits • Non-blocking design • Multiple stream types |
The web interface provides a user-friendly management console with:
- HTML/CSS/JS admin interface
- Configuration pages for server settings
- Detection manager for custom patterns
- Real-time console via SSE
- Error Handling: Comprehensive error checking and recovery
- Logging: Verbose logging in debug mode
- Concurrency: Careful use of mutexes for shared state
- Documentation: Extensive code comments
- Testing: Important areas have debug modes
- Go
- Git
- 10gb Hard disk space
- Clone the repository
- Run
go mod tidyto install dependencies - Build the application with
go run ./build.go
1. Add to detection.DefaultHandlers()
2. Define in detection.EventType
3. Add regex pattern in detector.go
1. Add route in main.go
2. Create http handler in core package
3. Add frontend integration if possible - all features should be available on the UI.
1. Add command handler in handleCommands.go
2. Define new reaction in reactControl.go
3. Add message formatting if needed
| Area | Consideration |
|---|---|
| Log Processing | Heavy regex can impact performance |
| Discord Rate Limits | Message batching implemented |
| Backup Operations | File operations are async where possible |
| Area | Implementation |
|---|---|
| Authentication | JWT with configurable expiration |
| TLS | Auto-generated certs with 90-day validity |
| Secrets | Environment variable fallbacks |
| Input Validation | Critical for commands and config |
- Advanced backup retention strategies
- rebuild Discord integration based on Detector (has own detection logic from v2, detector was rebuild generalized based on discord code in v4)
| Issue | Solution |
|---|---|
| SteamCMD Failures | Check dependencies in Wiki |
| Authentication Problems | Verify JWT key and your cookie settings |
| Backup Issues | Check filesystem permissions and folders. |
For specific implementation details, refer to the inline code comments and the user wiki for end-user documentation. Alternatively, create an issue and I will be more than happy to help.