Skip to content

Commit 2ffc6d1

Browse files
committed
rework check to delete temp files, add output options, testing
1 parent 0840f2c commit 2ffc6d1

File tree

3 files changed

+38
-17
lines changed

3 files changed

+38
-17
lines changed

src/bin/grin.rs

+13-7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ extern crate clap;
2121
extern crate log;
2222
use crate::config::config::SERVER_CONFIG_FILE_NAME;
2323
use crate::core::global;
24+
use crate::tools::check_seeds;
2425
use crate::util::init_logger;
2526
use clap::App;
2627
use futures::channel::oneshot;
@@ -32,6 +33,8 @@ use grin_p2p as p2p;
3233
use grin_servers as servers;
3334
use grin_util as util;
3435
use grin_util::logger::LogEntry;
36+
use std::fs::File;
37+
use std::io::Write;
3538
use std::sync::mpsc;
3639

3740
#[macro_use]
@@ -205,13 +208,16 @@ fn real_main() -> i32 {
205208
// seedcheck command
206209
("seedcheck", Some(seedcheck_args)) => {
207210
let is_testnet = seedcheck_args.is_present("testnet");
208-
let results = tools::check_seeds(is_testnet);
209-
println!(
210-
"Generating seed check report, testnet={}. (This make take a few minutes)",
211-
is_testnet
212-
);
213-
for result in results {
214-
println!("{}", serde_json::to_string_pretty(&result).unwrap());
211+
let results = check_seeds(is_testnet);
212+
let output =
213+
serde_json::to_string_pretty(&results).expect("Unable to serialize results");
214+
215+
if let Some(output_file) = seedcheck_args.value_of("output") {
216+
let mut file = File::create(output_file).expect("Unable to create file");
217+
writeln!(file, "{}", output).expect("Unable to write data");
218+
println!("Results written to {}", output_file);
219+
} else {
220+
println!("{}", output);
215221
}
216222
0
217223
}

src/bin/grin.yml

+4
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,7 @@ subcommands:
9999
help: Run seed check against Testnet (as opposed to Mainnet)
100100
long: testnet
101101
takes_value: false
102+
- output:
103+
help: Output file to write the results to
104+
long: output
105+
takes_value: true

src/bin/tools/seedcheck.rs

+21-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use grin_core::pow::Difficulty;
2020
use grin_core::{genesis, global};
2121
use grin_p2p as p2p;
2222
use grin_servers::{resolve_dns_to_addrs, MAINNET_DNS_SEEDS, TESTNET_DNS_SEEDS};
23+
use std::fs;
2324
use std::net::{SocketAddr, TcpStream};
2425
use std::time::Duration;
2526

@@ -100,6 +101,14 @@ pub fn check_seeds(is_testnet: bool) -> Vec<SeedCheckResult> {
100101
global::set_local_chain_type(global::ChainTypes::Testnet);
101102
}
102103

104+
let config = p2p::types::P2PConfig::default();
105+
let adapter = Arc::new(p2p::DummyAdapter {});
106+
let peers = Arc::new(p2p::Peers::new(
107+
p2p::store::PeerStore::new(".__grintmp__/peer_store_root").unwrap(),
108+
adapter,
109+
config.clone(),
110+
));
111+
103112
for s in default_seeds.iter() {
104113
info!("Checking seed health for {}", s);
105114
let mut seed_result = SeedCheckResult::default();
@@ -113,7 +122,7 @@ pub fn check_seeds(is_testnet: bool) -> Vec<SeedCheckResult> {
113122
seed_result.dns_resolutions_found = true;
114123
// Check backwards, last contains the latest (at least on my machine!)
115124
for r in resolved_dns_entries.iter().rev() {
116-
let res = check_seed_health(*r, is_testnet);
125+
let res = check_seed_health(*r, is_testnet, &peers);
117126
if let Ok(p) = res {
118127
info!(
119128
"SUCCESS - Performed Handshake with seed for {} at {}. {} - {:?}",
@@ -150,18 +159,20 @@ pub fn check_seeds(is_testnet: bool) -> Vec<SeedCheckResult> {
150159

151160
result.push(seed_result);
152161
}
162+
163+
// Clean up temporary files
164+
fs::remove_dir_all(".__grintmp__").expect("Unable to delete temporary files");
165+
153166
result
154167
}
155168

156-
fn check_seed_health(addr: p2p::PeerAddr, is_testnet: bool) -> Result<p2p::Peer, SeedCheckError> {
157-
let capabilities = p2p::types::Capabilities::default();
169+
fn check_seed_health(
170+
addr: p2p::PeerAddr,
171+
is_testnet: bool,
172+
peers: &Arc<p2p::Peers>,
173+
) -> Result<p2p::Peer, SeedCheckError> {
158174
let config = p2p::types::P2PConfig::default();
159-
let adapter = Arc::new(p2p::DummyAdapter {});
160-
let peers = Arc::new(p2p::Peers::new(
161-
p2p::store::PeerStore::new("peer_store_root")?,
162-
adapter,
163-
config.clone(),
164-
));
175+
let capabilities = p2p::types::Capabilities::default();
165176
let genesis_hash = match is_testnet {
166177
true => genesis::genesis_test().hash(),
167178
false => genesis::genesis_main().hash(),
@@ -180,7 +191,7 @@ fn check_seed_health(addr: p2p::PeerAddr, is_testnet: bool) -> Result<p2p::Peer,
180191
total_diff,
181192
p2p::PeerAddr(addr),
182193
&handshake,
183-
peers,
194+
peers.clone(),
184195
)?;
185196
Ok(peer)
186197
}

0 commit comments

Comments
 (0)