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
+45 -13
View File
@@ -45,6 +45,12 @@ func ValidateRunJobResult(result domain.RunJobResult) error {
violations = appendProgressViolations(violations, result.Progress)
violations = appendMessageLength(violations, "message", result.Message)
violations = appendMessageLength(violations, "errorCode", result.ErrorCode)
if len([]byte(result.ExecutionResult.Content)) > maxJobChannelMessageLength*256 {
violations = append(violations, "executionResult.content is too large")
}
if result.ExecutionResult.Checksum != "" && !validSHA256Checksum(result.ExecutionResult.Checksum) {
violations = append(violations, "executionResult.checksum must be sha256:<hex>")
}
return finish(violations)
}
@@ -54,6 +60,35 @@ func ValidateDistributionBuildInputRequest(request domain.DistributionBuildInput
return finish(violations)
}
func ValidateDependencyExecutionInputRequest(request domain.DependencyExecutionInputRequest) error {
return finish(appendLeaseFields(nil, request.RunEndpointID, request.SessionToken, request.JobID, request.LeaseToken, request.Attempt))
}
func ValidateRunUpdateInputRequest(request domain.RunUpdateInputRequest) error {
return finish(appendLeaseFields(nil, request.RunEndpointID, request.SessionToken, request.JobID, request.LeaseToken, request.Attempt))
}
func ValidateRunUpdateChunkRequest(request domain.RunUpdateChunkRequest) error {
violations := appendLeaseFields(nil, request.RunEndpointID, request.SessionToken, request.JobID, request.LeaseToken, request.Attempt)
if request.Offset < 0 {
violations = append(violations, "offset must not be negative")
}
if request.Length <= 0 || request.Length > 1024*1024 {
violations = append(violations, "length must be between 1 and 1048576")
}
return finish(violations)
}
func ValidateRunUpdateHealthReport(report domain.RunUpdateHealthReport) error {
violations := appendLeaseFields(nil, report.RunEndpointID, report.SessionToken, report.JobID, report.LeaseToken, report.Attempt)
if report.Outcome != "succeeded" && report.Outcome != "rolled-back" {
violations = append(violations, "outcome must be succeeded or rolled-back")
}
violations = appendRequired(violations, "version", report.Version)
violations = appendMessageLength(violations, "version", report.Version)
return finish(violations)
}
func ValidateRunJobCancelRequest(request domain.RunJobCancelRequest) error {
var violations []string
violations = appendRequired(violations, "jobId", request.JobID)
@@ -64,11 +99,7 @@ func ValidateRunJobCancelRequest(request domain.RunJobCancelRequest) error {
func ValidateRunJobCancelPoll(poll domain.RunJobCancelPoll) error {
var violations []string
violations = appendRequired(violations, "runEndpointId", poll.RunEndpointID)
violations = appendRequired(violations, "sessionToken", poll.SessionToken)
if poll.LeaseToken != "" && strings.TrimSpace(poll.JobID) == "" {
violations = append(violations, "jobId is required when leaseToken is provided")
}
violations = appendLeaseFields(violations, poll.RunEndpointID, poll.SessionToken, poll.JobID, poll.LeaseToken, poll.Attempt)
return finish(violations)
}
@@ -77,16 +108,17 @@ func ValidateRunJobReconcile(reconcile domain.RunJobReconcile) error {
violations = appendRequired(violations, "runEndpointId", reconcile.RunEndpointID)
violations = appendRequired(violations, "sessionToken", reconcile.SessionToken)
seen := map[string]struct{}{}
for i, jobID := range reconcile.ActiveJobIDs {
jobID = strings.TrimSpace(jobID)
if jobID == "" {
violations = append(violations, fmt.Sprintf("activeJobIds[%d] is required", i))
continue
for i, entry := range reconcile.ActiveJobs {
prefix := fmt.Sprintf("activeJobs[%d]", i)
violations = appendRequired(violations, prefix+".jobId", entry.JobID)
violations = appendRequired(violations, prefix+".leaseToken", entry.LeaseToken)
if entry.Attempt <= 0 {
violations = append(violations, prefix+".attempt must be positive")
}
if _, exists := seen[jobID]; exists {
violations = append(violations, fmt.Sprintf("activeJobIds[%d] duplicates %q", i, jobID))
if _, exists := seen[entry.JobID]; exists {
violations = append(violations, fmt.Sprintf("%s duplicates %q", prefix, entry.JobID))
}
seen[jobID] = struct{}{}
seen[entry.JobID] = struct{}{}
}
return finish(violations)
}