2018-06-23 16:17:04 +03:00
|
|
|
extern crate bitcoin;
|
|
|
|
extern crate electrs;
|
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
extern crate log;
|
|
|
|
#[macro_use]
|
|
|
|
extern crate error_chain;
|
|
|
|
|
|
|
|
use electrs::{config::Config,
|
|
|
|
daemon::Daemon,
|
|
|
|
errors::*,
|
2018-06-24 13:11:13 +03:00
|
|
|
metrics::Metrics,
|
2018-06-25 14:06:07 +03:00
|
|
|
parse::Parser,
|
2018-06-23 16:17:04 +03:00
|
|
|
signal::Waiter,
|
2018-06-25 10:46:30 +03:00
|
|
|
store::{DBStore, StoreOptions, WriteStore}};
|
2018-06-23 16:17:04 +03:00
|
|
|
|
|
|
|
use error_chain::ChainedError;
|
|
|
|
|
|
|
|
fn run(config: Config) -> Result<()> {
|
|
|
|
let signal = Waiter::new();
|
|
|
|
let metrics = Metrics::new(config.monitoring_addr);
|
|
|
|
metrics.start();
|
|
|
|
|
|
|
|
let daemon = Daemon::new(config.network_type, &metrics)?;
|
2018-06-24 13:11:13 +03:00
|
|
|
let store = DBStore::open("./test-db", StoreOptions { bulk_import: true });
|
2018-06-23 16:17:04 +03:00
|
|
|
|
2018-06-25 14:06:07 +03:00
|
|
|
let chan = Parser::new(&daemon, &store, &metrics)?.start();
|
2018-06-24 13:11:13 +03:00
|
|
|
for rows in chan.iter() {
|
2018-06-23 16:17:04 +03:00
|
|
|
if let Some(sig) = signal.poll() {
|
|
|
|
bail!("indexing interrupted by SIG{:?}", sig);
|
|
|
|
}
|
2018-06-24 13:11:13 +03:00
|
|
|
store.write(rows?);
|
2018-06-23 16:17:04 +03:00
|
|
|
}
|
2018-06-25 22:16:46 +03:00
|
|
|
store.compact_if_needed();
|
2018-06-23 16:17:04 +03:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
if let Err(e) = run(Config::from_args()) {
|
2018-06-25 22:16:22 +03:00
|
|
|
error!("{}", e.display_chain());
|
2018-06-23 16:17:04 +03:00
|
|
|
}
|
|
|
|
}
|