2021-11-08 00:40:03 -08:00
|
|
|
use {
|
|
|
|
log::*,
|
|
|
|
solana_accountsdb_connector_lib::*,
|
|
|
|
std::{fs::File, io::Read, sync::Arc},
|
|
|
|
};
|
|
|
|
|
|
|
|
#[tokio::main]
|
2021-11-09 05:27:09 -08:00
|
|
|
async fn main() -> anyhow::Result<()> {
|
2021-11-08 00:40:03 -08:00
|
|
|
let args: Vec<String> = std::env::args().collect();
|
|
|
|
if args.len() < 2 {
|
|
|
|
println!("requires a config file argument");
|
|
|
|
return Ok(());
|
|
|
|
}
|
|
|
|
|
|
|
|
let config: Config = {
|
|
|
|
let mut file = File::open(&args[1])?;
|
|
|
|
let mut contents = String::new();
|
|
|
|
file.read_to_string(&mut contents)?;
|
2021-11-08 02:26:01 -08:00
|
|
|
toml::from_str(&contents).unwrap()
|
2021-11-08 00:40:03 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
solana_logger::setup_with_default("info");
|
|
|
|
info!("startup");
|
|
|
|
|
2021-11-08 11:15:46 -08:00
|
|
|
let metrics_tx = metrics::start();
|
|
|
|
|
2021-11-08 00:40:03 -08:00
|
|
|
let account_tables: AccountTables = vec![Arc::new(RawAccountTable {})];
|
|
|
|
|
|
|
|
let (account_write_queue_sender, slot_queue_sender) =
|
2021-11-08 11:15:46 -08:00
|
|
|
postgres_target::init(&config.postgres_target, account_tables, metrics_tx.clone()).await?;
|
2021-11-08 00:40:03 -08:00
|
|
|
|
|
|
|
info!("postgres done");
|
|
|
|
let use_accountsdb = true;
|
|
|
|
if use_accountsdb {
|
2021-11-08 11:15:46 -08:00
|
|
|
grpc_plugin_source::process_events(
|
|
|
|
config,
|
|
|
|
account_write_queue_sender,
|
|
|
|
slot_queue_sender,
|
|
|
|
metrics_tx,
|
|
|
|
)
|
|
|
|
.await;
|
2021-11-08 00:40:03 -08:00
|
|
|
} else {
|
|
|
|
websocket_source::process_events(config, account_write_queue_sender, slot_queue_sender)
|
|
|
|
.await;
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|