Compare commits

...

7 Commits

Author SHA1 Message Date
c83a22461d Merge pull request 'Add wait-for-sbot to peach-config' (#131) from wait-for-sbot into main
Reviewed-on: #131
2022-07-25 11:17:31 +00:00
40bd1e48f1 Merge branch 'main' into wait-for-sbot
All checks were successful
continuous-integration/drone/pr Build is passing
2022-07-25 10:41:20 +00:00
03ac890793 Cargo fmt
All checks were successful
continuous-integration/drone/pr Build is passing
2022-07-15 11:37:05 +02:00
bc0c0fca7f Sequential match statements
Some checks failed
continuous-integration/drone/pr Build is failing
2022-07-15 11:35:28 +02:00
fc50bb5ee5 Cargo fmt
All checks were successful
continuous-integration/drone/pr Build is passing
2022-07-12 12:29:47 +02:00
29f5ad0e84 Wait for sbot is working
Some checks failed
continuous-integration/drone/pr Build is failing
2022-07-12 12:18:54 +02:00
cb09d6c3e9 Wait for sbot 2022-07-12 11:51:49 +02:00
5 changed files with 69 additions and 2 deletions

2
Cargo.lock generated
View File

@ -2200,7 +2200,7 @@ dependencies = [
[[package]]
name = "peach-config"
version = "0.1.26"
version = "0.1.27"
dependencies = [
"async-std",
"clap",

View File

@ -1,6 +1,6 @@
[package]
name = "peach-config"
version = "0.1.26"
version = "0.1.27"
authors = ["Andrew Reid <gnomad@cryptolab.net>", "Max Fowler <max@mfowler.info>"]
edition = "2018"
description = "Command line tool for installing, updating and configuring PeachCloud"

View File

@ -42,6 +42,8 @@ pub enum PeachConfigError {
Golgi { source: GolgiError },
#[snafu(display("{}", message))]
CmdInputError { message: String },
#[snafu(display("{}", message))]
WaitForSbotError { message: String },
}
impl From<std::io::Error> for PeachConfigError {

View File

@ -10,6 +10,7 @@ mod setup_peach_deb;
mod status;
mod update;
mod utils;
mod wait_for_sbot;
use clap::arg_enum;
use log::error;
@ -61,6 +62,10 @@ enum PeachConfig {
/// It takes an address argument of the form host:port
#[structopt(name = "publish-address")]
PublishAddress(PublishAddressOpts),
/// Wait for a successful connection to sbot
#[structopt(name = "wait-for-sbot")]
WaitForSbot,
}
#[derive(StructOpt, Debug)]
@ -193,6 +198,14 @@ async fn run() {
}
}
}
PeachConfig::WaitForSbot => match wait_for_sbot::wait_for_sbot().await {
Ok(sbot_id) => {
println!("connected with sbot and found sbot_id: {:?}", sbot_id)
}
Err(err) => {
error!("peach-config did not successfully connect to sbot: {}", err)
}
},
}
}
}

View File

@ -0,0 +1,52 @@
use std::{thread, time};
use crate::error::PeachConfigError;
use peach_lib::sbot::init_sbot;
static MAX_NUM_ATTEMPTS: u8 = 10;
/// Utility function to wait for a successful whoami call with sbot
/// After each attempt to call whoami it waits 2 seconds,
/// and if after MAX_NUM_ATTEMPTS (10) there is no successful whoami call
/// it returns an Error. Otherwise it returns Ok(sbot_id).
pub async fn wait_for_sbot() -> Result<String, PeachConfigError> {
let mut num_attempts = 0;
let mut whoami = None;
while num_attempts < MAX_NUM_ATTEMPTS {
let mut sbot = None;
let sbot_res = init_sbot().await;
match sbot_res {
Ok(sbot_instance) => {
sbot = Some(sbot_instance);
}
Err(err) => {
eprintln!("failed to connect to sbot: {:?}", err);
}
}
if sbot.is_some() {
let sbot_id_res = sbot.unwrap().whoami().await;
match sbot_id_res {
Ok(sbot_id) => {
whoami = Some(sbot_id);
break;
}
Err(err) => {
eprintln!("whoami failed: {:?}", err);
}
}
}
println!("trying to connect to sbot again {:?}", num_attempts);
num_attempts += 1;
let sleep_duration = time::Duration::from_secs(2);
thread::sleep(sleep_duration);
}
whoami.ok_or(PeachConfigError::WaitForSbotError {
message: "Failed to find sbot_id after 10 attempts".to_string(),
})
}