diff --git a/Cargo.toml b/Cargo.toml index a7d2b06d..83e25a06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,9 +11,10 @@ members = [ "iam", # Identity and Access Management "crypto", # Cryptography and security features "cli/rustfs-gui", # Graphical user interface client - "packages/obs", # Observability utilities + "crates/obs", # Observability utilities "s3select/api", - "s3select/query", "appauth", + "s3select/query", + "appauth", ] resolver = "2" @@ -88,7 +89,7 @@ reqwest = { version = "0.12.15", default-features = false, features = ["rustls-t rfd = { version = "0.15.2", default-features = false, features = ["xdg-portal", "tokio"] } rmp = "0.8.14" rmp-serde = "1.3.0" -rustfs-obs = { path = "packages/obs", version = "0.0.1" } +rustfs-obs = { path = "crates/obs", version = "0.0.1" } rust-embed = "8.6.0" rustls = { version = "0.23" } rustls-pki-types = "1.11.0" diff --git a/packages/obs/Cargo.toml b/crates/obs/Cargo.toml similarity index 100% rename from packages/obs/Cargo.toml rename to crates/obs/Cargo.toml diff --git a/packages/obs/examples/config.toml b/crates/obs/examples/config.toml similarity index 100% rename from packages/obs/examples/config.toml rename to crates/obs/examples/config.toml diff --git a/packages/obs/examples/server.rs b/crates/obs/examples/server.rs similarity index 100% rename from packages/obs/examples/server.rs rename to crates/obs/examples/server.rs diff --git a/packages/obs/src/config.rs b/crates/obs/src/config.rs similarity index 100% rename from packages/obs/src/config.rs rename to crates/obs/src/config.rs diff --git a/packages/obs/src/entry/args.rs b/crates/obs/src/entry/args.rs similarity index 100% rename from packages/obs/src/entry/args.rs rename to crates/obs/src/entry/args.rs diff --git a/packages/obs/src/entry/audit.rs b/crates/obs/src/entry/audit.rs similarity index 100% rename from packages/obs/src/entry/audit.rs rename to crates/obs/src/entry/audit.rs diff --git a/packages/obs/src/entry/base.rs b/crates/obs/src/entry/base.rs similarity index 100% rename from packages/obs/src/entry/base.rs rename to crates/obs/src/entry/base.rs diff --git a/packages/obs/src/entry/mod.rs b/crates/obs/src/entry/mod.rs similarity index 96% rename from packages/obs/src/entry/mod.rs rename to crates/obs/src/entry/mod.rs index 72dae261..6718e505 100644 --- a/packages/obs/src/entry/mod.rs +++ b/crates/obs/src/entry/mod.rs @@ -46,10 +46,17 @@ impl ObjectVersion { } } +impl Default for ObjectVersion { + fn default() -> Self { + Self::new() + } +} + /// Log kind/level enum -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] pub enum LogKind { #[serde(rename = "INFO")] + #[default] Info, #[serde(rename = "WARNING")] Warning, @@ -59,12 +66,6 @@ pub enum LogKind { Fatal, } -impl Default for LogKind { - fn default() -> Self { - LogKind::Info - } -} - /// Trait for types that can be serialized to JSON and have a timestamp /// This trait is used by `ServerLogEntry` to convert the log entry to JSON /// and get the timestamp of the log entry diff --git a/packages/obs/src/entry/unified.rs b/crates/obs/src/entry/unified.rs similarity index 98% rename from packages/obs/src/entry/unified.rs rename to crates/obs/src/entry/unified.rs index 598ebe79..877b2f8f 100644 --- a/packages/obs/src/entry/unified.rs +++ b/crates/obs/src/entry/unified.rs @@ -99,6 +99,7 @@ impl LogRecord for ServerLogEntry { /// - `console_msg` - the console message /// - `node_name` - the node name /// - `err` - the error message +/// /// The `ConsoleLogEntry` structure contains the following methods: /// - `new` - create a new `ConsoleLogEntry` /// - `new_with_console_msg` - create a new `ConsoleLogEntry` with console message and node name @@ -107,6 +108,7 @@ impl LogRecord for ServerLogEntry { /// - `set_node_name` - set the node name /// - `set_console_msg` - set the console message /// - `set_err` - set the error message +/// /// # Example /// ``` /// use rustfs_obs::ConsoleLogEntry; @@ -180,6 +182,12 @@ impl ConsoleLogEntry { } } +impl Default for ConsoleLogEntry { + fn default() -> Self { + Self::new() + } +} + impl LogRecord for ConsoleLogEntry { fn to_json(&self) -> String { serde_json::to_string(self).unwrap_or_else(|_| String::from("{}")) @@ -217,7 +225,7 @@ pub enum UnifiedLogEntry { Server(ServerLogEntry), #[serde(rename = "audit")] - Audit(AuditLogEntry), + Audit(Box), #[serde(rename = "console")] Console(ConsoleLogEntry), diff --git a/packages/obs/src/global.rs b/crates/obs/src/global.rs similarity index 100% rename from packages/obs/src/global.rs rename to crates/obs/src/global.rs diff --git a/packages/obs/src/lib.rs b/crates/obs/src/lib.rs similarity index 100% rename from packages/obs/src/lib.rs rename to crates/obs/src/lib.rs diff --git a/packages/obs/src/logger.rs b/crates/obs/src/logger.rs similarity index 98% rename from packages/obs/src/logger.rs rename to crates/obs/src/logger.rs index 77862a94..55f4bd0e 100644 --- a/packages/obs/src/logger.rs +++ b/crates/obs/src/logger.rs @@ -50,7 +50,7 @@ impl Logger { /// Log an audit entry #[tracing::instrument(skip(self), fields(log_source = "logger_audit"))] pub async fn log_audit_entry(&self, entry: AuditLogEntry) -> Result<(), LogError> { - self.log_entry(UnifiedLogEntry::Audit(entry)).await + self.log_entry(UnifiedLogEntry::Audit(Box::new(entry))).await } /// Log a console entry @@ -61,13 +61,14 @@ impl Logger { /// Asynchronous logging of unified log entries #[tracing::instrument(skip(self), fields(log_source = "logger"))] + #[tracing::instrument(level = "error", skip_all)] pub async fn log_entry(&self, entry: UnifiedLogEntry) -> Result<(), LogError> { // Extract information for tracing based on entry type match &entry { UnifiedLogEntry::Server(server) => { tracing::Span::current() - .record("log_level", &server.level.0.as_str()) - .record("log_message", &server.base.message.as_deref().unwrap_or("")) + .record("log_level", server.level.0.as_str()) + .record("log_message", server.base.message.as_deref().unwrap_or("log message not set")) .record("source", &server.source); // Generate tracing event based on log level diff --git a/packages/obs/src/sink.rs b/crates/obs/src/sink.rs similarity index 99% rename from packages/obs/src/sink.rs rename to crates/obs/src/sink.rs index 4a44f0ea..1f1c481f 100644 --- a/packages/obs/src/sink.rs +++ b/crates/obs/src/sink.rs @@ -284,7 +284,7 @@ impl FileSink { // If the file does not exist, create it debug!("FileSink: File does not exist, creating a new file."); // Create the file and write a header or initial content if needed - OpenOptions::new().create(true).write(true).open(&path).await? + OpenOptions::new().create(true).truncate(true).write(true).open(&path).await? }; let writer = io::BufWriter::with_capacity(buffer_size, file); let now = std::time::SystemTime::now() diff --git a/packages/obs/src/telemetry.rs b/crates/obs/src/telemetry.rs similarity index 100% rename from packages/obs/src/telemetry.rs rename to crates/obs/src/telemetry.rs diff --git a/packages/obs/src/utils.rs b/crates/obs/src/utils.rs similarity index 100% rename from packages/obs/src/utils.rs rename to crates/obs/src/utils.rs diff --git a/packages/obs/src/worker.rs b/crates/obs/src/worker.rs similarity index 100% rename from packages/obs/src/worker.rs rename to crates/obs/src/worker.rs