pub struct AppState {Show 17 fields
pub cluster_config: ClusterConfig,
pub container_runtime: Arc<dyn Runtime>,
pub wasm_runtime: Option<Arc<dyn Runtime>>,
pub services: RwLock<HashMap<String, ServiceState>>,
pub route_table: SharedRouteTable,
pub wasm_triggers: SharedWasmTriggers,
pub registered_nodes: RwLock<HashMap<u64, RegisteredNode>>,
pub webhooks: WebhookStore,
pub api_tokens: Vec<String>,
pub pending_commands: RwLock<HashMap<u64, Vec<Value>>>,
pub deploy_history: RwLock<DeployHistory>,
pub acme_manager: Option<AcmeManager>,
pub cert_resolver: Option<SharedCertResolver>,
pub container_stats: RwLock<HashMap<String, ContainerStats>>,
pub store: Option<Arc<ClusterStore>>,
pub ws_agents: RwLock<HashMap<u64, AgentSender>>,
pub log_listeners: RwLock<HashMap<String, Sender<(String, bool)>>>,
}Expand description
Shared state for the control plane, accessible by the API server and reconciler.
Fields§
§cluster_config: ClusterConfigCluster configuration.
container_runtime: Arc<dyn Runtime>Container runtime (Docker).
wasm_runtime: Option<Arc<dyn Runtime>>Wasm runtime (wasmtime). Trait object to avoid coupling to concrete type.
services: RwLock<HashMap<String, ServiceState>>Current service state, keyed by service name.
route_table: SharedRouteTableRouting table for container workloads, shared with the reverse proxy.
wasm_triggers: SharedWasmTriggersWasm HTTP triggers, shared with the reverse proxy.
registered_nodes: RwLock<HashMap<u64, RegisteredNode>>Registered cluster nodes (M2 in-memory, will move to Raft store).
webhooks: WebhookStoreWebhook configurations for push-triggered deploys.
api_tokens: Vec<String>API bearer tokens for authentication (empty = allow all).
pending_commands: RwLock<HashMap<u64, Vec<Value>>>Pending commands for agent nodes, keyed by node_id. Uses serde_json::Value to avoid circular dependency on orca-agent types.
deploy_history: RwLock<DeployHistory>Deploy history for rollback support.
acme_manager: Option<AcmeManager>ACME manager for hot cert provisioning (None if no TLS).
cert_resolver: Option<SharedCertResolver>Dynamic cert resolver shared with the HTTPS listener.
container_stats: RwLock<HashMap<String, ContainerStats>>Cached container stats, keyed by service name.
store: Option<Arc<ClusterStore>>Persistent cluster store (redb). None in tests without persistence.
ws_agents: RwLock<HashMap<u64, AgentSender>>WebSocket senders for connected agent nodes, keyed by node_id.
log_listeners: RwLock<HashMap<String, Sender<(String, bool)>>>Log stream listeners: request_id → (data, done) sender.
Implementations§
Source§impl AppState
impl AppState
Sourcepub fn new(
cluster_config: ClusterConfig,
container_runtime: Arc<dyn Runtime>,
wasm_runtime: Option<Arc<dyn Runtime>>,
route_table: SharedRouteTable,
wasm_triggers: SharedWasmTriggers,
) -> Self
pub fn new( cluster_config: ClusterConfig, container_runtime: Arc<dyn Runtime>, wasm_runtime: Option<Arc<dyn Runtime>>, route_table: SharedRouteTable, wasm_triggers: SharedWasmTriggers, ) -> Self
Create with shared route table and Wasm triggers (for sharing with the proxy).
Sourcepub fn with_store(self, store: Arc<ClusterStore>) -> Self
pub fn with_store(self, store: Arc<ClusterStore>) -> Self
Set persistent store for service state.
Sourcepub fn with_acme(
self,
manager: AcmeManager,
resolver: SharedCertResolver,
) -> Self
pub fn with_acme( self, manager: AcmeManager, resolver: SharedCertResolver, ) -> Self
Set ACME manager and cert resolver for hot cert provisioning.
Auto Trait Implementations§
impl !Freeze for AppState
impl !RefUnwindSafe for AppState
impl Send for AppState
impl Sync for AppState
impl Unpin for AppState
impl UnsafeUnpin for AppState
impl !UnwindSafe for AppState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
Source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self file descriptor.Source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
Source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
self file descriptor. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request