zernel_dashboard/
state.rs

1// Copyright (C) 2026 Dyber, Inc. — Proprietary
2
3use std::path::PathBuf;
4use tokio::sync::broadcast;
5
6/// Shared application state for the dashboard.
7pub struct AppState {
8    /// Broadcast channel for SSE telemetry updates (HTML fragments).
9    pub sse_tx: broadcast::Sender<String>,
10    /// Path to the experiments SQLite database.
11    pub experiments_db: PathBuf,
12    /// Path to the jobs SQLite database.
13    pub jobs_db: PathBuf,
14    /// Path to the model registry JSON.
15    pub models_registry: PathBuf,
16}
17
18impl AppState {
19    pub fn new(sse_tx: broadcast::Sender<String>) -> Self {
20        let zernel_dir = dirs::home_dir()
21            .unwrap_or_else(|| PathBuf::from("."))
22            .join(".zernel");
23
24        Self {
25            sse_tx,
26            experiments_db: zernel_dir.join("experiments").join("experiments.db"),
27            jobs_db: zernel_dir.join("jobs").join("jobs.db"),
28            models_registry: zernel_dir.join("models").join("registry.json"),
29        }
30    }
31}