diff --git a/crates/kumod/src/logging.rs b/crates/kumod/src/logging.rs index 29b22049..be6418f9 100644 --- a/crates/kumod/src/logging.rs +++ b/crates/kumod/src/logging.rs @@ -4,12 +4,13 @@ use anyhow::{anyhow, Context}; use async_channel::{Receiver, Sender}; use bounce_classify::{BounceClass, BounceClassifier, BounceClassifierBuilder}; use chrono::Utc; -use config::load_config; +use config::{any_err, from_lua_value, get_or_create_module, load_config}; use kumo_log_types::rfc3464::ReportAction; pub use kumo_log_types::*; use kumo_server_runtime::rt_spawn_non_blocking; use message::{EnvelopeAddress, Message}; use minijinja::{Environment, Template}; +use mlua::{Lua, Value as LuaValue}; use once_cell::sync::{Lazy, OnceCell}; use rfc5321::{EnhancedStatusCode, Response}; use serde::Deserialize; @@ -894,3 +895,33 @@ impl LogThreadState { Ok(()) } } + +pub fn register(lua: &Lua) -> anyhow::Result<()> { + let kumo_mod = get_or_create_module(lua, "kumo")?; + + kumo_mod.set( + "configure_bounce_classifier", + lua.create_function(move |lua, params: LuaValue| { + let params: ClassifierParams = from_lua_value(lua, params)?; + params.register().map_err(any_err) + })?, + )?; + + kumo_mod.set( + "configure_local_logs", + lua.create_function(move |lua, params: LuaValue| { + let params: LogFileParams = from_lua_value(lua, params)?; + Logger::init(params).map_err(any_err) + })?, + )?; + + kumo_mod.set( + "configure_log_hook", + lua.create_function(move |lua, params: LuaValue| { + let params: LogHookParams = from_lua_value(lua, params)?; + Logger::init_hook(params).map_err(any_err) + })?, + )?; + + Ok(()) +} diff --git a/crates/kumod/src/main.rs b/crates/kumod/src/main.rs index ba6cd70e..0d5ea3fa 100644 --- a/crates/kumod/src/main.rs +++ b/crates/kumod/src/main.rs @@ -228,6 +228,7 @@ async fn run(opts: Opt) -> anyhow::Result<()> { for func in [ crate::mod_kumo::register, crate::spool::register, + crate::logging::register, data_loader::register, domain_map::register, message::dkim::register, diff --git a/crates/kumod/src/mod_kumo.rs b/crates/kumod/src/mod_kumo.rs index 575cbfe1..f6d93dd9 100644 --- a/crates/kumod/src/mod_kumo.rs +++ b/crates/kumod/src/mod_kumo.rs @@ -1,7 +1,6 @@ use crate::egress_path::EgressPathConfig; use crate::egress_source::{EgressPool, EgressSource}; use crate::http_server::HttpListenerParams; -use crate::logging::{ClassifierParams, LogFileParams, LogHookParams}; use crate::queue::QueueConfig; use crate::smtp_server::{EsmtpDomain, EsmtpListenerParams, RejectError}; use anyhow::Context; @@ -74,30 +73,6 @@ pub fn register(lua: &Lua) -> anyhow::Result<()> { })?, )?; - kumo_mod.set( - "configure_bounce_classifier", - lua.create_function(move |lua, params: Value| { - let params: ClassifierParams = from_lua_value(lua, params)?; - params.register().map_err(any_err) - })?, - )?; - - kumo_mod.set( - "configure_local_logs", - lua.create_function(move |lua, params: Value| { - let params: LogFileParams = from_lua_value(lua, params)?; - crate::logging::Logger::init(params).map_err(any_err) - })?, - )?; - - kumo_mod.set( - "configure_log_hook", - lua.create_function(move |lua, params: Value| { - let params: LogHookParams = from_lua_value(lua, params)?; - crate::logging::Logger::init_hook(params).map_err(any_err) - })?, - )?; - kumo_mod.set( "start_http_listener", lua.create_async_function(|lua, params: Value| async move {