HeaderCount(u64),
NewConnection,
ConnectionClosed,
+ V4RoutingTableSize(usize),
+ V6RoutingTableSize(usize),
}
struct Stats {
lines: LinkedList<String>,
header_count: u64,
connection_count: u64,
+ v4_table_size: usize,
+ v6_table_size: usize,
}
pub struct Printer {
lines: LinkedList::new(),
header_count: 0,
connection_count: 0,
+ v4_table_size: 0,
+ v6_table_size: 0,
}));
let thread_arc = Arc::clone(&stats);
std::thread::spawn(move || {
for i in 0..AddressState::get_count() {
let scan_secs = store.get_u64(U64Setting::RescanInterval(AddressState::from_num(i).unwrap()));
out.write_all(format!(
- "{:22} ({:2}): {:5} (ie {} min, {} hrs)\n", AddressState::from_num(i).unwrap().to_str(), i,
- scan_secs, scan_secs / 60, scan_secs / 60 / 60,
+ "{:22} ({:2}): {:5} (ie {} hrs, {} min)\n", AddressState::from_num(i).unwrap().to_str(), i,
+ scan_secs, scan_secs / 60 / 60, (scan_secs / 60) % 60,
).as_bytes()).expect("stdout broken?");
}
+ out.write_all(format!(
+ "\nBGP Routing Table: {} v4 paths, {} v6 paths\n",
+ stats.v4_table_size, stats.v6_table_size).as_bytes()).expect("stdout broken?");
+
out.write_all(b"\nCommands:\n").expect("stdout broken?");
out.write_all(b"q: quit\n").expect("stdout broken?");
out.write_all(format!(
store.get_u64(U64Setting::WasGoodTimeout)
).as_bytes()).expect("stdout broken?");
out.write_all(b"a x: Scan node x\n").expect("stdout broken?");
+ out.write_all(b"b x: BGP Lookup IP x\n").expect("stdout broken?");
out.write_all(b"\x1b[s").expect("stdout broken?"); // Save cursor position and provide a blank line before cursor
out.write_all(b"\x1b[;H\x1b[2K").expect("stdout broken?");
out.write_all(b"Most recent log:\n").expect("stdout broken?");
} else {
stats.lines.push_back(line);
}
- if stats.lines.len() > 50 {
+ if stats.lines.len() > 75 {
stats.lines.pop_front();
}
}
Stat::HeaderCount(c) => self.stats.lock().unwrap().header_count = c,
Stat::NewConnection => self.stats.lock().unwrap().connection_count += 1,
Stat::ConnectionClosed => self.stats.lock().unwrap().connection_count -= 1,
+ Stat::V4RoutingTableSize(c) => self.stats.lock().unwrap().v4_table_size = c,
+ Stat::V6RoutingTableSize(c) => self.stats.lock().unwrap().v6_table_size = c,
}
}
}