Complete platform management workflows

This commit is contained in:
npc0-hue
2026-07-14 16:39:37 +08:00
parent 7e05d0a4e7
commit 4f33f761a3
106 changed files with 11313 additions and 460 deletions
+161 -2
View File
@@ -63,6 +63,55 @@ type ArtifactRepository interface {
Update(domain.Artifact) error
}
type RuntimeBindingRepository interface {
Create(domain.RuntimeBinding) error
Get(id string) (domain.RuntimeBinding, error)
List(domain.RuntimeBindingFilter) ([]domain.RuntimeBinding, error)
Update(domain.RuntimeBinding) error
}
type EncryptedComponentKeyRepository interface {
Create(domain.EncryptedComponentKey) error
Get(id string) (domain.EncryptedComponentKey, error)
List(domain.EncryptedComponentKeyFilter) ([]domain.EncryptedComponentKey, error)
Update(domain.EncryptedComponentKey) error
}
type RunDistributionRepository interface {
Create(domain.RunDistribution) error
Get(id string) (domain.RunDistribution, error)
List(domain.RunDistributionFilter) ([]domain.RunDistribution, error)
Update(domain.RunDistribution) error
}
type ClientManagerDistributionRepository interface {
Create(domain.ClientManagerDistribution) error
Get(id string) (domain.ClientManagerDistribution, error)
List(domain.ClientManagerDistributionFilter) ([]domain.ClientManagerDistribution, error)
Update(domain.ClientManagerDistribution) error
}
type DependencyStatusRepository interface {
Create(domain.DependencyStatus) error
Get(id string) (domain.DependencyStatus, error)
List(domain.DependencyStatusFilter) ([]domain.DependencyStatus, error)
Update(domain.DependencyStatus) error
}
type ClientManagerBuildJobRepository interface {
Create(domain.ClientManagerBuildJob) error
Get(id string) (domain.ClientManagerBuildJob, error)
List(domain.ClientManagerBuildJobFilter) ([]domain.ClientManagerBuildJob, error)
Update(domain.ClientManagerBuildJob) error
}
type RunUpdateJobRepository interface {
Create(domain.RunUpdateJob) error
Get(id string) (domain.RunUpdateJob, error)
List(domain.RunUpdateJobFilter) ([]domain.RunUpdateJob, error)
Update(domain.RunUpdateJob) error
}
type LogStreamRepository interface {
Create(domain.LogStream) error
Get(id string) (domain.LogStream, error)
@@ -85,6 +134,13 @@ type Store interface {
RunEndpoints() RunEndpointRepository
Jobs() JobRepository
Artifacts() ArtifactRepository
RuntimeBindings() RuntimeBindingRepository
EncryptedComponentKeys() EncryptedComponentKeyRepository
RunDistributions() RunDistributionRepository
ClientManagerDistributions() ClientManagerDistributionRepository
DependencyStatuses() DependencyStatusRepository
ClientManagerBuildJobs() ClientManagerBuildJobRepository
RunUpdateJobs() RunUpdateJobRepository
LogStreams() LogStreamRepository
AuditEvents() AuditEventRepository
}
@@ -97,6 +153,13 @@ type MemoryStore struct {
runEndpoints *memoryRepository[domain.RunEndpoint, domain.RunEndpointFilter]
jobs *memoryJobRepository
artifacts *memoryRepository[domain.Artifact, domain.ArtifactFilter]
runtimeBindings *memoryRepository[domain.RuntimeBinding, domain.RuntimeBindingFilter]
componentKeys *memoryRepository[domain.EncryptedComponentKey, domain.EncryptedComponentKeyFilter]
runDists *memoryRepository[domain.RunDistribution, domain.RunDistributionFilter]
clientDists *memoryRepository[domain.ClientManagerDistribution, domain.ClientManagerDistributionFilter]
dependencies *memoryRepository[domain.DependencyStatus, domain.DependencyStatusFilter]
buildJobs *memoryRepository[domain.ClientManagerBuildJob, domain.ClientManagerBuildJobFilter]
updateJobs *memoryRepository[domain.RunUpdateJob, domain.RunUpdateJobFilter]
logStreams *memoryRepository[domain.LogStream, domain.LogStreamFilter]
auditEvents *memoryRepository[domain.AuditEvent, domain.AuditEventFilter]
}
@@ -134,6 +197,41 @@ func NewMemoryStore() *MemoryStore {
domain.CopyArtifact,
matchArtifact,
),
runtimeBindings: newMemoryRepository(
func(binding domain.RuntimeBinding) string { return binding.ID },
domain.CopyRuntimeBinding,
matchRuntimeBinding,
),
componentKeys: newMemoryRepository(
func(key domain.EncryptedComponentKey) string { return key.ID },
domain.CopyEncryptedComponentKey,
matchEncryptedComponentKey,
),
runDists: newMemoryRepository(
func(distribution domain.RunDistribution) string { return distribution.ID },
domain.CopyRunDistribution,
matchRunDistribution,
),
clientDists: newMemoryRepository(
func(distribution domain.ClientManagerDistribution) string { return distribution.ID },
domain.CopyClientManagerDistribution,
matchClientManagerDistribution,
),
dependencies: newMemoryRepository(
func(status domain.DependencyStatus) string { return status.ID },
domain.CopyDependencyStatus,
matchDependencyStatus,
),
buildJobs: newMemoryRepository(
func(job domain.ClientManagerBuildJob) string { return job.ID },
domain.CopyClientManagerBuildJob,
matchClientManagerBuildJob,
),
updateJobs: newMemoryRepository(
func(job domain.RunUpdateJob) string { return job.ID },
domain.CopyRunUpdateJob,
matchRunUpdateJob,
),
logStreams: newMemoryRepository(
func(stream domain.LogStream) string { return stream.ID },
domain.CopyLogStream,
@@ -154,8 +252,21 @@ func (store *MemoryStore) ServerInstances() ServerInstanceRepository { return st
func (store *MemoryStore) RunEndpoints() RunEndpointRepository { return store.runEndpoints }
func (store *MemoryStore) Jobs() JobRepository { return store.jobs }
func (store *MemoryStore) Artifacts() ArtifactRepository { return store.artifacts }
func (store *MemoryStore) LogStreams() LogStreamRepository { return store.logStreams }
func (store *MemoryStore) AuditEvents() AuditEventRepository { return store.auditEvents }
func (store *MemoryStore) RuntimeBindings() RuntimeBindingRepository { return store.runtimeBindings }
func (store *MemoryStore) EncryptedComponentKeys() EncryptedComponentKeyRepository {
return store.componentKeys
}
func (store *MemoryStore) RunDistributions() RunDistributionRepository { return store.runDists }
func (store *MemoryStore) ClientManagerDistributions() ClientManagerDistributionRepository {
return store.clientDists
}
func (store *MemoryStore) DependencyStatuses() DependencyStatusRepository { return store.dependencies }
func (store *MemoryStore) ClientManagerBuildJobs() ClientManagerBuildJobRepository {
return store.buildJobs
}
func (store *MemoryStore) RunUpdateJobs() RunUpdateJobRepository { return store.updateJobs }
func (store *MemoryStore) LogStreams() LogStreamRepository { return store.logStreams }
func (store *MemoryStore) AuditEvents() AuditEventRepository { return store.auditEvents }
type memoryRepository[T any, F any] struct {
mu sync.RWMutex
@@ -271,6 +382,9 @@ func matchGamePlugin(plugin domain.GamePlugin, filter domain.GamePluginFilter) b
}
func matchServerInstance(instance domain.ServerInstance, filter domain.ServerInstanceFilter) bool {
if instance.State == domain.ServerInstanceStateDeleted && filter.State != domain.ServerInstanceStateDeleted {
return false
}
return (filter.PluginID == "" || instance.PluginID == filter.PluginID) &&
(filter.RunEndpointID == "" || instance.RunEndpointID == filter.RunEndpointID) &&
(filter.State == "" || instance.State == filter.State) &&
@@ -302,6 +416,51 @@ func matchArtifact(artifact domain.Artifact, filter domain.ArtifactFilter) bool
(filter.State == "" || artifact.State == filter.State)
}
func matchRuntimeBinding(binding domain.RuntimeBinding, filter domain.RuntimeBindingFilter) bool {
return (filter.ServerInstanceID == "" || binding.ServerInstanceID == filter.ServerInstanceID) &&
(filter.ProfileKey == "" || binding.ProfileKey == filter.ProfileKey) &&
(filter.Status == "" || binding.Status == filter.Status)
}
func matchEncryptedComponentKey(key domain.EncryptedComponentKey, filter domain.EncryptedComponentKeyFilter) bool {
return (filter.ServerInstanceID == "" || key.ServerInstanceID == filter.ServerInstanceID) &&
(filter.ComponentKind == "" || key.ComponentKind == filter.ComponentKind) &&
(filter.ComponentKey == "" || key.ComponentKey == filter.ComponentKey) &&
(filter.Status == "" || key.Status == filter.Status)
}
func matchRunDistribution(distribution domain.RunDistribution, filter domain.RunDistributionFilter) bool {
return (filter.ServerInstanceID == "" || distribution.ServerInstanceID == filter.ServerInstanceID) &&
(filter.TargetOS == "" || distribution.TargetOS == filter.TargetOS) &&
(filter.TargetArch == "" || distribution.TargetArch == filter.TargetArch) &&
(filter.Status == "" || distribution.Status == filter.Status)
}
func matchClientManagerDistribution(distribution domain.ClientManagerDistribution, filter domain.ClientManagerDistributionFilter) bool {
return (filter.ServerInstanceID == "" || distribution.ServerInstanceID == filter.ServerInstanceID) &&
(filter.ProfileKey == "" || distribution.ProfileKey == filter.ProfileKey) &&
(filter.TargetOS == "" || distribution.TargetOS == filter.TargetOS) &&
(filter.TargetArch == "" || distribution.TargetArch == filter.TargetArch) &&
(filter.Status == "" || distribution.Status == filter.Status)
}
func matchDependencyStatus(status domain.DependencyStatus, filter domain.DependencyStatusFilter) bool {
return (filter.ServerInstanceID == "" || status.ServerInstanceID == filter.ServerInstanceID) &&
(filter.ProbeKey == "" || status.ProbeKey == filter.ProbeKey) &&
(filter.State == "" || status.State == filter.State)
}
func matchClientManagerBuildJob(job domain.ClientManagerBuildJob, filter domain.ClientManagerBuildJobFilter) bool {
return (filter.ServerInstanceID == "" || job.ServerInstanceID == filter.ServerInstanceID) &&
(filter.ProfileKey == "" || job.ProfileKey == filter.ProfileKey) &&
(filter.Status == "" || job.Status == filter.Status)
}
func matchRunUpdateJob(job domain.RunUpdateJob, filter domain.RunUpdateJobFilter) bool {
return (filter.ServerInstanceID == "" || job.ServerInstanceID == filter.ServerInstanceID) &&
(filter.Status == "" || job.Status == filter.Status)
}
func matchLogStream(stream domain.LogStream, filter domain.LogStreamFilter) bool {
return (filter.ServerInstanceID == "" || stream.ServerInstanceID == filter.ServerInstanceID) &&
(filter.StreamKey == "" || stream.StreamKey == filter.StreamKey)