added inventory for immutable core logging files

This commit is contained in:
Ara Sadoyan
2026-09-22 18:48:42 +02:00
parent 639365c43b
commit 54ac35a4c9
6 changed files with 64 additions and 8 deletions
Generated
+10
View File
@@ -146,6 +146,7 @@ dependencies = [
"hyper",
"hyper-util",
"instant-acme",
"inventory",
"jsonwebtoken",
"k8s-openapi",
"kube",
@@ -1799,6 +1800,15 @@ dependencies = [
"tokio",
]
[[package]]
name = "inventory"
version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b"
dependencies = [
"rustversion",
]
[[package]]
name = "is_terminal_polyfill"
version = "1.70.2"
+1
View File
@@ -65,3 +65,4 @@ k8s-openapi = { version = "0.28.0", features = ["v1_32"] }
futures = "0.3.34"
lazy_static = "1.5.0"
anyhow = "1.0.103"
inventory = "0.3.24"
+10 -2
View File
@@ -1,5 +1,5 @@
use crate::logging::core::StructuredSystemLog;
use crate::logging::types::WriteLog;
use crate::logging::types::{LogBackendPlugin, WriteLog};
use std::env;
use std::sync::LazyLock;
@@ -28,7 +28,15 @@ pub struct ElasticSearch;
impl WriteLog for ElasticSearch {
fn writelog(&self, msg: &StructuredSystemLog) {
if let Ok(jsonmsg) = serde_json::to_string(&msg) {
println!("Connecting to {} - {}:{} => {}", ELASTIC.hosts, ELASTIC.user, ELASTIC.password, jsonmsg);
// ElasticSearch logic is not yet implemented.
println!("{} - {}:{} => {}", ELASTIC.hosts, ELASTIC.user, ELASTIC.password, jsonmsg);
}
}
}
inventory::submit! {
LogBackendPlugin {
name: "elasticsearch",
factory: || Box::new(ElasticSearch),
}
}
+19
View File
@@ -0,0 +1,19 @@
use crate::logging::core::StructuredSystemLog;
use crate::logging::types::{LogBackendPlugin, WriteLog};
pub struct Example;
impl WriteLog for Example {
fn writelog(&self, msg: &StructuredSystemLog) {
// Here comes the backend logic
println!("Sending log Example : {:?}", msg);
}
}
// Mandatory with name: matching value of "log_structired" in main.yaml
inventory::submit! {
LogBackendPlugin {
name: "example",
factory: || Box::new(Example),
}
}
+1
View File
@@ -1,3 +1,4 @@
pub mod core;
pub mod elasticsearch;
pub mod example;
pub mod types;
+23 -6
View File
@@ -1,13 +1,30 @@
use crate::logging::core::StructuredSystemLog;
use crate::logging::elasticsearch::ElasticSearch;
use std::collections::HashMap;
use std::sync::LazyLock;
pub trait WriteLog {
pub trait WriteLog: Send + Sync {
fn writelog(&self, msg: &StructuredSystemLog);
}
pub struct LogBackendPlugin {
pub name: &'static str,
pub factory: fn() -> Box<dyn WriteLog>,
}
inventory::collect!(LogBackendPlugin);
static BACKENDS: LazyLock<HashMap<&'static str, Box<dyn WriteLog>>> = LazyLock::new(|| {
let mut map = HashMap::new();
for plugin in inventory::iter::<LogBackendPlugin> {
map.insert(plugin.name, (plugin.factory)());
}
map
});
pub fn sendlog(backend: &str, msg: &StructuredSystemLog) {
match backend {
"elasticsearch" => ElasticSearch.writelog(msg),
"somewhereelse" => println!("somewhereelse"),
_ => log::warn!("Unsupported logging mechanism : {}", backend),
if let Some(logger) = BACKENDS.get(backend) {
logger.writelog(msg);
} else {
log::warn!("Unsupported logging mechanism: {}", backend);
}
}