mirror of
https://github.com/romanz/electrs.git
synced 2025-02-25 07:17:41 +01:00
Move configuration into a separate module
This commit is contained in:
parent
98d1dabfff
commit
7d9cbc74f1
3 changed files with 96 additions and 94 deletions
95
src/app.rs
95
src/app.rs
|
@ -1,86 +1,15 @@
|
||||||
use argparse::{ArgumentParser, Store, StoreTrue};
|
|
||||||
use chan;
|
use chan;
|
||||||
use chan_signal;
|
use chan_signal;
|
||||||
use error_chain::ChainedError;
|
use error_chain::ChainedError;
|
||||||
use simplelog::LevelFilter;
|
|
||||||
use std::fs::OpenOptions;
|
|
||||||
use std::net::SocketAddr;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use daemon::Network;
|
use config::Config;
|
||||||
use {daemon, index, query, rpc, store};
|
use {daemon, index, query, rpc, store};
|
||||||
|
|
||||||
use errors::*;
|
use errors::*;
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Config {
|
|
||||||
log_file: String,
|
|
||||||
log_level: LevelFilter,
|
|
||||||
restart: bool,
|
|
||||||
network_type: Network, // bitcoind JSONRPC endpoint
|
|
||||||
db_path: &'static str, // RocksDB directory path
|
|
||||||
rpc_addr: SocketAddr, // for serving Electrum clients
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Config {
|
|
||||||
pub fn from_args() -> Config {
|
|
||||||
let mut testnet = false;
|
|
||||||
let mut verbose = false;
|
|
||||||
let mut restart = false;
|
|
||||||
let mut log_file = "".to_string();
|
|
||||||
{
|
|
||||||
let mut parser = ArgumentParser::new();
|
|
||||||
parser.set_description("Bitcoin indexing server.");
|
|
||||||
parser.refer(&mut testnet).add_option(
|
|
||||||
&["--testnet"],
|
|
||||||
StoreTrue,
|
|
||||||
"Connect to a testnet bitcoind instance",
|
|
||||||
);
|
|
||||||
parser.refer(&mut verbose).add_option(
|
|
||||||
&["-v", "--verbose"],
|
|
||||||
StoreTrue,
|
|
||||||
"More verbose logging to stderr",
|
|
||||||
);
|
|
||||||
parser.refer(&mut restart).add_option(
|
|
||||||
&["--restart"],
|
|
||||||
StoreTrue,
|
|
||||||
"Restart the server in case of a recoverable error",
|
|
||||||
);
|
|
||||||
parser.refer(&mut log_file).add_option(
|
|
||||||
&["-l", "--log-file"],
|
|
||||||
Store,
|
|
||||||
"Write the log into specified file",
|
|
||||||
);
|
|
||||||
parser.parse_args_or_exit();
|
|
||||||
}
|
|
||||||
let network_type = match testnet {
|
|
||||||
false => Network::Mainnet,
|
|
||||||
true => Network::Testnet,
|
|
||||||
};
|
|
||||||
Config {
|
|
||||||
log_file,
|
|
||||||
log_level: if verbose {
|
|
||||||
LevelFilter::Debug
|
|
||||||
} else {
|
|
||||||
LevelFilter::Info
|
|
||||||
},
|
|
||||||
restart,
|
|
||||||
network_type,
|
|
||||||
db_path: match network_type {
|
|
||||||
Network::Mainnet => "./db/mainnet",
|
|
||||||
Network::Testnet => "./db/testnet",
|
|
||||||
},
|
|
||||||
rpc_addr: match network_type {
|
|
||||||
Network::Mainnet => "127.0.0.1:50001",
|
|
||||||
Network::Testnet => "127.0.0.1:60001",
|
|
||||||
}.parse()
|
|
||||||
.unwrap(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
store: store::DBStore,
|
store: store::DBStore,
|
||||||
index: index::Index,
|
index: index::Index,
|
||||||
|
@ -161,27 +90,6 @@ fn run_server(config: &Config) -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_logging(config: &Config) {
|
|
||||||
use simplelog::*;
|
|
||||||
let mut cfg = Config::default();
|
|
||||||
cfg.time_format = Some("%F %H:%M:%S%.3f");
|
|
||||||
let mut loggers = Vec::<Box<SharedLogger>>::new();
|
|
||||||
loggers.push(TermLogger::new(config.log_level, cfg.clone()).unwrap());
|
|
||||||
if !config.log_file.is_empty() {
|
|
||||||
loggers.push(WriteLogger::new(
|
|
||||||
LevelFilter::Debug,
|
|
||||||
cfg.clone(),
|
|
||||||
OpenOptions::new()
|
|
||||||
.create(true)
|
|
||||||
.append(true)
|
|
||||||
.open(&config.log_file)
|
|
||||||
.unwrap(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
CombinedLogger::init(loggers).unwrap();
|
|
||||||
info!("config: {:?}", config);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Repeat {
|
struct Repeat {
|
||||||
do_restart: bool,
|
do_restart: bool,
|
||||||
iter_count: usize,
|
iter_count: usize,
|
||||||
|
@ -215,7 +123,6 @@ impl Iterator for Repeat {
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let config = Config::from_args();
|
let config = Config::from_args();
|
||||||
setup_logging(&config);
|
|
||||||
for _ in Repeat::new(&config) {
|
for _ in Repeat::new(&config) {
|
||||||
match run_server(&config) {
|
match run_server(&config) {
|
||||||
Ok(_) => break,
|
Ok(_) => break,
|
||||||
|
|
94
src/config.rs
Normal file
94
src/config.rs
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
use argparse::{ArgumentParser, Store, StoreTrue};
|
||||||
|
use daemon::Network;
|
||||||
|
use simplelog;
|
||||||
|
use std::fs::OpenOptions;
|
||||||
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Config {
|
||||||
|
pub log_file: String,
|
||||||
|
pub log_level: simplelog::LevelFilter,
|
||||||
|
pub restart: bool,
|
||||||
|
pub network_type: Network, // bitcoind JSONRPC endpoint
|
||||||
|
pub db_path: &'static str, // RocksDB directory path
|
||||||
|
pub rpc_addr: SocketAddr, // for serving Electrum clients
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn from_args() -> Config {
|
||||||
|
let mut testnet = false;
|
||||||
|
let mut verbose = false;
|
||||||
|
let mut restart = false;
|
||||||
|
let mut log_file = "".to_string();
|
||||||
|
{
|
||||||
|
let mut parser = ArgumentParser::new();
|
||||||
|
parser.set_description("Bitcoin indexing server.");
|
||||||
|
parser.refer(&mut testnet).add_option(
|
||||||
|
&["--testnet"],
|
||||||
|
StoreTrue,
|
||||||
|
"Connect to a testnet bitcoind instance",
|
||||||
|
);
|
||||||
|
parser.refer(&mut verbose).add_option(
|
||||||
|
&["-v", "--verbose"],
|
||||||
|
StoreTrue,
|
||||||
|
"More verbose logging to stderr",
|
||||||
|
);
|
||||||
|
parser.refer(&mut restart).add_option(
|
||||||
|
&["--restart"],
|
||||||
|
StoreTrue,
|
||||||
|
"Restart the server in case of a recoverable error",
|
||||||
|
);
|
||||||
|
parser.refer(&mut log_file).add_option(
|
||||||
|
&["-l", "--log-file"],
|
||||||
|
Store,
|
||||||
|
"Write the log into specified file",
|
||||||
|
);
|
||||||
|
parser.parse_args_or_exit();
|
||||||
|
}
|
||||||
|
let network_type = match testnet {
|
||||||
|
false => Network::Mainnet,
|
||||||
|
true => Network::Testnet,
|
||||||
|
};
|
||||||
|
let config = Config {
|
||||||
|
log_file,
|
||||||
|
log_level: if verbose {
|
||||||
|
simplelog::LevelFilter::Debug
|
||||||
|
} else {
|
||||||
|
simplelog::LevelFilter::Info
|
||||||
|
},
|
||||||
|
restart,
|
||||||
|
network_type,
|
||||||
|
db_path: match network_type {
|
||||||
|
Network::Mainnet => "./db/mainnet",
|
||||||
|
Network::Testnet => "./db/testnet",
|
||||||
|
},
|
||||||
|
rpc_addr: match network_type {
|
||||||
|
Network::Mainnet => "127.0.0.1:50001",
|
||||||
|
Network::Testnet => "127.0.0.1:60001",
|
||||||
|
}.parse()
|
||||||
|
.unwrap(),
|
||||||
|
};
|
||||||
|
setup_logging(&config);
|
||||||
|
config
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup_logging(config: &Config) {
|
||||||
|
let mut cfg = simplelog::Config::default();
|
||||||
|
cfg.time_format = Some("%F %H:%M:%S%.3f");
|
||||||
|
let mut loggers = Vec::<Box<simplelog::SharedLogger>>::new();
|
||||||
|
loggers.push(simplelog::TermLogger::new(config.log_level, cfg.clone()).unwrap());
|
||||||
|
if !config.log_file.is_empty() {
|
||||||
|
loggers.push(simplelog::WriteLogger::new(
|
||||||
|
simplelog::LevelFilter::Debug,
|
||||||
|
cfg.clone(),
|
||||||
|
OpenOptions::new()
|
||||||
|
.create(true)
|
||||||
|
.append(true)
|
||||||
|
.open(&config.log_file)
|
||||||
|
.unwrap(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
simplelog::CombinedLogger::init(loggers).unwrap();
|
||||||
|
info!("config: {:?}", config);
|
||||||
|
}
|
|
@ -26,6 +26,7 @@ extern crate serde_derive;
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
|
|
||||||
pub mod app;
|
pub mod app;
|
||||||
|
mod config;
|
||||||
mod daemon;
|
mod daemon;
|
||||||
mod errors;
|
mod errors;
|
||||||
mod index;
|
mod index;
|
||||||
|
|
Loading…
Add table
Reference in a new issue