feat: 完整游戏运维功能
This commit is contained in:
+226
-48
@@ -7,20 +7,26 @@ import (
|
||||
)
|
||||
|
||||
type RunJobAssignmentResponse struct {
|
||||
JobID string `json:"jobId"`
|
||||
ServerInstanceID string `json:"serverInstanceId,omitempty"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
Capability string `json:"capability"`
|
||||
TargetKey string `json:"targetKey,omitempty"`
|
||||
InputRef string `json:"inputRef,omitempty"`
|
||||
IdempotencyKey string `json:"idempotencyKey"`
|
||||
State domain.JobState `json:"state"`
|
||||
Progress JobProgressBody `json:"progress"`
|
||||
ResultRef string `json:"resultRef,omitempty"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
JobID string `json:"jobId"`
|
||||
ServerInstanceID string `json:"serverInstanceId,omitempty"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
Capability string `json:"capability"`
|
||||
TargetKey string `json:"targetKey,omitempty"`
|
||||
InputRef string `json:"inputRef,omitempty"`
|
||||
IdempotencyKey string `json:"idempotencyKey"`
|
||||
State domain.JobState `json:"state"`
|
||||
Progress JobProgressBody `json:"progress"`
|
||||
ResultRef string `json:"resultRef,omitempty"`
|
||||
ExecutionInput RunJobExecutionInputBody `json:"executionInput,omitempty"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
MaxAttempts int `json:"maxAttempts"`
|
||||
AckDeadlineAt time.Time `json:"ackDeadlineAt,omitempty"`
|
||||
LeaseExpiresAt time.Time `json:"leaseExpiresAt,omitempty"`
|
||||
NextAttemptAt time.Time `json:"nextAttemptAt,omitempty"`
|
||||
ProgressSequence uint64 `json:"progressSequence,omitempty"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type RunJobClaimRequest struct {
|
||||
@@ -71,16 +77,41 @@ type RunJobProgressResponse struct {
|
||||
}
|
||||
|
||||
type RunJobResultRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
State domain.JobState `json:"state"`
|
||||
Progress JobProgressBody `json:"progress"`
|
||||
ResultRef string `json:"resultRef,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
ErrorCode string `json:"errorCode,omitempty"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
State domain.JobState `json:"state"`
|
||||
Progress JobProgressBody `json:"progress"`
|
||||
ResultRef string `json:"resultRef,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
ErrorCode string `json:"errorCode,omitempty"`
|
||||
Retryable bool `json:"retryable,omitempty"`
|
||||
ExecutionResult RunJobExecutionResultBody `json:"executionResult,omitempty"`
|
||||
}
|
||||
|
||||
type RunJobExecutionInputBody struct {
|
||||
WorkspaceScope string `json:"workspaceScope,omitempty"`
|
||||
Content string `json:"content,omitempty"`
|
||||
ExpectedVersion int `json:"expectedVersion,omitempty"`
|
||||
ExpectedChecksum string `json:"expectedChecksum,omitempty"`
|
||||
MaxReadBytes int `json:"maxReadBytes,omitempty"`
|
||||
RemoteAdapterKey string `json:"remoteAdapterKey,omitempty"`
|
||||
RemoteAdapterKind string `json:"remoteAdapterKind,omitempty"`
|
||||
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
|
||||
}
|
||||
|
||||
type RunJobExecutionResultBody struct {
|
||||
Kind string `json:"kind,omitempty"`
|
||||
ProcessState string `json:"processState,omitempty"`
|
||||
ExitClassification string `json:"exitClassification,omitempty"`
|
||||
ExitCode int `json:"exitCode,omitempty"`
|
||||
Version int `json:"version,omitempty"`
|
||||
Checksum string `json:"checksum,omitempty"`
|
||||
SizeBytes int64 `json:"sizeBytes,omitempty"`
|
||||
AuditSummary string `json:"auditSummary,omitempty"`
|
||||
Content string `json:"content,omitempty"`
|
||||
}
|
||||
|
||||
type RunJobResultResponse struct {
|
||||
@@ -106,6 +137,7 @@ type DistributionBuildInputResponse struct {
|
||||
ProfileKey string `json:"profileKey,omitempty"`
|
||||
TargetOS string `json:"targetOs"`
|
||||
TargetArch string `json:"targetArch"`
|
||||
TargetRelease string `json:"targetRelease"`
|
||||
PackageFormat string `json:"packageFormat"`
|
||||
RepositoryURL string `json:"repositoryUrl,omitempty"`
|
||||
SourceRevision string `json:"sourceRevision,omitempty"`
|
||||
@@ -116,16 +148,101 @@ type DistributionBuildInputResponse struct {
|
||||
AuthKey string `json:"authKey"`
|
||||
}
|
||||
|
||||
type DependencyExecutionInputRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
}
|
||||
|
||||
type DependencyExecutionInputResponse struct {
|
||||
JobID string `json:"jobId"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
PluginID string `json:"pluginId"`
|
||||
PluginVersion string `json:"pluginVersion"`
|
||||
ProfileKey string `json:"profileKey"`
|
||||
TargetOS string `json:"targetOs"`
|
||||
TargetArch string `json:"targetArch"`
|
||||
PlanDigest string `json:"planDigest"`
|
||||
Probe RuntimeDependencyProbeBody `json:"probe,omitempty"`
|
||||
Plan RuntimeInstallPlanBody `json:"plan,omitempty"`
|
||||
Bindings map[string]string `json:"bindings"`
|
||||
}
|
||||
|
||||
type RunUpdateInputRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
}
|
||||
|
||||
type RunUpdateInputResponse struct {
|
||||
JobID string `json:"jobId"`
|
||||
ServerInstanceID string `json:"serverInstanceId"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
ArtifactID string `json:"artifactId"`
|
||||
Checksum string `json:"checksum"`
|
||||
SizeBytes int64 `json:"sizeBytes"`
|
||||
TargetOS string `json:"targetOs"`
|
||||
TargetArch string `json:"targetArch"`
|
||||
PackageFormat string `json:"packageFormat"`
|
||||
ExecutableName string `json:"executableName"`
|
||||
TargetRelease string `json:"targetRelease"`
|
||||
ChunkSizeBytes int `json:"chunkSizeBytes"`
|
||||
}
|
||||
|
||||
type RunUpdateChunkRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
Offset int64 `json:"offset"`
|
||||
Length int `json:"length"`
|
||||
}
|
||||
|
||||
type RunUpdateChunkResponse struct {
|
||||
JobID string `json:"jobId"`
|
||||
ArtifactID string `json:"artifactId"`
|
||||
Offset int64 `json:"offset"`
|
||||
TotalBytes int64 `json:"totalBytes"`
|
||||
Checksum string `json:"checksum"`
|
||||
Payload []byte `json:"payload"`
|
||||
Complete bool `json:"complete"`
|
||||
}
|
||||
|
||||
type RunUpdateHealthRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
Outcome string `json:"outcome"`
|
||||
Version string `json:"version"`
|
||||
}
|
||||
|
||||
type RunUpdateHealthResponse struct {
|
||||
Accepted bool `json:"accepted"`
|
||||
JobID string `json:"jobId"`
|
||||
Phase domain.RunUpdatePhase `json:"phase"`
|
||||
ServerTime time.Time `json:"serverTime"`
|
||||
}
|
||||
|
||||
type RunJobCancelRequestBody struct {
|
||||
JobID string `json:"jobId"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type RunJobCancelRequestResponse struct {
|
||||
Accepted bool `json:"accepted"`
|
||||
JobID string `json:"jobId"`
|
||||
Reason string `json:"reason"`
|
||||
RequestedAt time.Time `json:"requestedAt"`
|
||||
Accepted bool `json:"accepted"`
|
||||
JobID string `json:"jobId"`
|
||||
Reason string `json:"reason"`
|
||||
RequestedAt time.Time `json:"requestedAt"`
|
||||
CompletedAt time.Time `json:"completedAt,omitempty"`
|
||||
State domain.JobState `json:"state"`
|
||||
}
|
||||
|
||||
type RunJobCancelPollRequest struct {
|
||||
@@ -133,6 +250,7 @@ type RunJobCancelPollRequest struct {
|
||||
SessionToken string `json:"sessionToken"`
|
||||
JobID string `json:"jobId,omitempty"`
|
||||
LeaseToken string `json:"leaseToken,omitempty"`
|
||||
Attempt int `json:"attempt"`
|
||||
}
|
||||
|
||||
type RunJobCancelPollResponse struct {
|
||||
@@ -145,17 +263,23 @@ type RunJobCancelPollResponse struct {
|
||||
ServerTime time.Time `json:"serverTime"`
|
||||
}
|
||||
|
||||
type RunJobReconcileEntry struct {
|
||||
JobID string `json:"jobId"`
|
||||
LeaseToken string `json:"leaseToken"`
|
||||
Attempt int `json:"attempt"`
|
||||
}
|
||||
|
||||
type RunJobReconcileRequest struct {
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
ActiveJobIDs []string `json:"activeJobIds"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
SessionToken string `json:"sessionToken"`
|
||||
ActiveJobs []RunJobReconcileEntry `json:"activeJobs"`
|
||||
}
|
||||
|
||||
type RunJobReconcileResponse struct {
|
||||
Accepted bool `json:"accepted"`
|
||||
RunEndpointID string `json:"runEndpointId"`
|
||||
ActiveJobs []RunJobAssignmentResponse `json:"activeJobs"`
|
||||
UnknownJobIDs []string `json:"unknownJobIds"`
|
||||
ConfirmedJobs []RunJobAssignmentResponse `json:"confirmedJobs"`
|
||||
DiscardJobIDs []string `json:"discardJobIds"`
|
||||
ServerTime time.Time `json:"serverTime"`
|
||||
}
|
||||
|
||||
@@ -193,16 +317,18 @@ func (request RunJobProgressRequest) ToDomain() domain.RunJobProgress {
|
||||
|
||||
func (request RunJobResultRequest) ToDomain() domain.RunJobResult {
|
||||
return domain.RunJobResult{
|
||||
RunEndpointID: request.RunEndpointID,
|
||||
SessionToken: request.SessionToken,
|
||||
JobID: request.JobID,
|
||||
LeaseToken: request.LeaseToken,
|
||||
Attempt: request.Attempt,
|
||||
State: request.State,
|
||||
Progress: progressReportToDomain(request.Progress),
|
||||
ResultRef: request.ResultRef,
|
||||
Message: request.Message,
|
||||
ErrorCode: request.ErrorCode,
|
||||
RunEndpointID: request.RunEndpointID,
|
||||
SessionToken: request.SessionToken,
|
||||
JobID: request.JobID,
|
||||
LeaseToken: request.LeaseToken,
|
||||
Attempt: request.Attempt,
|
||||
State: request.State,
|
||||
Progress: progressReportToDomain(request.Progress),
|
||||
ResultRef: request.ResultRef,
|
||||
Message: request.Message,
|
||||
ErrorCode: request.ErrorCode,
|
||||
Retryable: request.Retryable,
|
||||
ExecutionResult: domain.JobExecutionResult{Kind: request.ExecutionResult.Kind, ProcessState: request.ExecutionResult.ProcessState, ExitClassification: request.ExecutionResult.ExitClassification, ExitCode: request.ExecutionResult.ExitCode, Version: request.ExecutionResult.Version, Checksum: request.ExecutionResult.Checksum, SizeBytes: request.ExecutionResult.SizeBytes, AuditSummary: request.ExecutionResult.AuditSummary, Content: request.ExecutionResult.Content},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,6 +342,22 @@ func (request DistributionBuildInputRequest) ToDomain() domain.DistributionBuild
|
||||
}
|
||||
}
|
||||
|
||||
func (request DependencyExecutionInputRequest) ToDomain() domain.DependencyExecutionInputRequest {
|
||||
return domain.DependencyExecutionInputRequest{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, JobID: request.JobID, LeaseToken: request.LeaseToken, Attempt: request.Attempt}
|
||||
}
|
||||
|
||||
func (request RunUpdateInputRequest) ToDomain() domain.RunUpdateInputRequest {
|
||||
return domain.RunUpdateInputRequest{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, JobID: request.JobID, LeaseToken: request.LeaseToken, Attempt: request.Attempt}
|
||||
}
|
||||
|
||||
func (request RunUpdateChunkRequest) ToDomain() domain.RunUpdateChunkRequest {
|
||||
return domain.RunUpdateChunkRequest{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, JobID: request.JobID, LeaseToken: request.LeaseToken, Attempt: request.Attempt, Offset: request.Offset, Length: request.Length}
|
||||
}
|
||||
|
||||
func (request RunUpdateHealthRequest) ToDomain() domain.RunUpdateHealthReport {
|
||||
return domain.RunUpdateHealthReport{RunEndpointID: request.RunEndpointID, SessionToken: request.SessionToken, JobID: request.JobID, LeaseToken: request.LeaseToken, Attempt: request.Attempt, Outcome: request.Outcome, Version: request.Version}
|
||||
}
|
||||
|
||||
func (request RunJobCancelRequestBody) ToDomain() domain.RunJobCancelRequest {
|
||||
return domain.RunJobCancelRequest{
|
||||
JobID: request.JobID,
|
||||
@@ -229,14 +371,19 @@ func (request RunJobCancelPollRequest) ToDomain() domain.RunJobCancelPoll {
|
||||
SessionToken: request.SessionToken,
|
||||
JobID: request.JobID,
|
||||
LeaseToken: request.LeaseToken,
|
||||
Attempt: request.Attempt,
|
||||
}
|
||||
}
|
||||
|
||||
func (request RunJobReconcileRequest) ToDomain() domain.RunJobReconcile {
|
||||
active := make([]domain.RunJobReconcileEntry, len(request.ActiveJobs))
|
||||
for i, entry := range request.ActiveJobs {
|
||||
active[i] = domain.RunJobReconcileEntry{JobID: entry.JobID, LeaseToken: entry.LeaseToken, Attempt: entry.Attempt}
|
||||
}
|
||||
return domain.RunJobReconcile{
|
||||
RunEndpointID: request.RunEndpointID,
|
||||
SessionToken: request.SessionToken,
|
||||
ActiveJobIDs: domain.CopyStringSlice(request.ActiveJobIDs),
|
||||
ActiveJobs: active,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,6 +433,7 @@ func DistributionBuildInputFromDomain(input domain.DistributionBuildInput) Distr
|
||||
ProfileKey: input.ProfileKey,
|
||||
TargetOS: input.TargetOS,
|
||||
TargetArch: input.TargetArch,
|
||||
TargetRelease: input.TargetRelease,
|
||||
PackageFormat: input.PackageFormat,
|
||||
RepositoryURL: input.RepositoryURL,
|
||||
SourceRevision: input.SourceRevision,
|
||||
@@ -297,12 +445,36 @@ func DistributionBuildInputFromDomain(input domain.DistributionBuildInput) Distr
|
||||
}
|
||||
}
|
||||
|
||||
func DependencyExecutionInputFromDomain(input domain.DependencyExecutionInput) DependencyExecutionInputResponse {
|
||||
input = domain.CopyDependencyExecutionInput(input)
|
||||
steps := make([]RuntimeInstallStepBody, len(input.Plan.Steps))
|
||||
for i, step := range input.Plan.Steps {
|
||||
steps[i] = RuntimeInstallStepBody{Type: step.Type, TargetKey: step.TargetKey, PackageManager: step.PackageManager, PackageName: step.PackageName, Version: step.Version, DownloadRef: step.DownloadRef, Checksum: step.Checksum}
|
||||
}
|
||||
return DependencyExecutionInputResponse{JobID: input.JobID, ServerInstanceID: input.ServerInstanceID, RunEndpointID: input.RunEndpointID, PluginID: input.PluginID, PluginVersion: input.PluginVersion, ProfileKey: input.ProfileKey, TargetOS: input.TargetOS, TargetArch: input.TargetArch, PlanDigest: input.PlanDigest, Probe: RuntimeDependencyProbeBody{Key: input.Probe.Key, Kind: input.Probe.Kind, TargetKey: input.Probe.TargetKey, Required: input.Probe.Required, MinimumVersion: input.Probe.MinimumVersion, Platforms: input.Probe.Platforms}, Plan: RuntimeInstallPlanBody{Key: input.Plan.Key, Title: input.Plan.Title, Platforms: input.Plan.Platforms, Steps: steps}, Bindings: input.Bindings}
|
||||
}
|
||||
|
||||
func RunUpdateInputFromDomain(input domain.RunUpdateInput) RunUpdateInputResponse {
|
||||
return RunUpdateInputResponse{JobID: input.JobID, ServerInstanceID: input.ServerInstanceID, RunEndpointID: input.RunEndpointID, ArtifactID: input.ArtifactID, Checksum: input.Checksum, SizeBytes: input.SizeBytes, TargetOS: input.TargetOS, TargetArch: input.TargetArch, PackageFormat: input.PackageFormat, ExecutableName: input.ExecutableName, TargetRelease: input.TargetRelease, ChunkSizeBytes: input.ChunkSizeBytes}
|
||||
}
|
||||
|
||||
func RunUpdateChunkFromDomain(chunk domain.RunUpdateChunk) RunUpdateChunkResponse {
|
||||
chunk = domain.CopyRunUpdateChunk(chunk)
|
||||
return RunUpdateChunkResponse{JobID: chunk.JobID, ArtifactID: chunk.ArtifactID, Offset: chunk.Offset, TotalBytes: chunk.TotalBytes, Checksum: chunk.Checksum, Payload: chunk.Payload, Complete: chunk.Complete}
|
||||
}
|
||||
|
||||
func RunUpdateHealthFromDomain(result domain.RunUpdateHealthResult) RunUpdateHealthResponse {
|
||||
return RunUpdateHealthResponse{Accepted: result.Accepted, JobID: result.JobID, Phase: result.Phase, ServerTime: result.ServerTime}
|
||||
}
|
||||
|
||||
func RunJobCancelRequestFromDomain(result domain.RunJobCancelRequestResult) RunJobCancelRequestResponse {
|
||||
return RunJobCancelRequestResponse{
|
||||
Accepted: result.Accepted,
|
||||
JobID: result.JobID,
|
||||
Reason: result.Reason,
|
||||
RequestedAt: result.RequestedAt,
|
||||
CompletedAt: result.CompletedAt,
|
||||
State: result.State,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,15 +492,15 @@ func RunJobCancelPollFromDomain(result domain.RunJobCancelPollResult) RunJobCanc
|
||||
|
||||
func RunJobReconcileFromDomain(result domain.RunJobReconcileResult) RunJobReconcileResponse {
|
||||
result = domain.CopyRunJobReconcileResult(result)
|
||||
items := make([]RunJobAssignmentResponse, len(result.ActiveJobs))
|
||||
for i, assignment := range result.ActiveJobs {
|
||||
items := make([]RunJobAssignmentResponse, len(result.ConfirmedJobs))
|
||||
for i, assignment := range result.ConfirmedJobs {
|
||||
items[i] = RunJobAssignmentFromDomain(assignment)
|
||||
}
|
||||
return RunJobReconcileResponse{
|
||||
Accepted: result.Accepted,
|
||||
RunEndpointID: result.RunEndpointID,
|
||||
ActiveJobs: items,
|
||||
UnknownJobIDs: result.UnknownJobIDs,
|
||||
ConfirmedJobs: items,
|
||||
DiscardJobIDs: result.DiscardJobIDs,
|
||||
ServerTime: result.ServerTime,
|
||||
}
|
||||
}
|
||||
@@ -353,8 +525,14 @@ func RunJobAssignmentFromDomain(assignment domain.RunJobAssignment) RunJobAssign
|
||||
State: assignment.State,
|
||||
Progress: progressReportFromDomain(assignment.Progress),
|
||||
ResultRef: assignment.ResultRef,
|
||||
ExecutionInput: RunJobExecutionInputBody{WorkspaceScope: assignment.ExecutionInput.WorkspaceScope, Content: assignment.ExecutionInput.Content, ExpectedVersion: assignment.ExecutionInput.ExpectedVersion, ExpectedChecksum: assignment.ExecutionInput.ExpectedChecksum, MaxReadBytes: assignment.ExecutionInput.MaxReadBytes, RemoteAdapterKey: assignment.ExecutionInput.RemoteAdapterKey, RemoteAdapterKind: assignment.ExecutionInput.RemoteAdapterKind, TimeoutSeconds: assignment.ExecutionInput.TimeoutSeconds},
|
||||
LeaseToken: assignment.LeaseToken,
|
||||
Attempt: assignment.Attempt,
|
||||
MaxAttempts: assignment.MaxAttempts,
|
||||
AckDeadlineAt: assignment.AckDeadlineAt,
|
||||
LeaseExpiresAt: assignment.LeaseExpiresAt,
|
||||
NextAttemptAt: assignment.NextAttemptAt,
|
||||
ProgressSequence: assignment.ProgressSequence,
|
||||
CreatedAt: assignment.CreatedAt,
|
||||
UpdatedAt: assignment.UpdatedAt,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user