From b0bda60792961058c88497e4f7b1a82aff998bbe Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Sun, 13 Dec 2020 00:02:00 +0100 Subject: [PATCH 01/18] Messaging through filesystem (not tested) --- Cargo.lock | 108 ++++++++++++++++++++++++++++++++ Cargo.toml | 2 + src/rest/streaming.rs | 2 +- src/rest/streaming/messaging.rs | 100 +++++++++++++++++++++++++++++ 4 files changed, 211 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 4f82686..9ac76d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -616,6 +616,18 @@ dependencies = [ "synstructure", ] +[[package]] +name = "filetime" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "winapi 0.3.9", +] + [[package]] name = "fixedbitset" version = "0.1.9" @@ -665,6 +677,25 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fsevent" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" +dependencies = [ + "bitflags", + "fsevent-sys", +] + +[[package]] +name = "fsevent-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" +dependencies = [ + "libc", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -999,6 +1030,26 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inotify" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4816c66d2c8ae673df83366c18341538f234a26d65a9ecea5c348b453ac1d02f" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4563555856585ab3180a5bf0b2f9f8d301a728462afffc8195b3f5394229c55" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.9" @@ -1072,6 +1123,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" version = "0.2.80" @@ -1179,6 +1236,18 @@ dependencies = [ "winapi 0.2.8", ] +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio", + "slab", +] + [[package]] name = "mio-uds" version = "0.6.8" @@ -1219,6 +1288,24 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "notify" +version = "4.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd" +dependencies = [ + "bitflags", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.9", +] + [[package]] name = "num-bigint" version = "0.2.6" @@ -1809,6 +1896,15 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.1.0" @@ -2348,6 +2444,17 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -2606,6 +2713,7 @@ dependencies = [ "futures-util", "gftp", "log", + "notify", "pin-project 1.0.2", "secp256k1", "semver", diff --git a/Cargo.toml b/Cargo.toml index dfc8db5..b69a30f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,8 @@ sha3 = "0.9.1" tokio = { version = "0.2.10", features = ["fs"] } url = "2.1.1" +notify = "4.0.12" + [dev-dependencies] structopt = "0.3" tokio = { version = "0.2.10", features = ["macros"] } diff --git a/src/rest/streaming.rs b/src/rest/streaming.rs index 3fbdb39..7469b81 100644 --- a/src/rest/streaming.rs +++ b/src/rest/streaming.rs @@ -10,4 +10,4 @@ pub use result_stream::ResultStream; pub use ya_client::model::activity::{CommandOutput, RuntimeEvent, RuntimeEventKind}; -pub use messaging::{send_to_guest, ExeUnitMessage}; +pub use messaging::{send_to_guest, ExeUnitMessage, MessagesReceiver}; diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index 6c4764e..40a29e5 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -1,6 +1,14 @@ +use anyhow::anyhow; +use notify::{watcher, DebouncedEvent, RecursiveMode, Watcher}; use serde::de::DeserializeOwned; use serde::Serialize; +use std::fs; use std::io::{self, Write}; +use std::path::{Path, PathBuf}; +use std::sync::Arc; +use std::time::Duration; +use tokio::sync::broadcast; +use tokio::sync::mpsc; pub trait ExeUnitMessage: Serialize + DeserializeOwned + Send + Sync {} @@ -23,3 +31,95 @@ pub fn send_to_guest(msg: &impl ExeUnitMessage) -> anyhow::Result<()> { stdout.write(data.as_ref())?; Ok(()) } + +pub struct MessagesReceiver { + new_message_notifier: broadcast::Sender, +} + +impl MessagesReceiver { + pub fn new() -> anyhow::Result> { + let tracked_dir = PathBuf::from("/messages/"); + + std::fs::create_dir_all(&tracked_dir).map_err(|e| { + anyhow!( + "Can't create directory [{}] for messages. {}", + &tracked_dir.display(), + e + ) + })?; + + let sender = spawn_file_notifier(&tracked_dir)?; + + Ok(Arc::new(MessagesReceiver { + new_message_notifier: sender, + })) + } + + pub fn listen(&self) -> mpsc::UnboundedReceiver { + let (msg_sender, msg_receiver) = mpsc::unbounded_channel(); + let mut file_receiver = self.new_message_notifier.subscribe(); + + let future = async move { + while let Ok(path) = file_receiver.recv().await { + if let Some(content) = fs::read_to_string(&path) + .map_err(|e| { + log::warn!( + "[Messaging] Can't load msg from file: '{}'. {}", + &path.display(), + e + ) + }) + .ok() + { + serde_json::from_slice::(&content[1..content.len() - 1].as_bytes()) + .map_err(|e| { + log::warn!( + "Can't deserialize message from file '{}'. {}", + &path.display(), + e + ) + }) + .map(|msg| msg_sender.send(msg)) + .ok(); + } + } + }; + tokio::spawn(future); + return msg_receiver; + } +} + +fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result> { + let (event_sender, _) = broadcast::channel(150); + let sender = event_sender.clone(); + + let (watcher_sender, watcher_receiver) = std::sync::mpsc::channel(); + let mut watcher = watcher(watcher_sender, Duration::from_secs(1)) + .map_err(|e| anyhow!("Initializing watcher failed. {}", e))?; + + watcher + .watch(&tracked_dir, RecursiveMode::NonRecursive) + .map_err(|e| { + anyhow!( + "Starting watching directory '{}' failed. {}", + &tracked_dir.display(), + e + ) + })?; + + std::thread::spawn(move || { + // Take ownership of watcher. + let _watcher = watcher; + + while let Ok(event) = watcher_receiver.recv() { + match event { + DebouncedEvent::Write(path) => { + event_sender.send(path).ok(); + } + _ => (), + } + } + }); + + Ok(sender) +} From 9d2274864542774ec4dc47be882a141195f0f8bb Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 14 Dec 2020 16:57:37 +0100 Subject: [PATCH 02/18] List agreements using Agreement events --- Cargo.lock | 140 ++++++++++++++++++++++++--------------------- Cargo.toml | 2 +- src/rest/market.rs | 65 ++++++++++++++++++++- 3 files changed, 137 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ac76d4..68472dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,12 +107,12 @@ dependencies = [ [[package]] name = "actix-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60f9ba7c4e6df97f3aacb14bb5c0cd7d98a49dcbaed0d7f292912ad9a6a3ed2" +checksum = "b4ca8ce00b267af8ccebbd647de0d61e0674b6e61185cc7a592ff88772bed655" dependencies = [ "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -181,7 +181,7 @@ checksum = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf8dcb5b4bbaa28653b647d8c77bd4ed40183b48882e130c1f1ffb73de069fd7" +checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4" [[package]] name = "async-trait" @@ -231,7 +231,7 @@ checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -459,15 +459,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "cloudabi" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" -dependencies = [ - "bitflags", -] - [[package]] name = "copyless" version = "0.1.5" @@ -512,7 +503,7 @@ checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -569,7 +560,7 @@ dependencies = [ "heck", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -612,7 +603,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", "synstructure", ] @@ -775,7 +766,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -902,7 +893,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -1131,9 +1122,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" [[package]] name = "linked-hash-map" @@ -1219,9 +1210,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.22" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" dependencies = [ "cfg-if 0.1.10", "fuchsia-zircon", @@ -1279,9 +1270,9 @@ checksum = "2eb04b9f127583ed176e163fb9ec6f3e793b87e21deedd5734a69386a18a0151" [[package]] name = "net2" -version = "0.2.36" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7cf75f38f16cb05ea017784dc6dbfd354f76c223dba37701734c4f5a9337d02" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" dependencies = [ "cfg-if 0.1.10", "libc", @@ -1372,12 +1363,12 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.30" +version = "0.10.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" +checksum = "8d008f51b1acffa0d3450a68606e6a51c123012edaacb0f4e1426bd978869187" dependencies = [ "bitflags", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "foreign-types", "lazy_static", "libc", @@ -1386,9 +1377,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.58" +version = "0.9.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +checksum = "de52d8eabd217311538a39bba130d7dea1f1e118010fee7a033d966845e7d5fe" dependencies = [ "autocfg 1.0.1", "cc", @@ -1415,7 +1406,7 @@ checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", "lock_api 0.4.2", - "parking_lot_core 0.8.0", + "parking_lot_core 0.8.1", ] [[package]] @@ -1425,7 +1416,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ "cfg-if 0.1.10", - "cloudabi 0.0.3", + "cloudabi", "libc", "redox_syscall", "smallvec", @@ -1434,12 +1425,11 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +checksum = "d7c6d9b8427445284a09c55be860a15855ab580a417ccad9da88f5a06787ced0" dependencies = [ - "cfg-if 0.1.10", - "cloudabi 0.1.0", + "cfg-if 1.0.0", "instant", "libc", "redox_syscall", @@ -1488,7 +1478,7 @@ checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -1499,7 +1489,7 @@ checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -1541,7 +1531,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", "version_check", ] @@ -1648,7 +1638,7 @@ dependencies = [ "itertools", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -1805,7 +1795,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "cloudabi 0.0.3", + "cloudabi", "fuchsia-cprng", "libc", "rand_core 0.4.2", @@ -1916,9 +1906,18 @@ name = "secp256k1" version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2932dc07acd2066ff2e3921a4419606b220ba6cd03a9935123856cc534877056" +dependencies = [ + "secp256k1-sys 0.1.2", +] + +[[package]] +name = "secp256k1" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" dependencies = [ "rand 0.6.5", - "secp256k1-sys", + "secp256k1-sys 0.3.0", "serde", ] @@ -1931,6 +1930,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" +dependencies = [ + "cc", +] + [[package]] name = "semver" version = "0.10.0" @@ -1972,14 +1980,14 @@ checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" dependencies = [ "itoa", "ryu", @@ -2058,9 +2066,9 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" +checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75" [[package]] name = "socket2" @@ -2082,9 +2090,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" +checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c" dependencies = [ "clap", "lazy_static", @@ -2093,15 +2101,15 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" +checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90" dependencies = [ "heck", "proc-macro-error", "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -2117,9 +2125,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1e438504729046a5cfae47f97c30d6d083c7d91d94603efdae3477fc070d4c" +checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -2134,7 +2142,7 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", "unicode-xid 0.2.1", ] @@ -2187,7 +2195,7 @@ checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -2236,9 +2244,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d7ad61edd59bfcc7e80dababf0f4aed2e6d5e0ba1659356ae889752dfc12ff" +checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" dependencies = [ "bytes 0.5.6", "fnv", @@ -2264,7 +2272,7 @@ checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.52", + "syn 1.0.54", ] [[package]] @@ -2428,9 +2436,9 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" +checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" [[package]] name = "vec_map" @@ -2576,7 +2584,7 @@ dependencies = [ "mime", "openssl", "rand 0.6.5", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", "thiserror", @@ -2621,7 +2629,7 @@ dependencies = [ "hex", "openssl", "rand 0.7.3", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", "thiserror", @@ -2715,7 +2723,7 @@ dependencies = [ "log", "notify", "pin-project 1.0.2", - "secp256k1", + "secp256k1 0.17.2", "semver", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index b69a30f..5f321d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ actix = "0.9" actix-rt = "1.0" anyhow = "1.0.28" bigdecimal = "0.1.0" -chrono = "0.4.10" +chrono = { version = "0.4.10", features = ["clock"] } dotenv = "0.15.0" env_logger = "0.6" futures = "0.3" diff --git a/src/rest/market.rs b/src/rest/market.rs index 5257d98..c2fa55e 100644 --- a/src/rest/market.rs +++ b/src/rest/market.rs @@ -1,13 +1,14 @@ use anyhow::{anyhow, bail, Context}; -use chrono::{DateTime, Utc}; +use chrono::{DateTime, TimeZone, Utc}; use futures::prelude::*; use futures::TryStreamExt; use std::sync::Arc; use tokio::sync::mpsc; use crate::rest::async_drop::{CancelableDropList, DropList}; +use std::fmt::Display; use ya_client::market::MarketRequestorApi; -use ya_client::model::market::{AgreementProposal, RequestorEvent}; +use ya_client::model::market::{AgreementOperationEvent, AgreementProposal, RequestorEvent}; use ya_client::model::market::{NewDemand, Reason}; use ya_client::model::NodeId; use ya_client::web::WebClient; @@ -28,7 +29,7 @@ impl AsRef for SubscriptionId { } pub struct Market { - api: MarketRequestorApi, + pub api: MarketRequestorApi, drop_list: DropList, } @@ -70,6 +71,64 @@ impl Market { pub fn subscriptions(&self) -> impl Stream> { stream::empty() } + + /// Lists all Agreements for identity, that is currently used. + /// You can filter Agreements using AppSessionId parameter. + pub async fn list_agreements( + &self, + since: &DateTime, + app_session_id: Option, + ) -> anyhow::Result> + where + Tz: TimeZone, + Tz::Offset: Display, + { + Ok(self + .list_agreement_events(since, app_session_id) + .await? + .into_iter() + .filter_map(|event| match event { + AgreementOperationEvent::AgreementApprovedEvent { agreement_id, .. } => { + Some(agreement_id) + } + _ => None, + }) + .collect()) + } + + pub async fn list_agreement_events( + &self, + since: &DateTime, + app_session_id: Option, + ) -> anyhow::Result> + where + Tz: TimeZone, + Tz::Offset: Display, + { + let mut since = since.with_timezone(&Utc); + let mut events = vec![]; + + loop { + let new_events = self + .api + .collect_agreement_events(Some(0.0), Some(&since), Some(30), app_session_id.clone()) + .await?; + + if new_events.is_empty() { + return Ok(events); + } + + match new_events.last().unwrap() { + AgreementOperationEvent::AgreementTerminatedEvent { event_date, .. } + | AgreementOperationEvent::AgreementApprovedEvent { event_date, .. } + | AgreementOperationEvent::AgreementCancelledEvent { event_date, .. } + | AgreementOperationEvent::AgreementRejectedEvent { event_date, .. } => { + since = event_date.clone(); + } + }; + events.extend(new_events); + } + } } #[derive(Clone)] From e0b7174ef8d6258bf9e1dd89b93c0252fe87293b Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 14 Dec 2020 17:23:40 +0100 Subject: [PATCH 03/18] Update ya-client version --- Cargo.lock | 9 +++++---- Cargo.toml | 4 ++-- src/rest/market.rs | 23 ++++++++--------------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 68472dc..1eabe98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2556,7 +2556,7 @@ dependencies = [ [[package]] name = "ya-agreement-utils" version = "0.2.0" -source = "git+https://github.com/golemfactory/yagna.git?rev=a556eebdf10396124b3cf43b719e7ca9ea85e984#a556eebdf10396124b3cf43b719e7ca9ea85e984" +source = "git+https://github.com/golemfactory/yagna.git?rev=6edcdf2173699cfdd445180ff368efadfce7293f#6edcdf2173699cfdd445180ff368efadfce7293f" dependencies = [ "serde", "serde_json", @@ -2568,7 +2568,7 @@ dependencies = [ [[package]] name = "ya-client" version = "0.4.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f#50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f" +source = "git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a#e68bbd90c903c6f74f77fddb80a432d20e4e2b2a" dependencies = [ "awc", "bytes 0.5.6", @@ -2589,7 +2589,7 @@ dependencies = [ "serde_json", "thiserror", "url", - "ya-client-model 0.2.0 (git+https://github.com/golemfactory/ya-client.git?rev=50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f)", + "ya-client-model 0.2.0 (git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a)", ] [[package]] @@ -2622,10 +2622,11 @@ dependencies = [ [[package]] name = "ya-client-model" version = "0.2.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f#50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f" +source = "git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a#e68bbd90c903c6f74f77fddb80a432d20e4e2b2a" dependencies = [ "bigdecimal", "chrono", + "derive_more", "hex", "openssl", "rand 0.7.3", diff --git a/Cargo.toml b/Cargo.toml index 5f321d1..b5a7733 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,9 +12,9 @@ keywords=["golem", "yagna"] [dependencies] -ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f", features = ["sgx"] } +ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "e68bbd90c903c6f74f77fddb80a432d20e4e2b2a", features = ["sgx"] } gftp = "0.1.2" -ya-agreement-utils = { git = "https://github.com/golemfactory/yagna.git", rev = "a556eebdf10396124b3cf43b719e7ca9ea85e984" } +ya-agreement-utils = { git = "https://github.com/golemfactory/yagna.git", rev = "6edcdf2173699cfdd445180ff368efadfce7293f" } actix = "0.9" actix-rt = "1.0" diff --git a/src/rest/market.rs b/src/rest/market.rs index c2fa55e..7ab079d 100644 --- a/src/rest/market.rs +++ b/src/rest/market.rs @@ -8,7 +8,9 @@ use tokio::sync::mpsc; use crate::rest::async_drop::{CancelableDropList, DropList}; use std::fmt::Display; use ya_client::market::MarketRequestorApi; -use ya_client::model::market::{AgreementOperationEvent, AgreementProposal, RequestorEvent}; +use ya_client::model::market::{ + AgreementEventType, AgreementOperationEvent, AgreementProposal, RequestorEvent, +}; use ya_client::model::market::{NewDemand, Reason}; use ya_client::model::NodeId; use ya_client::web::WebClient; @@ -87,10 +89,8 @@ impl Market { .list_agreement_events(since, app_session_id) .await? .into_iter() - .filter_map(|event| match event { - AgreementOperationEvent::AgreementApprovedEvent { agreement_id, .. } => { - Some(agreement_id) - } + .filter_map(|event| match event.event_type { + AgreementEventType::AgreementApprovedEvent => Some(event.agreement_id), _ => None, }) .collect()) @@ -118,14 +118,7 @@ impl Market { return Ok(events); } - match new_events.last().unwrap() { - AgreementOperationEvent::AgreementTerminatedEvent { event_date, .. } - | AgreementOperationEvent::AgreementApprovedEvent { event_date, .. } - | AgreementOperationEvent::AgreementCancelledEvent { event_date, .. } - | AgreementOperationEvent::AgreementRejectedEvent { event_date, .. } => { - since = event_date.clone(); - } - }; + since = new_events.last().unwrap().event_date; events.extend(new_events); } } @@ -355,7 +348,7 @@ impl Proposal { .reject_proposal_with_reason( self.subscription.id.as_ref(), self.proposal_id.as_str(), - Option::::None, + &Option::::None, ) .await?; Ok(()) @@ -400,7 +393,7 @@ impl Drop for AgreementInner { let api = self.api.clone(); let agreement_id = self.agreement_id.clone(); self.drop_list.async_drop(async move { - api.terminate_agreement(&agreement_id, Option::::None) + api.terminate_agreement(&agreement_id, &Option::::None) .await .with_context(|| format!("Failed to auto destroy Agreement: {:?}", agreement_id))?; log::debug!(target:"yarapi::drop", "Agreement {:?} terminated", agreement_id); From 07475644649001b52b42bf16e68d7c021edc43a0 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 14 Dec 2020 20:05:43 +0100 Subject: [PATCH 04/18] Listing active Agreements --- src/rest/market.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/rest/market.rs b/src/rest/market.rs index 7ab079d..1666acd 100644 --- a/src/rest/market.rs +++ b/src/rest/market.rs @@ -6,6 +6,7 @@ use std::sync::Arc; use tokio::sync::mpsc; use crate::rest::async_drop::{CancelableDropList, DropList}; +use std::collections::HashSet; use std::fmt::Display; use ya_client::market::MarketRequestorApi; use ya_client::model::market::{ @@ -96,6 +97,35 @@ impl Market { .collect()) } + pub async fn list_active_agreements( + &self, + since: &DateTime, + app_session_id: Option, + ) -> anyhow::Result> + where + Tz: TimeZone, + Tz::Offset: Display, + { + let mut agreements = HashSet::new(); + self.list_agreement_events(since, app_session_id) + .await? + .into_iter() + .for_each(|event| { + match event.event_type { + AgreementEventType::AgreementApprovedEvent => { + agreements.insert(event.agreement_id) + } + AgreementEventType::AgreementTerminatedEvent { .. } => { + agreements.remove(&event.agreement_id) + } + _ => false, + }; + () + }); + + Ok(agreements.into_iter().collect()) + } + pub async fn list_agreement_events( &self, since: &DateTime, From b83a021f82e3f206083cf7e7e8531e536da900c9 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 14 Dec 2020 22:06:19 +0100 Subject: [PATCH 05/18] Acitivity status --- Cargo.lock | 26 +++----------------- Cargo.toml | 4 +-- src/rest.rs | 9 +++++++ src/rest/activity.rs | 58 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 72 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1eabe98..a288b83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1906,18 +1906,9 @@ name = "secp256k1" version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2932dc07acd2066ff2e3921a4419606b220ba6cd03a9935123856cc534877056" -dependencies = [ - "secp256k1-sys 0.1.2", -] - -[[package]] -name = "secp256k1" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" dependencies = [ "rand 0.6.5", - "secp256k1-sys 0.3.0", + "secp256k1-sys", "serde", ] @@ -1930,15 +1921,6 @@ dependencies = [ "cc", ] -[[package]] -name = "secp256k1-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" -dependencies = [ - "cc", -] - [[package]] name = "semver" version = "0.10.0" @@ -2584,7 +2566,7 @@ dependencies = [ "mime", "openssl", "rand 0.6.5", - "secp256k1 0.19.0", + "secp256k1", "serde", "serde_json", "thiserror", @@ -2630,7 +2612,7 @@ dependencies = [ "hex", "openssl", "rand 0.7.3", - "secp256k1 0.19.0", + "secp256k1", "serde", "serde_json", "thiserror", @@ -2724,7 +2706,7 @@ dependencies = [ "log", "notify", "pin-project 1.0.2", - "secp256k1 0.17.2", + "secp256k1", "semver", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index b5a7733..1076f68 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,5 +47,5 @@ no-dev-version = true enable-all-features = true -#[patch.crates-io] -#ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "50c530fb54fbb91a9ad743f43f2c6e0b3fc3b34f", features = ["sgx"] } +[patch.crates-io] +#ya-client = { path = "../ya-client", features = ["sgx"] } diff --git a/src/rest.rs b/src/rest.rs index 4efb182..0ac90ae 100644 --- a/src/rest.rs +++ b/src/rest.rs @@ -36,6 +36,15 @@ impl Session { .await } + /// Creates Activity object for existing Activity. Created object + /// isn't owner of Activity and won't destroy it on Drop. Use for Debugging. + pub async fn attach_to_activity( + &self, + activity_id: &str, + ) -> anyhow::Result { + activity::DefaultActivity::attach_to_activity(self.client.interface()?, activity_id) + } + pub async fn create_secure_activity( &self, agreement: &market::Agreement, diff --git a/src/rest/activity.rs b/src/rest/activity.rs index 766826a..42ce091 100644 --- a/src/rest/activity.rs +++ b/src/rest/activity.rs @@ -10,7 +10,7 @@ use ya_client::activity::ActivityRequestorApi; pub use ya_client::activity::SecureActivityRequestorApi; pub use ya_client::model::activity::Credentials; pub use ya_client::model::activity::ExeScriptCommand; -use ya_client::model::activity::ExeScriptRequest; +use ya_client::model::activity::{ActivityState, ExeScriptCommandState, ExeScriptRequest}; use ya_client::model::activity::{CommandResult, ExeScriptCommandResult}; #[derive(Debug)] @@ -72,6 +72,17 @@ impl DefaultActivity { }) } + pub(crate) fn attach_to_activity( + api: ActivityRequestorApi, + activity_id: &str, + ) -> anyhow::Result { + Ok(Self { + api, + activity_id: activity_id.to_string(), + drop_list: None, + }) + } + pub async fn execute_commands( &self, commands: Vec, @@ -95,6 +106,51 @@ impl DefaultActivity { .try_collect() .await } + + pub async fn get_state(&self) -> anyhow::Result { + Ok(self + .api + .state() + .get_state(&self.activity_id) + .await + .map_err(|e| { + anyhow!( + "Failed to get state for activity [{}]. {}", + &self.activity_id, + e + ) + })?) + } + + pub async fn get_running_command(&self) -> anyhow::Result { + Ok(self + .api + .state() + .get_running_command(&self.activity_id) + .await + .map_err(|e| { + anyhow!( + "Failed to get running command for activity [{}]. {}", + &self.activity_id, + e + ) + })?) + } + + pub async fn get_usage(&self) -> anyhow::Result> { + Ok(self + .api + .state() + .get_usage(&self.activity_id) + .await + .map_err(|e| { + anyhow!( + "Failed to get usage for activity [{}]. {}", + &self.activity_id, + e + ) + })?) + } } impl Drop for DefaultActivity { From d63ffe6c819b1e12034f36283bb772ad83f18598 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Tue, 15 Dec 2020 00:09:45 +0100 Subject: [PATCH 06/18] Test messaging based on file watcher --- .gitignore | 3 +- src/rest/streaming.rs | 2 +- src/rest/streaming/messaging.rs | 27 ++++++++-------- tests/test_messaging.rs | 56 +++++++++++++++++++++++++++++++++ tests/testing.rs | 28 +++++++++++++++++ 5 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 tests/test_messaging.rs create mode 100644 tests/testing.rs diff --git a/.gitignore b/.gitignore index 58d1ff7..8390062 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target/ -.idea \ No newline at end of file +.idea +tests/test-workdir/ \ No newline at end of file diff --git a/src/rest/streaming.rs b/src/rest/streaming.rs index 7469b81..49c1b86 100644 --- a/src/rest/streaming.rs +++ b/src/rest/streaming.rs @@ -10,4 +10,4 @@ pub use result_stream::ResultStream; pub use ya_client::model::activity::{CommandOutput, RuntimeEvent, RuntimeEventKind}; -pub use messaging::{send_to_guest, ExeUnitMessage, MessagesReceiver}; +pub use messaging::{send_to_guest, ExeUnitMessage, MessagingExeUnit}; diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index 40a29e5..4fc4a6d 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -1,12 +1,11 @@ use anyhow::anyhow; -use notify::{watcher, DebouncedEvent, RecursiveMode, Watcher}; +use notify::{raw_watcher, Op, RecursiveMode, Watcher}; use serde::de::DeserializeOwned; use serde::Serialize; use std::fs; use std::io::{self, Write}; use std::path::{Path, PathBuf}; use std::sync::Arc; -use std::time::Duration; use tokio::sync::broadcast; use tokio::sync::mpsc; @@ -32,14 +31,12 @@ pub fn send_to_guest(msg: &impl ExeUnitMessage) -> anyhow::Result<()> { Ok(()) } -pub struct MessagesReceiver { +pub struct MessagingExeUnit { new_message_notifier: broadcast::Sender, } -impl MessagesReceiver { - pub fn new() -> anyhow::Result> { - let tracked_dir = PathBuf::from("/messages/"); - +impl MessagingExeUnit { + pub fn new(tracked_dir: &Path) -> anyhow::Result> { std::fs::create_dir_all(&tracked_dir).map_err(|e| { anyhow!( "Can't create directory [{}] for messages. {}", @@ -50,7 +47,7 @@ impl MessagesReceiver { let sender = spawn_file_notifier(&tracked_dir)?; - Ok(Arc::new(MessagesReceiver { + Ok(Arc::new(MessagingExeUnit { new_message_notifier: sender, })) } @@ -71,7 +68,7 @@ impl MessagesReceiver { }) .ok() { - serde_json::from_slice::(&content[1..content.len() - 1].as_bytes()) + serde_json::from_slice::(&content.as_bytes()) .map_err(|e| { log::warn!( "Can't deserialize message from file '{}'. {}", @@ -94,8 +91,8 @@ fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result anyhow::Result { + match event.op { + Ok(Op::CLOSE_WRITE) => { + let path = match event.path { + Some(path) => path, + None => continue, + }; event_sender.send(path).ok(); } _ => (), diff --git a/tests/test_messaging.rs b/tests/test_messaging.rs new file mode 100644 index 0000000..8812f94 --- /dev/null +++ b/tests/test_messaging.rs @@ -0,0 +1,56 @@ +mod testing; + +use testing::prepare_test_dir; + +use serde::{Deserialize, Serialize}; +use std::fs::File; +use std::path::Path; + +use std::time::Duration; +use yarapi::rest::streaming::{ExeUnitMessage, MessagingExeUnit}; + +#[derive(Serialize, Deserialize)] +pub enum Messages { + Progress(f64), + Info(String), +} + +impl ExeUnitMessage for Messages {} + +fn emulate_send(msg: impl ExeUnitMessage, dir: &Path, idx: u32) -> anyhow::Result<()> { + let path = dir.join(format!("msg-{}.json", idx)); + let file = File::create(path)?; + + Ok(serde_json::to_writer(file, &msg)?) +} + +#[actix_rt::test] +async fn test_messaging_to_exeunit() -> anyhow::Result<()> { + let dir = prepare_test_dir("test_messaging_to_exeunit")?; + env_logger::init(); + + let receiver = MessagingExeUnit::new(&dir).unwrap(); + let mut events = receiver.listen::(); + + emulate_send(Messages::Progress(0.02), &dir, 1).unwrap(); + + let msg = tokio::time::timeout(Duration::from_millis(150), events.recv()) + .await? + .unwrap(); + match msg { + Messages::Progress(progress) => assert_eq!(progress, 0.02), + _ => panic!("Expected Messages::Progress"), + }; + + emulate_send(Messages::Progress(0.06), &dir, 2).unwrap(); + + let msg = tokio::time::timeout(Duration::from_millis(150), events.recv()) + .await? + .unwrap(); + match msg { + Messages::Progress(progress) => assert_eq!(progress, 0.06), + _ => panic!("Expected Messages::Progress"), + }; + + Ok(()) +} diff --git a/tests/testing.rs b/tests/testing.rs new file mode 100644 index 0000000..bcc11a6 --- /dev/null +++ b/tests/testing.rs @@ -0,0 +1,28 @@ +use anyhow::{Context, Result}; +use std::fs; +use std::path::PathBuf; + +fn test_data_dir() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests") + .join("test-workdir") +} + +fn escape_path(path: &str) -> String { + // Windows can't handle colons + path.replace("::", "_").to_string() +} + +pub fn prepare_test_dir(dir_name: &str) -> Result { + let test_dir: PathBuf = test_data_dir().join(escape_path(dir_name).as_str()); + + log::info!("Preparing test directory: {}", test_dir.display()); + + if test_dir.exists() { + fs::remove_dir_all(&test_dir) + .with_context(|| format!("Removing test directory: {}", test_dir.display()))?; + } + fs::create_dir_all(&test_dir) + .with_context(|| format!("Creating test directory: {}", test_dir.display()))?; + Ok(test_dir) +} From be513df0d7dbdd81e684e2b435196d569aa85a1f Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Wed, 16 Dec 2020 17:36:50 +0100 Subject: [PATCH 07/18] Debug batch and activity functionalities --- src/rest/activity.rs | 15 +++++++++++++-- src/rest/streaming/batch.rs | 23 +++++++++++++---------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/rest/activity.rs b/src/rest/activity.rs index 42ce091..9965a12 100644 --- a/src/rest/activity.rs +++ b/src/rest/activity.rs @@ -1,11 +1,11 @@ use anyhow::{anyhow, Context, Result}; - -use crate::rest::async_drop::{CancelableDropList, DropList}; use futures::future::LocalBoxFuture; use futures::prelude::*; use futures::stream::LocalBoxStream; use futures::{FutureExt, StreamExt}; use std::sync::Arc; + +use crate::rest::async_drop::{CancelableDropList, DropList}; use ya_client::activity::ActivityRequestorApi; pub use ya_client::activity::SecureActivityRequestorApi; pub use ya_client::model::activity::Credentials; @@ -72,6 +72,7 @@ impl DefaultActivity { }) } + /// Debug function, that allows to attach to existing Activity. pub(crate) fn attach_to_activity( api: ActivityRequestorApi, activity_id: &str, @@ -83,6 +84,16 @@ impl DefaultActivity { }) } + /// Debug function to attach to existing batch. + pub fn attach_to_batch(&self, batch_id: &str) -> DefaultBatch { + DefaultBatch { + batch_id: batch_id.to_string(), + commands: Arc::from(vec![]), + api: self.api.clone(), + activity_id: self.activity_id.clone(), + } + } + pub async fn execute_commands( &self, commands: Vec, diff --git a/src/rest/streaming/batch.rs b/src/rest/streaming/batch.rs index 3e9da8a..d76e4b2 100644 --- a/src/rest/streaming/batch.rs +++ b/src/rest/streaming/batch.rs @@ -3,7 +3,7 @@ use futures::prelude::*; use futures::FutureExt; use std::sync::Arc; -use crate::rest::activity::DefaultActivity; +use crate::rest::activity::{DefaultActivity, DefaultBatch}; use crate::rest::{Activity, RunningBatch}; use ya_client::activity::ActivityRequestorApi; @@ -79,15 +79,7 @@ impl StreamingActivity for DefaultActivity { commands: Vec, ) -> future::LocalBoxFuture<'static, Result> { let batch_fut = self.exec(commands); - async move { - batch_fut.await.map(|batch| StreamingBatch { - batch_id: batch.id().to_string(), - commands: Arc::from(batch.commands()), - api: batch.api, - activity_id: batch.activity_id, - }) - } - .boxed_local() + async move { batch_fut.await.map(|batch| StreamingBatch::from(batch)) }.boxed_local() } fn run_streaming( @@ -112,3 +104,14 @@ impl StreamingActivity for DefaultActivity { self.exec_streaming(commands) } } + +impl From for StreamingBatch { + fn from(batch: DefaultBatch) -> Self { + StreamingBatch { + batch_id: batch.id().to_string(), + commands: Arc::from(batch.commands()), + api: batch.api, + activity_id: batch.activity_id, + } + } +} From c77d635a14ce8482ac2551749a26073559e7b0a7 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Wed, 16 Dec 2020 18:01:01 +0100 Subject: [PATCH 08/18] Save debug info --- src/rest/streaming/batch.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/rest/streaming/batch.rs b/src/rest/streaming/batch.rs index d76e4b2..573ae0e 100644 --- a/src/rest/streaming/batch.rs +++ b/src/rest/streaming/batch.rs @@ -1,6 +1,7 @@ use anyhow::{anyhow, Result}; use futures::prelude::*; use futures::FutureExt; +use std::io::Write; use std::sync::Arc; use crate::rest::activity::{DefaultActivity, DefaultBatch}; @@ -71,6 +72,21 @@ impl StreamingBatch { } } } + + pub fn debug(self, filename: &str) -> anyhow::Result { + let debug_content = format!( + "ACTIVITY_ID={}\n\ + BATCH_ID={}\n", + &self.activity_id, &self.batch_id + ); + + std::fs::File::create(filename) + .map_err(|e| anyhow!("Failed to create debug file {}. {}", filename, e))? + .write_all(debug_content.as_bytes()) + .map_err(|e| anyhow!("Failed to write to debug file {}. {}", filename, e))?; + + Ok(self) + } } impl StreamingActivity for DefaultActivity { From 6eaa2eaf82f3f7193f878e2870b4e9a86add7306 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Fri, 18 Dec 2020 16:34:20 +0100 Subject: [PATCH 09/18] Move SGX functionalities to separate file (from activity) --- src/rest.rs | 1 + src/rest/activity.rs | 136 ++-------------------------------------- src/rest/sgx.rs | 143 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+), 132 deletions(-) create mode 100644 src/rest/sgx.rs diff --git a/src/rest.rs b/src/rest.rs index 0ac90ae..4438be8 100644 --- a/src/rest.rs +++ b/src/rest.rs @@ -1,6 +1,7 @@ pub mod activity; mod async_drop; mod market; +mod sgx; pub mod streaming; pub use activity::{Activity, Credentials, Event as BatchEvent, ExeScriptCommand, RunningBatch}; diff --git a/src/rest/activity.rs b/src/rest/activity.rs index 9965a12..6e26cba 100644 --- a/src/rest/activity.rs +++ b/src/rest/activity.rs @@ -1,11 +1,10 @@ use anyhow::{anyhow, Context, Result}; use futures::future::LocalBoxFuture; use futures::prelude::*; -use futures::stream::LocalBoxStream; use futures::{FutureExt, StreamExt}; use std::sync::Arc; -use crate::rest::async_drop::{CancelableDropList, DropList}; +use crate::rest::async_drop::DropList; use ya_client::activity::ActivityRequestorApi; pub use ya_client::activity::SecureActivityRequestorApi; pub use ya_client::model::activity::Credentials; @@ -13,6 +12,8 @@ pub use ya_client::model::activity::ExeScriptCommand; use ya_client::model::activity::{ActivityState, ExeScriptCommandState, ExeScriptRequest}; use ya_client::model::activity::{CommandResult, ExeScriptCommandResult}; +pub use super::sgx::{SgxActivity, SgxBatch}; + #[derive(Debug)] pub enum Event { StepSuccess { @@ -236,7 +237,7 @@ pub struct DefaultBatch { commands: Arc<[ExeScriptCommand]>, } -fn generate_events( +pub(crate) fn generate_events( generator: Generator, commands: Arc<[ExeScriptCommand]>, ) -> impl Stream> @@ -325,132 +326,3 @@ impl RunningBatch for DefaultBatch { .boxed_local() } } - -pub struct SgxActivity { - secure_api: SecureActivityRequestorApi, - api: ActivityRequestorApi, - activity_id: String, - drop_list: CancelableDropList, -} - -impl Drop for SgxActivity { - fn drop(&mut self) { - if let Some(ref drop_list) = self.drop_list.take() { - let api = self.api.clone(); - let id = self.activity_id.clone(); - drop_list.async_drop(async move { - api.control() - .destroy_activity(&id) - .await - .with_context(|| format!("Failed to auto destroy Activity: {:?}", id))?; - log::debug!(target:"yarapi::drop", "Activity {:?} destroyed", id); - Ok(()) - }) - } - } -} - -impl SgxActivity { - pub(crate) async fn create( - api: ActivityRequestorApi, - agreement_id: &str, - drop_list: CancelableDropList, - ) -> Result { - let secure_api = api - .control() - .create_secure_activity(agreement_id) - .await - .with_context(|| { - format!("failed to create activity for agreement {:?}", agreement_id) - })?; - let activity_id = secure_api.activity_id(); - - Ok(Self { - api, - secure_api, - activity_id, - drop_list, - }) - } -} - -impl Activity for SgxActivity { - type RunningBatch = SgxBatch; - - fn id(&self) -> &str { - &self.activity_id - } - - fn exec( - &self, - commands: Vec, - ) -> LocalBoxFuture<'static, Result> { - let api = self.secure_api.clone(); - async move { - let batch_commands = commands.clone().into(); - let batch_id = api.exec(commands).await?; - Ok(SgxBatch { - api, - batch_id, - commands: batch_commands, - }) - } - .boxed_local() - } - - fn credentials(&self) -> Option { - Some(self.secure_api.proof()) - } - - fn destroy(&self) -> LocalBoxFuture<'static, Result<()>> { - let api = self.api.clone(); - let activity_id = self.activity_id.clone(); - async move { - api.control() - .destroy_activity(&activity_id) - .await - .with_context(|| format!("failed to destroy sgx activity: {:?}", activity_id)) - } - .boxed_local() - } -} - -pub struct SgxBatch { - api: SecureActivityRequestorApi, - batch_id: String, - commands: Arc<[ExeScriptCommand]>, -} - -impl RunningBatch for SgxBatch { - fn id(&self) -> &str { - &self.batch_id - } - - fn commands(&self) -> Vec { - self.commands.iter().cloned().collect() - } - - fn events(&self) -> LocalBoxStream<'static, Result> { - let api = self.api.clone(); - let batch_id: Arc = self.batch_id.clone().into(); - - generate_events( - move |idx| { - let api = api.clone(); - let batch_id = batch_id.clone(); - async move { - loop { - match api.get_exec_batch_results(&batch_id, Some(10.0), idx).await { - Ok(v) => return Ok(v), - Err(ya_client::Error::TimeoutError { .. }) => (), - Err(ya_client::Error::InternalError(ref msg)) if msg == "Timeout" => (), - Err(e) => return Err(e.into()), - } - } - } - }, - self.commands.clone(), - ) - .boxed_local() - } -} diff --git a/src/rest/sgx.rs b/src/rest/sgx.rs new file mode 100644 index 0000000..404ce2e --- /dev/null +++ b/src/rest/sgx.rs @@ -0,0 +1,143 @@ +use anyhow::{Context, Result}; +use futures::future::LocalBoxFuture; +use futures::stream::LocalBoxStream; +use futures::{FutureExt, StreamExt}; +use std::sync::Arc; + +use crate::rest::activity::{generate_events, Event}; +use crate::rest::async_drop::CancelableDropList; +use crate::rest::{Activity, RunningBatch}; + +use ya_client::activity::ActivityRequestorApi; +pub use ya_client::activity::SecureActivityRequestorApi; +pub use ya_client::model::activity::Credentials; +pub use ya_client::model::activity::ExeScriptCommand; + +pub struct SgxActivity { + secure_api: SecureActivityRequestorApi, + api: ActivityRequestorApi, + activity_id: String, + drop_list: CancelableDropList, +} + +impl Drop for SgxActivity { + fn drop(&mut self) { + if let Some(ref drop_list) = self.drop_list.take() { + let api = self.api.clone(); + let id = self.activity_id.clone(); + drop_list.async_drop(async move { + api.control() + .destroy_activity(&id) + .await + .with_context(|| format!("Failed to auto destroy Activity: {:?}", id))?; + log::debug!(target:"yarapi::drop", "Activity {:?} destroyed", id); + Ok(()) + }) + } + } +} + +impl SgxActivity { + pub(crate) async fn create( + api: ActivityRequestorApi, + agreement_id: &str, + drop_list: CancelableDropList, + ) -> Result { + let secure_api = api + .control() + .create_secure_activity(agreement_id) + .await + .with_context(|| { + format!("failed to create activity for agreement {:?}", agreement_id) + })?; + let activity_id = secure_api.activity_id(); + + Ok(Self { + api, + secure_api, + activity_id, + drop_list, + }) + } +} + +impl Activity for SgxActivity { + type RunningBatch = SgxBatch; + + fn id(&self) -> &str { + &self.activity_id + } + + fn exec( + &self, + commands: Vec, + ) -> LocalBoxFuture<'static, Result> { + let api = self.secure_api.clone(); + async move { + let batch_commands = commands.clone().into(); + let batch_id = api.exec(commands).await?; + Ok(SgxBatch { + api, + batch_id, + commands: batch_commands, + }) + } + .boxed_local() + } + + fn credentials(&self) -> Option { + Some(self.secure_api.proof()) + } + + fn destroy(&self) -> LocalBoxFuture<'static, Result<()>> { + let api = self.api.clone(); + let activity_id = self.activity_id.clone(); + async move { + api.control() + .destroy_activity(&activity_id) + .await + .with_context(|| format!("failed to destroy sgx activity: {:?}", activity_id)) + } + .boxed_local() + } +} + +pub struct SgxBatch { + api: SecureActivityRequestorApi, + batch_id: String, + commands: Arc<[ExeScriptCommand]>, +} + +impl RunningBatch for SgxBatch { + fn id(&self) -> &str { + &self.batch_id + } + + fn commands(&self) -> Vec { + self.commands.iter().cloned().collect() + } + + fn events(&self) -> LocalBoxStream<'static, Result> { + let api = self.api.clone(); + let batch_id: Arc = self.batch_id.clone().into(); + + generate_events( + move |idx| { + let api = api.clone(); + let batch_id = batch_id.clone(); + async move { + loop { + match api.get_exec_batch_results(&batch_id, Some(10.0), idx).await { + Ok(v) => return Ok(v), + Err(ya_client::Error::TimeoutError { .. }) => (), + Err(ya_client::Error::InternalError(ref msg)) if msg == "Timeout" => (), + Err(e) => return Err(e.into()), + } + } + } + }, + self.commands.clone(), + ) + .boxed_local() + } +} From cee7330643e04ea15949f9c2effd4f0f83da1d02 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Sat, 19 Dec 2020 13:55:54 +0100 Subject: [PATCH 10/18] Add simple transfer functionality to API --- Cargo.lock | 2 + Cargo.toml | 2 + src/rest.rs | 4 + src/rest/transfer.rs | 205 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 src/rest/transfer.rs diff --git a/Cargo.lock b/Cargo.lock index a288b83..840a406 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2712,6 +2712,8 @@ dependencies = [ "serde_json", "sha3 0.9.1", "structopt", + "tempfile", + "thiserror", "tokio", "url", "ya-agreement-utils", diff --git a/Cargo.toml b/Cargo.toml index 1076f68..7e54be2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,8 @@ semver = "0.10.0" serde = "1.0.118" serde_json = "1.0" sha3 = "0.9.1" +tempfile = "3.1.0" +thiserror = "1.0.22" tokio = { version = "0.2.10", features = ["fs"] } url = "2.1.1" diff --git a/src/rest.rs b/src/rest.rs index 4438be8..5b0c936 100644 --- a/src/rest.rs +++ b/src/rest.rs @@ -3,8 +3,12 @@ mod async_drop; mod market; mod sgx; pub mod streaming; +mod transfer; pub use activity::{Activity, Credentials, Event as BatchEvent, ExeScriptCommand, RunningBatch}; +pub use transfer::{ + FileTransferError, JsonTransferError, TransferCmdError, TransferInternalError, Transfers, +}; pub use ya_client::web::{WebClient, WebClientBuilder}; use futures::prelude::*; diff --git a/src/rest/transfer.rs b/src/rest/transfer.rs new file mode 100644 index 0000000..2de13ec --- /dev/null +++ b/src/rest/transfer.rs @@ -0,0 +1,205 @@ +use anyhow::*; +use futures::prelude::*; +use futures::TryStreamExt; +use serde::de::DeserializeOwned; +use serde::Serialize; +use std::io::BufReader; +use std::path::Path; +use url::Url; + +use crate::rest::activity::Event; +use crate::rest::{Activity, ExeScriptCommand, RunningBatch}; + +#[derive(thiserror::Error, Debug)] +pub enum FileTransferError { + #[error(transparent)] + Transfer(#[from] TransferCmdError), + #[error("[{path}] is invalid URL. {e}")] + BadUrl { path: String, e: String }, + #[error("Gftp error transferring from [{src}] to [{dest}]: {e}")] + Gftp { + src: String, + dest: String, + e: String, + }, +} + +#[derive(thiserror::Error, Debug)] +pub enum TransferCmdError { + #[error("Error transferring file from [{src}] to [{dest}]. Error: {e}")] + CommandError { + src: String, + dest: String, + e: String, + }, +} + +#[derive(thiserror::Error, Debug)] +pub enum JsonTransferError { + #[error("Error sending json. {0}")] + Transfer(#[from] FileTransferError), + #[error("Failed to serialize object to temp file. {0}")] + Serialization(String), + #[error("Failed to deserialize object from temp file. {0}")] + Deserialization(String), + #[error("Error sending json. {0}")] + Internal(#[from] TransferInternalError), +} + +#[derive(thiserror::Error, Debug)] +pub enum TransferInternalError { + #[error("Failed to create temporary file. {0}")] + CreatingTemporary(String), + #[error("Can't persist temporary file. {0}")] + PersistTemporary(String), +} + +pub trait Transfers: Activity { + fn send_file<'a>( + &'a self, + src: &Path, + dest: &Path, + ) -> future::LocalBoxFuture<'a, Result<(), FileTransferError>> { + let src = src.to_path_buf(); + let dest = format!("container:{}", dest.display()); + + async move { + let dest = Url::parse(&dest).map_err(|e| FileTransferError::BadUrl { + path: dest.clone(), + e: e.to_string(), + })?; + + let src = gftp::publish(&src) + .await + .map_err(|e| FileTransferError::Gftp { + src: src.to_string_lossy().to_string(), + dest: dest.to_string(), + e: e.to_string(), + })?; + + self.transfer(&src, &dest) + .await + .map_err(FileTransferError::from) + } + .boxed_local() + } + + fn send_json<'a, T: Serialize>( + &'a self, + dest: &Path, + to_serialize: &'a T, + ) -> future::LocalBoxFuture<'a, Result<(), JsonTransferError>> { + let dest = dest.to_path_buf(); + async move { + let (file, file_path) = tempfile::NamedTempFile::new() + .map_err(|e| TransferInternalError::CreatingTemporary(e.to_string()))? + .keep() + .map_err(|e| TransferInternalError::PersistTemporary(e.to_string()))?; + + serde_json::to_writer(file, to_serialize) + .map_err(|e| JsonTransferError::Serialization(e.to_string()))?; + + Ok(self.send_file(&file_path, &dest).await?) + } + .boxed_local() + } + + fn download_file<'a>( + &'a self, + src: &Path, + dest: &Path, + ) -> future::LocalBoxFuture<'a, Result<(), FileTransferError>> { + let dest = dest.to_path_buf(); + let src = format!("container:{}", src.display()); + + async move { + let src = Url::parse(&src).map_err(|e| FileTransferError::BadUrl { + path: src.to_string(), + e: e.to_string(), + })?; + + let dest = gftp::open_for_upload(&dest) + .await + .map_err(|e| FileTransferError::Gftp { + src: src.to_string(), + dest: dest.to_string_lossy().to_string(), + e: e.to_string(), + })?; + + Ok(self.transfer(&src, &dest).await?) + } + .boxed_local() + } + + fn download_json( + &self, + src: &Path, + ) -> future::LocalBoxFuture> { + let src = src.to_path_buf(); + async move { + let (file, file_path) = tempfile::NamedTempFile::new() + .map_err(|e| TransferInternalError::CreatingTemporary(e.to_string()))? + .keep() + .map_err(|e| TransferInternalError::PersistTemporary(e.to_string()))?; + + self.download_file(&src, &file_path).await?; + + let reader = BufReader::new(file); + serde_json::from_reader(reader) + .map_err(|e| JsonTransferError::Deserialization(e.to_string())) + } + .boxed_local() + } + + fn transfer<'a>( + &'a self, + src: &Url, + dest: &Url, + ) -> future::LocalBoxFuture<'a, Result<(), TransferCmdError>> { + let src = src.to_string(); + let dest = dest.to_string(); + + async move { + let commands = vec![ExeScriptCommand::Transfer { + from: src.clone(), + to: dest.clone(), + args: Default::default(), + }]; + + if let Err(e) = self.execute_commands(commands).await { + let error = TransferCmdError::CommandError { + src: src.clone(), + dest: dest.clone(), + e: e.to_string(), + }; + log::error!("{}", &error); + return Err(error); + } + Ok(()) + } + .boxed_local() + } + + fn execute_commands( + &self, + commands: Vec, + ) -> future::LocalBoxFuture>> { + let batch = self.exec(commands); + async move { + batch + .await? + .events() + .and_then(|event| match event { + Event::StepFailed { message } => { + future::err::(anyhow!("Step failed: {}", message)) + } + Event::StepSuccess { output, .. } => future::ok(output), + }) + .try_collect() + .await + } + .boxed_local() + } +} + +impl Transfers for T where T: Activity {} From 47354ecf30dcd04d671f36f44eed87ec6da1ab2a Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Sat, 19 Dec 2020 14:16:03 +0100 Subject: [PATCH 11/18] Messeging from Requestor to ExeUnit --- src/rest/streaming.rs | 2 +- src/rest/streaming/messaging.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/rest/streaming.rs b/src/rest/streaming.rs index 49c1b86..1ce25cd 100644 --- a/src/rest/streaming.rs +++ b/src/rest/streaming.rs @@ -10,4 +10,4 @@ pub use result_stream::ResultStream; pub use ya_client::model::activity::{CommandOutput, RuntimeEvent, RuntimeEventKind}; -pub use messaging::{send_to_guest, ExeUnitMessage, MessagingExeUnit}; +pub use messaging::{send_to_guest, ExeUnitMessage, MessagingExeUnit, MessagingRequestor}; diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index 4fc4a6d..d784c0e 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -5,10 +5,14 @@ use serde::Serialize; use std::fs; use std::io::{self, Write}; use std::path::{Path, PathBuf}; +use std::sync::atomic::AtomicUsize; +use std::sync::atomic::Ordering; use std::sync::Arc; use tokio::sync::broadcast; use tokio::sync::mpsc; +use crate::rest::Transfers; + pub trait ExeUnitMessage: Serialize + DeserializeOwned + Send + Sync {} pub fn encode_message(msg: &impl ExeUnitMessage) -> anyhow::Result> { @@ -124,3 +128,30 @@ fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result { + activity: Arc, + msg_counter: Arc, + tracked_dir: PathBuf, +} + +impl MessagingRequestor { + pub fn new( + activity: Arc, + tracked_dir: &Path, + ) -> MessagingRequestor { + MessagingRequestor { + activity, + msg_counter: Arc::new(AtomicUsize::new(0)), + tracked_dir: tracked_dir.to_path_buf(), + } + } + + pub async fn send(self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { + let filename = format!("msg-{}", self.msg_counter.fetch_add(1, Ordering::SeqCst)); + let path = self.tracked_dir.join(filename); + + Ok(self.activity.send_json(&path, &msg).await?) + } +} From 1f54ae4539b1a7a50d110c4cd87340fe5fbc9882 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Sat, 19 Dec 2020 14:46:44 +0100 Subject: [PATCH 12/18] MessagingRequestor doesn't consume self while sending --- src/rest/streaming/messaging.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index d784c0e..ed4d534 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -148,7 +148,7 @@ impl MessagingRequestor { } } - pub async fn send(self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { + pub async fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { let filename = format!("msg-{}", self.msg_counter.fetch_add(1, Ordering::SeqCst)); let path = self.tracked_dir.join(filename); From 1c2830ebe94d0ec758b3bd19d175a16eebc5b76b Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Sun, 20 Dec 2020 10:41:47 +0100 Subject: [PATCH 13/18] Refactor messages --- src/rest/streaming.rs | 1 - src/rest/streaming/messaging.rs | 158 +----------------- .../capture.rs} | 2 +- src/rest/streaming/messaging/exeunit.rs | 128 ++++++++++++++ src/rest/streaming/messaging/requestor.rs | 34 ++++ src/rest/streaming/result_stream.rs | 4 +- 6 files changed, 172 insertions(+), 155 deletions(-) rename src/rest/streaming/{capture_messages.rs => messaging/capture.rs} (99%) create mode 100644 src/rest/streaming/messaging/exeunit.rs create mode 100644 src/rest/streaming/messaging/requestor.rs diff --git a/src/rest/streaming.rs b/src/rest/streaming.rs index 1ce25cd..ccac7df 100644 --- a/src/rest/streaming.rs +++ b/src/rest/streaming.rs @@ -1,5 +1,4 @@ mod batch; -mod capture_messages; mod forward_to_file; mod forward_to_std; mod messaging; diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index ed4d534..228c111 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -1,157 +1,11 @@ -use anyhow::anyhow; -use notify::{raw_watcher, Op, RecursiveMode, Watcher}; +pub mod capture; +mod exeunit; +mod requestor; + use serde::de::DeserializeOwned; use serde::Serialize; -use std::fs; -use std::io::{self, Write}; -use std::path::{Path, PathBuf}; -use std::sync::atomic::AtomicUsize; -use std::sync::atomic::Ordering; -use std::sync::Arc; -use tokio::sync::broadcast; -use tokio::sync::mpsc; -use crate::rest::Transfers; +pub use exeunit::{encode_message, send_to_guest, MessagingExeUnit}; +pub use requestor::MessagingRequestor; pub trait ExeUnitMessage: Serialize + DeserializeOwned + Send + Sync {} - -pub fn encode_message(msg: &impl ExeUnitMessage) -> anyhow::Result> { - let mut data = serde_json::to_vec(msg)?; - - // Add control characters - data.insert(0, 0x02 as u8); - data.push(0x03 as u8); - - Ok(data) -} - -pub fn send_to_guest(msg: &impl ExeUnitMessage) -> anyhow::Result<()> { - let data = encode_message(msg)?; - - // Write atomically to stdout. - let mut stdout = io::stdout(); - //let mut stdout = stdout.lock(); - stdout.write(data.as_ref())?; - Ok(()) -} - -pub struct MessagingExeUnit { - new_message_notifier: broadcast::Sender, -} - -impl MessagingExeUnit { - pub fn new(tracked_dir: &Path) -> anyhow::Result> { - std::fs::create_dir_all(&tracked_dir).map_err(|e| { - anyhow!( - "Can't create directory [{}] for messages. {}", - &tracked_dir.display(), - e - ) - })?; - - let sender = spawn_file_notifier(&tracked_dir)?; - - Ok(Arc::new(MessagingExeUnit { - new_message_notifier: sender, - })) - } - - pub fn listen(&self) -> mpsc::UnboundedReceiver { - let (msg_sender, msg_receiver) = mpsc::unbounded_channel(); - let mut file_receiver = self.new_message_notifier.subscribe(); - - let future = async move { - while let Ok(path) = file_receiver.recv().await { - if let Some(content) = fs::read_to_string(&path) - .map_err(|e| { - log::warn!( - "[Messaging] Can't load msg from file: '{}'. {}", - &path.display(), - e - ) - }) - .ok() - { - serde_json::from_slice::(&content.as_bytes()) - .map_err(|e| { - log::warn!( - "Can't deserialize message from file '{}'. {}", - &path.display(), - e - ) - }) - .map(|msg| msg_sender.send(msg)) - .ok(); - } - } - }; - tokio::spawn(future); - return msg_receiver; - } -} - -fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result> { - let (event_sender, _) = broadcast::channel(150); - let sender = event_sender.clone(); - - let (watcher_sender, watcher_receiver) = std::sync::mpsc::channel(); - let mut watcher = - raw_watcher(watcher_sender).map_err(|e| anyhow!("Initializing watcher failed. {}", e))?; - - watcher - .watch(&tracked_dir, RecursiveMode::NonRecursive) - .map_err(|e| { - anyhow!( - "Starting watching directory '{}' failed. {}", - &tracked_dir.display(), - e - ) - })?; - - std::thread::spawn(move || { - // Take ownership of watcher. - let _watcher = watcher; - - while let Ok(event) = watcher_receiver.recv() { - match event.op { - Ok(Op::CLOSE_WRITE) => { - let path = match event.path { - Some(path) => path, - None => continue, - }; - event_sender.send(path).ok(); - } - _ => (), - } - } - }); - - Ok(sender) -} - -#[derive(Clone)] -pub struct MessagingRequestor { - activity: Arc, - msg_counter: Arc, - tracked_dir: PathBuf, -} - -impl MessagingRequestor { - pub fn new( - activity: Arc, - tracked_dir: &Path, - ) -> MessagingRequestor { - MessagingRequestor { - activity, - msg_counter: Arc::new(AtomicUsize::new(0)), - tracked_dir: tracked_dir.to_path_buf(), - } - } - - pub async fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { - let filename = format!("msg-{}", self.msg_counter.fetch_add(1, Ordering::SeqCst)); - let path = self.tracked_dir.join(filename); - - Ok(self.activity.send_json(&path, &msg).await?) - } -} diff --git a/src/rest/streaming/capture_messages.rs b/src/rest/streaming/messaging/capture.rs similarity index 99% rename from src/rest/streaming/capture_messages.rs rename to src/rest/streaming/messaging/capture.rs index d4dca3b..bc0f66f 100644 --- a/src/rest/streaming/capture_messages.rs +++ b/src/rest/streaming/messaging/capture.rs @@ -9,7 +9,7 @@ use tokio::sync::mpsc; use ya_client::model::activity::{CommandOutput, RuntimeEvent, RuntimeEventKind}; -use super::messaging::ExeUnitMessage; +use super::ExeUnitMessage; struct MessageProcessor { notifier: mpsc::UnboundedSender, diff --git a/src/rest/streaming/messaging/exeunit.rs b/src/rest/streaming/messaging/exeunit.rs new file mode 100644 index 0000000..becfca4 --- /dev/null +++ b/src/rest/streaming/messaging/exeunit.rs @@ -0,0 +1,128 @@ +use anyhow::anyhow; +use notify::{raw_watcher, Op, RecursiveMode, Watcher}; +use std::fs; +use std::io::{self, Write}; +use std::path::{Path, PathBuf}; +use std::sync::Arc; +use tokio::sync::broadcast; +use tokio::sync::mpsc; + +use super::ExeUnitMessage; + +pub fn encode_message(msg: &impl ExeUnitMessage) -> anyhow::Result> { + let mut data = serde_json::to_vec(msg)?; + + // Add control characters + data.insert(0, 0x02 as u8); + data.push(0x03 as u8); + + Ok(data) +} + +pub fn send_to_guest(msg: &impl ExeUnitMessage) -> anyhow::Result<()> { + let data = encode_message(msg)?; + + // Write atomically to stdout. + let mut stdout = io::stdout(); + //let mut stdout = stdout.lock(); + stdout.write(data.as_ref())?; + Ok(()) +} + +pub struct MessagingExeUnit { + new_message_notifier: broadcast::Sender, +} + +impl MessagingExeUnit { + pub fn new(tracked_dir: &Path) -> anyhow::Result> { + std::fs::create_dir_all(&tracked_dir).map_err(|e| { + anyhow!( + "Can't create directory [{}] for messages. {}", + &tracked_dir.display(), + e + ) + })?; + + let sender = spawn_file_notifier(&tracked_dir)?; + + Ok(Arc::new(MessagingExeUnit { + new_message_notifier: sender, + })) + } + + pub fn listen(&self) -> mpsc::UnboundedReceiver { + let (msg_sender, msg_receiver) = mpsc::unbounded_channel(); + let mut file_receiver = self.new_message_notifier.subscribe(); + + let future = async move { + while let Ok(path) = file_receiver.recv().await { + if let Some(content) = fs::read_to_string(&path) + .map_err(|e| { + log::warn!( + "[Messaging] Can't load msg from file: '{}'. {}", + &path.display(), + e + ) + }) + .ok() + { + serde_json::from_slice::(&content.as_bytes()) + .map_err(|e| { + log::warn!( + "Can't deserialize message from file '{}'. {}", + &path.display(), + e + ) + }) + .map(|msg| msg_sender.send(msg)) + .ok(); + } + } + }; + tokio::spawn(future); + return msg_receiver; + } + + pub fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { + send_to_guest(msg) + } +} + +fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result> { + let (event_sender, _) = broadcast::channel(150); + let sender = event_sender.clone(); + + let (watcher_sender, watcher_receiver) = std::sync::mpsc::channel(); + let mut watcher = + raw_watcher(watcher_sender).map_err(|e| anyhow!("Initializing watcher failed. {}", e))?; + + watcher + .watch(&tracked_dir, RecursiveMode::NonRecursive) + .map_err(|e| { + anyhow!( + "Starting watching directory '{}' failed. {}", + &tracked_dir.display(), + e + ) + })?; + + std::thread::spawn(move || { + // Take ownership of watcher. + let _watcher = watcher; + + while let Ok(event) = watcher_receiver.recv() { + match event.op { + Ok(Op::CLOSE_WRITE) => { + let path = match event.path { + Some(path) => path, + None => continue, + }; + event_sender.send(path).ok(); + } + _ => (), + } + } + }); + + Ok(sender) +} diff --git a/src/rest/streaming/messaging/requestor.rs b/src/rest/streaming/messaging/requestor.rs new file mode 100644 index 0000000..cd3ef42 --- /dev/null +++ b/src/rest/streaming/messaging/requestor.rs @@ -0,0 +1,34 @@ +use std::path::{Path, PathBuf}; +use std::sync::atomic::AtomicUsize; +use std::sync::atomic::Ordering; +use std::sync::Arc; + +use super::ExeUnitMessage; +use crate::rest::Transfers; + +#[derive(Clone)] +pub struct MessagingRequestor { + activity: Arc, + msg_counter: Arc, + tracked_dir: PathBuf, +} + +impl MessagingRequestor { + pub fn new( + activity: Arc, + tracked_dir: &Path, + ) -> MessagingRequestor { + MessagingRequestor { + activity, + msg_counter: Arc::new(AtomicUsize::new(0)), + tracked_dir: tracked_dir.to_path_buf(), + } + } + + pub async fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { + let filename = format!("msg-{}", self.msg_counter.fetch_add(1, Ordering::SeqCst)); + let path = self.tracked_dir.join(filename); + + Ok(self.activity.send_json(&path, &msg).await?) + } +} diff --git a/src/rest/streaming/result_stream.rs b/src/rest/streaming/result_stream.rs index 6f39fd1..33a8efe 100644 --- a/src/rest/streaming/result_stream.rs +++ b/src/rest/streaming/result_stream.rs @@ -2,9 +2,9 @@ use futures::prelude::*; use std::path::Path; use tokio::sync::mpsc; -use super::capture_messages::CaptureMessages; use super::forward_to_file::ForwardToFile; use super::forward_to_std::ForwardStd; +use super::messaging::capture::CaptureMessages; use super::messaging::ExeUnitMessage; use ya_client::model::activity::RuntimeEvent; @@ -27,6 +27,8 @@ pub trait ResultStream: Stream { ForwardToFile::new(self, stdout, stderr) } + /// Uses passed channel to notify about messages discovered in stream. + /// Recognized messages are removed from stream. fn capture_messages( self, notifier: mpsc::UnboundedSender, From 395dadab6df4d074fb397bddbd95a9bce0b5cae3 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Fri, 8 Jan 2021 16:18:58 +0100 Subject: [PATCH 14/18] Yarapi compiles with event-api/master on ya-client --- .gitignore | 3 +++ Cargo.lock | 25 +++++++++++++++++++++++-- Cargo.toml | 2 +- examples/low_level.rs | 1 + src/requestor.rs | 14 ++++---------- src/requestor/activity.rs | 10 ++++++++-- src/requestor/payment_manager.rs | 19 +++++++++---------- src/rest/market.rs | 6 +++--- 8 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0002fe5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +target +tests/test-workdir/* \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 06057c6..6e79f61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1992,6 +1992,24 @@ dependencies = [ "syn 1.0.48", ] +[[package]] +name = "strum" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" + +[[package]] +name = "strum_macros" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5" +dependencies = [ + "heck", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.48", +] + [[package]] name = "syn" version = "0.15.44" @@ -2416,7 +2434,7 @@ dependencies = [ [[package]] name = "ya-client" version = "0.4.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=cf9838499aaeb2a54c4ad56d1601c4579a66e7cc#cf9838499aaeb2a54c4ad56d1601c4579a66e7cc" +source = "git+https://github.com/golemfactory/ya-client.git?rev=29f9b7a60044d56c6665b5d236696bf1830aacdd#29f9b7a60044d56c6665b5d236696bf1830aacdd" dependencies = [ "awc", "bytes 0.5.6", @@ -2456,16 +2474,19 @@ dependencies = [ [[package]] name = "ya-client-model" version = "0.2.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=cf9838499aaeb2a54c4ad56d1601c4579a66e7cc#cf9838499aaeb2a54c4ad56d1601c4579a66e7cc" +source = "git+https://github.com/golemfactory/ya-client.git?rev=29f9b7a60044d56c6665b5d236696bf1830aacdd#29f9b7a60044d56c6665b5d236696bf1830aacdd" dependencies = [ "bigdecimal", "chrono", + "derive_more", "hex", "openssl", "rand 0.7.3", "secp256k1", "serde", "serde_json", + "strum", + "strum_macros", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index bc9bf68..5f52d38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ keywords=["golem", "yagna"] [dependencies] -ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "cf9838499aaeb2a54c4ad56d1601c4579a66e7cc", features = ["sgx"] } +ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "29f9b7a60044d56c6665b5d236696bf1830aacdd", features = ["sgx"] } gftp = "0.1" ya-agreement-utils = "0.1" diff --git a/examples/low_level.rs b/examples/low_level.rs index 71bb90d..0d14485 100644 --- a/examples/low_level.rs +++ b/examples/low_level.rs @@ -79,6 +79,7 @@ async fn do_init(activity: impl rest::Activity) -> anyhow::Result<()> { "aea5db67524e02a263b9339fe6667d6b577f3d4c".to_string(), "1".to_string(), ], + capture: None, }, ]) .await?; diff --git a/src/requestor.rs b/src/requestor.rs index 30facdf..858c415 100644 --- a/src/requestor.rs +++ b/src/requestor.rs @@ -31,7 +31,7 @@ use ya_client::{ AgreementProposal, NewDemand, RequestorEvent, }, }, - payment::PaymentRequestorApi, + payment::PaymentApi, web::WebClient, }; @@ -167,7 +167,7 @@ impl Requestor { let client = WebClient::builder().auth_token(&app_key).build(); let market_api: MarketRequestorApi = client.interface()?; let activity_api: ActivityRequestorApi = client.interface()?; - let payment_api: PaymentRequestorApi = client.interface()?; + let payment_api: PaymentApi = client.interface()?; let demand = self.create_demand().await?; log::debug!("demand: {}", serde_json::to_string_pretty(&demand)?); @@ -411,14 +411,8 @@ async fn create_agreement(market_api: MarketRequestorApi, proposal: Proposal) -> let _ = market_api.confirm_agreement(&id, None).await?; log::info!("waiting for approval of agreement [{}]", agreement_id); - let response = market_api.wait_for_approval(&id, Some(10.0)).await?; - match response.trim().to_lowercase().as_str() { - "approved" => Ok(agreement_id), - res => Err(anyhow::anyhow!( - "expected agreement approval, got {} instead", - res - )), - } + market_api.wait_for_approval(&id, Some(10.0)).await?; + Ok(agreement_id) } async fn monitor_activity( diff --git a/src/requestor/activity.rs b/src/requestor/activity.rs index afdb7af..03cd4e1 100644 --- a/src/requestor/activity.rs +++ b/src/requestor/activity.rs @@ -1,7 +1,7 @@ #![allow(dead_code)] use crate::requestor::command::{CommandList, ExeScript}; -use anyhow::{Context, Result}; +use anyhow::{anyhow, Context, Result}; use ya_client::activity::{ActivityRequestorApi, SecureActivityRequestorApi}; use ya_client::model::activity::{ActivityState, ExeScriptCommandResult}; @@ -100,6 +100,12 @@ impl Activity { } pub async fn get_usage(&self) -> Result> { - Ok(self.api.state().get_usage(&self.activity_id).await?) + Ok(self + .api + .state() + .get_usage(&self.activity_id) + .await? + .current_usage + .ok_or(anyhow!("None usage vector"))?) } } diff --git a/src/requestor/payment_manager.rs b/src/requestor/payment_manager.rs index 5b80914..520deb1 100644 --- a/src/requestor/payment_manager.rs +++ b/src/requestor/payment_manager.rs @@ -3,13 +3,12 @@ use actix::prelude::*; use bigdecimal::BigDecimal; use chrono::{DateTime, Utc}; -use futures::TryFutureExt; use std::collections::HashSet; use std::time::Duration; -use ya_client::{model, payment::requestor::PaymentRequestorApi}; +use ya_client::{model, payment::PaymentApi}; pub struct PaymentManager { - payment_api: PaymentRequestorApi, + payment_api: PaymentApi, allocation_id: String, total_amount: BigDecimal, amount_paid: BigDecimal, @@ -28,7 +27,7 @@ impl Actor for PaymentManager { } impl PaymentManager { - pub fn new(payment_api: PaymentRequestorApi, allocation: model::payment::Allocation) -> Self { + pub fn new(payment_api: PaymentApi, allocation: model::payment::Allocation) -> Self { let now = Utc::now(); PaymentManager { payment_api, @@ -47,11 +46,11 @@ impl PaymentManager { let f = async move { let events = api - .get_debit_note_events(Some(&ts), Some(Duration::from_secs(60))) + .get_debit_note_events(Some(&ts), Some(Duration::from_secs(60)), None, None) .await?; for event in events { log::debug!("got debit note: {:?}", event); - ts = event.timestamp; + ts = event.event_date; } Ok::<_, anyhow::Error>(ts) } @@ -78,16 +77,16 @@ impl PaymentManager { let f = async move { let events = api - .get_invoice_events(Some(&ts), Some(Duration::from_secs(60))) + .get_invoice_events(Some(&ts), Some(Duration::from_secs(60)), None, None) .await?; let mut new_invoices = Vec::new(); for event in events { log::debug!("Got invoice: {:?}", event); - if event.event_type == model::payment::EventType::Received { + if event.event_type == model::payment::InvoiceEventType::InvoiceReceivedEvent { let invoice = api.get_invoice(&event.invoice_id).await?; new_invoices.push(invoice); } - ts = event.timestamp; + ts = event.event_date; } Ok::<_, anyhow::Error>((ts, new_invoices)) } @@ -200,8 +199,8 @@ impl Handler for PaymentManager { async move { payment_api .release_allocation(&allocation_id) - .map_err(anyhow::Error::from) .await + .map_err(anyhow::Error::from) } .into_actor(self), ) diff --git a/src/rest/market.rs b/src/rest/market.rs index b77e17a..2c5af7b 100644 --- a/src/rest/market.rs +++ b/src/rest/market.rs @@ -168,10 +168,10 @@ impl Proposal { let _ = self .subscription .api - .reject_proposal_with_reason( + .reject_proposal( self.subscription.id.as_ref(), self.proposal_id.as_str(), - Option::::None, + &Option::::None, ) .await?; Ok(()) @@ -216,7 +216,7 @@ impl Drop for AgreementInner { let api = self.api.clone(); let agreement_id = self.agreement_id.clone(); self.drop_list.async_drop(async move { - api.terminate_agreement(&agreement_id, Option::::None) + api.terminate_agreement(&agreement_id, &Option::::None) .await .with_context(|| format!("Failed to auto destroy Agreement: {:?}", agreement_id))?; log::debug!(target:"yarapi::drop", "Agreement {:?} terminated", agreement_id); From 7c8e73d63377a2df3289ca7dcd2509ceb6c1794d Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 25 Jan 2021 14:38:01 +0100 Subject: [PATCH 15/18] Merge with event-api/master --- .gitignore | 4 +- Cargo.lock | 437 +++++++++++++++++++------------ Cargo.toml | 28 +- src/requestor.rs | 14 +- src/requestor/activity.rs | 10 +- src/requestor/payment_manager.rs | 19 +- src/rest/activity.rs | 6 +- src/rest/market.rs | 2 +- 8 files changed, 318 insertions(+), 202 deletions(-) diff --git a/.gitignore b/.gitignore index 8390062..0002fe5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -target/ .idea -tests/test-workdir/ \ No newline at end of file +target +tests/test-workdir/* \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 840a406..c4bcf51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,8 +111,8 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ca8ce00b267af8ccebbd647de0d61e0674b6e61185cc7a592ff88772bed655" dependencies = [ - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -180,15 +180,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "addr2line" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" dependencies = [ "gimli", ] @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.35" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4" +checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" [[package]] name = "async-trait" @@ -230,8 +230,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -282,9 +282,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" +checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" dependencies = [ "addr2line", "cfg-if 1.0.0", @@ -383,9 +383,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" [[package]] name = "bytes" @@ -403,6 +403,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + [[package]] name = "cc" version = "1.0.41" @@ -502,8 +508,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -532,9 +538,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "dtoa" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" +checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e" [[package]] name = "either" @@ -559,8 +565,8 @@ checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" dependencies = [ "heck", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -578,9 +584,9 @@ dependencies = [ [[package]] name = "envy" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f938a4abd5b75fe3737902dbc2e79ca142cc1526827a9e40b829a086758531a9" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" dependencies = [ "serde", ] @@ -602,20 +608,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", "synstructure", ] [[package]] name = "filetime" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" +checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", + "redox_syscall 0.2.4", "winapi 0.3.9", ] @@ -711,9 +717,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" dependencies = [ "futures-channel", "futures-core", @@ -726,9 +732,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" dependencies = [ "futures-core", "futures-sink", @@ -736,15 +742,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" dependencies = [ "futures-core", "futures-task", @@ -753,42 +759,42 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" dependencies = [ "once_cell", ] [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" dependencies = [ "futures-channel", "futures-core", @@ -797,7 +803,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.2", + "pin-project-lite 0.2.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -834,15 +840,26 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + [[package]] name = "gftp" version = "0.1.2" @@ -892,8 +909,8 @@ checksum = "34a97a52fdee1870a34fa6e4b77570cba531b27d1838874fef4429a791a3d657" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -941,18 +958,18 @@ checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" [[package]] name = "heck" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" dependencies = [ "libc", ] @@ -976,11 +993,11 @@ dependencies = [ [[package]] name = "http" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" +checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes 0.5.6", + "bytes 1.0.1", "fnv", "itoa", ] @@ -1013,9 +1030,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" dependencies = [ "autocfg 1.0.1", "hashbrown", @@ -1034,9 +1051,9 @@ dependencies = [ [[package]] name = "inotify-sys" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4563555856585ab3180a5bf0b2f9f8d301a728462afffc8195b3f5394229c55" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" dependencies = [ "libc", ] @@ -1082,9 +1099,9 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "keccak" @@ -1122,15 +1139,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" +checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929" [[package]] name = "linked-hash-map" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "lock_api" @@ -1152,9 +1169,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" dependencies = [ "cfg-if 0.1.10", ] @@ -1339,9 +1356,9 @@ dependencies = [ [[package]] name = "object" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" +checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" [[package]] name = "once_cell" @@ -1363,9 +1380,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.31" +version = "0.10.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d008f51b1acffa0d3450a68606e6a51c123012edaacb0f4e1426bd978869187" +checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -1377,9 +1394,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.59" +version = "0.9.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de52d8eabd217311538a39bba130d7dea1f1e118010fee7a033d966845e7d5fe" +checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6" dependencies = [ "autocfg 1.0.1", "cc", @@ -1406,7 +1423,7 @@ checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", "lock_api 0.4.2", - "parking_lot_core 0.8.1", + "parking_lot_core 0.8.2", ] [[package]] @@ -1418,21 +1435,21 @@ dependencies = [ "cfg-if 0.1.10", "cloudabi", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "smallvec", "winapi 0.3.9", ] [[package]] name = "parking_lot_core" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c6d9b8427445284a09c55be860a15855ab580a417ccad9da88f5a06787ced0" +checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "smallvec", "winapi 0.3.9", ] @@ -1463,11 +1480,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "95b70b68509f17aa2857863b6fa00bf21fc93674c7a8893de2f469f6aa7ca2f2" dependencies = [ - "pin-project-internal 1.0.2", + "pin-project-internal 1.0.4", ] [[package]] @@ -1477,19 +1494,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "pin-project-internal" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "caa25a6393f22ce819b0f50e0be89287292fda8d425be38ee0ca14c4931d9e71" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -1500,9 +1517,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" [[package]] name = "pin-utils" @@ -1530,8 +1547,8 @@ checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", "version_check", ] @@ -1542,7 +1559,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", + "quote 1.0.8", "version_check", ] @@ -1554,9 +1571,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro-nested" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" @@ -1637,8 +1654,8 @@ dependencies = [ "anyhow", "itertools", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -1668,9 +1685,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" dependencies = [ "proc-macro2 1.0.24", ] @@ -1700,13 +1717,25 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.16", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", ] +[[package]] +name = "rand" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18519b42a40024d661e1714153e9ad0c3de27cd495760ceb09710920f1098b1e" +dependencies = [ + "libc", + "rand_chacha 0.3.0", + "rand_core 0.6.1", + "rand_hc 0.3.0", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -1727,6 +1756,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -1748,7 +1787,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +dependencies = [ + "getrandom 0.2.2", ] [[package]] @@ -1769,6 +1817,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_hc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +dependencies = [ + "rand_core 0.6.1", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -1837,11 +1894,20 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +[[package]] +name = "redox_syscall" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" dependencies = [ "aho-corasick", "memchr", @@ -1851,9 +1917,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" [[package]] name = "remove_dir_all" @@ -1906,9 +1972,18 @@ name = "secp256k1" version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2932dc07acd2066ff2e3921a4419606b220ba6cd03a9935123856cc534877056" +dependencies = [ + "secp256k1-sys 0.1.2", +] + +[[package]] +name = "secp256k1" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" dependencies = [ "rand 0.6.5", - "secp256k1-sys", + "secp256k1-sys 0.3.0", "serde", ] @@ -1921,6 +1996,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" +dependencies = [ + "cc", +] + [[package]] name = "semver" version = "0.10.0" @@ -1938,9 +2022,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.118" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "974ef1bd2ad8a507599b336595454081ff68a9599b4890af7643c0c0ed73a62c" dependencies = [ "serde_derive", ] @@ -1956,26 +2040,37 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.118" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +checksum = "8dee1f300f838c8ac340ecb0112b3ac472464fa67e87292bdb3dfc9c49128e17" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "serde_json" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_qs" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5cb0f0564a84554436c4ceff5c896308d4e09d0eb4bd0215b8f698f88084601" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + [[package]] name = "serde_urlencoded" version = "0.6.1" @@ -1990,9 +2085,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7baae0a99f1a324984bcdc5f0718384c1f69775f1c7eec8b859b71b443e3fd7" +checksum = "971be8f6e4d4a47163b405a3df70d14359186f9ab0f3a3ec37df144ca1ce089f" dependencies = [ "dtoa", "linked-hash-map", @@ -2033,9 +2128,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab" +checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" dependencies = [ "libc", ] @@ -2048,19 +2143,18 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c29947abdee2a218277abeca306f25789c938e500ea5a9d4b12a5a504466902" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall", "winapi 0.3.9", ] @@ -2090,8 +2184,26 @@ dependencies = [ "heck", "proc-macro-error", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", +] + +[[package]] +name = "strum" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" + +[[package]] +name = "strum_macros" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5" +dependencies = [ + "heck", + "proc-macro2 1.0.24", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -2107,12 +2219,12 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.54" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" +checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", + "quote 1.0.8", "unicode-xid 0.2.1", ] @@ -2123,21 +2235,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", "unicode-xid 0.2.1", ] [[package]] name = "tempfile" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "rand 0.7.3", - "redox_syscall", + "rand 0.8.2", + "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", ] @@ -2162,31 +2274,31 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "thread_local" -version = "1.0.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +checksum = "d8208a331e1cb318dd5bd76951d2b8fc48ca38a69f5f4e4af1b6a9f8c6236915" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] @@ -2253,8 +2365,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.54", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -2293,7 +2405,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.4", "tracing-core", ] @@ -2538,7 +2650,7 @@ dependencies = [ [[package]] name = "ya-agreement-utils" version = "0.2.0" -source = "git+https://github.com/golemfactory/yagna.git?rev=6edcdf2173699cfdd445180ff368efadfce7293f#6edcdf2173699cfdd445180ff368efadfce7293f" +source = "git+https://github.com/golemfactory/yagna.git?rev=552859220b764b39984580aacf0a81475b75da2e#552859220b764b39984580aacf0a81475b75da2e" dependencies = [ "serde", "serde_json", @@ -2550,7 +2662,7 @@ dependencies = [ [[package]] name = "ya-client" version = "0.4.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a#e68bbd90c903c6f74f77fddb80a432d20e4e2b2a" +source = "git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7#a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7" dependencies = [ "awc", "bytes 0.5.6", @@ -2566,12 +2678,13 @@ dependencies = [ "mime", "openssl", "rand 0.6.5", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", + "serde_qs", "thiserror", "url", - "ya-client-model 0.2.0 (git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a)", + "ya-client-model 0.2.0 (git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7)", ] [[package]] @@ -2604,7 +2717,7 @@ dependencies = [ [[package]] name = "ya-client-model" version = "0.2.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=e68bbd90c903c6f74f77fddb80a432d20e4e2b2a#e68bbd90c903c6f74f77fddb80a432d20e4e2b2a" +source = "git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7#a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7" dependencies = [ "bigdecimal", "chrono", @@ -2612,9 +2725,11 @@ dependencies = [ "hex", "openssl", "rand 0.7.3", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", + "strum", + "strum_macros", "thiserror", ] @@ -2681,9 +2796,9 @@ dependencies = [ [[package]] name = "yaml-rust" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] @@ -2705,8 +2820,8 @@ dependencies = [ "gftp", "log", "notify", - "pin-project 1.0.2", - "secp256k1", + "pin-project 1.0.4", + "secp256k1 0.17.2", "semver", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index 7e54be2..db2f94e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,29 +12,29 @@ keywords=["golem", "yagna"] [dependencies] -ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "e68bbd90c903c6f74f77fddb80a432d20e4e2b2a", features = ["sgx"] } +ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7", features = ["sgx"] } gftp = "0.1.2" -ya-agreement-utils = { git = "https://github.com/golemfactory/yagna.git", rev = "6edcdf2173699cfdd445180ff368efadfce7293f" } +ya-agreement-utils = { git = "https://github.com/golemfactory/yagna.git", rev = "552859220b764b39984580aacf0a81475b75da2e" } actix = "0.9" actix-rt = "1.0" -anyhow = "1.0.28" +anyhow = "^1.0" bigdecimal = "0.1.0" chrono = { version = "0.4.10", features = ["clock"] } -dotenv = "0.15.0" -env_logger = "0.6" -futures = "0.3" +dotenv = "^0.15.0" +env_logger = "^0.6" +futures = "^0.3" futures-core = "0.3.8" futures-util = "0.3.7" -log = "0.4" +log = "^0.4" pin-project = "1.0.2" secp256k1 = "0.17" -semver = "0.10.0" -serde = "1.0.118" -serde_json = "1.0" +semver = "^0.10.0" +serde = "^1.0" +serde_json = "^1.0" sha3 = "0.9.1" -tempfile = "3.1.0" -thiserror = "1.0.22" +tempfile = "^3.1.0" +thiserror = "^1.0" tokio = { version = "0.2.10", features = ["fs"] } url = "2.1.1" @@ -49,5 +49,5 @@ no-dev-version = true enable-all-features = true -[patch.crates-io] -#ya-client = { path = "../ya-client", features = ["sgx"] } +#[patch.crates-io] +#ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "0efbf2f875d804a283d162fc9e1679516be08900"} diff --git a/src/requestor.rs b/src/requestor.rs index 30facdf..858c415 100644 --- a/src/requestor.rs +++ b/src/requestor.rs @@ -31,7 +31,7 @@ use ya_client::{ AgreementProposal, NewDemand, RequestorEvent, }, }, - payment::PaymentRequestorApi, + payment::PaymentApi, web::WebClient, }; @@ -167,7 +167,7 @@ impl Requestor { let client = WebClient::builder().auth_token(&app_key).build(); let market_api: MarketRequestorApi = client.interface()?; let activity_api: ActivityRequestorApi = client.interface()?; - let payment_api: PaymentRequestorApi = client.interface()?; + let payment_api: PaymentApi = client.interface()?; let demand = self.create_demand().await?; log::debug!("demand: {}", serde_json::to_string_pretty(&demand)?); @@ -411,14 +411,8 @@ async fn create_agreement(market_api: MarketRequestorApi, proposal: Proposal) -> let _ = market_api.confirm_agreement(&id, None).await?; log::info!("waiting for approval of agreement [{}]", agreement_id); - let response = market_api.wait_for_approval(&id, Some(10.0)).await?; - match response.trim().to_lowercase().as_str() { - "approved" => Ok(agreement_id), - res => Err(anyhow::anyhow!( - "expected agreement approval, got {} instead", - res - )), - } + market_api.wait_for_approval(&id, Some(10.0)).await?; + Ok(agreement_id) } async fn monitor_activity( diff --git a/src/requestor/activity.rs b/src/requestor/activity.rs index afdb7af..03cd4e1 100644 --- a/src/requestor/activity.rs +++ b/src/requestor/activity.rs @@ -1,7 +1,7 @@ #![allow(dead_code)] use crate::requestor::command::{CommandList, ExeScript}; -use anyhow::{Context, Result}; +use anyhow::{anyhow, Context, Result}; use ya_client::activity::{ActivityRequestorApi, SecureActivityRequestorApi}; use ya_client::model::activity::{ActivityState, ExeScriptCommandResult}; @@ -100,6 +100,12 @@ impl Activity { } pub async fn get_usage(&self) -> Result> { - Ok(self.api.state().get_usage(&self.activity_id).await?) + Ok(self + .api + .state() + .get_usage(&self.activity_id) + .await? + .current_usage + .ok_or(anyhow!("None usage vector"))?) } } diff --git a/src/requestor/payment_manager.rs b/src/requestor/payment_manager.rs index 5b80914..520deb1 100644 --- a/src/requestor/payment_manager.rs +++ b/src/requestor/payment_manager.rs @@ -3,13 +3,12 @@ use actix::prelude::*; use bigdecimal::BigDecimal; use chrono::{DateTime, Utc}; -use futures::TryFutureExt; use std::collections::HashSet; use std::time::Duration; -use ya_client::{model, payment::requestor::PaymentRequestorApi}; +use ya_client::{model, payment::PaymentApi}; pub struct PaymentManager { - payment_api: PaymentRequestorApi, + payment_api: PaymentApi, allocation_id: String, total_amount: BigDecimal, amount_paid: BigDecimal, @@ -28,7 +27,7 @@ impl Actor for PaymentManager { } impl PaymentManager { - pub fn new(payment_api: PaymentRequestorApi, allocation: model::payment::Allocation) -> Self { + pub fn new(payment_api: PaymentApi, allocation: model::payment::Allocation) -> Self { let now = Utc::now(); PaymentManager { payment_api, @@ -47,11 +46,11 @@ impl PaymentManager { let f = async move { let events = api - .get_debit_note_events(Some(&ts), Some(Duration::from_secs(60))) + .get_debit_note_events(Some(&ts), Some(Duration::from_secs(60)), None, None) .await?; for event in events { log::debug!("got debit note: {:?}", event); - ts = event.timestamp; + ts = event.event_date; } Ok::<_, anyhow::Error>(ts) } @@ -78,16 +77,16 @@ impl PaymentManager { let f = async move { let events = api - .get_invoice_events(Some(&ts), Some(Duration::from_secs(60))) + .get_invoice_events(Some(&ts), Some(Duration::from_secs(60)), None, None) .await?; let mut new_invoices = Vec::new(); for event in events { log::debug!("Got invoice: {:?}", event); - if event.event_type == model::payment::EventType::Received { + if event.event_type == model::payment::InvoiceEventType::InvoiceReceivedEvent { let invoice = api.get_invoice(&event.invoice_id).await?; new_invoices.push(invoice); } - ts = event.timestamp; + ts = event.event_date; } Ok::<_, anyhow::Error>((ts, new_invoices)) } @@ -200,8 +199,8 @@ impl Handler for PaymentManager { async move { payment_api .release_allocation(&allocation_id) - .map_err(anyhow::Error::from) .await + .map_err(anyhow::Error::from) } .into_actor(self), ) diff --git a/src/rest/activity.rs b/src/rest/activity.rs index 6e26cba..ece1152 100644 --- a/src/rest/activity.rs +++ b/src/rest/activity.rs @@ -9,7 +9,9 @@ use ya_client::activity::ActivityRequestorApi; pub use ya_client::activity::SecureActivityRequestorApi; pub use ya_client::model::activity::Credentials; pub use ya_client::model::activity::ExeScriptCommand; -use ya_client::model::activity::{ActivityState, ExeScriptCommandState, ExeScriptRequest}; +use ya_client::model::activity::{ + ActivityState, ActivityUsage, ExeScriptCommandState, ExeScriptRequest, +}; use ya_client::model::activity::{CommandResult, ExeScriptCommandResult}; pub use super::sgx::{SgxActivity, SgxBatch}; @@ -149,7 +151,7 @@ impl DefaultActivity { })?) } - pub async fn get_usage(&self) -> anyhow::Result> { + pub async fn get_usage(&self) -> anyhow::Result { Ok(self .api .state() diff --git a/src/rest/market.rs b/src/rest/market.rs index 1666acd..0d52ea4 100644 --- a/src/rest/market.rs +++ b/src/rest/market.rs @@ -375,7 +375,7 @@ impl Proposal { let _ = self .subscription .api - .reject_proposal_with_reason( + .reject_proposal( self.subscription.id.as_ref(), self.proposal_id.as_str(), &Option::::None, From b2cf0d21fd372812cec0b967ad4a7b2c19e54af7 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 25 Jan 2021 15:46:45 +0100 Subject: [PATCH 16/18] Increase test timeout --- tests/test_messaging.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_messaging.rs b/tests/test_messaging.rs index 8812f94..c1d482a 100644 --- a/tests/test_messaging.rs +++ b/tests/test_messaging.rs @@ -34,7 +34,7 @@ async fn test_messaging_to_exeunit() -> anyhow::Result<()> { emulate_send(Messages::Progress(0.02), &dir, 1).unwrap(); - let msg = tokio::time::timeout(Duration::from_millis(150), events.recv()) + let msg = tokio::time::timeout(Duration::from_millis(500), events.recv()) .await? .unwrap(); match msg { @@ -44,7 +44,7 @@ async fn test_messaging_to_exeunit() -> anyhow::Result<()> { emulate_send(Messages::Progress(0.06), &dir, 2).unwrap(); - let msg = tokio::time::timeout(Duration::from_millis(150), events.recv()) + let msg = tokio::time::timeout(Duration::from_millis(500), events.recv()) .await? .unwrap(); match msg { From 1feadf1bcd76d8acbfca9b6543f9432de594040d Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Mon, 25 Jan 2021 16:32:44 +0100 Subject: [PATCH 17/18] Remove experimental features that don't work --- src/rest/streaming.rs | 2 +- src/rest/streaming/messaging.rs | 4 +- src/rest/streaming/messaging/exeunit.rs | 105 ---------------------- src/rest/streaming/messaging/requestor.rs | 34 ------- tests/test_messaging.rs | 56 ------------ tests/testing.rs | 28 ------ 6 files changed, 2 insertions(+), 227 deletions(-) delete mode 100644 src/rest/streaming/messaging/requestor.rs delete mode 100644 tests/test_messaging.rs delete mode 100644 tests/testing.rs diff --git a/src/rest/streaming.rs b/src/rest/streaming.rs index ccac7df..b110842 100644 --- a/src/rest/streaming.rs +++ b/src/rest/streaming.rs @@ -9,4 +9,4 @@ pub use result_stream::ResultStream; pub use ya_client::model::activity::{CommandOutput, RuntimeEvent, RuntimeEventKind}; -pub use messaging::{send_to_guest, ExeUnitMessage, MessagingExeUnit, MessagingRequestor}; +pub use messaging::{send_to_guest, ExeUnitMessage}; diff --git a/src/rest/streaming/messaging.rs b/src/rest/streaming/messaging.rs index 228c111..6fa49d4 100644 --- a/src/rest/streaming/messaging.rs +++ b/src/rest/streaming/messaging.rs @@ -1,11 +1,9 @@ pub mod capture; mod exeunit; -mod requestor; use serde::de::DeserializeOwned; use serde::Serialize; -pub use exeunit::{encode_message, send_to_guest, MessagingExeUnit}; -pub use requestor::MessagingRequestor; +pub use exeunit::{encode_message, send_to_guest}; pub trait ExeUnitMessage: Serialize + DeserializeOwned + Send + Sync {} diff --git a/src/rest/streaming/messaging/exeunit.rs b/src/rest/streaming/messaging/exeunit.rs index becfca4..71ef574 100644 --- a/src/rest/streaming/messaging/exeunit.rs +++ b/src/rest/streaming/messaging/exeunit.rs @@ -1,11 +1,4 @@ -use anyhow::anyhow; -use notify::{raw_watcher, Op, RecursiveMode, Watcher}; -use std::fs; use std::io::{self, Write}; -use std::path::{Path, PathBuf}; -use std::sync::Arc; -use tokio::sync::broadcast; -use tokio::sync::mpsc; use super::ExeUnitMessage; @@ -28,101 +21,3 @@ pub fn send_to_guest(msg: &impl ExeUnitMessage) -> anyhow::Result<()> { stdout.write(data.as_ref())?; Ok(()) } - -pub struct MessagingExeUnit { - new_message_notifier: broadcast::Sender, -} - -impl MessagingExeUnit { - pub fn new(tracked_dir: &Path) -> anyhow::Result> { - std::fs::create_dir_all(&tracked_dir).map_err(|e| { - anyhow!( - "Can't create directory [{}] for messages. {}", - &tracked_dir.display(), - e - ) - })?; - - let sender = spawn_file_notifier(&tracked_dir)?; - - Ok(Arc::new(MessagingExeUnit { - new_message_notifier: sender, - })) - } - - pub fn listen(&self) -> mpsc::UnboundedReceiver { - let (msg_sender, msg_receiver) = mpsc::unbounded_channel(); - let mut file_receiver = self.new_message_notifier.subscribe(); - - let future = async move { - while let Ok(path) = file_receiver.recv().await { - if let Some(content) = fs::read_to_string(&path) - .map_err(|e| { - log::warn!( - "[Messaging] Can't load msg from file: '{}'. {}", - &path.display(), - e - ) - }) - .ok() - { - serde_json::from_slice::(&content.as_bytes()) - .map_err(|e| { - log::warn!( - "Can't deserialize message from file '{}'. {}", - &path.display(), - e - ) - }) - .map(|msg| msg_sender.send(msg)) - .ok(); - } - } - }; - tokio::spawn(future); - return msg_receiver; - } - - pub fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { - send_to_guest(msg) - } -} - -fn spawn_file_notifier(tracked_dir: &Path) -> anyhow::Result> { - let (event_sender, _) = broadcast::channel(150); - let sender = event_sender.clone(); - - let (watcher_sender, watcher_receiver) = std::sync::mpsc::channel(); - let mut watcher = - raw_watcher(watcher_sender).map_err(|e| anyhow!("Initializing watcher failed. {}", e))?; - - watcher - .watch(&tracked_dir, RecursiveMode::NonRecursive) - .map_err(|e| { - anyhow!( - "Starting watching directory '{}' failed. {}", - &tracked_dir.display(), - e - ) - })?; - - std::thread::spawn(move || { - // Take ownership of watcher. - let _watcher = watcher; - - while let Ok(event) = watcher_receiver.recv() { - match event.op { - Ok(Op::CLOSE_WRITE) => { - let path = match event.path { - Some(path) => path, - None => continue, - }; - event_sender.send(path).ok(); - } - _ => (), - } - } - }); - - Ok(sender) -} diff --git a/src/rest/streaming/messaging/requestor.rs b/src/rest/streaming/messaging/requestor.rs deleted file mode 100644 index cd3ef42..0000000 --- a/src/rest/streaming/messaging/requestor.rs +++ /dev/null @@ -1,34 +0,0 @@ -use std::path::{Path, PathBuf}; -use std::sync::atomic::AtomicUsize; -use std::sync::atomic::Ordering; -use std::sync::Arc; - -use super::ExeUnitMessage; -use crate::rest::Transfers; - -#[derive(Clone)] -pub struct MessagingRequestor { - activity: Arc, - msg_counter: Arc, - tracked_dir: PathBuf, -} - -impl MessagingRequestor { - pub fn new( - activity: Arc, - tracked_dir: &Path, - ) -> MessagingRequestor { - MessagingRequestor { - activity, - msg_counter: Arc::new(AtomicUsize::new(0)), - tracked_dir: tracked_dir.to_path_buf(), - } - } - - pub async fn send(&self, msg: &impl ExeUnitMessage) -> anyhow::Result<()> { - let filename = format!("msg-{}", self.msg_counter.fetch_add(1, Ordering::SeqCst)); - let path = self.tracked_dir.join(filename); - - Ok(self.activity.send_json(&path, &msg).await?) - } -} diff --git a/tests/test_messaging.rs b/tests/test_messaging.rs deleted file mode 100644 index c1d482a..0000000 --- a/tests/test_messaging.rs +++ /dev/null @@ -1,56 +0,0 @@ -mod testing; - -use testing::prepare_test_dir; - -use serde::{Deserialize, Serialize}; -use std::fs::File; -use std::path::Path; - -use std::time::Duration; -use yarapi::rest::streaming::{ExeUnitMessage, MessagingExeUnit}; - -#[derive(Serialize, Deserialize)] -pub enum Messages { - Progress(f64), - Info(String), -} - -impl ExeUnitMessage for Messages {} - -fn emulate_send(msg: impl ExeUnitMessage, dir: &Path, idx: u32) -> anyhow::Result<()> { - let path = dir.join(format!("msg-{}.json", idx)); - let file = File::create(path)?; - - Ok(serde_json::to_writer(file, &msg)?) -} - -#[actix_rt::test] -async fn test_messaging_to_exeunit() -> anyhow::Result<()> { - let dir = prepare_test_dir("test_messaging_to_exeunit")?; - env_logger::init(); - - let receiver = MessagingExeUnit::new(&dir).unwrap(); - let mut events = receiver.listen::(); - - emulate_send(Messages::Progress(0.02), &dir, 1).unwrap(); - - let msg = tokio::time::timeout(Duration::from_millis(500), events.recv()) - .await? - .unwrap(); - match msg { - Messages::Progress(progress) => assert_eq!(progress, 0.02), - _ => panic!("Expected Messages::Progress"), - }; - - emulate_send(Messages::Progress(0.06), &dir, 2).unwrap(); - - let msg = tokio::time::timeout(Duration::from_millis(500), events.recv()) - .await? - .unwrap(); - match msg { - Messages::Progress(progress) => assert_eq!(progress, 0.06), - _ => panic!("Expected Messages::Progress"), - }; - - Ok(()) -} diff --git a/tests/testing.rs b/tests/testing.rs deleted file mode 100644 index bcc11a6..0000000 --- a/tests/testing.rs +++ /dev/null @@ -1,28 +0,0 @@ -use anyhow::{Context, Result}; -use std::fs; -use std::path::PathBuf; - -fn test_data_dir() -> PathBuf { - PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("tests") - .join("test-workdir") -} - -fn escape_path(path: &str) -> String { - // Windows can't handle colons - path.replace("::", "_").to_string() -} - -pub fn prepare_test_dir(dir_name: &str) -> Result { - let test_dir: PathBuf = test_data_dir().join(escape_path(dir_name).as_str()); - - log::info!("Preparing test directory: {}", test_dir.display()); - - if test_dir.exists() { - fs::remove_dir_all(&test_dir) - .with_context(|| format!("Removing test directory: {}", test_dir.display()))?; - } - fs::create_dir_all(&test_dir) - .with_context(|| format!("Creating test directory: {}", test_dir.display()))?; - Ok(test_dir) -} From f34ee6efcdd66b335e7679b4249886cac7333fb5 Mon Sep 17 00:00:00 2001 From: "nieznany.sprawiciel" Date: Wed, 27 Jan 2021 13:15:09 +0100 Subject: [PATCH 18/18] Use gftp version from yagna rev --- Cargo.lock | 597 ++++++++++++++++++++++++++++++----------------------- Cargo.toml | 6 +- 2 files changed, 346 insertions(+), 257 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e79f61..4568e60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,7 +17,7 @@ dependencies = [ "lazy_static", "log", "parking_lot 0.10.2", - "pin-project 0.4.27", + "pin-project", "smallvec", "tokio", "tokio-util 0.2.0", @@ -94,7 +94,7 @@ dependencies = [ "log", "mime", "percent-encoding", - "pin-project 0.4.27", + "pin-project", "rand 0.7.3", "regex", "serde", @@ -107,12 +107,12 @@ dependencies = [ [[package]] name = "actix-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60f9ba7c4e6df97f3aacb14bb5c0cd7d98a49dcbaed0d7f292912ad9a6a3ed2" +checksum = "b4ca8ce00b267af8ccebbd647de0d61e0674b6e61185cc7a592ff88772bed655" dependencies = [ - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -137,7 +137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0052435d581b5be835d11f4eb3bce417c8af18d87ddf8ace99f8e67e595882bb" dependencies = [ "futures-util", - "pin-project 0.4.27", + "pin-project", ] [[package]] @@ -151,7 +151,7 @@ dependencies = [ "lazy_static", "log", "num_cpus", - "parking_lot 0.11.0", + "parking_lot 0.11.1", "threadpool", ] @@ -169,7 +169,7 @@ dependencies = [ "either", "futures", "log", - "pin-project 0.4.27", + "pin-project", "slab", ] @@ -180,15 +180,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "addr2line" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" dependencies = [ "gimli", ] @@ -201,9 +201,9 @@ checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" [[package]] name = "aho-corasick" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" dependencies = [ "memchr", ] @@ -219,19 +219,19 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.33" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fd36ffbb1fb7c834eac128ea8d0e310c5aeb635548f9d58861e1308d46e71c" +checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" [[package]] name = "async-trait" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0" +checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -282,9 +282,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.54" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28" +checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" dependencies = [ "addr2line", "cfg-if 1.0.0", @@ -383,9 +383,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" [[package]] name = "bytes" @@ -403,6 +403,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + [[package]] name = "cc" version = "1.0.41" @@ -459,15 +465,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "cloudabi" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" -dependencies = [ - "bitflags", -] - [[package]] name = "copyless" version = "0.1.5" @@ -511,8 +508,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -541,9 +538,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "dtoa" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" +checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e" [[package]] name = "either" @@ -553,11 +550,11 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "encoding_rs" -version = "0.8.24" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a51b8cf747471cb9499b6d59e59b0444f4c90eba8968c4e44874e92b5b64ace2" +checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", ] [[package]] @@ -568,8 +565,8 @@ checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" dependencies = [ "heck", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -587,9 +584,9 @@ dependencies = [ [[package]] name = "envy" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f938a4abd5b75fe3737902dbc2e79ca142cc1526827a9e40b829a086758531a9" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" dependencies = [ "serde", ] @@ -611,8 +608,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", "synstructure", ] @@ -624,11 +621,11 @@ checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" [[package]] name = "flate2" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da80be589a72651dcda34d8b35bcdc9b7254ad06325611074d9cc0fbb19f60ee" +checksum = "7411863d55df97a419aa64cb4d2f167103ea9d767e2c54a1868b7ac3f6b47129" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "crc32fast", "libc", "miniz_oxide", @@ -655,6 +652,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -679,9 +686,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95314d38584ffbfda215621d723e0a3906f032e03ae5551e650058dac83d4797" +checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" dependencies = [ "futures-channel", "futures-core", @@ -694,9 +701,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0448174b01148032eed37ac4aed28963aaaa8cfa93569a08e5b479bbc6c2c151" +checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" dependencies = [ "futures-core", "futures-sink", @@ -704,15 +711,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18eaa56102984bed2c88ea39026cff3ce3b4c7f508ca970cedf2450ea10d4e46" +checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" [[package]] name = "futures-executor" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f8e0c9258abaea85e78ebdda17ef9666d390e987f006be6080dfe354b708cb" +checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" dependencies = [ "futures-core", "futures-task", @@ -721,42 +728,42 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1798854a4727ff944a7b12aa999f58ce7aa81db80d2dfaaf2ba06f065ddd2b" +checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" [[package]] name = "futures-macro" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36fccf3fc58563b4a14d265027c627c3b665d7fed489427e88e7cc929559efe" +checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "futures-sink" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e3ca3f17d6e8804ae5d3df7a7d35b2b3a6fe89dac84b31872720fc3060a0b11" +checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" [[package]] name = "futures-task" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d502af37186c4fef99453df03e374683f8a1eec9dcc1e66b3b82dc8278ce3c" +checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" dependencies = [ "once_cell", ] [[package]] name = "futures-util" -version = "0.3.7" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abcb44342f62e6f3e8ac427b8aa815f724fd705dfad060b18ac7866c15bb8e34" +checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" dependencies = [ "futures-channel", "futures-core", @@ -765,7 +772,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.1", + "pin-project-lite 0.2.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -802,20 +809,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + [[package]] name = "gftp" version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc76abfbf7f1728e3e6bc2bf5d72f6b1caf38e85a1d969bf1e77abe901d2e06c" +source = "git+https://github.com/golemfactory/yagna.git?rev=552859220b764b39984580aacf0a81475b75da2e#552859220b764b39984580aacf0a81475b75da2e" dependencies = [ "actix-rt", "anyhow", @@ -831,7 +848,6 @@ dependencies = [ "thiserror", "tokio", "url", - "ya-client-model 0.1.1", "ya-core-model", "ya-service-bus", ] @@ -860,8 +876,8 @@ checksum = "34a97a52fdee1870a34fa6e4b77570cba531b27d1838874fef4429a791a3d657" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -909,18 +925,18 @@ checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" [[package]] name = "heck" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" dependencies = [ "libc", ] @@ -944,11 +960,11 @@ dependencies = [ [[package]] name = "http" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" +checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes 0.5.6", + "bytes 1.0.1", "fnv", "itoa", ] @@ -981,9 +997,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" dependencies = [ "autocfg 1.0.1", "hashbrown", @@ -991,9 +1007,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb1fc4429a33e1f80d41dc9fea4d108a88bec1de8053878898ae448a0b52f613" +checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" dependencies = [ "cfg-if 1.0.0", ] @@ -1030,9 +1046,9 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "keccak" @@ -1064,15 +1080,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929" [[package]] name = "linked-hash-map" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "lock_api" @@ -1085,20 +1101,20 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" dependencies = [ "scopeguard", ] [[package]] name = "log" -version = "0.4.11" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", ] [[package]] @@ -1152,9 +1168,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.22" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" dependencies = [ "cfg-if 0.1.10", "fuchsia-zircon", @@ -1182,9 +1198,9 @@ dependencies = [ [[package]] name = "miow" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" dependencies = [ "kernel32-sys", "net2", @@ -1200,9 +1216,9 @@ checksum = "2eb04b9f127583ed176e163fb9ec6f3e793b87e21deedd5734a69386a18a0151" [[package]] name = "net2" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" dependencies = [ "cfg-if 0.1.10", "libc", @@ -1251,15 +1267,15 @@ dependencies = [ [[package]] name = "object" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" +checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" [[package]] name = "once_cell" -version = "1.4.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" [[package]] name = "opaque-debug" @@ -1275,12 +1291,12 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.30" +version = "0.10.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" +checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" dependencies = [ "bitflags", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "foreign-types", "lazy_static", "libc", @@ -1289,9 +1305,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.58" +version = "0.9.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6" dependencies = [ "autocfg 1.0.1", "cc", @@ -1312,13 +1328,13 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", - "lock_api 0.4.1", - "parking_lot_core 0.8.0", + "lock_api 0.4.2", + "parking_lot_core 0.8.2", ] [[package]] @@ -1328,24 +1344,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ "cfg-if 0.1.10", - "cloudabi 0.0.3", + "cloudabi", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "smallvec", "winapi 0.3.9", ] [[package]] name = "parking_lot_core" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" dependencies = [ - "cfg-if 0.1.10", - "cloudabi 0.1.0", + "cfg-if 1.0.0", "instant", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "smallvec", "winapi 0.3.9", ] @@ -1371,16 +1386,7 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" dependencies = [ - "pin-project-internal 0.4.27", -] - -[[package]] -name = "pin-project" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee41d838744f60d959d7074e3afb6b35c7456d0f61cad38a24e35e6553f73841" -dependencies = [ - "pin-project-internal 1.0.1", + "pin-project-internal", ] [[package]] @@ -1390,26 +1396,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] -name = "pin-project-internal" -version = "1.0.1" +name = "pin-project-lite" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" -dependencies = [ - "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", -] +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" [[package]] name = "pin-utils" @@ -1425,9 +1426,9 @@ checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" [[package]] name = "ppv-lite86" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro-error" @@ -1437,8 +1438,8 @@ checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", "version_check", ] @@ -1449,7 +1450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", + "quote 1.0.8", "version_check", ] @@ -1461,9 +1462,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro-nested" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" @@ -1544,8 +1545,8 @@ dependencies = [ "anyhow", "itertools", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -1575,9 +1576,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" dependencies = [ "proc-macro2 1.0.24", ] @@ -1607,13 +1608,25 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.16", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", ] +[[package]] +name = "rand" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +dependencies = [ + "libc", + "rand_chacha 0.3.0", + "rand_core 0.6.1", + "rand_hc 0.3.0", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -1634,6 +1647,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -1655,7 +1678,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +dependencies = [ + "getrandom 0.2.2", ] [[package]] @@ -1676,6 +1708,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_hc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +dependencies = [ + "rand_core 0.6.1", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -1702,7 +1743,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "cloudabi 0.0.3", + "cloudabi", "fuchsia-cprng", "libc", "rand_core 0.4.2", @@ -1744,11 +1785,20 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +[[package]] +name = "redox_syscall" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" -version = "1.4.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" dependencies = [ "aho-corasick", "memchr", @@ -1758,9 +1808,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.20" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cab7a364d15cde1e505267766a2d3c4e22a843e1a601f0fa7564c0f82ced11c" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" [[package]] name = "remove_dir_all" @@ -1804,9 +1854,18 @@ name = "secp256k1" version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2932dc07acd2066ff2e3921a4419606b220ba6cd03a9935123856cc534877056" +dependencies = [ + "secp256k1-sys 0.1.2", +] + +[[package]] +name = "secp256k1" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" dependencies = [ "rand 0.6.5", - "secp256k1-sys", + "secp256k1-sys 0.3.0", "serde", ] @@ -1819,6 +1878,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" +dependencies = [ + "cc", +] + [[package]] name = "semver" version = "0.10.0" @@ -1836,9 +1904,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.117" +version = "1.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" dependencies = [ "serde_derive", ] @@ -1854,26 +1922,37 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.117" +version = "1.0.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_qs" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5cb0f0564a84554436c4ceff5c896308d4e09d0eb4bd0215b8f698f88084601" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + [[package]] name = "serde_urlencoded" version = "0.6.1" @@ -1888,9 +1967,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7baae0a99f1a324984bcdc5f0718384c1f69775f1c7eec8b859b71b443e3fd7" +checksum = "971be8f6e4d4a47163b405a3df70d14359186f9ab0f3a3ec37df144ca1ce089f" dependencies = [ "dtoa", "linked-hash-map", @@ -1931,9 +2010,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab" +checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6" dependencies = [ "libc", ] @@ -1946,19 +2025,18 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] name = "smallvec" -version = "1.4.2" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.3.15" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fa70dc5c8104ec096f4fe7ede7a221d35ae13dcd19ba1ad9a81d2cab9a1c44" +checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "redox_syscall", "winapi 0.3.9", ] @@ -1970,9 +2048,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" +checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c" dependencies = [ "clap", "lazy_static", @@ -1981,15 +2059,15 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" +checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90" dependencies = [ "heck", "proc-macro-error", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -2006,8 +2084,8 @@ checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5" dependencies = [ "heck", "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] @@ -2023,12 +2101,12 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.48" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", + "quote 1.0.8", "unicode-xid 0.2.1", ] @@ -2039,30 +2117,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", "unicode-xid 0.2.1", ] [[package]] name = "tempfile" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "rand 0.7.3", - "redox_syscall", + "rand 0.8.3", + "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", ] [[package]] name = "termcolor" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" dependencies = [ "winapi-util", ] @@ -2078,31 +2156,31 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "318234ffa22e0920fe9a40d7b8369b5f649d490980cf7aadcf1eb91594869b42" +checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae2447b6282786c3493999f40a9be2a6ad20cb8bd268b0a0dbf5a065535c0ab" +checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.48", + "quote 1.0.8", + "syn 1.0.60", ] [[package]] name = "thread_local" -version = "1.0.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +checksum = "d8208a331e1cb318dd5bd76951d2b8fc48ca38a69f5f4e4af1b6a9f8c6236915" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] @@ -2127,15 +2205,24 @@ dependencies = [ [[package]] name = "tinyvec" -version = "0.3.4" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238ce071d267c5710f9d31451efec16c5ee22de34df17cc05e56cbc92e967117" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" +checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" dependencies = [ "bytes 0.5.6", "fnv", @@ -2146,7 +2233,7 @@ dependencies = [ "memchr", "mio", "mio-uds", - "pin-project-lite", + "pin-project-lite 0.1.11", "signal-hook-registry", "slab", "winapi 0.3.9", @@ -2162,7 +2249,7 @@ dependencies = [ "futures-core", "futures-sink", "log", - "pin-project-lite", + "pin-project-lite 0.1.11", "tokio", ] @@ -2176,19 +2263,19 @@ dependencies = [ "futures-core", "futures-sink", "log", - "pin-project-lite", + "pin-project-lite 0.1.11", "tokio", ] [[package]] name = "tracing" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "log", - "pin-project-lite", + "pin-project-lite 0.2.4", "tracing-core", ] @@ -2207,7 +2294,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" dependencies = [ - "pin-project 0.4.27", + "pin-project", "tracing", ] @@ -2267,18 +2354,18 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.13" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" [[package]] name = "unicode-width" @@ -2300,10 +2387,11 @@ checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" [[package]] name = "url" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ + "form_urlencoded", "idna", "matches", "percent-encoding", @@ -2312,9 +2400,9 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" +checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" [[package]] name = "vec_map" @@ -2420,21 +2508,20 @@ dependencies = [ [[package]] name = "ya-agreement-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b04e5464c1b94df915a531e23b758f7f411259dd9da4a81884dc2e50dcc486a" +version = "0.2.0" +source = "git+https://github.com/golemfactory/yagna.git?rev=552859220b764b39984580aacf0a81475b75da2e#552859220b764b39984580aacf0a81475b75da2e" dependencies = [ "serde", "serde_json", "serde_yaml", "thiserror", - "ya-client-model 0.1.1", + "ya-client-model 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ya-client" version = "0.4.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=29f9b7a60044d56c6665b5d236696bf1830aacdd#29f9b7a60044d56c6665b5d236696bf1830aacdd" +source = "git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7#a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7" dependencies = [ "awc", "bytes 0.5.6", @@ -2450,22 +2537,24 @@ dependencies = [ "mime", "openssl", "rand 0.6.5", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", + "serde_qs", "thiserror", "url", - "ya-client-model 0.2.0", + "ya-client-model 0.2.0 (git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7)", ] [[package]] name = "ya-client-model" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b325b7e2de2ad52bc85bce0f1fb491023cf7e41991202597c09854371df99f3" +checksum = "6d7b5a9fc91eaff99c4f199d5bfae24d9bec8cc34a18f3a4bf8eb575ab44f77e" dependencies = [ "bigdecimal", "chrono", + "rand 0.7.3", "serde", "serde_json", "thiserror", @@ -2474,7 +2563,7 @@ dependencies = [ [[package]] name = "ya-client-model" version = "0.2.0" -source = "git+https://github.com/golemfactory/ya-client.git?rev=29f9b7a60044d56c6665b5d236696bf1830aacdd#29f9b7a60044d56c6665b5d236696bf1830aacdd" +source = "git+https://github.com/golemfactory/ya-client.git?rev=a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7#a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7" dependencies = [ "bigdecimal", "chrono", @@ -2482,7 +2571,7 @@ dependencies = [ "hex", "openssl", "rand 0.7.3", - "secp256k1", + "secp256k1 0.19.0", "serde", "serde_json", "strum", @@ -2492,16 +2581,16 @@ dependencies = [ [[package]] name = "ya-core-model" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dcbd940171a23c3da1965b546472b34f60fa546a57f070cbb3b8b12d0bbd0f4" +version = "0.2.1" +source = "git+https://github.com/golemfactory/yagna.git?rev=552859220b764b39984580aacf0a81475b75da2e#552859220b764b39984580aacf0a81475b75da2e" dependencies = [ "chrono", + "derive_more", "log", "serde", "serde_bytes", "thiserror", - "ya-client-model 0.1.1", + "ya-client-model 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ya-service-bus", ] @@ -2527,7 +2616,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20b2e7cfeacabb607fe1fd1dc8e653c3ee853f2e127cb1ed72955ea4cb84f951" dependencies = [ "futures", - "pin-project 0.4.27", + "pin-project", ] [[package]] @@ -2553,9 +2642,9 @@ dependencies = [ [[package]] name = "yaml-rust" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] @@ -2574,7 +2663,7 @@ dependencies = [ "futures", "gftp", "log", - "secp256k1", + "secp256k1 0.17.2", "semver", "serde_json", "sha3 0.9.1", diff --git a/Cargo.toml b/Cargo.toml index 5f52d38..6feff94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,9 +12,9 @@ keywords=["golem", "yagna"] [dependencies] -ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "29f9b7a60044d56c6665b5d236696bf1830aacdd", features = ["sgx"] } -gftp = "0.1" -ya-agreement-utils = "0.1" +ya-client = { git = "https://github.com/golemfactory/ya-client.git", rev = "a5bfc61da8f3a5cdcafcacf3d48a9f706571a9d7", features = ["sgx"] } +gftp = { git = "https://github.com/golemfactory/yagna.git", rev = "552859220b764b39984580aacf0a81475b75da2e" } +ya-agreement-utils = { git = "https://github.com/golemfactory/yagna.git", rev = "552859220b764b39984580aacf0a81475b75da2e" } actix = "0.9" actix-rt = "1.0"