cc-lb-runtime-wasmtime 0.1.1

Wasmtime-based plugin runtime for cc-lb. Host-side wasm plugin admission + dispatch.
use wasmtime::Engine;

use crate::engine::{HotEngineAllocationStrategy, HotEngineConfig};

pub(crate) fn publish_pool_metrics(engine: &Engine, config: &HotEngineConfig) {
    let (memories_util, instances_util) = match engine.pooling_allocator_metrics() {
        Some(m) => {
            metrics::gauge!("cc_lb_plugin_pool_memories_used").set(m.memories() as f64);
            metrics::gauge!("cc_lb_plugin_pool_core_instances_used").set(m.core_instances() as f64);
            let mem_denom = config.pool_total_memories.max(1) as f64;
            let inst_denom = config.pool_total_core_instances.max(1) as f64;
            let mem_util = (m.memories() as f64) / mem_denom;
            let inst_util = (m.core_instances() as f64) / inst_denom;
            (mem_util.clamp(0.0, 1.0), inst_util.clamp(0.0, 1.0))
        }
        None => {
            metrics::gauge!("cc_lb_plugin_pool_memories_used").set(0.0);
            metrics::gauge!("cc_lb_plugin_pool_core_instances_used").set(0.0);
            (0.0, 0.0)
        }
    };
    let (pool_memories_total, pool_core_instances_total) = match config.allocation_strategy {
        HotEngineAllocationStrategy::OnDemand => (0, 0),
        HotEngineAllocationStrategy::Pooling => {
            (config.pool_total_memories, config.pool_total_core_instances)
        }
    };
    metrics::gauge!("cc_lb_plugin_pool_memories_total").set(pool_memories_total as f64);
    metrics::gauge!("cc_lb_plugin_pool_core_instances_total").set(pool_core_instances_total as f64);
    metrics::gauge!("cc_lb_plugin_memory_max_pages").set(config.memory_max_pages as f64);
    metrics::gauge!("cc_lb_plugin_memory_reservation_bytes")
        .set(config.memory_reservation_bytes as f64);
    metrics::gauge!("cc_lb_plugin_memory_guard_bytes").set(config.memory_guard_bytes as f64);
    metrics::gauge!("cc_lb_plugin_pool_virtual_reservation_bytes")
        .set(config.virtual_memory_reservation_bytes() as f64);
    metrics::gauge!("cc_lb_plugin_pool_memories_utilization_ratio").set(memories_util);
    metrics::gauge!("cc_lb_plugin_pool_core_instances_utilization_ratio").set(instances_util);
}