Reduce hot run polling pressure

This commit is contained in:
npc0-hue
2026-09-07 20:26:20 +08:00
parent 4ab7bb820d
commit fd9dbab669
16 changed files with 335 additions and 56 deletions
+47 -27
View File
@@ -888,31 +888,31 @@ type JobRetryPolicyResponse struct {
}
type JobResponse struct {
ID string `json:"id"`
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"`
ExecutionResult JobExecutionResultResponse `json:"executionResult,omitempty"`
RetryPolicy JobRetryPolicyResponse `json:"retryPolicy"`
Attempt int `json:"attempt"`
NextAttemptAt *time.Time `json:"nextAttemptAt,omitempty"`
AckDeadlineAt *time.Time `json:"ackDeadlineAt,omitempty"`
LeaseExpiresAt *time.Time `json:"leaseExpiresAt,omitempty"`
CancelReason string `json:"cancelReason,omitempty"`
CancelRequestedAt *time.Time `json:"cancelRequestedAt,omitempty"`
CancelCompletedAt *time.Time `json:"cancelCompletedAt,omitempty"`
TerminalAt *time.Time `json:"terminalAt,omitempty"`
LastReconciledAt *time.Time `json:"lastReconciledAt,omitempty"`
ReconcileCount int `json:"reconcileCount"`
ReconcileOutcome string `json:"reconcileOutcome,omitempty"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
ID string `json:"id"`
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"`
ExecutionResult *JobExecutionResultResponse `json:"executionResult,omitempty"`
RetryPolicy JobRetryPolicyResponse `json:"retryPolicy"`
Attempt int `json:"attempt"`
NextAttemptAt *time.Time `json:"nextAttemptAt,omitempty"`
AckDeadlineAt *time.Time `json:"ackDeadlineAt,omitempty"`
LeaseExpiresAt *time.Time `json:"leaseExpiresAt,omitempty"`
CancelReason string `json:"cancelReason,omitempty"`
CancelRequestedAt *time.Time `json:"cancelRequestedAt,omitempty"`
CancelCompletedAt *time.Time `json:"cancelCompletedAt,omitempty"`
TerminalAt *time.Time `json:"terminalAt,omitempty"`
LastReconciledAt *time.Time `json:"lastReconciledAt,omitempty"`
ReconcileCount int `json:"reconcileCount"`
ReconcileOutcome string `json:"reconcileOutcome,omitempty"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
type JobExecutionResultResponse struct {
@@ -1990,6 +1990,18 @@ func RunEndpointListFromDomain(endpoints []domain.RunEndpoint) RunEndpointListRe
}
func JobFromDomain(job domain.Job) JobResponse {
return jobResponseFromDomain(job, true)
}
func JobListItemFromDomain(job domain.Job) JobResponse {
return jobResponseFromDomain(job, false)
}
func jobResponseFromDomain(job domain.Job, includeExecutionResult bool) JobResponse {
var executionResult *JobExecutionResultResponse
if includeExecutionResult {
executionResult = jobExecutionResultFromDomain(job.ExecutionResult)
}
return JobResponse{
ID: job.ID,
ServerInstanceID: job.ServerInstanceID,
@@ -2001,7 +2013,7 @@ func JobFromDomain(job domain.Job) JobResponse {
State: job.State,
Progress: progressFromDomain(job.Progress),
ResultRef: job.ResultRef,
ExecutionResult: JobExecutionResultResponse{Kind: job.ExecutionResult.Kind, ProcessState: job.ExecutionResult.ProcessState, ExitClassification: job.ExecutionResult.ExitClassification, ExitCode: job.ExecutionResult.ExitCode, Version: job.ExecutionResult.Version, Checksum: job.ExecutionResult.Checksum, SizeBytes: job.ExecutionResult.SizeBytes, Summary: job.ExecutionResult.Summary, ServerDeploymentEvidence: serverDeploymentEvidenceFromDomain(job.ExecutionResult.ServerDeploymentEvidence)},
ExecutionResult: executionResult,
RetryPolicy: JobRetryPolicyResponse{
MaxAttempts: job.RetryPolicy.MaxAttempts,
InitialBackoffSeconds: job.RetryPolicy.InitialBackoffSeconds,
@@ -2023,6 +2035,14 @@ func JobFromDomain(job domain.Job) JobResponse {
}
}
func jobExecutionResultFromDomain(result domain.JobExecutionResult) *JobExecutionResultResponse {
response := JobExecutionResultResponse{Kind: result.Kind, ProcessState: result.ProcessState, ExitClassification: result.ExitClassification, ExitCode: result.ExitCode, Version: result.Version, Checksum: result.Checksum, SizeBytes: result.SizeBytes, Summary: result.Summary, ServerDeploymentEvidence: serverDeploymentEvidenceFromDomain(result.ServerDeploymentEvidence)}
if response.Kind == "" && response.ProcessState == "" && response.ExitClassification == "" && response.ExitCode == 0 && response.Version == 0 && response.Checksum == "" && response.SizeBytes == 0 && response.Summary == "" && response.ServerDeploymentEvidence == nil {
return nil
}
return &response
}
func optionalTime(value time.Time) *time.Time {
if value.IsZero() {
return nil
@@ -2034,7 +2054,7 @@ func optionalTime(value time.Time) *time.Time {
func JobListFromDomain(jobs []domain.Job) JobListResponse {
items := make([]JobResponse, len(jobs))
for i, job := range jobs {
items[i] = JobFromDomain(job)
items[i] = JobListItemFromDomain(job)
}
return JobListResponse{Items: items, Count: len(items)}
}