use env
This commit is contained in:
parent
b81bc5d550
commit
0c36943344
15
README.md
15
README.md
|
@ -2,16 +2,15 @@
|
||||||
|
|
||||||
## Run from console
|
## Run from console
|
||||||
|
|
||||||
Check requirements:
|
|
||||||
```bash
|
|
||||||
# need to set the MAINNET_API_TOKEN environment variable
|
|
||||||
echo $MAINNET_API_TOKEN
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export RUST_LOG=info,rpc_node_check_alive=debug
|
|
||||||
export MAINNET_API_TOKEN=...
|
RUST_LOG=info,rpc_node_check_alive=debug
|
||||||
export GRPC_ADDR=http://host:10000/
|
RPCNODE_LABEL=nodename
|
||||||
|
RPC_HTTP_ADDR=https://...
|
||||||
|
RPC_WS_ADDR=wss://...
|
||||||
|
GRPC_ADDR=http://....:10000/
|
||||||
|
DISCORD_WEBHOOK=https://discord.com/api/webhooks/abcedfgh
|
||||||
|
|
||||||
cargo run --bin rpc-node-check-alive
|
cargo run --bin rpc-node-check-alive
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
use std::pin::pin;
|
use std::pin::pin;
|
||||||
use std::process::ExitCode;
|
use std::process::{exit, ExitCode};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use futures_util::FutureExt;
|
use futures_util::FutureExt;
|
||||||
|
use gethostname::gethostname;
|
||||||
use geyser_grpc_connector::{GrpcConnectionTimeouts, GrpcSourceConfig, Message};
|
use geyser_grpc_connector::{GrpcConnectionTimeouts, GrpcSourceConfig, Message};
|
||||||
use geyser_grpc_connector::grpc_subscription_autoreconnect_streams::create_geyser_reconnecting_stream;
|
use geyser_grpc_connector::grpc_subscription_autoreconnect_streams::create_geyser_reconnecting_stream;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
@ -30,6 +31,7 @@ use url::Url;
|
||||||
use yellowstone_grpc_proto::geyser::{SubscribeRequest, SubscribeRequestFilterAccounts, SubscribeRequestFilterSlots, SubscribeUpdate};
|
use yellowstone_grpc_proto::geyser::{SubscribeRequest, SubscribeRequestFilterAccounts, SubscribeRequestFilterSlots, SubscribeUpdate};
|
||||||
use yellowstone_grpc_proto::geyser::subscribe_update::UpdateOneof;
|
use yellowstone_grpc_proto::geyser::subscribe_update::UpdateOneof;
|
||||||
|
|
||||||
|
|
||||||
type Slot = u64;
|
type Slot = u64;
|
||||||
|
|
||||||
const TASK_TIMEOUT: Duration = Duration::from_millis(5000);
|
const TASK_TIMEOUT: Duration = Duration::from_millis(5000);
|
||||||
|
@ -50,15 +52,46 @@ enum Check {
|
||||||
WebsocketAccount,
|
WebsocketAccount,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async fn send_webook_discord() {
|
||||||
|
let url = std::env::var("DISCORD_WEBHOOK").unwrap();
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
let res = client.post(url)
|
||||||
|
.json(&json!({
|
||||||
|
"content": "Hello, World!"
|
||||||
|
}))
|
||||||
|
.send().await;
|
||||||
|
match res {
|
||||||
|
Ok(_) => {
|
||||||
|
info!("webhook sent");
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
error!("webhook failed: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main(flavor = "multi_thread", worker_threads = 16)]
|
#[tokio::main(flavor = "multi_thread", worker_threads = 16)]
|
||||||
async fn main() -> ExitCode {
|
async fn main() -> ExitCode {
|
||||||
tracing_subscriber::fmt::init();
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
let ws_url = format!("wss://mango.rpcpool.com/{MAINNET_API_TOKEN}",
|
|
||||||
MAINNET_API_TOKEN = std::env::var("MAINNET_API_TOKEN").unwrap());
|
// send_webook_discord().await;
|
||||||
let rpc_url = format!("https://mango.rpcpool.com/{MAINNET_API_TOKEN}",
|
|
||||||
MAINNET_API_TOKEN = std::env::var("MAINNET_API_TOKEN").unwrap());
|
|
||||||
|
// name of rpc node for logging/discord (e.g. hostname)
|
||||||
|
let rpcnode_label = std::env::var("RPCNODE_LABEL").unwrap();
|
||||||
|
|
||||||
|
// http://...
|
||||||
|
let rpc_addr = std::env::var("RPC_HTTP_ADDR").unwrap();
|
||||||
|
|
||||||
|
// wss://...
|
||||||
|
let ws_addr = std::env::var("RPC_WS_ADDR").unwrap();
|
||||||
|
|
||||||
|
// http://...
|
||||||
let grpc_addr = std::env::var("GRPC_ADDR").unwrap();
|
let grpc_addr = std::env::var("GRPC_ADDR").unwrap();
|
||||||
|
|
||||||
let geyser_grpc_timeouts = GrpcConnectionTimeouts {
|
let geyser_grpc_timeouts = GrpcConnectionTimeouts {
|
||||||
connect_timeout: Duration::from_secs(10),
|
connect_timeout: Duration::from_secs(10),
|
||||||
request_timeout: Duration::from_secs(10),
|
request_timeout: Duration::from_secs(10),
|
||||||
|
@ -66,7 +99,9 @@ async fn main() -> ExitCode {
|
||||||
receive_timeout: Duration::from_secs(10),
|
receive_timeout: Duration::from_secs(10),
|
||||||
};
|
};
|
||||||
|
|
||||||
let rpc_url = Url::parse(rpc_url.as_str()).unwrap();
|
info!("rpcnode_check_alive against {}: (rpc {}, ws {}, gprc {})", rpcnode_label, rpc_addr, ws_addr, grpc_addr);
|
||||||
|
|
||||||
|
let rpc_url = Url::parse(rpc_addr.as_str()).unwrap();
|
||||||
let rpc_client = Arc::new(RpcClient::new(rpc_url.to_string()));
|
let rpc_client = Arc::new(RpcClient::new(rpc_url.to_string()));
|
||||||
|
|
||||||
let geyser_grpc_config = GrpcSourceConfig::new(grpc_addr.to_string(), None, None, geyser_grpc_timeouts.clone());
|
let geyser_grpc_config = GrpcSourceConfig::new(grpc_addr.to_string(), None, None, geyser_grpc_timeouts.clone());
|
||||||
|
@ -78,7 +113,7 @@ async fn main() -> ExitCode {
|
||||||
add_task(Check::Gsfa, rpc_get_signatures_for_address(rpc_client.clone()), &mut all_check_tasks);
|
add_task(Check::Gsfa, rpc_get_signatures_for_address(rpc_client.clone()), &mut all_check_tasks);
|
||||||
add_task(Check::GetAccountInfo, rpc_get_account_info(rpc_client.clone()), &mut all_check_tasks);
|
add_task(Check::GetAccountInfo, rpc_get_account_info(rpc_client.clone()), &mut all_check_tasks);
|
||||||
|
|
||||||
add_task(Check::WebsocketAccount, websocket_account_subscribe(Url::parse(ws_url.as_str()).unwrap()), &mut all_check_tasks);
|
add_task(Check::WebsocketAccount, websocket_account_subscribe(Url::parse(ws_addr.as_str()).unwrap()), &mut all_check_tasks);
|
||||||
|
|
||||||
add_task(Check::GeyserAllAccounts, create_geyser_all_accounts_task(geyser_grpc_config.clone()), &mut all_check_tasks);
|
add_task(Check::GeyserAllAccounts, create_geyser_all_accounts_task(geyser_grpc_config.clone()), &mut all_check_tasks);
|
||||||
add_task(Check::GeyserTokenAccount, create_geyser_token_account_task(geyser_grpc_config.clone()), &mut all_check_tasks);
|
add_task(Check::GeyserTokenAccount, create_geyser_token_account_task(geyser_grpc_config.clone()), &mut all_check_tasks);
|
||||||
|
|
Loading…
Reference in New Issue