diff --git a/Cargo.lock b/Cargo.lock index e73ee7c5..77cb58e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -207,6 +207,12 @@ dependencies = [ "password-hash", ] +[[package]] +name = "array-init" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" + [[package]] name = "arrayref" version = "0.3.9" @@ -244,6 +250,22 @@ dependencies = [ "time", ] +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive 0.5.1", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + [[package]] name = "asn1-rs" version = "0.7.1" @@ -272,6 +294,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + [[package]] name = "asn1-rs-derive" version = "0.6.0" @@ -474,53 +508,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "axum" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" -dependencies = [ - "async-trait", - "axum-core", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper 1.0.2", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 1.0.2", - "tower-layer", - "tower-service", -] - [[package]] name = "azure_core" version = "0.21.0" @@ -808,6 +795,9 @@ name = "bitflags" version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +dependencies = [ + "serde", +] [[package]] name = "bitpacking" @@ -1070,6 +1060,12 @@ dependencies = [ "smallvec", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1327,7 +1323,7 @@ dependencies = [ "whatlang", "x509-parser 0.17.0", "xxhash-rust", - "zip", + "zip 3.0.0", ] [[package]] @@ -1394,6 +1390,26 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "const_panic" version = "0.2.12" @@ -1486,6 +1502,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -1843,6 +1872,20 @@ dependencies = [ "rusticata-macros", ] +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + [[package]] name = "der-parser" version = "10.0.0" @@ -1949,6 +1992,15 @@ dependencies = [ "utils", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -1959,6 +2011,18 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.0", + "windows-sys 0.59.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1966,7 +2030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -2139,7 +2203,7 @@ dependencies = [ "rustc_version 0.2.3", "serde", "serde_json", - "serde_with", + "serde_with 1.14.0", "url", "void", ] @@ -2344,6 +2408,18 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +[[package]] +name = "fastbloom" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27cea6e7f512d43b098939ff4d5a5d6fe3db07971e1d05176fe26c642d33f5b8" +dependencies = [ + "getrandom 0.3.3", + "rand 0.9.1", + "siphasher", + "wide", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -2382,10 +2458,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", + "libz-rs-sys", "libz-sys", "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2718,6 +2807,26 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "git-version" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19" +dependencies = [ + "git-version-macro", +] + +[[package]] +name = "git-version-macro" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "glob" version = "0.3.2" @@ -3005,11 +3114,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.11" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -3178,6 +3287,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9994b79e8c1a39b3166c63ae7823bb2b00831e2a96a31399c50fe69df408eaeb" +[[package]] +name = "humantime" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" + [[package]] name = "hyper" version = "0.14.32" @@ -3513,6 +3628,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -3523,6 +3639,7 @@ checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.3", + "serde", ] [[package]] @@ -3590,6 +3707,15 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + [[package]] name = "is-terminal" version = "0.4.16" @@ -3791,6 +3917,28 @@ dependencies = [ "utils", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + [[package]] name = "jobserver" version = "0.1.33" @@ -3811,6 +3959,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + [[package]] name = "keccak" version = "0.1.5" @@ -3820,6 +3979,15 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keyed-set" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a3ec39d2dc17953a1540d63906a112088f79b2e46833b4ed65bc9de3904ae34" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "keyed_priority_queue" version = "0.4.2" @@ -4013,6 +4181,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "libz-rs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a" +dependencies = [ + "zlib-rs", +] + [[package]] name = "libz-sys" version = "1.1.22" @@ -4110,6 +4287,9 @@ name = "lz4_flex" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +dependencies = [ + "twox-hash 1.6.3", +] [[package]] name = "lzma-rs" @@ -4152,7 +4332,7 @@ dependencies = [ "rustls-pemfile 2.2.0", "serde", "serde_json", - "zip", + "zip 2.4.2", ] [[package]] @@ -4245,12 +4425,6 @@ dependencies = [ "regex-automata 0.1.10", ] -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "maybe-async" version = "0.2.10" @@ -4370,13 +4544,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -4463,7 +4637,7 @@ dependencies = [ "tokio", "tokio-rustls 0.26.2", "tokio-util", - "twox-hash", + "twox-hash 2.1.0", "url", "webpki-roots 0.26.11", ] @@ -4495,6 +4669,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.16", +] + [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -4561,6 +4744,12 @@ dependencies = [ "xxhash-rust", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + [[package]] name = "nohash" version = "0.2.0" @@ -4577,6 +4766,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nonempty-collections" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f301452dbaf00f14ca0c8204e46cf0c9a96f53543ac72cefa9b4d91c19e0ac" +dependencies = [ + "serde", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -4705,6 +4903,15 @@ dependencies = [ "asn1-rs 0.5.2", ] +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs 0.6.2", +] + [[package]] name = "oid-registry" version = "0.8.1" @@ -4776,38 +4983,38 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.25.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "803801d3d3b71cd026851a53f974ea03df3d179cb758b260136a6c9e22e196af" +checksum = "9e87237e2775f74896f9ad219d26a2081751187eb7c9f5c58dde20a23b95d16c" dependencies = [ "futures-core", "futures-sink", "js-sys", - "once_cell", "pin-project-lite", - "thiserror 1.0.69", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "opentelemetry-http" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d8c2b76e5f7848a289aa9666dbe56b16f8a22a4c5246ef37a14941818d2913" +checksum = "46d7ab32b827b5b495bd90fa95a6cb65ccc293555dcc3199ae2937d2d237c8ed" dependencies = [ "async-trait", "bytes", "http 1.3.1", "opentelemetry", "reqwest 0.12.15", + "tracing", ] [[package]] name = "opentelemetry-otlp" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "596b1719b3cab83addb20bcbffdf21575279d9436d9ccccfe651a3bf0ab5ab06" +checksum = "d899720fe06916ccba71c01d04ecd77312734e2de3467fd30d9d580c8ce85656" dependencies = [ - "async-trait", "futures-core", "http 1.3.1", "opentelemetry", @@ -4816,16 +5023,17 @@ dependencies = [ "opentelemetry_sdk", "prost", "reqwest 0.12.15", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", "tonic", + "tracing", ] [[package]] name = "opentelemetry-proto" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c43620e8f93359eb7e627a3b16ee92d8585774986f24f2ab010817426c5ce61" +checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -4835,29 +5043,34 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b8e442487022a943e2315740e443dc5ee95fd541c18f509a5a6251b408a9f95" +checksum = "84b29a9f89f1a954936d5aa92f19b2feec3c8f3971d3e96206640db7f9706ae3" [[package]] name = "opentelemetry_sdk" -version = "0.25.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0da0d6b47a3dbc6e9c9e36a0520e25cf943e046843818faaa3f87365a548c82" +checksum = "afdefb21d1d47394abc1ba6c57363ab141be19e27cc70d0e422b7f303e4d290b" dependencies = [ - "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", - "once_cell", "opentelemetry", "percent-encoding", - "rand 0.8.5", + "rand 0.9.1", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.12", + "tracing", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-multimap" version = "0.7.3" @@ -5004,6 +5217,51 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pest_meta" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.9", +] + [[package]] name = "petgraph" version = "0.6.5" @@ -5020,6 +5278,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ + "phf_macros", "phf_shared", ] @@ -5043,6 +5302,19 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "phf_shared" version = "0.11.3" @@ -5111,6 +5383,38 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_datalink" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7" +dependencies = [ + "ipnetwork", + "libc", + "pnet_base", + "pnet_sys", + "winapi", +] + +[[package]] +name = "pnet_sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "polyval" version = "0.6.2" @@ -5301,16 +5605,16 @@ dependencies = [ [[package]] name = "prometheus" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", "parking_lot", - "thiserror 1.0.69", + "thiserror 2.0.12", ] [[package]] @@ -5464,6 +5768,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" dependencies = [ "bytes", + "fastbloom", "getrandom 0.3.3", "lru-slab", "rand 0.9.1", @@ -5471,6 +5776,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls 0.23.27", "rustls-pki-types", + "rustls-platform-verifier", "slab", "thiserror 2.0.12", "tinyvec", @@ -5794,6 +6100,37 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.12", +] + +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "regex" version = "1.11.1" @@ -5993,6 +6330,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ringbuffer-spsc" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ac1597578561cb821dd07711c03cbfaec071eb5a0e526f7f05c86cc4c149d78" +dependencies = [ + "array-init", + "crossbeam", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6058,6 +6405,18 @@ dependencies = [ "librocksdb-sys", ] +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.9.1", + "serde", + "serde_derive", +] + [[package]] name = "rpassword" version = "7.4.0" @@ -6341,6 +6700,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" +dependencies = [ + "core-foundation 0.10.0", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.27", + "rustls-native-certs 0.8.1", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.3", + "security-framework 3.2.0", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -6385,6 +6771,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + [[package]] name = "salsa20" version = "0.10.2" @@ -6436,6 +6831,31 @@ dependencies = [ "parking_lot", ] +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "either", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.101", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -6490,6 +6910,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -6634,6 +7064,17 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "serde_json" version = "1.0.140" @@ -6697,7 +7138,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" dependencies = [ "serde", - "serde_with_macros", + "serde_with_macros 1.5.2", +] + +[[package]] +name = "serde_with" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.9.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.12.0", + "time", ] [[package]] @@ -6712,6 +7171,31 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_with_macros" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.9.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serial_test" version = "3.2.0" @@ -6849,6 +7333,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +dependencies = [ + "dirs", +] + [[package]] name = "shlex" version = "1.3.0" @@ -7064,6 +7557,15 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" [[package]] name = "spki" @@ -7189,6 +7691,7 @@ dependencies = [ "trc", "utils", "xxhash-rust", + "zenoh", ] [[package]] @@ -7527,29 +8030,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "tokio" -version = "1.38.2" +name = "tls-listener" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68722da18b0fc4a05fdc1120b302b82051265792a1e1b399086e9b204b10ad3d" +checksum = "ab41256c16d6fc2b3021545f20bf77a73200b18bd54040ac656dddfca6205bfa" +dependencies = [ + "futures-util", + "pin-project-lite", + "thiserror 2.0.12", + "tokio", + "tokio-rustls 0.26.2", +] + +[[package]] +name = "token-cell" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a2b964fdb303b08a4eab04d7c1bad2bca33f8eee334ccd28802f1041c6eb87" +dependencies = [ + "paste", +] + +[[package]] +name = "tokio" +version = "1.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", @@ -7661,6 +8185,8 @@ dependencies = [ "bytes", "futures-core", "futures-sink", + "futures-util", + "hashbrown 0.15.3", "pin-project-lite", "tokio", ] @@ -7709,12 +8235,9 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ - "async-stream", "async-trait", - "axum", "base64 0.22.1", "bytes", - "h2 0.4.10", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -7724,13 +8247,15 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "socket2", + "rustls-pemfile 2.2.0", "tokio", + "tokio-rustls 0.26.2", "tokio-stream", "tower 0.4.13", "tower-layer", "tower-service", "tracing", + "webpki-roots 0.26.11", ] [[package]] @@ -7801,6 +8326,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -7838,6 +8364,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.19" @@ -7848,12 +8384,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] @@ -7951,6 +8490,16 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + [[package]] name = "twox-hash" version = "2.1.0" @@ -7984,6 +8533,26 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uhlc" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bbb93b0c2258fe1e81a84d8de5391f2577b039decabf75a6441ea1ebbf4cb5" +dependencies = [ + "humantime", + "lazy_static", + "log", + "rand 0.8.5", + "serde", + "spin 0.10.0", +] + [[package]] name = "unicase" version = "2.8.1" @@ -8061,6 +8630,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.7.1" @@ -8079,6 +8654,17 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" +[[package]] +name = "unzip-n" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e7e85a0596447f0f2ac090e16bc4c516c6fe91771fb0c0ccf7fa3dae896b9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "url" version = "2.5.4" @@ -8166,6 +8752,30 @@ dependencies = [ "serde", ] +[[package]] +name = "validated_struct" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0251cab911130b095b8190d5480729c5e6a05e36e617658039e4bfcfd879c153" +dependencies = [ + "json5", + "serde", + "serde_json", + "validated_struct_macros", +] + +[[package]] +name = "validated_struct_macros" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcba0282a9f9297af06b91ff22615e7f77f0ab66f75fc95898960d1604fc7fd7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "unzip-n", +] + [[package]] name = "valuable" version = "0.1.1" @@ -8178,6 +8788,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.5" @@ -8352,6 +8968,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" +dependencies = [ + "webpki-root-certs 1.0.0", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a83f7e1a9f8712695c03eabe9ed3fbca0feff0152f33f12593e5a6303cb1a4" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.25.4" @@ -8397,6 +9031,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wide" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "1.2.0" @@ -8556,6 +9200,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -8583,6 +9236,21 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -8639,6 +9307,12 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -8657,6 +9331,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -8675,6 +9355,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -8705,6 +9391,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -8723,6 +9415,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -8741,6 +9439,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -8759,6 +9463,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -8848,6 +9558,23 @@ dependencies = [ "time", ] +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.2", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry 0.7.1", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + [[package]] name = "x509-parser" version = "0.17.0" @@ -8919,6 +9646,447 @@ dependencies = [ "synstructure 0.13.2", ] +[[package]] +name = "zenoh" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2efb72fce1cf299cdd716ec9b300c16952d82594910629eb13c8dd1f357a2a3" +dependencies = [ + "ahash", + "arc-swap", + "async-trait", + "bytes", + "flume", + "futures", + "git-version", + "itertools 0.13.0", + "json5", + "lazy_static", + "nonempty-collections", + "once_cell", + "paste", + "petgraph", + "phf", + "rand 0.8.5", + "ref-cast", + "rustc_version 0.4.1", + "serde", + "serde_json", + "socket2", + "tokio", + "tokio-util", + "tracing", + "uhlc", + "vec_map", + "zenoh-buffers", + "zenoh-codec", + "zenoh-collections", + "zenoh-config", + "zenoh-core", + "zenoh-keyexpr", + "zenoh-link", + "zenoh-macros", + "zenoh-plugin-trait", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-sync", + "zenoh-task", + "zenoh-transport", + "zenoh-util", +] + +[[package]] +name = "zenoh-buffers" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8842fecec1706cdf38d785feb63d1129278dbebfbd81bf50d54775b1593940bf" +dependencies = [ + "zenoh-collections", +] + +[[package]] +name = "zenoh-codec" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c72cec335108131a1fd1aa5ac31423eb0b0e66ae16873890f79a5453c6d174" +dependencies = [ + "tracing", + "uhlc", + "zenoh-buffers", + "zenoh-protocol", +] + +[[package]] +name = "zenoh-collections" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79657ff5c4979a53b11ab96cd83f714245644eba75d139aa7ce370df3125223d" +dependencies = [ + "ahash", +] + +[[package]] +name = "zenoh-config" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef77c529f5aca77f8ff6947ce7e074bda2fb88a2f49b43e5a59430cde9f3b1f" +dependencies = [ + "json5", + "nonempty-collections", + "num_cpus", + "secrecy", + "serde", + "serde_json", + "serde_with 3.12.0", + "serde_yaml", + "tracing", + "uhlc", + "validated_struct", + "zenoh-core", + "zenoh-keyexpr", + "zenoh-macros", + "zenoh-protocol", + "zenoh-result", + "zenoh-util", +] + +[[package]] +name = "zenoh-core" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad8f92497145fcf03e96062f6d0172a6a29824f79ccfc2cd05737249f5a3342" +dependencies = [ + "lazy_static", + "tokio", + "zenoh-result", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-crypto" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51be3cdbc7224d3358777c08cc2b7f81f5a80a23bb30a76c522180c6d78d6dd2" +dependencies = [ + "aes", + "hmac 0.12.1", + "rand 0.8.5", + "rand_chacha 0.3.1", + "sha3", + "zenoh-result", +] + +[[package]] +name = "zenoh-keyexpr" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1abcafb3db8374ce1ff85540a16439b87676283b72a54c8976140c94d61e7570" +dependencies = [ + "getrandom 0.2.16", + "hashbrown 0.14.5", + "keyed-set", + "rand 0.8.5", + "schemars", + "serde", + "token-cell", + "zenoh-result", +] + +[[package]] +name = "zenoh-link" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7227527cf2eba60bfc2156cdd2c314922a6cfd39f94882cc3942691186cacca5" +dependencies = [ + "zenoh-config", + "zenoh-link-commons", + "zenoh-link-quic", + "zenoh-link-tcp", + "zenoh-link-tls", + "zenoh-link-udp", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-commons" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2966132e2478f23d2cdc4359f22e7616b51212d67f9c7e60cd597b68dfce64a" +dependencies = [ + "async-trait", + "flume", + "futures", + "rustls 0.23.27", + "rustls-webpki 0.102.8", + "serde", + "time", + "tokio", + "tokio-util", + "tracing", + "zenoh-buffers", + "zenoh-codec", + "zenoh-core", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-util", +] + +[[package]] +name = "zenoh-link-quic" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5169f109688fb592a6822860fc6e8e28b581a56dbf2e5d63908560795d4c5633" +dependencies = [ + "async-trait", + "base64 0.22.1", + "quinn", + "rustls 0.23.27", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "secrecy", + "time", + "tokio", + "tokio-util", + "tracing", + "webpki-roots 0.26.11", + "x509-parser 0.16.0", + "zenoh-config", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-util", +] + +[[package]] +name = "zenoh-link-tcp" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308095b785d8609ee6372d3a57753a13a506141f86b4645f43a5fb1df3c6b9b0" +dependencies = [ + "async-trait", + "socket2", + "tokio", + "tokio-util", + "tracing", + "zenoh-config", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-tls" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b50ce1925acc304660e2fbd7a28b03835bf8a6049f9c438c613a89cecdc36a5" +dependencies = [ + "async-trait", + "base64 0.22.1", + "rustls 0.23.27", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "secrecy", + "socket2", + "time", + "tls-listener", + "tokio", + "tokio-rustls 0.26.2", + "tokio-util", + "tracing", + "webpki-roots 0.26.11", + "x509-parser 0.16.0", + "zenoh-config", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-link-udp" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8417bffa57fd8cb5d0845dd1abcfe370ed8f61753686b58eef998254e7b3e7c6" +dependencies = [ + "async-trait", + "socket2", + "tokio", + "tokio-util", + "tracing", + "zenoh-buffers", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-sync", + "zenoh-util", +] + +[[package]] +name = "zenoh-macros" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcd9d20407128f32b02032737af0e26a7960d11e1db8a3e1b88c14675b851a01" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "zenoh-keyexpr", +] + +[[package]] +name = "zenoh-plugin-trait" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a331b76b19c3153e446b6a3d19eee5ef7dae8fddbed3b548b0e8b875f3bf480" +dependencies = [ + "git-version", + "libloading", + "serde", + "tracing", + "zenoh-config", + "zenoh-keyexpr", + "zenoh-macros", + "zenoh-result", + "zenoh-util", +] + +[[package]] +name = "zenoh-protocol" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524ba254d2f2046a02b4d61cf002a91575c190139fb43f5799875dc410f9dc52" +dependencies = [ + "const_format", + "rand 0.8.5", + "serde", + "uhlc", + "zenoh-buffers", + "zenoh-keyexpr", + "zenoh-result", +] + +[[package]] +name = "zenoh-result" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea304c480ce94299e33a272d427e39ca4e7571df54781944ae9f61d040a2473" +dependencies = [ + "anyhow", +] + +[[package]] +name = "zenoh-runtime" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27f670253d4a9b50fef9c18719b6f1cc6e2a14927edb1f12a0e9d32b82883c" +dependencies = [ + "lazy_static", + "ron", + "serde", + "tokio", + "tracing", + "zenoh-macros", + "zenoh-result", +] + +[[package]] +name = "zenoh-sync" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b405394b98685284bfb0a9f57eade1628313fdaf0ee8d4bb85ae1800d5bcc6" +dependencies = [ + "arc-swap", + "event-listener 5.4.0", + "futures", + "tokio", + "zenoh-buffers", + "zenoh-collections", + "zenoh-core", +] + +[[package]] +name = "zenoh-task" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b0d2fa950b0f821449ab725f4f89a33d360f1e9a8f4858b5551dfc065a3b1e3" +dependencies = [ + "futures", + "tokio", + "tokio-util", + "tracing", + "zenoh-core", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-transport" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76839964ebe311fde4c3a7e8847b82ddbeb2c5822253c3037e5bebeed98e8da" +dependencies = [ + "async-trait", + "crossbeam-utils", + "flume", + "lazy_static", + "lz4_flex", + "paste", + "rand 0.8.5", + "ringbuffer-spsc", + "rsa", + "serde", + "sha3", + "tokio", + "tokio-util", + "tracing", + "zenoh-buffers", + "zenoh-codec", + "zenoh-config", + "zenoh-core", + "zenoh-crypto", + "zenoh-link", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-sync", + "zenoh-task", + "zenoh-util", +] + +[[package]] +name = "zenoh-util" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009e5a85088e52a3af410b5f6bbd4044c68d7bf0e0de282d9643b9338d3e5848" +dependencies = [ + "async-trait", + "const_format", + "flume", + "home", + "humantime", + "lazy_static", + "libc", + "libloading", + "pnet_datalink", + "serde", + "serde_json", + "shellexpand", + "tokio", + "tracing", + "tracing-subscriber", + "winapi", + "zenoh-core", + "zenoh-result", +] + [[package]] name = "zerocopy" version = "0.8.25" @@ -9043,6 +10211,39 @@ dependencies = [ "zstd", ] +[[package]] +name = "zip" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.3", + "hmac 0.12.1", + "indexmap 2.9.0", + "lzma-rs", + "memchr", + "pbkdf2", + "sha1", + "time", + "xz2", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zlib-rs" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8" + [[package]] name = "zopfli" version = "0.8.2" diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index d4034d17..5573df81 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -14,7 +14,7 @@ resolver = "2" jmap-client = { version = "0.3", features = ["async"] } mail-parser = { version = "0.11", features = ["full_encoding", "serde"] } reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-webpki-roots", "http2"]} -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } num_cpus = "1.13.1" clap = { version = "4.1.6", features = ["derive"] } prettytable-rs = "0.10.0" diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 20f0c7f5..58028bad 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -29,7 +29,7 @@ rustls = { version = "0.23.5", default-features = false, features = ["std", "rin rustls-pemfile = "2.0" rustls-pki-types = { version = "1" } ring = { version = "0.17" } -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } futures = "0.3" rcgen = "0.12" @@ -41,11 +41,11 @@ x509-parser = "0.17.0" pem = "3.0" chrono = { version = "0.4", features = ["serde"] } hyper = { version = "1.0.1", features = ["server", "http1", "http2"] } -opentelemetry = { version = "0.25" } -opentelemetry_sdk = { version = "0.25" } -opentelemetry-otlp = { version = "0.25", features = ["http-proto", "reqwest-client"] } -opentelemetry-semantic-conventions = { version = "0.25.0" } -prometheus = { version = "0.13.4", default-features = false } +opentelemetry = { version = "0.29" } +opentelemetry_sdk = { version = "0.29" } +opentelemetry-otlp = { version = "0.29", default-features = false, features = ["http-proto", "trace", "metrics", "logs", "internal-logs", "grpc-tonic", "tls-webpki-roots", "reqwest-rustls-webpki-roots"] } +opentelemetry-semantic-conventions = { version = "0.29.0" } +prometheus = { version = "0.14", default-features = false } imagesize = "0.14" sha1 = "0.10" sha2 = "0.10.6" @@ -57,7 +57,7 @@ unicode-security = "0.1.0" infer = "0.19" bincode = { version = "2.0", features = ["serde"] } hostname = "0.4.0" -zip = "2.1" +zip = "3.0" pwhash = "1.0.0" xxhash-rust = { version = "0.8.5", features = ["xxh3"] } psl = "2" @@ -83,4 +83,4 @@ enterprise = [] foundation = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/common/src/config/telemetry.rs b/crates/common/src/config/telemetry.rs index 6c13aaa4..ca6b75cb 100644 --- a/crates/common/src/config/telemetry.rs +++ b/crates/common/src/config/telemetry.rs @@ -4,28 +4,25 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::{collections::HashMap, str::FromStr, sync::Arc, time::Duration}; - +use super::parse_http_headers; use ahash::{AHashMap, AHashSet}; use base64::{Engine, engine::general_purpose::STANDARD}; use hyper::{HeaderMap, header::CONTENT_TYPE}; -use opentelemetry::{InstrumentationLibrary, KeyValue}; -use opentelemetry_otlp::WithExportConfig; +use opentelemetry::{InstrumentationScope, KeyValue, logs::LoggerProvider}; +use opentelemetry_otlp::{ + LogExporter, MetricExporter, SpanExporter, WithExportConfig, WithHttpConfig, +}; use opentelemetry_sdk::{ Resource, - export::{logs::LogExporter, trace::SpanExporter}, - metrics::{ - exporter::PushMetricsExporter, - reader::{DefaultAggregationSelector, DefaultTemporalitySelector}, - }, + logs::{SdkLogger, SdkLoggerProvider}, + metrics::Temporality, }; -use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, SERVICE_VERSION}; +use opentelemetry_semantic_conventions::resource::SERVICE_VERSION; +use std::{collections::HashMap, str::FromStr, sync::Arc, time::Duration}; use store::Stores; use trc::{EventType, Level, TelemetryEvent, ipc::subscriber::Interests}; use utils::config::{Config, utils::ParseValue}; -use super::parse_http_headers; - #[derive(Debug)] pub struct TelemetrySubscriber { pub id: String, @@ -34,6 +31,7 @@ pub struct TelemetrySubscriber { pub lossy: bool, } +#[allow(clippy::large_enum_variant)] #[derive(Debug)] pub enum TelemetrySubscriberType { ConsoleTracer(ConsoleTracer), @@ -48,17 +46,18 @@ pub enum TelemetrySubscriberType { #[derive(Debug)] pub struct OtelTracer { - pub span_exporter: Box, + pub span_exporter: SpanExporter, pub span_exporter_enable: bool, - pub log_exporter: Box, + pub log_exporter: LogExporter, + pub log_provider: SdkLogger, pub log_exporter_enable: bool, pub throttle: Duration, } pub struct OtelMetrics { pub resource: Resource, - pub instrumentation: InstrumentationLibrary, - pub exporter: Box, + pub instrumentation: InstrumentationScope, + pub exporter: MetricExporter, pub interval: Duration, } @@ -259,9 +258,7 @@ impl Tracers { "otel" | "open-telemetry" => { let timeout = config .property::(("tracer", id, "timeout")) - .unwrap_or(Duration::from_secs( - opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT, - )); + .unwrap_or(opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT); let throttle = config .property_or_default(("tracer", id, "throttle"), "1s") .unwrap_or_else(|| Duration::from_secs(1)); @@ -277,12 +274,12 @@ impl Tracers { .unwrap_or_default() { "grpc" => { - let mut span_exporter = opentelemetry_otlp::new_exporter() - .tonic() + let mut span_exporter = SpanExporter::builder() + .with_tonic() .with_protocol(opentelemetry_otlp::Protocol::Grpc) .with_timeout(timeout); - let mut log_exporter = opentelemetry_otlp::new_exporter() - .tonic() + let mut log_exporter = LogExporter::builder() + .with_tonic() .with_protocol(opentelemetry_otlp::Protocol::Grpc) .with_timeout(timeout); if let Some(endpoint) = config.value(("tracer", id, "endpoint")) { @@ -290,17 +287,17 @@ impl Tracers { log_exporter = log_exporter.with_endpoint(endpoint); } - match ( - span_exporter.build_span_exporter(), - log_exporter.build_log_exporter(), - ) { + match (span_exporter.build(), log_exporter.build()) { (Ok(span_exporter), Ok(log_exporter)) => { TelemetrySubscriberType::OtelTracer(OtelTracer { - span_exporter: Box::new(span_exporter), - log_exporter: Box::new(log_exporter), + span_exporter, + log_exporter, throttle, span_exporter_enable, log_exporter_enable, + log_provider: SdkLoggerProvider::builder() + .build() + .logger("stalwart"), }) } (Err(err), _) => { @@ -346,12 +343,12 @@ impl Tracers { config.new_parse_error(("tracer", id, "headers"), err); } - let mut span_exporter = opentelemetry_otlp::new_exporter() - .http() + let mut span_exporter = SpanExporter::builder() + .with_http() .with_endpoint(&endpoint) .with_timeout(timeout); - let mut log_exporter = opentelemetry_otlp::new_exporter() - .http() + let mut log_exporter = LogExporter::builder() + .with_http() .with_endpoint(&endpoint) .with_timeout(timeout); if !headers.is_empty() { @@ -359,17 +356,17 @@ impl Tracers { log_exporter = log_exporter.with_headers(headers); } - match ( - span_exporter.build_span_exporter(), - log_exporter.build_log_exporter(), - ) { + match (span_exporter.build(), log_exporter.build()) { (Ok(span_exporter), Ok(log_exporter)) => { TelemetrySubscriberType::OtelTracer(OtelTracer { - span_exporter: Box::new(span_exporter), - log_exporter: Box::new(log_exporter), + span_exporter, + log_exporter, throttle, span_exporter_enable, log_exporter_enable, + log_provider: SdkLoggerProvider::builder() + .build() + .logger("stalwart"), }) } (Err(err), _) => { @@ -653,36 +650,32 @@ impl Metrics { if let Some(is_grpc) = otel_enabled { let timeout = config .property::("metrics.open-telemetry.timeout") - .unwrap_or(Duration::from_secs( - opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT, - )); + .unwrap_or(opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT); let interval = config .property_or_default("metrics.open-telemetry.interval", "1m") .unwrap_or_else(|| Duration::from_secs(60)); - let resource = Resource::new([ - KeyValue::new(SERVICE_NAME, "stalwart"), - KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION")), - ]); - let instrumentation = InstrumentationLibrary::builder("stalwart") + let resource = Resource::builder() + .with_service_name("stalwart") + .with_attribute(KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION"))) + .build(); + let instrumentation = InstrumentationScope::builder("stalwart") .with_version(env!("CARGO_PKG_VERSION")) .build(); if is_grpc { - let mut exporter = opentelemetry_otlp::new_exporter() - .tonic() + let mut exporter = MetricExporter::builder() + .with_temporality(Temporality::Delta) + .with_tonic() .with_protocol(opentelemetry_otlp::Protocol::Grpc) .with_timeout(timeout); if let Some(endpoint) = config.value("metrics.open-telemetry.endpoint") { exporter = exporter.with_endpoint(endpoint); } - match exporter.build_metrics_exporter( - Box::new(DefaultAggregationSelector::new()), - Box::new(DefaultTemporalitySelector::new()), - ) { + match exporter.build() { Ok(exporter) => { metrics.otel = Some(Arc::new(OtelMetrics { - exporter: Box::new(exporter), + exporter, interval, resource, instrumentation, @@ -713,21 +706,19 @@ impl Metrics { config.new_parse_error("metrics.open-telemetry.headers", err); } - let mut exporter = opentelemetry_otlp::new_exporter() - .http() + let mut exporter = MetricExporter::builder() + .with_temporality(Temporality::Delta) + .with_http() .with_endpoint(&endpoint) .with_timeout(timeout); if !headers.is_empty() { exporter = exporter.with_headers(headers); } - match exporter.build_metrics_exporter( - Box::new(DefaultAggregationSelector::new()), - Box::new(DefaultTemporalitySelector::new()), - ) { + match exporter.build() { Ok(exporter) => { metrics.otel = Some(Arc::new(OtelMetrics { - exporter: Box::new(exporter), + exporter, interval, resource, instrumentation, diff --git a/crates/common/src/telemetry/metrics/otel.rs b/crates/common/src/telemetry/metrics/otel.rs index 7ce117f8..a84e6e3e 100644 --- a/crates/common/src/telemetry/metrics/otel.rs +++ b/crates/common/src/telemetry/metrics/otel.rs @@ -4,21 +4,22 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::time::SystemTime; - -use opentelemetry::global::set_error_handler; -use opentelemetry_sdk::metrics::data::{ - DataPoint, Gauge, Histogram, HistogramDataPoint, Metric, ResourceMetrics, ScopeMetrics, Sum, - Temporality, -}; -use trc::{Collector, TelemetryEvent}; - use crate::config::telemetry::OtelMetrics; +use opentelemetry_sdk::metrics::{ + Temporality, + data::{ + Gauge, GaugeDataPoint, Histogram, HistogramDataPoint, Metric, ResourceMetrics, + ScopeMetrics, Sum, SumDataPoint, + }, + exporter::PushMetricExporter, +}; +use std::time::SystemTime; +use trc::{Collector, TelemetryEvent}; impl OtelMetrics { pub async fn push_metrics(&self, is_enterprise: bool, start_time: SystemTime) { let mut metrics = Vec::with_capacity(256); - let now = SystemTime::now(); + let time = SystemTime::now(); // Add counters for counter in Collector::collect_counters(is_enterprise) { @@ -27,15 +28,15 @@ impl OtelMetrics { description: counter.id().description().into(), unit: "events".into(), data: Box::new(Sum { - data_points: vec![DataPoint { + data_points: vec![SumDataPoint { attributes: vec![], - start_time: start_time.into(), - time: now.into(), value: counter.value(), exemplars: vec![], }], temporality: Temporality::Cumulative, is_monotonic: true, + start_time, + time, }), }); } @@ -47,13 +48,13 @@ impl OtelMetrics { description: gauge.id().description().into(), unit: gauge.id().unit().into(), data: Box::new(Gauge { - data_points: vec![DataPoint { + data_points: vec![GaugeDataPoint { attributes: vec![], - start_time: start_time.into(), - time: now.into(), value: gauge.get(), exemplars: vec![], }], + start_time: start_time.into(), + time, }), }); } @@ -67,8 +68,6 @@ impl OtelMetrics { data: Box::new(Histogram { data_points: vec![HistogramDataPoint { attributes: vec![], - start_time, - time: now, count: histogram.count(), bounds: histogram.upper_bounds_vec(), bucket_counts: histogram.buckets_vec(), @@ -78,6 +77,8 @@ impl OtelMetrics { exemplars: vec![], }], temporality: Temporality::Cumulative, + start_time, + time, }), }); } @@ -102,11 +103,12 @@ impl OtelMetrics { } pub fn enable_errors() { - let _ = set_error_handler(|error| { + // TODO: Remove this when the OpenTelemetry SDK supports error handling + /*let _ = set_error_handler(|error| { trc::event!( Telemetry(TelemetryEvent::OtelMetricsExporterError), Reason = error.to_string(), ); - }); + });*/ } } diff --git a/crates/common/src/telemetry/tracers/otel.rs b/crates/common/src/telemetry/tracers/otel.rs index e66b7ad1..b3d14930 100644 --- a/crates/common/src/telemetry/tracers/otel.rs +++ b/crates/common/src/telemetry/tracers/otel.rs @@ -4,38 +4,34 @@ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ -use std::{ - borrow::Cow, - time::{Duration, Instant, SystemTime, UNIX_EPOCH}, -}; - +use crate::{LONG_1Y_SLUMBER, config::telemetry::OtelTracer}; use ahash::AHashMap; use mail_parser::DateTime; use opentelemetry::{ - InstrumentationLibrary, Key, KeyValue, Value, + InstrumentationScope, Key, KeyValue, Value, logs::{AnyValue, Severity}, trace::{SpanContext, SpanKind, Status, TraceFlags, TraceState}, }; use opentelemetry_sdk::{ Resource, - export::{logs::LogBatch, trace::SpanData}, - trace::{SpanEvents, SpanLinks}, + logs::{LogBatch, LogExporter, SdkLogRecord}, + trace::{SpanData, SpanEvents, SpanExporter, SpanLinks}, }; -use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, SERVICE_VERSION}; +use opentelemetry_semantic_conventions::resource::SERVICE_VERSION; +use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; use trc::{Event, EventDetails, Level, TelemetryEvent, ipc::subscriber::SubscriberBuilder}; -use crate::{LONG_1Y_SLUMBER, config::telemetry::OtelTracer}; - const MAX_EVENTS: usize = 2048; pub(crate) fn spawn_otel_tracer(builder: SubscriberBuilder, mut otel: OtelTracer) { let (_, mut rx) = builder.register(); tokio::spawn(async move { - let resource = Cow::Owned(Resource::new([ - KeyValue::new(SERVICE_NAME, "stalwart"), - KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION")), - ])); - let instrumentation = InstrumentationLibrary::builder("stalwart") + let resource = Resource::builder() + .with_service_name("stalwart") + .with_attribute(KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION"))) + .build(); + + let instrumentation = InstrumentationScope::builder("stalwart") .with_version(env!("CARGO_PKG_VERSION")) .build(); @@ -58,7 +54,7 @@ pub(crate) fn spawn_otel_tracer(builder: SubscriberBuilder, mut otel: OtelTracer Ok(Some(events)) => { for event in events { if otel.log_exporter_enable { - pending_logs.push(build_log_record(&event)); + pending_logs.push(otel.build_log_record(&event)); } if otel.span_exporter_enable { @@ -114,6 +110,7 @@ pub(crate) fn spawn_otel_tracer(builder: SubscriberBuilder, mut otel: OtelTracer .iter() .map(|log| (log, &instrumentation)) .collect::>(); + if let Err(err) = otel.log_exporter.export(LogBatch::new(&logs)).await { trc::event!( Telemetry(TelemetryEvent::OtelExporterError), @@ -143,7 +140,7 @@ fn build_span_data( start_span: &Event, end_span: &Event, span_events: I, - instrumentation: &InstrumentationLibrary, + instrumentation: &InstrumentationScope, ) -> SpanData where I: IntoIterator, @@ -184,53 +181,58 @@ where links: SpanLinks::default(), status: Status::default(), span_kind: SpanKind::Server, - instrumentation_lib: instrumentation.clone(), + instrumentation_scope: instrumentation.clone(), } } -fn build_log_record(event: &Event) -> opentelemetry_sdk::logs::LogRecord { - use opentelemetry::logs::LogRecord; - let mut record = opentelemetry_sdk::logs::LogRecord::default(); - record.event_name = event.inner.typ.name().into(); - record.severity_number = match event.inner.level { - Level::Trace => Severity::Trace, - Level::Debug => Severity::Debug, - Level::Info => Severity::Info, - Level::Warn => Severity::Warn, - Level::Error => Severity::Error, - Level::Disable => Severity::Error, +impl OtelTracer { + fn build_log_record(&self, event: &Event) -> SdkLogRecord { + use opentelemetry::logs::LogRecord; + use opentelemetry::logs::Logger; + + let mut record = self.log_provider.create_log_record(); + record.set_event_name(event.inner.typ.name()); + record.set_severity_number(match event.inner.level { + Level::Trace => Severity::Trace, + Level::Debug => Severity::Debug, + Level::Info => Severity::Info, + Level::Warn => Severity::Warn, + Level::Error => Severity::Error, + Level::Disable => Severity::Error, + }); + record.set_severity_text(event.inner.level.as_str()); + record.set_body(AnyValue::String(event.inner.typ.description().into())); + record.set_timestamp(UNIX_EPOCH + Duration::from_secs(event.inner.timestamp)); + record.set_observed_timestamp(SystemTime::now()); + for (k, v) in &event.keys { + record.add_attribute(k.name(), build_any_value(v)); + } + record } - .into(); - record.severity_text = event.inner.level.as_str().into(); - record.body = AnyValue::String(event.inner.typ.description().into()).into(); - record.timestamp = (UNIX_EPOCH + Duration::from_secs(event.inner.timestamp)).into(); - record.observed_timestamp = SystemTime::now().into(); - for (k, v) in &event.keys { - record.add_attribute(k.name(), build_any_value(v)); - } - record } fn build_key_value(key_value: &(trc::Key, trc::Value)) -> Option { - (key_value.0 != trc::Key::SpanId).then(|| KeyValue { - key: build_key(&key_value.0), - value: match &key_value.1 { - trc::Value::String(v) => Value::String(v.to_string().into()), - trc::Value::UInt(v) => Value::I64(*v as i64), - trc::Value::Int(v) => Value::I64(*v), - trc::Value::Float(v) => Value::F64(*v), - trc::Value::Timestamp(v) => { - Value::String(DateTime::from_timestamp(*v as i64).to_rfc3339().into()) - } - trc::Value::Duration(v) => Value::I64(*v as i64), - trc::Value::Bytes(_) => Value::String("[binary data]".into()), - trc::Value::Bool(v) => Value::Bool(*v), - trc::Value::Ipv4(v) => Value::String(v.to_string().into()), - trc::Value::Ipv6(v) => Value::String(v.to_string().into()), - trc::Value::Event(_) => Value::String("[event data]".into()), - trc::Value::Array(_) => Value::String("[array]".into()), - trc::Value::None => Value::Bool(false), - }, + (key_value.0 != trc::Key::SpanId).then(|| { + KeyValue::new( + build_key(&key_value.0), + match &key_value.1 { + trc::Value::String(v) => Value::String(v.to_string().into()), + trc::Value::UInt(v) => Value::I64(*v as i64), + trc::Value::Int(v) => Value::I64(*v), + trc::Value::Float(v) => Value::F64(*v), + trc::Value::Timestamp(v) => { + Value::String(DateTime::from_timestamp(*v as i64).to_rfc3339().into()) + } + trc::Value::Duration(v) => Value::I64(*v as i64), + trc::Value::Bytes(_) => Value::String("[binary data]".into()), + trc::Value::Bool(v) => Value::Bool(*v), + trc::Value::Ipv4(v) => Value::String(v.to_string().into()), + trc::Value::Ipv6(v) => Value::String(v.to_string().into()), + trc::Value::Event(_) => Value::String("[event data]".into()), + trc::Value::Array(_) => Value::String("[array]".into()), + trc::Value::None => Value::Bool(false), + }, + ) }) } diff --git a/crates/directory/Cargo.toml b/crates/directory/Cargo.toml index a7cf8ed6..ae8eca02 100644 --- a/crates/directory/Cargo.toml +++ b/crates/directory/Cargo.toml @@ -15,7 +15,7 @@ smtp-proto = { version = "0.1" } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } mail-builder = { version = "0.4" } -tokio = { version = "1.23", features = ["net"] } +tokio = { version = "1.45", features = ["net"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pki-types = { version = "1" } @@ -42,7 +42,7 @@ rkyv = { version = "0.8.10", features = ["little_endian"] } compact_str = { version = "0.9.0", features = ["rkyv", "serde"] } [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } [features] test_mode = [] diff --git a/crates/email/Cargo.toml b/crates/email/Cargo.toml index 151c3785..4baad970 100644 --- a/crates/email/Cargo.toml +++ b/crates/email/Cargo.toml @@ -17,7 +17,7 @@ smtp-proto = { version = "0.1", features = ["rkyv"] } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } sieve-rs = { version = "0.7", features = ["rkyv"] } -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } serde = { version = "1.0", features = ["derive"]} serde_json = "1.0" aes = "0.8.3" @@ -39,4 +39,4 @@ test_mode = [] enterprise = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/groupware/Cargo.toml b/crates/groupware/Cargo.toml index 3b0d52e5..0f9cff79 100644 --- a/crates/groupware/Cargo.toml +++ b/crates/groupware/Cargo.toml @@ -14,7 +14,7 @@ directory = { path = "../directory" } dav-proto = { path = "../dav-proto" } calcard = { version = "0.1", features = ["rkyv"] } hashify = "0.2" -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } rkyv = { version = "0.8.10", features = ["little_endian"] } percent-encoding = "2.3.1" compact_str = "0.9.0" @@ -25,4 +25,4 @@ test_mode = [] enterprise = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/http/Cargo.toml b/crates/http/Cargo.toml index 9a52d064..5d7454bc 100644 --- a/crates/http/Cargo.toml +++ b/crates/http/Cargo.toml @@ -24,7 +24,7 @@ mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } mail-builder = { version = "0.4" } mail-auth = { version = "0.7", features = ["generate"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } -tokio = { version = "1.23", features = ["rt"] } +tokio = { version = "1.45", features = ["rt"] } hyper = { version = "1.0.1", features = ["server", "http1", "http2"] } hyper-util = { version = "0.1.1", features = ["tokio"] } http-body-util = "0.1.0" diff --git a/crates/imap-proto/Cargo.toml b/crates/imap-proto/Cargo.toml index 9dd726c7..e17af125 100644 --- a/crates/imap-proto/Cargo.toml +++ b/crates/imap-proto/Cargo.toml @@ -15,4 +15,4 @@ hashify = { version = "0.2" } compact_str = "0.9.0" [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/imap/Cargo.toml b/crates/imap/Cargo.toml index dd3503a7..34e1775f 100644 --- a/crates/imap/Cargo.toml +++ b/crates/imap/Cargo.toml @@ -18,7 +18,7 @@ mail-parser = { version = "0.11", features = ["full_encoding"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pemfile = "2.0" -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } parking_lot = "0.12" ahash = { version = "0.8" } diff --git a/crates/jmap-proto/Cargo.toml b/crates/jmap-proto/Cargo.toml index be09969d..01bc40ac 100644 --- a/crates/jmap-proto/Cargo.toml +++ b/crates/jmap-proto/Cargo.toml @@ -18,4 +18,4 @@ rkyv = { version = "0.8.10", features = ["little_endian"] } compact_str = { version = "0.9.0", features = ["rkyv", "serde"] } [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/jmap/Cargo.toml b/crates/jmap/Cargo.toml index 39cbf02e..9d9cfa7d 100644 --- a/crates/jmap/Cargo.toml +++ b/crates/jmap/Cargo.toml @@ -28,7 +28,7 @@ serde_json = "1.0" hyper = { version = "1.0.1", features = ["server", "http1", "http2"] } hyper-util = { version = "0.1.1", features = ["tokio"] } http-body-util = "0.1.0" -tokio = { version = "1.23", features = ["rt"] } +tokio = { version = "1.45", features = ["rt"] } futures-util = "0.3.28" async-stream = "0.3.5" base64 = "0.22" diff --git a/crates/main/Cargo.toml b/crates/main/Cargo.toml index be6ee790..1023b73b 100644 --- a/crates/main/Cargo.toml +++ b/crates/main/Cargo.toml @@ -34,7 +34,7 @@ services = { path = "../services" } trc = { path = "../trc" } utils = { path = "../utils" } migration = { path = "../migration" } -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } [target.'cfg(not(target_env = "msvc"))'.dependencies] jemallocator = "0.5.0" diff --git a/crates/managesieve/Cargo.toml b/crates/managesieve/Cargo.toml index bab7e51e..d1527c86 100644 --- a/crates/managesieve/Cargo.toml +++ b/crates/managesieve/Cargo.toml @@ -19,7 +19,7 @@ mail-send = { version = "0.5", default-features = false, features = ["cram-md5", sieve-rs = { version = "0.7", features = ["rkyv"] } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pemfile = "2.0" -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } parking_lot = "0.12" ahash = { version = "0.8" } diff --git a/crates/migration/Cargo.toml b/crates/migration/Cargo.toml index a62131eb..4de33ea9 100644 --- a/crates/migration/Cargo.toml +++ b/crates/migration/Cargo.toml @@ -17,7 +17,7 @@ smtp = { path = "../smtp" } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-auth = { version = "0.7", features = ["rkyv"] } sieve-rs = { version = "0.7", features = ["rkyv"] } -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } serde = { version = "1.0", features = ["derive"]} serde_json = "1.0" rkyv = { version = "0.8.10", features = ["little_endian"] } @@ -31,4 +31,4 @@ test_mode = [] enterprise = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/nlp/Cargo.toml b/crates/nlp/Cargo.toml index 8c36f17e..92d2cd4b 100644 --- a/crates/nlp/Cargo.toml +++ b/crates/nlp/Cargo.toml @@ -26,5 +26,5 @@ hashify = "0.2.1" test_mode = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } bincode = "1.3.3" diff --git a/crates/pop3/Cargo.toml b/crates/pop3/Cargo.toml index e2492dd9..33d04573 100644 --- a/crates/pop3/Cargo.toml +++ b/crates/pop3/Cargo.toml @@ -16,7 +16,7 @@ email = { path = "../email" } mail-parser = { version = "0.11", features = ["full_encoding"] } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } [features] diff --git a/crates/services/Cargo.toml b/crates/services/Cargo.toml index cc9a74e8..11bb76e5 100644 --- a/crates/services/Cargo.toml +++ b/crates/services/Cargo.toml @@ -13,7 +13,7 @@ email = { path = "../email" } smtp = { path = "../smtp" } jmap_proto = { path = "../jmap-proto" } directory = { path = "../directory" } -tokio = { version = "1.23", features = ["rt"] } +tokio = { version = "1.45", features = ["rt"] } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } serde = { version = "1.0", features = ["derive"]} serde_json = "1.0" diff --git a/crates/smtp/Cargo.toml b/crates/smtp/Cargo.toml index 2a8a6db5..e4a78179 100644 --- a/crates/smtp/Cargo.toml +++ b/crates/smtp/Cargo.toml @@ -30,7 +30,7 @@ ahash = { version = "0.8" } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pemfile = "2.0" rustls-pki-types = { version = "1" } -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } webpki-roots = { version = "1.0"} hyper = { version = "1.0.1", features = ["server", "http1", "http2"] } diff --git a/crates/spam-filter/Cargo.toml b/crates/spam-filter/Cargo.toml index 7ec5bc6d..f6ec739a 100644 --- a/crates/spam-filter/Cargo.toml +++ b/crates/spam-filter/Cargo.toml @@ -15,7 +15,7 @@ mail-parser = { version = "0.11", features = ["full_encoding"] } mail-builder = { version = "0.4" } mail-auth = { version = "0.7" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } psl = "2" hyper = { version = "1.0.1", features = ["server", "http1", "http2"] } idna = "1.0" @@ -32,4 +32,4 @@ test_mode = [] enterprise = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index ec9377a4..f6725c7f 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -17,7 +17,7 @@ azure_core = { version = "0.21.0", optional = true } azure_storage = { version = "0.21.0", default-features = false, features = ["enable_reqwest_rustls", "hmac_rust"], optional = true } azure_storage_blobs = { version = "0.21.0", default-features = false, features = ["enable_reqwest_rustls", "hmac_rust"], optional = true } reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-webpki-roots", "http2", "stream"]} -tokio = { version = "1.23", features = ["sync", "fs", "io-util"] } +tokio = { version = "1.45", features = ["sync", "fs", "io-util"] } r2d2 = { version = "0.8.10", optional = true } futures = { version = "0.3", optional = true } rand = "0.9.0" @@ -52,24 +52,36 @@ bitpacking = "0.9.2" memchr = { version = "2" } rkyv = { version = "0.8.10", features = ["little_endian"] } compact_str = "0.9.0" +zenoh = { version = "1.3.4", default-features = false, features = ["auth_pubkey", "transport_multilink", "transport_compression", "transport_quic", "transport_tcp", "transport_tls", "transport_udp"], optional = true } [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } [features] + +# Data Stores rocks = ["rocksdb", "rayon", "num_cpus"] sqlite = ["rusqlite", "rayon", "r2d2", "num_cpus", "lru-cache"] postgres = ["tokio-postgres", "deadpool-postgres", "tokio-rustls", "rustls", "ring", "rustls-pki-types", "futures", "bytes"] -elastic = ["elasticsearch", "serde_json"] mysql = ["mysql_async", "futures"] -nats = ["async-nats"] -s3 = ["rust-s3"] -azure = ["azure_core", "azure_storage", "azure_storage_blobs"] foundation = ["foundationdb", "futures"] fdb-chunked-bm = [] -redis = ["dep:redis", "deadpool"] -enterprise = [] +# Blob stores +s3 = ["rust-s3"] +azure = ["azure_core", "azure_storage", "azure_storage_blobs"] + +# Full-text stores +elastic = ["elasticsearch", "serde_json"] + +# In-memory stores +redis = ["dep:redis", "deadpool"] + +# Pubsub +nats = ["async-nats"] +peer-to-peer = ["zenoh"] + +enterprise = [] test_mode = [] diff --git a/crates/trc/Cargo.toml b/crates/trc/Cargo.toml index eef383b1..61d1cd69 100644 --- a/crates/trc/Cargo.toml +++ b/crates/trc/Cargo.toml @@ -14,7 +14,7 @@ serde_json = "1.0.120" reqwest = { version = "0.12", default-features = false, features = ["rustls-tls-webpki-roots", "http2"]} rtrb = "0.3.1" parking_lot = "0.12.3" -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros"] } ahash = "0.8.11" rkyv = { version = "0.8.10", features = ["little_endian"] } compact_str = "0.9.0" diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index e661caea..4766c55b 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -9,7 +9,7 @@ trc = { path = "../trc" } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pemfile = "2.0" rustls-pki-types = { version = "1" } -tokio = { version = "1.23", features = ["net", "macros"] } +tokio = { version = "1.45", features = ["net", "macros", "signal"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } serde = { version = "1.0", features = ["derive"]} mail-auth = { version = "0.7" } @@ -47,4 +47,4 @@ privdrop = "0.5.3" test_mode = [] [dev-dependencies] -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } diff --git a/tests/Cargo.toml b/tests/Cargo.toml index d0f61d2a..386b8255 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -49,7 +49,7 @@ sieve-rs = { version = "0.7", features = ["rkyv"] } utils = { path = "../crates/utils", features = ["test_mode"] } jmap-client = { version = "0.3", features = ["websockets", "debug", "async"] } mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] } -tokio = { version = "1.23", features = ["full"] } +tokio = { version = "1.45", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] } rustls = { version = "0.23.5", default-features = false, features = ["std", "ring", "tls12"] } rustls-pemfile = "2.0"