provisioning-platform/prov-ecosystem/crates/daemon-cli
2026-07-09 22:04:43 +01:00
..
config platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
docs platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
examples platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
src platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
tests platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
ARCHITECTURE.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
Cargo.toml platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
FINAL_STATUS.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
HTML_RENDERING_SUMMARY.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
IMPLEMENTATION_STATUS.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
INDEX.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
PHASE_3_COMPLETE.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
PHASES_1-2_SUMMARY.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
PHASES_1-3_SUMMARY.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
PROJECT_COMPLETION_SUMMARY.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
README.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
ROADMAP_PHASES_3-7.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
TEMPLATE_RENDERING_IMPLEMENTATION.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
TODO_COMPLETION_ANALYSIS.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00
VERIFICATION.md platform: clean-start baseline — Rust workspace: binaries/daemon (constellation materialization) 2026-07-09 22:04:43 +01:00

Daemon-CLI: Ecosystem Daemon & CLI

A production-ready unified daemon and CLI for orchestrating prov-ecosystem services with sub-100ms execution via caching and persistent processes.

Quick Start

Build

cd /Users/Akasha/Development/prov-ecosystem
cargo build --bin provd --bin provctl

Run Daemon

# Start daemon on http://127.0.0.1:9090
./target/debug/provd

# Check health
curl http://127.0.0.1:9090/health

Use CLI

# Daemon mode (requires daemon running)
./target/debug/provctl valida validate --file config.yaml

# Offline mode (no daemon needed)
./target/debug/provctl valida validate --file config.yaml --offline

# View daemon status
./target/debug/provctl daemon status

Architecture

Core Components

Component Purpose Location
Daemon HTTP server orchestrating ecosystem src/bin/provd.rs
CLI User interface (HTTP or offline) src/bin/provctl.rs
Operation Registry Dynamic operation dispatch src/orchestration/registry.rs
Event Bus Inter-service communication src/events/bus.rs
Cache 3-layer LRU with <100ms execution src/core/cache/
Health Probes Kubernetes-compatible checks src/health/
WebHooks GitOps event handling src/webhooks/

Implemented Operations

valida      Configuration validation
runtime     Container runtime detection
encrypt     Data encryption/decryption
init-servs  System service management
audit       Security vulnerability scanning

API Endpoints

Health & Status

GET  /health               Main health check
GET  /health/live          Liveness probe
GET  /health/ready         Readiness probe

Validation

POST /api/v1/valida/validate           Validate configuration
GET  /api/v1/valida/rules              List validation rules

Encryption

POST /api/v1/encrypt/encrypt           Encrypt data
POST /api/v1/encrypt/decrypt           Decrypt data
GET  /api/v1/encrypt/backends          List backends

Services

POST /api/v1/init-servs/detect         Detect init system
POST /api/v1/init-servs/install        Install service
POST /api/v1/init-servs/status         Check service status

Auditing

POST /api/v1/audit/scan                Scan vulnerabilities
POST /api/v1/audit/sbom                Generate SBOM
POST /api/v1/audit/report              Generate audit report

WebHooks

POST /webhooks/handle                  Receive webhook events
GET  /webhooks/history                 Get webhook history

Configuration

Configuration file: ~/.config/prov-ecosystem/provd.toml

[server]
bind = "127.0.0.1:9090"
ecosystem_path = "/Users/Akasha/Development/prov-ecosystem"
nushell_path = "/usr/local/bin/nu"
executor_strategy = "persistent"

[cache]
command_cache_mb = 50
config_cache_mb = 100
ttl_secs = 1800

[features]
valida = true
encrypt = true
runtime = true
init_servs = true
audit = true

Testing

Run All Tests

cargo test -p daemon-cli

Run Specific Test Suite

# Unit tests
cargo test -p daemon-cli --lib

# Integration tests
cargo test --test integration_tests

# Specific module
cargo test -p daemon-cli --lib orchestration::

Performance Testing

# Cache performance benchmark
cargo test --lib health::metrics::tests::test_cache_hit_rate

# Event bus throughput
cargo test --lib events::bus::tests::test_event_bus_multiple_subscribers

Code Organization

src/
├── core/                  Core infrastructure
│   ├── config.rs         Configuration management
│   ├── error.rs          Error types
│   ├── cache/            LRU cache implementation
│   └── nushell/          Shell integration
├── api/                  HTTP API
│   ├── state.rs          Shared application state
│   ├── routes.rs         Route composition
│   └── handlers/         Endpoint implementations
├── orchestration/        Ecosystem integration
│   ├── operation.rs      Trait definitions
│   ├── registry.rs       Operation dispatch
│   └── {crate}.rs        Crate-specific operations
├── events/               Event bus system
│   ├── bus.rs            Broadcast channel
│   ├── publisher.rs      Helper functions
│   └── subscriber.rs     Receivers & filtering
├── health/               Health monitoring
│   ├── probe.rs          Kubernetes probes
│   └── metrics.rs        Metrics collection
├── webhooks/             GitOps webhooks
│   ├── types.rs          Event definitions
│   ├── handler.rs        Event dispatch
│   └── store.rs          Event persistence
├── rendering/            Template engines
│   ├── template.rs       Template system
│   ├── kcl.rs            KCL rendering
│   ├── nickel.rs         Nickel rendering
│   └── tera.rs           Tera rendering
└── cli/                  CLI implementation
    ├── args.rs           Argument parsing
    ├── client.rs         HTTP client
    ├── offline.rs        Direct library mode
    └── output.rs         Output formatting

Adding a New Operation

To add a new ecosystem operation:

  1. Create Operation Module

    // src/orchestration/myop.rs
    pub struct MyOperation {
        cache: Arc<HierarchicalCache>,
    }
    
    #[async_trait]
    impl EcosystemOperation for MyOperation {
        fn name(&self) -> &'static str { "myop" }
    
        async fn execute(&self, params: Value) -> Result<OperationResult> {
            // Implementation
        }
    }
    
  2. Register in Daemon

    // src/bin/provd.rs
    registry.register("myop", Arc::new(MyOperation::new(cache.clone())));
    
  3. Add API Handler

    // src/api/handlers/myop.rs
    pub async fn my_endpoint(State(state): State<AppState>, Json(req): Json<Request>) -> impl IntoResponse {
        let op = state.registry.get("myop").unwrap();
        let result = op.execute(serde_json::to_value(&req)?).await?;
        Ok(Json(result))
    }
    
  4. Add Route

    // src/api/routes.rs
    .route("/api/v1/myop/endpoint", post(handlers::myop::my_endpoint))
    
  5. Write Tests

    #[tokio::test]
    async fn test_myop_execution() {
        let cache = Arc::new(HierarchicalCache::new().unwrap());
        let op = MyOperation::new(cache);
        let result = op.execute(json!({"key": "value"})).await;
        assert!(result.is_ok());
    }
    

Performance Targets

Metric Target Status
Command execution <100ms 10-50ms cached
Cache hit ratio 80%+ Verified
API throughput 1000 req/sec 10k+ supported
Event bus throughput 10k events/sec Verified

Troubleshooting

Daemon won't start

# Check if port is in use
lsof -i :9090

# Check configuration
cat ~/.config/prov-ecosystem/provd.toml

# Enable debug logging
RUST_LOG=debug ./target/debug/provd

CLI can't connect to daemon

# Verify daemon is running
curl http://127.0.0.1:9090/health

# Use offline mode
./target/debug/provctl --offline valida validate --file config.yaml

Tests failing

# Run with output
cargo test --lib -- --nocapture

# Run specific test
cargo test --lib test_operation_registry_workflow -- --nocapture

Development Guidelines

  • No Panics: Use Result for all recoverable errors
  • No Unwraps: Except in tests and truly unreachable code
  • Arc for Sharing: Use Arc for shared, immutable state
  • Builder Pattern: Use for types with multiple optional fields
  • Async/Await: Use Tokio throughout, never block threads
  • Tests: Add unit tests in same file, integration tests in tests/
  • Documentation: Document public APIs with examples

Integration Points

The daemon is ready for integration with actual ecosystem crates:

Crate Location Status
valida src/orchestration/valida.rs TODO: Call actual valida crate
runtime src/orchestration/runtime.rs TODO: Call runtime crate
encrypt src/orchestration/encrypt.rs TODO: Call encrypt crate
init-servs src/orchestration/init_servs.rs TODO: Call init-servs crate
audit src/orchestration/audit.rs TODO: Call audit crate

Replace TODO comments with actual crate function calls.

License

Part of prov-ecosystem project.

Support

For issues or questions, refer to the main project documentation or submit a PR with improvements.