Files
browser/platform/domain/production_ops.go
T
2026-07-20 16:42:33 +08:00

353 lines
9.7 KiB
Go

package domain
import "time"
type CapacityAdmissionState string
const (
CapacityAdmissionAccepted CapacityAdmissionState = "accepted"
CapacityAdmissionDeferred CapacityAdmissionState = "deferred"
CapacityAdmissionDenied CapacityAdmissionState = "denied"
)
type CapacityPressureCode string
const (
CapacityPressureEndpointOffline CapacityPressureCode = "endpoint.offline"
CapacityPressureEndpointStale CapacityPressureCode = "endpoint.stale"
CapacityPressureCapabilityGap CapacityPressureCode = "capability.missing"
CapacityPressureJobLimit CapacityPressureCode = "job.limit"
CapacityPressureQueueLimit CapacityPressureCode = "queue.limit"
CapacityPressureBacklog CapacityPressureCode = "spool.backlog"
)
type CapacityAdmissionRequest struct {
ServerInstanceID string
RunEndpointID string
Capability string
TargetKey string
IdempotencyKey string
}
type CapacityAdmissionDecision struct {
Accepted bool
State CapacityAdmissionState
Reason string
RetryAfterSeconds int
ServerInstanceID string
RunEndpointID string
Capability string
TargetKey string
MaxJobs int
RunningJobs int
QueuedJobs int
PressureCodes []CapacityPressureCode
CheckedAt time.Time
AlertID string
AuditEventID string
}
type EndpointCapacityProjection struct {
RunEndpointID string
DisplayName string
Status RunEndpointStatus
Capabilities []string
MaxJobs int
RunningJobs int
QueuedJobs int
LogBacklogBatches int
ArtifactBacklogChunks int
PressureCodes []CapacityPressureCode
Summary string
LastHeartbeatAt time.Time
LastAdmissionDecision CapacityAdmissionState
LastAdmissionReason string
LastAdmissionCheckedAt time.Time
}
type ProductionCapacitySummary struct {
Endpoints []EndpointCapacityProjection
TotalMaxJobs int
TotalRunningJobs int
TotalQueuedJobs int
ActiveAlerts int
GeneratedAt time.Time
}
type AlertSeverity string
const (
AlertSeverityInfo AlertSeverity = "info"
AlertSeverityWarning AlertSeverity = "warning"
AlertSeverityCritical AlertSeverity = "critical"
)
type AlertState string
const (
AlertStateActive AlertState = "active"
AlertStateAcknowledged AlertState = "acknowledged"
AlertStateResolved AlertState = "resolved"
)
type AlertRecord struct {
ID string
SourceKind string
SourceID string
RuleKey string
Severity AlertSeverity
State AlertState
Title string
Message string
OccurrenceCount int
Retryable bool
RetryAfterSeconds int
LastJobID string
LastAuditEventID string
LastSeenAt time.Time
AcknowledgedBy string
AcknowledgedAt time.Time
ResolvedBy string
ResolvedAt time.Time
ResolutionNote string
CreatedAt time.Time
UpdatedAt time.Time
}
type AlertFilter struct {
State AlertState
SourceKind string
SourceID string
Severity AlertSeverity
}
type AlertAcknowledgeRequest struct {
AlertID string
Note string
}
type AlertResolveRequest struct {
AlertID string
Note string
}
type AlertRetryRequest struct {
AlertID string
IdempotencyKey string
}
type AlertRetryResult struct {
Alert AlertRecord
Decision CapacityAdmissionDecision
Status string
}
type PluginLifecycleState string
const (
PluginLifecycleStatePending PluginLifecycleState = "pending"
PluginLifecycleStateInstalled PluginLifecycleState = "installed"
PluginLifecycleStateEnabled PluginLifecycleState = "enabled"
PluginLifecycleStateDisabled PluginLifecycleState = "disabled"
PluginLifecycleStateUpgrading PluginLifecycleState = "upgrading"
PluginLifecycleStateRollingBack PluginLifecycleState = "rolling_back"
PluginLifecycleStateRetired PluginLifecycleState = "retired"
PluginLifecycleStateFailed PluginLifecycleState = "failed"
)
type PluginLifecycleOperation string
const (
PluginLifecycleOperationInstall PluginLifecycleOperation = "install"
PluginLifecycleOperationEnable PluginLifecycleOperation = "enable"
PluginLifecycleOperationDisable PluginLifecycleOperation = "disable"
PluginLifecycleOperationUpgrade PluginLifecycleOperation = "upgrade"
PluginLifecycleOperationRollback PluginLifecycleOperation = "rollback"
PluginLifecycleOperationRetire PluginLifecycleOperation = "retire"
PluginLifecycleOperationDependencyCheck PluginLifecycleOperation = "dependency-check"
)
type PluginLifecycleInstallation struct {
ID string
PluginID string
ServerInstanceID string
CurrentVersion string
TargetVersion string
PreviousVersion string
DesiredState PluginLifecycleState
CurrentState PluginLifecycleState
LastOperation PluginLifecycleOperation
Compatibility string
DependencyState DependencyState
JobID string
AlertID string
AuditEventID string
FailureReason string
IdempotencyKey string
CreatedAt time.Time
UpdatedAt time.Time
}
type PluginLifecycleFilter struct {
PluginID string
ServerInstanceID string
CurrentState PluginLifecycleState
}
type PluginLifecycleRequest struct {
PluginID string
ServerInstanceID string
Operation PluginLifecycleOperation
TargetVersion string
IdempotencyKey string
Confirmed bool
}
type PluginLifecycleResult struct {
Installation PluginLifecycleInstallation
Job Job
Decision CapacityAdmissionDecision
Alert *AlertRecord
Status string
}
type AIConfigDiffState string
const (
AIConfigDiffStatePending AIConfigDiffState = "pending"
AIConfigDiffStateApproved AIConfigDiffState = "approved"
AIConfigDiffStateCancelled AIConfigDiffState = "cancelled"
AIConfigDiffStateExpired AIConfigDiffState = "expired"
)
type AIConfigDiffPreview struct {
ID string
RequestID string
CreatedBy string
ServerInstanceID string
PluginID string
ProviderID string
Model string
Key string
ConfigVersion int
CurrentConfigChecksum string
ProposedConfig string
DiffSummary string
State AIConfigDiffState
ExpiresAt time.Time
ApprovedBy string
ApprovedAt time.Time
ApprovalIdempotencyKey string
CancelledBy string
CancelledAt time.Time
JobID string
CreatedAt time.Time
UpdatedAt time.Time
}
type AIConfigDiffFilter struct {
ServerInstanceID string
PluginID string
State AIConfigDiffState
}
type AIConfigDiffApprovalRequest struct {
DiffID string
IdempotencyKey string
}
type AIConfigDiffApprovalResult struct {
Preview AIConfigDiffPreview
Dispatch ServerConfigWriteDispatch
}
func CopyCapacityAdmissionDecision(decision CapacityAdmissionDecision) CapacityAdmissionDecision {
decision.PressureCodes = CopyCapacityPressureCodes(decision.PressureCodes)
return decision
}
func CopyEndpointCapacityProjection(projection EndpointCapacityProjection) EndpointCapacityProjection {
projection.Capabilities = CopyStringSlice(projection.Capabilities)
projection.PressureCodes = CopyCapacityPressureCodes(projection.PressureCodes)
return projection
}
func CopyProductionCapacitySummary(summary ProductionCapacitySummary) ProductionCapacitySummary {
if summary.Endpoints != nil {
summary.Endpoints = append([]EndpointCapacityProjection(nil), summary.Endpoints...)
for i := range summary.Endpoints {
summary.Endpoints[i] = CopyEndpointCapacityProjection(summary.Endpoints[i])
}
}
return summary
}
func CopyCapacityPressureCodes(codes []CapacityPressureCode) []CapacityPressureCode {
if codes == nil {
return nil
}
out := make([]CapacityPressureCode, len(codes))
copy(out, codes)
return out
}
func CopyAlertRecord(alert AlertRecord) AlertRecord { return alert }
func CopyAlertRecords(alerts []AlertRecord) []AlertRecord {
if alerts == nil {
return nil
}
out := make([]AlertRecord, len(alerts))
copy(out, alerts)
return out
}
func CopyAlertRetryResult(result AlertRetryResult) AlertRetryResult {
result.Alert = CopyAlertRecord(result.Alert)
result.Decision = CopyCapacityAdmissionDecision(result.Decision)
return result
}
func CopyPluginLifecycleInstallation(installation PluginLifecycleInstallation) PluginLifecycleInstallation {
return installation
}
func CopyPluginLifecycleInstallations(installations []PluginLifecycleInstallation) []PluginLifecycleInstallation {
if installations == nil {
return nil
}
out := make([]PluginLifecycleInstallation, len(installations))
copy(out, installations)
return out
}
func CopyPluginLifecycleResult(result PluginLifecycleResult) PluginLifecycleResult {
result.Installation = CopyPluginLifecycleInstallation(result.Installation)
result.Job = CopyJob(result.Job)
result.Decision = CopyCapacityAdmissionDecision(result.Decision)
if result.Alert != nil {
alert := CopyAlertRecord(*result.Alert)
result.Alert = &alert
}
return result
}
func CopyAIConfigDiffPreview(preview AIConfigDiffPreview) AIConfigDiffPreview {
return preview
}
func CopyAIConfigDiffPreviews(previews []AIConfigDiffPreview) []AIConfigDiffPreview {
if previews == nil {
return nil
}
out := make([]AIConfigDiffPreview, len(previews))
copy(out, previews)
return out
}
func CopyAIConfigDiffApprovalResult(result AIConfigDiffApprovalResult) AIConfigDiffApprovalResult {
result.Preview = CopyAIConfigDiffPreview(result.Preview)
result.Dispatch = CopyServerConfigWriteDispatch(result.Dispatch)
return result
}