better handling when rate limited
This commit is contained in:
parent
f80390c88a
commit
43b5652ba8
|
@ -201,22 +201,37 @@ async fn check_rpc(
|
||||||
"params": [block_hash, false],
|
"params": [block_hash, false],
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: don't unwrap! don't use the try operator
|
let response = client
|
||||||
let response: JsonRpcResponse<Block<TxHash>> = client
|
|
||||||
.post(rpc.clone())
|
.post(rpc.clone())
|
||||||
.json(&block_by_hash_request)
|
.json(&block_by_hash_request)
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
.context(format!("awaiting response from {}", rpc))?
|
.context(format!("awaiting response from {}", rpc))?;
|
||||||
.json()
|
|
||||||
.await
|
|
||||||
.context(format!("reading json on {}", rpc))?;
|
|
||||||
|
|
||||||
if let Some(result) = response.result {
|
if !response.status().is_success() {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"bad response from {}: {}",
|
||||||
|
rpc,
|
||||||
|
response.status(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
let body = response
|
||||||
|
.text()
|
||||||
|
.await
|
||||||
|
.context(format!("failed parsing body from {}", rpc))?;
|
||||||
|
|
||||||
|
let response_json: JsonRpcResponse<Block<TxHash>> = serde_json::from_str(&body)
|
||||||
|
.context(format!("body: {}", body))
|
||||||
|
.context(format!("failed parsing json from {}", rpc))?;
|
||||||
|
|
||||||
|
if let Some(result) = response_json.result {
|
||||||
let abbreviated = AbbreviatedBlock::from(result);
|
let abbreviated = AbbreviatedBlock::from(result);
|
||||||
|
|
||||||
|
debug!("{} has {:?}@{}", rpc, abbreviated.hash, abbreviated.num);
|
||||||
|
|
||||||
Ok(abbreviated)
|
Ok(abbreviated)
|
||||||
} else if let Some(result) = response.error {
|
} else if let Some(result) = response_json.error {
|
||||||
Err(anyhow!(
|
Err(anyhow!(
|
||||||
"jsonrpc error during check_rpc from {}: {:#}",
|
"jsonrpc error during check_rpc from {}: {:#}",
|
||||||
rpc,
|
rpc,
|
||||||
|
@ -226,7 +241,7 @@ async fn check_rpc(
|
||||||
Err(anyhow!(
|
Err(anyhow!(
|
||||||
"empty result during check_rpc from {}: {:#}",
|
"empty result during check_rpc from {}: {:#}",
|
||||||
rpc,
|
rpc,
|
||||||
json!(response)
|
json!(response_json)
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ impl SentrydSubCommand {
|
||||||
.or_else(|| top_config.map(|x| x.app.chain_id))
|
.or_else(|| top_config.map(|x| x.app.chain_id))
|
||||||
.context("--config or --chain-id required")?;
|
.context("--config or --chain-id required")?;
|
||||||
|
|
||||||
let web3_proxy = self.web3_proxy.trim_end_matches("/").to_string();
|
let primary_proxy = self.web3_proxy.trim_end_matches("/").to_string();
|
||||||
|
|
||||||
let other_proxy: Vec<_> = self
|
let other_proxy: Vec<_> = self
|
||||||
.other_proxy
|
.other_proxy
|
||||||
|
@ -166,7 +166,7 @@ impl SentrydSubCommand {
|
||||||
|
|
||||||
// check the main rpc's /health endpoint
|
// check the main rpc's /health endpoint
|
||||||
{
|
{
|
||||||
let url = format!("{}/health", web3_proxy);
|
let url = format!("{}/health", primary_proxy);
|
||||||
let error_sender = error_sender.clone();
|
let error_sender = error_sender.clone();
|
||||||
|
|
||||||
// TODO: what timeout?
|
// TODO: what timeout?
|
||||||
|
@ -212,7 +212,7 @@ impl SentrydSubCommand {
|
||||||
{
|
{
|
||||||
let max_age = self.max_age;
|
let max_age = self.max_age;
|
||||||
let max_lag = self.max_lag;
|
let max_lag = self.max_lag;
|
||||||
let rpc = self.web3_proxy.clone();
|
let primary_proxy = primary_proxy.clone();
|
||||||
let error_sender = error_sender.clone();
|
let error_sender = error_sender.clone();
|
||||||
|
|
||||||
let mut others = other_proxy.clone();
|
let mut others = other_proxy.clone();
|
||||||
|
@ -225,7 +225,13 @@ impl SentrydSubCommand {
|
||||||
log::Level::Error,
|
log::Level::Error,
|
||||||
error_sender,
|
error_sender,
|
||||||
move |error_builder| {
|
move |error_builder| {
|
||||||
compare::main(error_builder, rpc.clone(), others.clone(), max_age, max_lag)
|
compare::main(
|
||||||
|
error_builder,
|
||||||
|
primary_proxy.clone(),
|
||||||
|
others.clone(),
|
||||||
|
max_age,
|
||||||
|
max_lag,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue