From 2682ee8ee6d9e4c0882ce23281786f79f215f255 Mon Sep 17 00:00:00 2001 From: Chris Beck Date: Sat, 13 Dec 2025 21:40:30 -0700 Subject: [PATCH] split out log-ingest modules to their own crate --- Cargo.lock | 17 +++++++++++++++-- Cargo.toml | 1 + signal-gateway-bin/Cargo.toml | 3 +-- signal-gateway-bin/src/main.rs | 8 ++------ signal-gateway-log-ingest/Cargo.toml | 18 ++++++++++++++++++ .../src/json/json_lines.rs | 0 .../src/json/mod.rs | 0 signal-gateway-log-ingest/src/lib.rs | 11 +++++++++++ .../src/syslog.rs | 0 signal-gateway/src/claude/worker.rs | 4 +--- 10 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 signal-gateway-log-ingest/Cargo.toml rename {signal-gateway-bin => signal-gateway-log-ingest}/src/json/json_lines.rs (100%) rename {signal-gateway-bin => signal-gateway-log-ingest}/src/json/mod.rs (100%) create mode 100644 signal-gateway-log-ingest/src/lib.rs rename signal-gateway-bin/src/syslog/mod.rs => signal-gateway-log-ingest/src/syslog.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index cffa803..f12a5d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1764,7 +1764,6 @@ name = "signal-gateway-bin" version = "0.1.0" dependencies = [ "async-trait", - "chrono", "conf", "conf-extra", "dotenvy", @@ -1775,7 +1774,7 @@ dependencies = [ "serde_json", "signal-gateway", "signal-gateway-app-code", - "syslog_rfc5424", + "signal-gateway-log-ingest", "tokio", "tokio-util", "toml", @@ -1784,6 +1783,20 @@ dependencies = [ "url", ] +[[package]] +name = "signal-gateway-log-ingest" +version = "0.1.0" +dependencies = [ + "chrono", + "conf", + "serde", + "serde_json", + "signal-gateway", + "syslog_rfc5424", + "tokio", + "tracing", +] + [[package]] name = "signal-hook-registry" version = "1.4.7" diff --git a/Cargo.toml b/Cargo.toml index fcd644e..9afc731 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "signal-gateway", "signal-gateway-app-code", "signal-gateway-bin", + "signal-gateway-log-ingest", ] [workspace.package] diff --git a/signal-gateway-bin/Cargo.toml b/signal-gateway-bin/Cargo.toml index af74fb7..9c6f912 100644 --- a/signal-gateway-bin/Cargo.toml +++ b/signal-gateway-bin/Cargo.toml @@ -18,9 +18,9 @@ rustls-tls = ["signal-gateway/rustls-tls"] [dependencies] signal-gateway = { path = "../signal-gateway" } signal-gateway-app-code = { path = "../signal-gateway-app-code" } +signal-gateway-log-ingest = { path = "../signal-gateway-log-ingest" } async-trait = { workspace = true } -chrono = { workspace = true } conf = { workspace = true } conf-extra = { workspace = true } dotenvy = { workspace = true } @@ -30,7 +30,6 @@ reqwest = { workspace = true } url = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } -syslog_rfc5424 = { workspace = true } toml = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread", "signal"] } tokio-util = { workspace = true } diff --git a/signal-gateway-bin/src/main.rs b/signal-gateway-bin/src/main.rs index 0ee7f10..9f3310c 100644 --- a/signal-gateway-bin/src/main.rs +++ b/signal-gateway-bin/src/main.rs @@ -19,11 +19,7 @@ use admin_http::AdminHttpConfig; mod app_code; use app_code::AppCodeConfigExt; -mod syslog; -use syslog::SyslogConfig; - -pub mod json; -use json::JsonConfig; +use signal_gateway_log_ingest::{JsonConfig, SyslogConfig}; /// Top-level configuration for signal-gateway. #[derive(Conf, Debug)] @@ -48,7 +44,7 @@ pub struct Config { #[conf(flatten, prefix)] admin_http: Option, /// Application source code configurations for Claude tools. - #[conf(long, env, value_parser = serde_json::from_str)] + #[conf(long, env, value_parser = serde_json::from_str, default, default_help_str = "[]")] app_code: Vec, #[conf(flatten, serde(flatten))] gateway: GatewayConfig, diff --git a/signal-gateway-log-ingest/Cargo.toml b/signal-gateway-log-ingest/Cargo.toml new file mode 100644 index 0000000..0e6184e --- /dev/null +++ b/signal-gateway-log-ingest/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "signal-gateway-log-ingest" +version = "0.1.0" +edition.workspace = true + +[lints] +workspace = true + +[dependencies] +signal-gateway = { path = "../signal-gateway" } + +chrono = { workspace = true } +conf = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +syslog_rfc5424 = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } diff --git a/signal-gateway-bin/src/json/json_lines.rs b/signal-gateway-log-ingest/src/json/json_lines.rs similarity index 100% rename from signal-gateway-bin/src/json/json_lines.rs rename to signal-gateway-log-ingest/src/json/json_lines.rs diff --git a/signal-gateway-bin/src/json/mod.rs b/signal-gateway-log-ingest/src/json/mod.rs similarity index 100% rename from signal-gateway-bin/src/json/mod.rs rename to signal-gateway-log-ingest/src/json/mod.rs diff --git a/signal-gateway-log-ingest/src/lib.rs b/signal-gateway-log-ingest/src/lib.rs new file mode 100644 index 0000000..cff200b --- /dev/null +++ b/signal-gateway-log-ingest/src/lib.rs @@ -0,0 +1,11 @@ +//! Log ingestion modules for signal-gateway. +//! +//! This crate provides listeners for receiving log messages in various formats: +//! - JSON (logstash-compatible) over UDP and TCP +//! - Syslog (RFC 5424) over UDP and TCP + +pub mod json; +pub mod syslog; + +pub use json::JsonConfig; +pub use syslog::SyslogConfig; diff --git a/signal-gateway-bin/src/syslog/mod.rs b/signal-gateway-log-ingest/src/syslog.rs similarity index 100% rename from signal-gateway-bin/src/syslog/mod.rs rename to signal-gateway-log-ingest/src/syslog.rs diff --git a/signal-gateway/src/claude/worker.rs b/signal-gateway/src/claude/worker.rs index 00d01f2..b852ee9 100644 --- a/signal-gateway/src/claude/worker.rs +++ b/signal-gateway/src/claude/worker.rs @@ -247,9 +247,7 @@ impl ClaudeWorker { let after_chars = self.message_buffer_chars(); warn!( "Compaction rate-limited: dropped {} oldest messages ({} -> {} chars)", - dropped, - before_chars, - after_chars + dropped, before_chars, after_chars ); }