feat: 完整游戏运维功能

This commit is contained in:
npc0-hue
2026-07-18 09:04:01 +08:00
parent f3b14b7945
commit 48b8ad8d6c
187 changed files with 16607 additions and 1140 deletions
+56
View File
@@ -0,0 +1,56 @@
package model
import (
"time"
"browser.local/platform/domain"
)
type MetricSample struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
Online bool `json:"online" db:"online"`
PlayerCount *int `json:"playerCount,omitempty" db:"player_count"`
MaxPlayers *int `json:"maxPlayers,omitempty" db:"max_players"`
TPS *float64 `json:"tps,omitempty" db:"tps"`
LatencyMS *float64 `json:"latencyMs,omitempty" db:"latency_ms"`
CPUPercent *float64 `json:"cpuPercent,omitempty" db:"cpu_percent"`
MemoryPercent *float64 `json:"memoryPercent,omitempty" db:"memory_percent"`
DiskPercent *float64 `json:"diskPercent,omitempty" db:"disk_percent"`
Source string `json:"source" db:"source"`
CollectedAt time.Time `json:"collectedAt" db:"collected_at"`
}
func (MetricSample) TableName() string { return "metric_samples" }
func MetricSampleFromDomain(sample domain.MetricSample) MetricSample {
return MetricSample{ID: sample.ID, ServerInstanceID: sample.ServerInstanceID, RunEndpointID: sample.RunEndpointID, Online: sample.Online, PlayerCount: sample.PlayerCount, MaxPlayers: sample.MaxPlayers, TPS: sample.TPS, LatencyMS: sample.LatencyMS, CPUPercent: sample.CPUPercent, MemoryPercent: sample.MemoryPercent, DiskPercent: sample.DiskPercent, Source: sample.Source, CollectedAt: sample.CollectedAt}
}
func (sample MetricSample) ToDomain() domain.MetricSample {
return domain.MetricSample{ID: sample.ID, ServerInstanceID: sample.ServerInstanceID, RunEndpointID: sample.RunEndpointID, Online: sample.Online, PlayerCount: sample.PlayerCount, MaxPlayers: sample.MaxPlayers, TPS: sample.TPS, LatencyMS: sample.LatencyMS, CPUPercent: sample.CPUPercent, MemoryPercent: sample.MemoryPercent, DiskPercent: sample.DiskPercent, Source: sample.Source, CollectedAt: sample.CollectedAt}
}
type BackupRecord struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
ArtifactID string `json:"artifactId" db:"artifact_id"`
Checksum string `json:"checksum" db:"checksum"`
SizeBytes int64 `json:"sizeBytes" db:"size_bytes"`
State domain.BackupState `json:"state" db:"state"`
RecoveryStatus string `json:"recoveryStatus" db:"recovery_status"`
RetentionUntil time.Time `json:"retentionUntil,omitempty" db:"retention_until"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
func (BackupRecord) TableName() string { return "backup_records" }
func BackupRecordFromDomain(record domain.BackupRecord) BackupRecord {
return BackupRecord{ID: record.ID, ServerInstanceID: record.ServerInstanceID, ArtifactID: record.ArtifactID, Checksum: record.Checksum, SizeBytes: record.SizeBytes, State: record.State, RecoveryStatus: record.RecoveryStatus, RetentionUntil: record.RetentionUntil, CreatedAt: record.CreatedAt, UpdatedAt: record.UpdatedAt}
}
func (record BackupRecord) ToDomain() domain.BackupRecord {
return domain.BackupRecord{ID: record.ID, ServerInstanceID: record.ServerInstanceID, ArtifactID: record.ArtifactID, Checksum: record.Checksum, SizeBytes: record.SizeBytes, State: record.State, RecoveryStatus: record.RecoveryStatus, RetentionUntil: record.RetentionUntil, CreatedAt: record.CreatedAt, UpdatedAt: record.UpdatedAt}
}