feat: 完整游戏运维功能
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
)
|
||||
|
||||
type MetricSampleBody struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
Online bool `json:"online"`
|
||||
PlayerCount *int `json:"playerCount,omitempty"`
|
||||
MaxPlayers *int `json:"maxPlayers,omitempty"`
|
||||
TPS *float64 `json:"tps,omitempty"`
|
||||
LatencyMS *float64 `json:"latencyMs,omitempty"`
|
||||
CPUPercent *float64 `json:"cpuPercent,omitempty"`
|
||||
MemoryPercent *float64 `json:"memoryPercent,omitempty"`
|
||||
DiskPercent *float64 `json:"diskPercent,omitempty"`
|
||||
Source string `json:"source"`
|
||||
CollectedAt time.Time `json:"collectedAt"`
|
||||
}
|
||||
|
||||
type MetricBatchIngestRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
Samples []MetricSampleBody `json:"samples"`
|
||||
}
|
||||
|
||||
type MetricBatchIngestResponse struct {
|
||||
Accepted bool `json:"accepted"`
|
||||
AcceptedCount int `json:"acceptedCount"`
|
||||
LatestAt time.Time `json:"latestAt"`
|
||||
ServerTime time.Time `json:"serverTime"`
|
||||
}
|
||||
|
||||
type MetricSampleListResponse struct {
|
||||
Items []MetricSampleBody `json:"items"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type BackupCreateRequest struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
ArtifactID string `json:"artifactId"`
|
||||
Checksum string `json:"checksum,omitempty"`
|
||||
SizeBytes int64 `json:"sizeBytes,omitempty"`
|
||||
State domain.BackupState `json:"state,omitempty"`
|
||||
RetentionUntil time.Time `json:"retentionUntil,omitempty"`
|
||||
}
|
||||
|
||||
type BackupResponse struct {
|
||||
ID string `json:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
ArtifactID string `json:"artifactId"`
|
||||
Checksum string `json:"checksum"`
|
||||
SizeBytes int64 `json:"sizeBytes"`
|
||||
State domain.BackupState `json:"state"`
|
||||
RecoveryStatus string `json:"recoveryStatus,omitempty"`
|
||||
RetentionUntil time.Time `json:"retentionUntil,omitempty"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type BackupListResponse struct {
|
||||
Items []BackupResponse `json:"items"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type RemoteAdapterDeclarationResponse struct {
|
||||
Key string `json:"key"`
|
||||
Kind domain.RemoteAdapterKind `json:"kind"`
|
||||
TargetKeys []string `json:"targetKeys"`
|
||||
Capabilities []string `json:"capabilities"`
|
||||
TimeoutSeconds int `json:"timeoutSeconds"`
|
||||
MaxAttempts int `json:"maxAttempts"`
|
||||
}
|
||||
|
||||
type RemoteAdapterDeclarationListResponse struct {
|
||||
Items []RemoteAdapterDeclarationResponse `json:"items"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type RemoteAdapterRequestBody struct {
|
||||
DeclarationKey string `json:"declarationKey"`
|
||||
TargetKey string `json:"targetKey"`
|
||||
Capability string `json:"capability"`
|
||||
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
|
||||
MaxAttempts int `json:"maxAttempts,omitempty"`
|
||||
IdempotencyKey string `json:"idempotencyKey"`
|
||||
}
|
||||
|
||||
type RemoteAdapterResponse struct {
|
||||
RequestID string `json:"requestId"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
DeclarationKey string `json:"declarationKey"`
|
||||
TargetKey string `json:"targetKey"`
|
||||
Kind domain.RemoteAdapterKind `json:"kind"`
|
||||
Status string `json:"status"`
|
||||
Retryable bool `json:"retryable"`
|
||||
Message string `json:"message"`
|
||||
ResultRef string `json:"resultRef,omitempty"`
|
||||
AuditEventID string `json:"auditEventId,omitempty"`
|
||||
CompletedAt time.Time `json:"completedAt,omitempty"`
|
||||
}
|
||||
|
||||
func (request MetricBatchIngestRequest) ToDomain() domain.MetricBatchIngest {
|
||||
samples := make([]domain.MetricSample, len(request.Samples))
|
||||
for i, sample := range request.Samples {
|
||||
samples[i] = metricSampleToDomain(sample)
|
||||
}
|
||||
return domain.MetricBatchIngest{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, Samples: samples}
|
||||
}
|
||||
|
||||
func MetricBatchIngestFromDomain(result domain.MetricBatchIngestResult) MetricBatchIngestResponse {
|
||||
return MetricBatchIngestResponse{Accepted: result.Accepted, AcceptedCount: result.AcceptedCount, LatestAt: result.LatestAt, ServerTime: result.ServerTime}
|
||||
}
|
||||
|
||||
func MetricSampleListFromDomain(samples []domain.MetricSample) MetricSampleListResponse {
|
||||
items := make([]MetricSampleBody, len(samples))
|
||||
for i, sample := range samples {
|
||||
items[i] = metricSampleFromDomain(sample)
|
||||
}
|
||||
return MetricSampleListResponse{Items: items, Count: len(items)}
|
||||
}
|
||||
|
||||
func (request BackupCreateRequest) ToDomain() domain.BackupRecord {
|
||||
return domain.BackupRecord{ID: request.ID, ServerInstanceID: request.ServerInstanceID, ArtifactID: request.ArtifactID, Checksum: request.Checksum, SizeBytes: request.SizeBytes, State: request.State, RetentionUntil: request.RetentionUntil}
|
||||
}
|
||||
|
||||
func BackupFromDomain(record domain.BackupRecord) BackupResponse {
|
||||
return BackupResponse{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 BackupListFromDomain(records []domain.BackupRecord) BackupListResponse {
|
||||
items := make([]BackupResponse, len(records))
|
||||
for i, record := range records {
|
||||
items[i] = BackupFromDomain(record)
|
||||
}
|
||||
return BackupListResponse{Items: items, Count: len(items)}
|
||||
}
|
||||
|
||||
func RemoteAdapterDeclarationsFromDomain(declarations []domain.RemoteAdapterDeclaration) RemoteAdapterDeclarationListResponse {
|
||||
items := make([]RemoteAdapterDeclarationResponse, len(declarations))
|
||||
for i, declaration := range declarations {
|
||||
items[i] = RemoteAdapterDeclarationResponse{Key: declaration.Key, Kind: declaration.Kind, TargetKeys: domain.CopyStringSlice(declaration.TargetKeys), Capabilities: domain.CopyStringSlice(declaration.Capabilities), TimeoutSeconds: declaration.TimeoutSeconds, MaxAttempts: declaration.MaxAttempts}
|
||||
}
|
||||
return RemoteAdapterDeclarationListResponse{Items: items, Count: len(items)}
|
||||
}
|
||||
|
||||
func (request RemoteAdapterRequestBody) ToDomain(serverInstanceID string) domain.RemoteAdapterRequest {
|
||||
return domain.RemoteAdapterRequest{ServerInstanceID: serverInstanceID, DeclarationKey: request.DeclarationKey, TargetKey: request.TargetKey, Capability: request.Capability, TimeoutSeconds: request.TimeoutSeconds, MaxAttempts: request.MaxAttempts, IdempotencyKey: request.IdempotencyKey}
|
||||
}
|
||||
|
||||
func RemoteAdapterFromDomain(result domain.RemoteAdapterResult) RemoteAdapterResponse {
|
||||
return RemoteAdapterResponse{RequestID: result.RequestID, ServerInstanceID: result.ServerInstanceID, DeclarationKey: result.DeclarationKey, TargetKey: result.TargetKey, Kind: result.Kind, Status: result.Status, Retryable: result.Retryable, Message: result.Message, ResultRef: result.ResultRef, AuditEventID: result.AuditEventID, CompletedAt: result.CompletedAt}
|
||||
}
|
||||
|
||||
func metricSampleToDomain(sample MetricSampleBody) domain.MetricSample {
|
||||
return domain.MetricSample{ID: sample.ID, ServerInstanceID: sample.ServerInstanceID, 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 metricSampleFromDomain(sample domain.MetricSample) MetricSampleBody {
|
||||
return MetricSampleBody{ID: sample.ID, ServerInstanceID: sample.ServerInstanceID, 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}
|
||||
}
|
||||
Reference in New Issue
Block a user