Files
browser/platform/model/client_manager_lifecycle.go
T

115 lines
7.1 KiB
Go

package model
import (
"time"
"browser.local/platform/domain"
)
// ClientManagerInstallation is the durable desired/observed lifecycle aggregate for one server/profile.
type ClientManagerInstallation struct {
// ID is the stable installation identifier.
ID string `json:"id" db:"id"`
// ServerInstanceID scopes the installation to one authorized server.
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
// PluginID identifies the installed game plugin declaration.
PluginID string `json:"pluginId" db:"plugin_id"`
// ProfileKey identifies the plugin client-manager profile.
ProfileKey string `json:"profileKey" db:"profile_key"`
// RunEndpointID is the fenced machine executor assignment.
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
// TargetOS is the package operating-system target.
TargetOS string `json:"targetOs" db:"target_os"`
// TargetArch is the package architecture target.
TargetArch string `json:"targetArch" db:"target_arch"`
// Status is the durable lifecycle state.
Status domain.ClientManagerLifecycleStatus `json:"status" db:"status"`
// Phase is a bounded safe execution phase.
Phase string `json:"phase" db:"phase"`
DesiredVersion string `json:"desiredVersion" db:"desired_version"`
ActiveVersion string `json:"activeVersion" db:"active_version"`
PreviousVersion string `json:"previousVersion" db:"previous_version"`
DesiredRevision string `json:"desiredRevision" db:"desired_revision"`
ActiveRevision string `json:"activeRevision" db:"active_revision"`
PreviousRevision string `json:"previousRevision" db:"previous_revision"`
DesiredArtifactID string `json:"desiredArtifactId" db:"desired_artifact_id"`
ActiveArtifactID string `json:"activeArtifactId" db:"active_artifact_id"`
PreviousArtifactID string `json:"previousArtifactId" db:"previous_artifact_id"`
Checksum string `json:"checksum" db:"checksum"`
KeyGeneration int `json:"keyGeneration" db:"key_generation"`
DeploymentGeneration int `json:"deploymentGeneration" db:"deployment_generation"`
CurrentJobID string `json:"currentJobId" db:"current_job_id"`
LastSuccessfulJobID string `json:"lastSuccessfulJobId" db:"last_successful_job_id"`
LastOperation domain.ClientManagerLifecycleOperation `json:"lastOperation" db:"last_operation"`
Health domain.ClientManagerHealthStatus `json:"health" db:"health"`
HealthReason string `json:"healthReason" db:"health_reason"`
LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"`
LastHeartbeatSequence uint64 `json:"lastHeartbeatSequence" db:"last_heartbeat_sequence"`
Retryable bool `json:"retryable" db:"retryable"`
RequiresRedeploy bool `json:"requiresRedeploy" db:"requires_redeploy"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
InstalledAt time.Time `json:"installedAt" db:"installed_at"`
UninstalledAt time.Time `json:"uninstalledAt" db:"uninstalled_at"`
}
func (ClientManagerInstallation) TableName() string { return "client_manager_installations" }
// ClientManagerSession stores only the hash and fences for a short-lived component session.
type ClientManagerSession struct {
ID string `json:"id" db:"id"`
InstallationID string `json:"installationId" db:"installation_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
ProfileKey string `json:"profileKey" db:"profile_key"`
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
ArtifactID string `json:"artifactId" db:"artifact_id"`
KeyGeneration int `json:"keyGeneration" db:"key_generation"`
DeploymentGeneration int `json:"deploymentGeneration" db:"deployment_generation"`
TokenHash string `json:"tokenHash" db:"token_hash"`
Capabilities []string `json:"capabilities" db:"capabilities"`
Status domain.ClientManagerSessionStatus `json:"status" db:"status"`
LastHeartbeatSequence uint64 `json:"lastHeartbeatSequence" db:"last_heartbeat_sequence"`
LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
RevokedAt time.Time `json:"revokedAt" db:"revoked_at"`
}
func (ClientManagerSession) TableName() string { return "client_manager_sessions" }
// ClientManagerRegistrationNonce is a bounded replay fence for one signed registration request.
type ClientManagerRegistrationNonce struct {
ID string `json:"id" db:"id"`
InstallationID string `json:"installationId" db:"installation_id"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
}
func (ClientManagerRegistrationNonce) TableName() string { return "client_manager_registration_nonces" }
func ClientManagerInstallationFromDomain(value domain.ClientManagerInstallation) ClientManagerInstallation {
return ClientManagerInstallation(value)
}
func (value ClientManagerInstallation) ToDomain() domain.ClientManagerInstallation {
return domain.ClientManagerInstallation(value)
}
func ClientManagerSessionFromDomain(value domain.ClientManagerSession) ClientManagerSession {
value = domain.CopyClientManagerSession(value)
return ClientManagerSession(value)
}
func (value ClientManagerSession) ToDomain() domain.ClientManagerSession {
return domain.CopyClientManagerSession(domain.ClientManagerSession(value))
}
func ClientManagerRegistrationNonceFromDomain(value domain.ClientManagerRegistrationNonce) ClientManagerRegistrationNonce {
return ClientManagerRegistrationNonce(value)
}
func (value ClientManagerRegistrationNonce) ToDomain() domain.ClientManagerRegistrationNonce {
return domain.ClientManagerRegistrationNonce(value)
}