WP-10: OS and package inventory
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / ui (push) Has been cancelled

Debian inspector (dpkg-query, apt-get -s upgrade, snap list, os-release,
reboot-required) behind a CommandRunner port with tested parsers, fake
inspector for dev, persisted inventory snapshot, package_refresh job,
/api/system/inventory, Updates page with OS card, summary and filterable
package table.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-09-02 22:21:46 +02:00
parent 7b6d242988
commit b6ddb8889d
12 changed files with 444 additions and 39 deletions

View File

@ -4,7 +4,6 @@ use std::sync::{Arc, Mutex};
use application::{JobHandler, JobLog, JobRunner};
use async_trait::async_trait;
use axum::Router;
use domain::jobs::JobKind;
use domain::ports::Mailer;
use domain::settings::SmtpSettings;
use domain::DomainError;
@ -49,6 +48,7 @@ pub fn sent_mails(_app: &Router) -> Vec<(Vec<String>, String, String)> {
SENT.lock().unwrap().clone()
}
/// Test handler for kinds without a real implementation yet.
pub struct TestJob;
#[async_trait]
@ -60,7 +60,7 @@ impl JobHandler for TestJob {
}
pub fn register_test_jobs(runner: JobRunner) -> JobRunner {
runner.register(JobKind::PackageRefresh, Arc::new(TestJob))
runner
}
pub async fn build_test_app() -> Router {
@ -79,8 +79,14 @@ async fn build_test_app_with(cfg: Config) -> Router {
let pool = infrastructure::connect(&cfg.database_url)
.await
.expect("db");
let state = AppState::with_adapters(cfg, pool, Arc::new(RecordingMailer), register_test_jobs)
.expect("state");
let state = AppState::with_adapters(
cfg,
pool,
Arc::new(RecordingMailer),
Arc::new(infrastructure::FakeHostInspector),
register_test_jobs,
)
.expect("state");
state.bootstrap().await.expect("bootstrap");
build_app(state)
}