diff --git a/Cargo.lock b/Cargo.lock index 037045248..f0675c765 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,6 +49,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy 0.7.35", @@ -210,14 +211,16 @@ dependencies = [ ] [[package]] -name = "async-recursion" -version = "1.1.1" +name = "async-compat" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite", + "tokio", ] [[package]] @@ -231,6 +234,17 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version", +] + [[package]] name = "atomic-polyfill" version = "1.0.3" @@ -265,13 +279,13 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.9" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ - "async-trait", "axum-core", "bytes", + "form_urlencoded", "futures-util", "http 1.2.0", "http-body", @@ -299,13 +313,12 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http 1.2.0", "http-body", "http-body-util", @@ -367,6 +380,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base32" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" + [[package]] name = "base64" version = "0.22.1" @@ -963,10 +982,10 @@ dependencies = [ ] [[package]] -name = "dtoa" -version = "1.0.10" +name = "dyn-clone" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecdsa" @@ -1083,21 +1102,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased-serde" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" -dependencies = [ - "serde", -] - -[[package]] -name = "erased_set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a02a5d186d7bf1cb21f1f95e1a9cfa5c1f2dcd803a47aad454423ceec13525c5" - [[package]] name = "errno" version = "0.3.10" @@ -1394,14 +1398,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -1430,23 +1436,25 @@ dependencies = [ [[package]] name = "governor" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0746aa765db78b521451ef74221663b57ba595bf83f75d0ce23cc09447c8139f" +checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" dependencies = [ "cfg-if", "dashmap", "futures-sink", "futures-timer", "futures-util", + "getrandom 0.3.2", "no-std-compat", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.8.5", + "rand 0.9.0", "smallvec", "spinning_top", + "web-time", ] [[package]] @@ -1551,11 +1559,10 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hickory-proto" -version = "0.25.0-alpha.5" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" dependencies = [ - "async-recursion", "async-trait", "cfg-if", "data-encoding", @@ -1567,6 +1574,7 @@ dependencies = [ "ipnet", "once_cell", "rand 0.9.0", + "ring", "thiserror 2.0.12", "tinyvec", "tokio", @@ -1576,9 +1584,9 @@ dependencies = [ [[package]] name = "hickory-resolver" -version = "0.25.0-alpha.5" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" dependencies = [ "cfg-if", "futures-util", @@ -1735,9 +1743,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -1745,6 +1753,7 @@ dependencies = [ "http 1.2.0", "http-body", "hyper", + "libc", "pin-project-lite", "socket2", "tokio", @@ -1916,9 +1925,9 @@ dependencies = [ [[package]] name = "igd-next" -version = "0.15.1" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b0d7d4541def58a37bf8efc559683f21edce7c82f0d866c93ac21f7e098f93" +checksum = "d06464e726471718db9ad3fefc020529fabcde03313a0fc3967510e2db5add12" dependencies = [ "async-trait", "attohttpc", @@ -1929,7 +1938,7 @@ dependencies = [ "hyper", "hyper-util", "log", - "rand 0.8.5", + "rand 0.9.0", "tokio", "url", "xmltree", @@ -2008,9 +2017,8 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iroh" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7224d4eeec6c8b5b1a9b2347a4dff3588834a7fb17233044bff3e90e7b293d" +version = "0.34.1" +source = "git+https://github.com/n0-computer/iroh?branch=main#a62a2bd25f5280a8d1512bcd261e666731de5d95" dependencies = [ "aead", "anyhow", @@ -2025,21 +2033,22 @@ dependencies = [ "der", "derive_more", "ed25519-dalek", + "futures-buffered", "futures-util", + "getrandom 0.3.2", "hickory-resolver", "http 1.2.0", "igd-next", "instant", "iroh-base", "iroh-metrics", - "iroh-net-report", "iroh-quinn", "iroh-quinn-proto", "iroh-quinn-udp", "iroh-relay", "n0-future", "netdev", - "netwatch 0.4.0", + "netwatch", "pin-project", "pkarr", "portmapper", @@ -2051,8 +2060,10 @@ dependencies = [ "rustls-webpki", "serde", "smallvec", + "spki", "strum", "stun-rs", + "surge-ping", "swarm-discovery", "thiserror 2.0.12", "time", @@ -2069,9 +2080,8 @@ dependencies = [ [[package]] name = "iroh-base" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bf2374c0f1d01cde6e60de7505e42a604acda1a1bb3f7be19806e466055517" +version = "0.34.1" +source = "git+https://github.com/n0-computer/iroh?branch=main#a62a2bd25f5280a8d1512bcd261e666731de5d95" dependencies = [ "curve25519-dalek", "data-encoding", @@ -2111,7 +2121,7 @@ dependencies = [ "iroh-io", "iroh-metrics", "iroh-quinn", - "nested_enum_utils", + "nested_enum_utils 0.1.0", "num_cpus", "oneshot", "parking_lot", @@ -2162,50 +2172,32 @@ dependencies = [ [[package]] name = "iroh-metrics" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f7cd1ffe3b152a5f4f4c1880e01e07d96001f20e02cc143cb7842987c616b3" +checksum = "f70466f14caff7420a14373676947e25e2917af6a5b1bec45825beb2bf1eb6a7" dependencies = [ - "erased_set", "http-body-util", "hyper", "hyper-util", - "prometheus-client", + "iroh-metrics-derive", + "itoa", "reqwest", "serde", - "struct_iterable", - "thiserror 2.0.12", + "snafu", "tokio", "tracing", ] [[package]] -name = "iroh-net-report" -version = "0.34.0" +name = "iroh-metrics-derive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63407d73331e8e38980be7e39b1db8e173fc28545b3ea0c48c9a718f95877b8e" +checksum = "8d12f5c45c4ed2436302a4e03cad9a0ad34b2962ad0c5791e1019c0ee30eeb09" dependencies = [ - "anyhow", - "bytes", - "cfg_aliases", - "derive_more", - "hickory-resolver", - "iroh-base", - "iroh-metrics", - "iroh-quinn", - "iroh-relay", - "n0-future", - "netwatch 0.4.0", - "portmapper", - "rand 0.8.5", - "reqwest", - "rustls", - "surge-ping", - "thiserror 2.0.12", - "tokio", - "tokio-util", - "tracing", - "url", + "heck", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -2265,10 +2257,10 @@ dependencies = [ [[package]] name = "iroh-relay" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d282c04a71a83a90b8fe6872ba30ae341853255aa908375a3e6181f7215d7b" +version = "0.34.1" +source = "git+https://github.com/n0-computer/iroh?branch=main#a62a2bd25f5280a8d1512bcd261e666731de5d95" dependencies = [ + "ahash", "anyhow", "bytes", "cfg_aliases", @@ -2276,6 +2268,7 @@ dependencies = [ "dashmap", "data-encoding", "derive_more", + "getrandom 0.3.2", "governor", "hickory-proto", "hickory-resolver", @@ -2287,7 +2280,7 @@ dependencies = [ "iroh-metrics", "iroh-quinn", "iroh-quinn-proto", - "lru", + "lru 0.12.5", "n0-future", "num_enum", "pin-project", @@ -2304,6 +2297,8 @@ dependencies = [ "rustls-pemfile", "rustls-webpki", "serde", + "sha1", + "simdutf8", "strum", "stun-rs", "thiserror 2.0.12", @@ -2311,14 +2306,14 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-rustls-acme", - "tokio-tungstenite", - "tokio-tungstenite-wasm", "tokio-util", + "tokio-websockets", "toml", "tracing", "tracing-subscriber", "url", "webpki-roots", + "ws_stream_wasm", "z32", ] @@ -2377,9 +2372,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.170" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" @@ -2456,6 +2451,12 @@ dependencies = [ "hashbrown 0.15.2", ] +[[package]] +name = "lru" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" + [[package]] name = "match_cfg" version = "0.1.0" @@ -2473,9 +2474,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "md5" @@ -2542,9 +2543,9 @@ dependencies = [ [[package]] name = "n0-future" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399e11dc3b0e8d9d65b27170d22f5d779d52d9bed888db70d7e0c2c7ce3dfc52" +checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" dependencies = [ "cfg_aliases", "derive_more", @@ -2582,6 +2583,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "nested_enum_utils" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43fa9161ed44d30e9702fe42bd78693bceac0fed02f647da749f36109023d3a3" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "netdev" version = "0.31.0" @@ -2626,11 +2639,12 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.19.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c171cd77b4ee8c7708da746ce392440cb7bcf618d122ec9ecc607b12938bf4" +checksum = "0800eae8638a299eaa67476e1c6b6692922273e0f7939fd188fc861c837b9cd2" dependencies = [ "anyhow", + "bitflags 2.9.0", "byteorder", "libc", "log", @@ -2679,42 +2693,9 @@ dependencies = [ [[package]] name = "netwatch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64da82edf903649e6cb6a77b5a6f7fe01387d8865065d411d139018510880302" -dependencies = [ - "anyhow", - "atomic-waker", - "bytes", - "derive_more", - "futures-lite", - "futures-sink", - "futures-util", - "iroh-quinn-udp", - "libc", - "netdev", - "netlink-packet-core", - "netlink-packet-route 0.19.0", - "netlink-sys", - "once_cell", - "rtnetlink 0.13.1", - "rtnetlink 0.14.1", - "serde", - "socket2", - "thiserror 2.0.12", - "time", - "tokio", - "tokio-util", - "tracing", - "windows 0.58.0", - "wmi", -] - -[[package]] -name = "netwatch" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7879c2cfdf30d92f2be89efa3169b3d78107e3ab7f7b9a37157782569314e1" +checksum = "67eeaa5f7505c93c5a9b35ba84fd21fb8aa3f24678c76acfe8716af7862fb07a" dependencies = [ "atomic-waker", "bytes", @@ -2724,15 +2705,15 @@ dependencies = [ "js-sys", "libc", "n0-future", + "nested_enum_utils 0.2.2", "netdev", "netlink-packet-core", - "netlink-packet-route 0.19.0", + "netlink-packet-route 0.23.0", + "netlink-proto", "netlink-sys", - "rtnetlink 0.13.1", - "rtnetlink 0.14.1", "serde", + "snafu", "socket2", - "thiserror 2.0.12", "time", "tokio", "tokio-util", @@ -2743,28 +2724,6 @@ dependencies = [ "wmi", ] -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.9.0", - "cfg-if", - "libc", -] - [[package]] name = "no-std-compat" version = "0.4.1" @@ -2802,6 +2761,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "ntimestamp" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" +dependencies = [ + "base32", + "document-features", + "getrandom 0.2.15", + "httpdate", + "js-sys", + "once_cell", + "serde", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2935,6 +2909,10 @@ name = "once_cell" version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "oneshot" @@ -3103,6 +3081,16 @@ dependencies = [ "sha2", ] +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -3137,26 +3125,33 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkarr" -version = "2.3.1" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92eff194c72f00f3076855b413ad2d940e3a6e307fa697e5c7733e738341aed4" +checksum = "e32222ae3d617bf92414db29085f8a959a4515effce916e038e9399a335a0d6d" dependencies = [ + "async-compat", + "base32", "bytes", + "cfg_aliases", "document-features", + "dyn-clone", "ed25519-dalek", - "flume", - "futures", - "js-sys", - "lru", + "futures-buffered", + "futures-lite", + "getrandom 0.2.15", + "log", + "lru 0.13.0", + "ntimestamp", + "reqwest", "self_cell", + "serde", + "sha1_smol", "simple-dns", "thiserror 2.0.12", + "tokio", "tracing", - "ureq", - "wasm-bindgen", + "url", "wasm-bindgen-futures", - "web-sys", - "z32", ] [[package]] @@ -3241,28 +3236,31 @@ checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "portmapper" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b715da165f399be093fecb2ca774b00713a3b32f6b27e0752fbf255e3be622af" +checksum = "7d6db66007eac4a0ec8331d0d20c734bd64f6445d64bbaf0d0a27fea7a054e36" dependencies = [ "base64", "bytes", "derive_more", "futures-lite", "futures-util", + "hyper-util", "igd-next", "iroh-metrics", "libc", - "netwatch 0.3.0", + "nested_enum_utils 0.2.2", + "netwatch", "num_enum", "rand 0.8.5", "serde", "smallvec", + "snafu", "socket2", - "thiserror 2.0.12", "time", "tokio", "tokio-util", + "tower-layer", "tracing", "url", ] @@ -3319,9 +3317,9 @@ dependencies = [ [[package]] name = "precis-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a414cabc93f5f45d53463e73b3d89d3c5c0dc4a34dbf6901f0c6358f017203" +checksum = "9c2e7b31f132e0c6f8682cfb7bf4a5340dbe925b7986618d0826a56dfe0c8e56" dependencies = [ "precis-tools", "ucd-parse", @@ -3330,9 +3328,9 @@ dependencies = [ [[package]] name = "precis-profiles" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e2841ef58164e2626464d4fde67fa301d5e2c78a10300c1756312a03b169f" +checksum = "dc4f67f78f50388f03494794766ba824a704db16fb5d400fe8d545fa7bc0d3f1" dependencies = [ "lazy_static", "precis-core", @@ -3342,9 +3340,9 @@ dependencies = [ [[package]] name = "precis-tools" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016da884bc4c2c4670211641abef402d15fa2b06c6e9088ff270dac93675aee2" +checksum = "6cc1eb2d5887ac7bfd2c0b745764db89edb84b856e4214e204ef48ef96d10c4a" dependencies = [ "lazy_static", "regex", @@ -3410,29 +3408,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prometheus-client" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" -dependencies = [ - "dtoa", - "itoa", - "parking_lot", - "prometheus-client-derive-encode", -] - -[[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "proptest" version = "1.6.0" @@ -3585,6 +3560,12 @@ dependencies = [ "pest_derive", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.8.5" @@ -3642,7 +3623,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", ] [[package]] @@ -3807,9 +3788,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" dependencies = [ "base64", "bytes", @@ -3905,42 +3886,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rtnetlink" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" -dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route 0.17.1", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix 0.26.4", - "thiserror 1.0.69", - "tokio", -] - -[[package]] -name = "rtnetlink" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b684475344d8df1859ddb2d395dd3dac4f8f3422a1aa0725993cb375fc5caba5" -dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route 0.19.0", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix 0.27.1", - "thiserror 1.0.69", - "tokio", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -4325,6 +4270,12 @@ dependencies = [ "digest", ] +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + [[package]] name = "sha2" version = "0.10.8" @@ -4370,6 +4321,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "simple-dns" version = "0.9.3" @@ -4403,11 +4360,32 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9" +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -4495,35 +4473,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "struct_iterable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "849a064c6470a650b72e41fa6c057879b68f804d113af92900f27574828e7712" -dependencies = [ - "struct_iterable_derive", - "struct_iterable_internal", -] - -[[package]] -name = "struct_iterable_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb939ce88a43ea4e9d012f2f6b4cc789deb2db9d47bad697952a85d6978662c" -dependencies = [ - "erased-serde", - "proc-macro2", - "quote", - "struct_iterable_internal", - "syn 2.0.100", -] - -[[package]] -name = "struct_iterable_internal" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9426b2a0c03e6cc2ea8dbc0168dbbf943f88755e409fb91bcb8f6a268305f4a" - [[package]] name = "strum" version = "0.26.3" @@ -4548,9 +4497,9 @@ dependencies = [ [[package]] name = "stun-rs" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6a47cab181e04277c2ceebe9d4ae102f6a50049b1855fd64546923581665492" +checksum = "fb921f10397d5669e1af6455e9e2d367bf1f9cebcd6b1dd1dc50e19f6a9ac2ac" dependencies = [ "base64", "bounded-integer", @@ -4594,9 +4543,9 @@ dependencies = [ [[package]] name = "swarm-discovery" -version = "0.3.0-alpha.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6406a372c38c426a841d2c1095204dfb259229e3ab8080b1c4102f8966bedfcd" +checksum = "d3a95032b94c1dc318f55e0b130e3d2176cda022310a65c3df0092764ea69562" dependencies = [ "acto", "anyhow", @@ -4709,7 +4658,7 @@ checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" dependencies = [ "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.2", "once_cell", "rustix", "windows-sys 0.59.0", @@ -4883,9 +4832,9 @@ dependencies = [ [[package]] name = "tokio-rustls-acme" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3184e8e292a828dd4bca5b2a60aba830ec5ed873a66c9ebb6e65038fa649e827" +checksum = "f296d48ff72e0df96e2d7ef064ad5904d016a130869e542f00b08c8e05cc18cf" dependencies = [ "async-trait", "base64", @@ -4934,49 +4883,41 @@ dependencies = [ ] [[package]] -name = "tokio-tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - -[[package]] -name = "tokio-tungstenite-wasm" -version = "0.4.0" +name = "tokio-util" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e21a5c399399c3db9f08d8297ac12b500e86bca82e930253fdc62eaf9c0de6ae" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ - "futures-channel", + "bytes", + "futures-core", + "futures-sink", "futures-util", - "http 1.2.0", - "httparse", - "js-sys", - "thiserror 1.0.69", + "hashbrown 0.15.2", + "pin-project-lite", + "slab", "tokio", - "tokio-tungstenite", - "wasm-bindgen", - "web-sys", ] [[package]] -name = "tokio-util" -version = "0.7.13" +name = "tokio-websockets" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "9fcaf159b4e7a376b05b5bfd77bfd38f3324f5fce751b4213bfc7eaa47affb4e" dependencies = [ + "base64", "bytes", "futures-core", "futures-sink", - "futures-util", - "hashbrown 0.14.5", - "pin-project-lite", - "slab", + "getrandom 0.3.2", + "http 1.2.0", + "httparse", + "rand 0.9.0", + "ring", + "rustls-pki-types", + "simdutf8", "tokio", + "tokio-rustls", + "tokio-util", ] [[package]] @@ -5140,24 +5081,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.2.0", - "httparse", - "log", - "rand 0.8.5", - "sha1", - "thiserror 1.0.69", - "utf-8", -] - [[package]] name = "typenum" version = "1.18.0" @@ -5228,21 +5151,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "ureq" -version = "2.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" -dependencies = [ - "base64", - "log", - "once_cell", - "rustls", - "rustls-pki-types", - "url", - "webpki-roots", -] - [[package]] name = "url" version = "2.5.4" @@ -5255,12 +5163,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf16_iter" version = "1.0.5" @@ -5285,7 +5187,7 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.2", ] [[package]] @@ -5336,9 +5238,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -5690,13 +5592,13 @@ dependencies = [ [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-result 0.3.1", + "windows-strings 0.3.1", + "windows-targets 0.53.0", ] [[package]] @@ -6035,9 +5937,9 @@ dependencies = [ [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags 2.9.0", ] @@ -6069,6 +5971,25 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version", + "send_wrapper", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "x509-parser" version = "0.16.0" diff --git a/Cargo.toml b/Cargo.toml index 1059a65a4..fd42d8139 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,10 +40,10 @@ genawaiter = { version = "0.99.1", features = ["futures03"] } hashlink = { version = "0.9.0", optional = true } hex = "0.4.3" indicatif = { version = "0.17.8", optional = true } -iroh-base = { version = "0.34" } +iroh-base = { git = "https://github.com/n0-computer/iroh", branch = "main" } iroh-io = { version = "0.6.0", features = ["stats"] } -iroh-metrics = { version = "0.32", default-features = false } -iroh = "0.34" +iroh-metrics = { version = "0.34", default-features = false } +iroh = { git = "https://github.com/n0-computer/iroh", branch = "main" } nested_enum_utils = { version = "0.1.0", optional = true } num_cpus = "1.15.0" oneshot = "0.1.8" @@ -80,7 +80,7 @@ tracing-test = "0.2.5" [dev-dependencies] http-body = "1.0" -iroh = { version = "0.34", features = ["test-utils"] } +iroh = { git = "https://github.com/n0-computer/iroh", branch = "main", features = ["test-utils"] } quinn = { package = "iroh-quinn", version = "0.13", features = ["ring"] } futures-buffered = "0.2.4" proptest = "1.0.0" diff --git a/deny.toml b/deny.toml index a3059b9b6..1395c24b4 100644 --- a/deny.toml +++ b/deny.toml @@ -19,7 +19,8 @@ allow = [ "MIT", "Zlib", "MPL-2.0", # https://fossa.com/blog/open-source-software-licenses-101-mozilla-public-license-2-0/ - "Unicode-3.0" + "Unicode-3.0", + "Unlicense", # https://unlicense.org/ ] [[licenses.clarify]] @@ -38,4 +39,6 @@ ignore = [ ] [sources] -allow-git = [] +allow-git = [ + "https://github.com/n0-computer/iroh.git", +] diff --git a/src/downloader.rs b/src/downloader.rs index 87f0462b3..512bb3ab6 100644 --- a/src/downloader.rs +++ b/src/downloader.rs @@ -46,7 +46,6 @@ use anyhow::anyhow; use futures_lite::{future::BoxedLocal, Stream, StreamExt}; use hashlink::LinkedHashSet; use iroh::{endpoint, Endpoint, NodeAddr, NodeId}; -use iroh_metrics::inc; use tokio::{ sync::{mpsc, oneshot}, task::JoinSet, @@ -55,7 +54,7 @@ use tokio_util::{either::Either, sync::CancellationToken, time::delay_queue}; use tracing::{debug, error, error_span, trace, warn, Instrument}; use crate::{ - get::{db::DownloadProgress, Stats}, + get::{db::DownloadProgress, error::GetError, Stats}, metrics::Metrics, store::Store, util::{local_pool::LocalPoolHandle, progress::ProgressSender}, @@ -98,7 +97,7 @@ pub enum FailureAction { /// The request was cancelled by us. AllIntentsDropped, /// An error occurred that prevents the request from being retried at all. - AbortRequest(anyhow::Error), + AbortRequest(GetError), /// An error occurred that suggests the node should not be used in general. DropPeer(anyhow::Error), /// An error occurred in which neither the node nor the request are at fault. @@ -332,6 +331,7 @@ pub struct Downloader { next_id: Arc, /// Channel to communicate with the service. msg_tx: mpsc::Sender, + metrics: Arc, } impl Downloader { @@ -354,16 +354,25 @@ impl Downloader { where S: Store, { + let metrics = Arc::new(Metrics::default()); let me = endpoint.node_id().fmt_short(); let (msg_tx, msg_rx) = mpsc::channel(SERVICE_CHANNEL_CAPACITY); let dialer = Dialer::new(endpoint); + let metrics_clone = metrics.clone(); let create_future = move || { let getter = get::IoGetter { store: store.clone(), }; - let service = Service::new(getter, dialer, concurrency_limits, retry_config, msg_rx); + let service = Service::new( + getter, + dialer, + concurrency_limits, + retry_config, + msg_rx, + metrics_clone, + ); service.run().instrument(error_span!("downloader", %me)) }; @@ -371,6 +380,7 @@ impl Downloader { Self { next_id: Arc::new(AtomicU64::new(0)), msg_tx, + metrics, } } @@ -424,6 +434,11 @@ impl Downloader { debug!(?msg, "nodes have not been sent") } } + + /// Returns the metrics collected for this downloader. + pub fn metrics(&self) -> &Arc { + &self.metrics + } } /// Messages the service can receive. @@ -565,6 +580,7 @@ struct Service { in_progress_downloads: JoinSet<(DownloadKind, InternalDownloadResult)>, /// Progress tracker progress_tracker: ProgressTracker, + metrics: Arc, } impl, D: DialerT> Service { fn new( @@ -573,6 +589,7 @@ impl, D: DialerT> Service { concurrency_limits: ConcurrencyLimits, retry_config: RetryConfig, msg_rx: mpsc::Receiver, + metrics: Arc, ) -> Self { Service { getter, @@ -590,6 +607,7 @@ impl, D: DialerT> Service { in_progress_downloads: Default::default(), progress_tracker: ProgressTracker::new(), queue: Default::default(), + metrics, } } @@ -597,16 +615,16 @@ impl, D: DialerT> Service { async fn run(mut self) { loop { trace!("wait for tick"); - inc!(Metrics, downloader_tick_main); + self.metrics.downloader_tick_main.inc(); tokio::select! { Some((node, conn_result)) = self.dialer.next() => { trace!(node=%node.fmt_short(), "tick: connection ready"); - inc!(Metrics, downloader_tick_connection_ready); + self.metrics.downloader_tick_connection_ready.inc(); self.on_connection_ready(node, conn_result); } maybe_msg = self.msg_rx.recv() => { trace!(msg=?maybe_msg, "tick: message received"); - inc!(Metrics, downloader_tick_message_received); + self.metrics.downloader_tick_message_received.inc(); match maybe_msg { Some(msg) => self.handle_message(msg).await, None => return self.shutdown().await, @@ -616,25 +634,26 @@ impl, D: DialerT> Service { match res { Ok((kind, result)) => { trace!(%kind, "tick: transfer completed"); - inc!(Metrics, downloader_tick_transfer_completed); + self::get::track_metrics(&result, &self.metrics); + self.metrics.downloader_tick_transfer_completed.inc(); self.on_download_completed(kind, result); } Err(err) => { warn!(?err, "transfer task panicked"); - inc!(Metrics, downloader_tick_transfer_failed); + self.metrics.downloader_tick_transfer_failed.inc(); } } } Some(expired) = self.retry_nodes_queue.next() => { let node = expired.into_inner(); trace!(node=%node.fmt_short(), "tick: retry node"); - inc!(Metrics, downloader_tick_retry_node); + self.metrics.downloader_tick_retry_node.inc(); self.on_retry_wait_elapsed(node); } Some(expired) = self.goodbye_nodes_queue.next() => { let node = expired.into_inner(); trace!(node=%node.fmt_short(), "tick: goodbye node"); - inc!(Metrics, downloader_tick_goodbye_node); + self.metrics.downloader_tick_goodbye_node.inc(); self.disconnect_idle_node(node, "idle expired"); } } diff --git a/src/downloader/get.rs b/src/downloader/get.rs index c4a17d18c..99e884e34 100644 --- a/src/downloader/get.rs +++ b/src/downloader/get.rs @@ -14,13 +14,13 @@ use crate::{ impl From for FailureAction { fn from(e: GetError) -> Self { match e { - e @ GetError::NotFound(_) => FailureAction::AbortRequest(e.into()), + e @ GetError::NotFound(_) => FailureAction::AbortRequest(e), e @ GetError::RemoteReset(_) => FailureAction::RetryLater(e.into()), e @ GetError::NoncompliantNode(_) => FailureAction::DropPeer(e.into()), e @ GetError::Io(_) => FailureAction::RetryLater(e.into()), - e @ GetError::BadRequest(_) => FailureAction::AbortRequest(e.into()), + e @ GetError::BadRequest(_) => FailureAction::AbortRequest(e), // TODO: what do we want to do on local failures? - e @ GetError::LocalFailure(_) => FailureAction::AbortRequest(e.into()), + e @ GetError::LocalFailure(_) => FailureAction::AbortRequest(e), } } } @@ -61,8 +61,6 @@ impl super::NeedsConn for crate::get::db::GetStateNeedsCon fn proceed(self, conn: endpoint::Connection) -> super::GetProceedFut { async move { let res = self.proceed(conn).await; - #[cfg(feature = "metrics")] - track_metrics(&res); match res { Ok(stats) => Ok(stats), Err(err) => Err(err.into()), @@ -72,11 +70,10 @@ impl super::NeedsConn for crate::get::db::GetStateNeedsCon } } -#[cfg(feature = "metrics")] -fn track_metrics(res: &Result) { - use iroh_metrics::{inc, inc_by}; - - use crate::metrics::Metrics; +pub(super) fn track_metrics( + res: &Result, + metrics: &crate::metrics::Metrics, +) { match res { Ok(stats) => { let crate::get::Stats { @@ -85,13 +82,19 @@ fn track_metrics(res: &Result) { elapsed, } = stats; - inc!(Metrics, downloads_success); - inc_by!(Metrics, download_bytes_total, *bytes_written); - inc_by!(Metrics, download_time_total, elapsed.as_millis() as u64); + metrics.downloads_success.inc(); + metrics.download_bytes_total.inc_by(*bytes_written); + metrics + .download_time_total + .inc_by(elapsed.as_millis() as u64); } Err(e) => match &e { - GetError::NotFound(_) => inc!(Metrics, downloads_notfound), - _ => inc!(Metrics, downloads_error), + FailureAction::AbortRequest(GetError::NotFound(_)) => { + metrics.downloads_notfound.inc(); + } + _ => { + metrics.downloads_error.inc(); + } }, } } diff --git a/src/downloader/test.rs b/src/downloader/test.rs index 0b5ea1f79..75202db09 100644 --- a/src/downloader/test.rs +++ b/src/downloader/test.rs @@ -45,11 +45,20 @@ impl Downloader { retry_config: RetryConfig, ) -> (Self, LocalPool) { let (msg_tx, msg_rx) = mpsc::channel(super::SERVICE_CHANNEL_CAPACITY); + let metrics = Arc::new(Metrics::default()); let lp = LocalPool::default(); + let metrics_clone = metrics.clone(); lp.spawn_detached(move || async move { // we want to see the logs of the service - let service = Service::new(getter, dialer, concurrency_limits, retry_config, msg_rx); + let service = Service::new( + getter, + dialer, + concurrency_limits, + retry_config, + msg_rx, + metrics_clone, + ); service.run().await }); @@ -57,6 +66,7 @@ impl Downloader { Downloader { next_id: Arc::new(AtomicU64::new(0)), msg_tx, + metrics, }, lp, ) diff --git a/src/metrics.rs b/src/metrics.rs index d44f70cba..b4d25de53 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -1,65 +1,40 @@ //! Metrics for iroh-blobs -use iroh_metrics::{ - core::{Counter, Metric}, - struct_iterable::Iterable, -}; +use iroh_metrics::{Counter, MetricsGroup}; /// Enum of metrics for the module -#[allow(missing_docs)] -#[derive(Debug, Clone, Iterable)] +#[derive(Debug, MetricsGroup, Default)] +#[metrics(name = "iroh-blobs")] pub struct Metrics { + /// Total number of content bytes downloaded pub download_bytes_total: Counter, + /// Total time in ms spent downloading content bytes pub download_time_total: Counter, + /// Total number of successful downloads pub downloads_success: Counter, + /// Total number of downloads failed with error pub downloads_error: Counter, + /// Total number of downloads failed with not found pub downloads_notfound: Counter, + /// Number of times the main pub downloader actor loop ticked pub downloader_tick_main: Counter, + + /// Number of times the pub downloader actor ticked for a connection ready pub downloader_tick_connection_ready: Counter, + + /// Number of times the pub downloader actor ticked for a message received pub downloader_tick_message_received: Counter, + + /// Number of times the pub downloader actor ticked for a transfer completed pub downloader_tick_transfer_completed: Counter, - pub downloader_tick_transfer_failed: Counter, - pub downloader_tick_retry_node: Counter, - pub downloader_tick_goodbye_node: Counter, -} -impl Default for Metrics { - fn default() -> Self { - Self { - download_bytes_total: Counter::new("Total number of content bytes downloaded"), - download_time_total: Counter::new("Total time in ms spent downloading content bytes"), - downloads_success: Counter::new("Total number of successful downloads"), - downloads_error: Counter::new("Total number of downloads failed with error"), - downloads_notfound: Counter::new("Total number of downloads failed with not found"), + /// Number of times the pub downloader actor ticked for a transfer failed + pub downloader_tick_transfer_failed: Counter, - downloader_tick_main: Counter::new( - "Number of times the main downloader actor loop ticked", - ), - downloader_tick_connection_ready: Counter::new( - "Number of times the downloader actor ticked for a connection ready", - ), - downloader_tick_message_received: Counter::new( - "Number of times the downloader actor ticked for a message received", - ), - downloader_tick_transfer_completed: Counter::new( - "Number of times the downloader actor ticked for a transfer completed", - ), - downloader_tick_transfer_failed: Counter::new( - "Number of times the downloader actor ticked for a transfer failed", - ), - downloader_tick_retry_node: Counter::new( - "Number of times the downloader actor ticked for a retry node", - ), - downloader_tick_goodbye_node: Counter::new( - "Number of times the downloader actor ticked for a goodbye node", - ), - } - } -} + /// Number of times the pub downloader actor ticked for a retry node + pub downloader_tick_retry_node: Counter, -impl Metric for Metrics { - fn name() -> &'static str { - "iroh-blobs" - } + /// Number of times the pub downloader actor ticked for a goodbye node + pub downloader_tick_goodbye_node: Counter, } diff --git a/src/net_protocol.rs b/src/net_protocol.rs index 9fc8ba7ee..198a2e32f 100644 --- a/src/net_protocol.rs +++ b/src/net_protocol.rs @@ -19,6 +19,7 @@ use tracing::debug; use crate::{ downloader::{ConcurrencyLimits, Downloader, RetryConfig}, + metrics::Metrics, provider::EventSender, store::GcConfig, util::{ @@ -258,6 +259,10 @@ impl Blobs { &self.inner.store } + pub fn metrics(&self) -> &Arc { + self.downloader().metrics() + } + pub fn events(&self) -> &EventSender { &self.inner.events }