From f528cc0597452a1068c822ab070be24dee2f27f0 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Thu, 2 Nov 2023 12:27:16 -0400 Subject: [PATCH] feat(CIL): add directories crate and data This allows for logging transaction data including budgets/costs for later inspection. --- Cargo.lock | 30 ++++++++++++++++++++- Cargo.toml | 1 + cmd/soroban-cli/Cargo.toml | 3 ++- cmd/soroban-cli/src/commands/config/data.rs | 21 +++++++++++++++ cmd/soroban-cli/src/commands/config/mod.rs | 1 + 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 cmd/soroban-cli/src/commands/config/data.rs diff --git a/Cargo.lock b/Cargo.lock index beaf4e359e..33b6fd1a69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -731,13 +731,22 @@ dependencies = [ "subtle", ] +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys 0.4.1", +] + [[package]] name = "dirs" version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", ] [[package]] @@ -751,6 +760,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -1710,6 +1731,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "overload" version = "0.1.1" @@ -2477,6 +2504,7 @@ dependencies = [ "clap_complete", "crate-git-revision 0.0.4", "csv", + "directories", "dirs", "dotenvy", "ed25519-dalek 2.0.0", diff --git a/Cargo.toml b/Cargo.toml index a36ec9fd2b..e2745a2d13 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,6 +78,7 @@ tracing-subscriber = "0.3.16" tracing-appender = "0.2.2" which = "4.4.0" wasmparser = "0.90.0" +directories = "5.0.1" # [patch."https://github.com/stellar/rs-soroban-env"] diff --git a/cmd/soroban-cli/Cargo.toml b/cmd/soroban-cli/Cargo.toml index f6f6c757e7..95c6643932 100644 --- a/cmd/soroban-cli/Cargo.toml +++ b/cmd/soroban-cli/Cargo.toml @@ -69,7 +69,7 @@ csv = "1.1.6" ed25519-dalek = "2.0.0" jsonrpsee-http-client = "0.20.1" jsonrpsee-core = "0.20.1" -hyper = "0.14.27" +hyper = "0.14.27" hyper-tls = "0.5" http = "0.2.9" regex = "1.6.0" @@ -92,6 +92,7 @@ tracing-subscriber = { workspace = true, features = ["env-filter"] } cargo_metadata = "0.15.4" pathdiff = "0.2.1" dotenvy = "0.15.7" +directories = { workspace = true } # For hyper-tls [target.'cfg(unix)'.dependencies] openssl = { version = "0.10.55", features = ["vendored"] } diff --git a/cmd/soroban-cli/src/commands/config/data.rs b/cmd/soroban-cli/src/commands/config/data.rs new file mode 100644 index 0000000000..1882505b6e --- /dev/null +++ b/cmd/soroban-cli/src/commands/config/data.rs @@ -0,0 +1,21 @@ +use chrono::prelude::*; +use directories::ProjectDirs; + +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("Failed to find project directories")] + FiledToFindProjectDirs, + #[error(transparent)] + Io(#[from] std::io::Error), +} + +pub fn project_dir() -> Result { + ProjectDirs::from("com", "stellar", "soroban-cli").ok_or(Error::FiledToFindProjectDirs) +} + +pub fn write(prefix: &str, suffix: &str, data: impl AsRef<[u8]>) -> Result<(), Error> { + let timestamp = Utc::now().format("%Y%m%d_%H%M%S"); + let name = format!("{prefix}_{timestamp}{suffix}"); + let file = project_dir()?.data_local_dir().join(name); + Ok(std::fs::write(file, data)?) +} diff --git a/cmd/soroban-cli/src/commands/config/mod.rs b/cmd/soroban-cli/src/commands/config/mod.rs index f4d8ec5544..d1de5335e7 100644 --- a/cmd/soroban-cli/src/commands/config/mod.rs +++ b/cmd/soroban-cli/src/commands/config/mod.rs @@ -7,6 +7,7 @@ use crate::Pwd; use self::{network::Network, secret::Secret}; +pub mod data; pub mod identity; pub mod locator; pub mod network;