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 }