SpacetimeDB er nå helt fjernet fra Synops. Sanntid håndteres av PG LISTEN/NOTIFY + WebSocket i portvokteren (maskinrommet). Kode fjernet: - spacetimedb/ Rust-modul og spacetime.json - maskinrommet/src/stdb.rs (HTTP-klient for STDB-reducers) - frontend module_bindings/ (23 auto-genererte filer) - spacetimedb npm-avhengighet fra package.json - scripts/test-sanntid.sh (testet STDB-flyt) Infrastruktur: - Docker-container stoppet og fjernet fra docker-compose.yml - Caddy: fjernet /spacetime/* reverse proxy - maskinrommet-env.sh: fjernet STDB_IP og SPACETIMEDB_*-variabler - .env.example: fjernet SpacetimeDB-seksjoner Dokumentasjon oppdatert: - CLAUDE.md: stack, lagmodell, kjerneprinsipper, driftsmodell - docs/arkitektur.md: skrivestien, lesestien, datalag, teknologivalg - docs/retninger/datalaget.md: migrasjonshistorikk, status "fjernet" - 37 andre docs oppdatert (features, concepts, infra, ops, retninger) - Alle kode-kommentarer med STDB-referanser oppdatert Verifisert: maskinrommet bygger og starter OK, frontend bygger OK, helsesjekk returnerer 200. Caddy reloadet.
62 lines
2 KiB
Rust
62 lines
2 KiB
Rust
// Felles hjelpefunksjoner for å spawne CLI-verktøy fra jobbkø-handlere.
|
|
//
|
|
// Mønsteret: maskinrommet orkestrerer (payload-parsing, sikkerhetskontroller),
|
|
// CLI-verktøyet gjør jobben (API-kall, DB-skriving, prosessering).
|
|
// Stdout → jobbresultat (JSON), stderr → feillogg, exitkode → status.
|
|
//
|
|
// Ref: docs/retninger/unix_filosofi.md
|
|
|
|
use std::process::Stdio;
|
|
|
|
/// Kjør et CLI-verktøy og returner stdout som JSON.
|
|
///
|
|
/// - `bin_name`: Verktøynavn for logging (f.eks. "synops-tts")
|
|
/// - `cmd`: Ferdig konfigurert Command med args og env
|
|
///
|
|
/// Stderr logges. Non-zero exit code gir Err med stderr-innhold.
|
|
pub async fn run_cli_tool(
|
|
bin_name: &str,
|
|
cmd: &mut tokio::process::Command,
|
|
) -> Result<serde_json::Value, String> {
|
|
cmd.stdout(Stdio::piped()).stderr(Stdio::piped());
|
|
|
|
let child = cmd
|
|
.spawn()
|
|
.map_err(|e| format!("Kunne ikke starte {bin_name}: {e}"))?;
|
|
|
|
let output = child
|
|
.wait_with_output()
|
|
.await
|
|
.map_err(|e| format!("Feil ved kjøring av {bin_name}: {e}"))?;
|
|
|
|
let stderr = String::from_utf8_lossy(&output.stderr);
|
|
if !stderr.is_empty() {
|
|
tracing::info!(stderr = %stderr, "{bin_name} stderr");
|
|
}
|
|
|
|
if !output.status.success() {
|
|
let code = output.status.code().unwrap_or(-1);
|
|
return Err(format!(
|
|
"{bin_name} feilet (exit {code}): {stderr}"
|
|
));
|
|
}
|
|
|
|
let stdout = String::from_utf8_lossy(&output.stdout);
|
|
serde_json::from_str(&stdout)
|
|
.map_err(|e| format!("Kunne ikke parse {bin_name} output: {e}"))
|
|
}
|
|
|
|
/// Videresend en miljøvariabel til en Command hvis den er satt.
|
|
pub fn forward_env(cmd: &mut tokio::process::Command, key: &str) {
|
|
if let Ok(v) = std::env::var(key) {
|
|
cmd.env(key, v);
|
|
}
|
|
}
|
|
|
|
/// Sett DATABASE_URL på en Command. Feiler hvis variabelen mangler.
|
|
pub fn set_database_url(cmd: &mut tokio::process::Command) -> Result<(), String> {
|
|
let db_url = std::env::var("DATABASE_URL")
|
|
.map_err(|_| "DATABASE_URL ikke satt".to_string())?;
|
|
cmd.env("DATABASE_URL", &db_url);
|
|
Ok(())
|
|
}
|