|
@@ -18,6 +18,7 @@ use troll_patrol::{
|
|
|
use clap::Parser;
|
|
|
use lox_cli::{networking::*, *};
|
|
|
use lox_library::proto::{level_up::LEVEL_INTERVAL, trust_promotion::UNTRUSTED_INTERVAL};
|
|
|
+use memory_stats::memory_stats;
|
|
|
use rand::{prelude::SliceRandom, Rng};
|
|
|
use serde::Deserialize;
|
|
|
use std::{
|
|
@@ -223,9 +224,33 @@ pub async fn main() {
|
|
|
let mut true_neg = 0;
|
|
|
let mut true_pos = 0;
|
|
|
|
|
|
+ // Track memory use during simulation
|
|
|
+ let mut max_physical_mem = 0;
|
|
|
+ let mut max_virtual_mem = 0;
|
|
|
+
|
|
|
// Main loop
|
|
|
for day in 1..=config.num_days {
|
|
|
println!("Starting day {} of the simulation", day);
|
|
|
+ println!(
|
|
|
+ "We have {} users and {} bridges",
|
|
|
+ users.len(),
|
|
|
+ bridges.len()
|
|
|
+ );
|
|
|
+ println!(
|
|
|
+ "The censor has learned {} bridges",
|
|
|
+ censor.known_bridges.len()
|
|
|
+ );
|
|
|
+
|
|
|
+ if let Some(usage) = memory_stats() {
|
|
|
+ if usage.physical_mem > max_physical_mem {
|
|
|
+ max_physical_mem = usage.physical_mem;
|
|
|
+ }
|
|
|
+ if usage.virtual_mem > max_virtual_mem {
|
|
|
+ max_virtual_mem = usage.virtual_mem;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ println!("Failed to get the current memory usage");
|
|
|
+ }
|
|
|
|
|
|
// USER TASKS
|
|
|
|
|
@@ -305,7 +330,6 @@ pub async fn main() {
|
|
|
let new_blockages: HashMap<String, HashSet<String>> =
|
|
|
serde_json::from_slice(&new_blockages_resp).unwrap();
|
|
|
|
|
|
- // TODO: Track more stats about new blockages
|
|
|
// Since we have only one censor, just convert to a set of bridges
|
|
|
let mut blocked_bridges = HashSet::<[u8; 20]>::new();
|
|
|
for (bridge, ccs) in new_blockages {
|
|
@@ -356,11 +380,30 @@ pub async fn main() {
|
|
|
increment_simulated_date();
|
|
|
}
|
|
|
|
|
|
+ // Print various information about the simulation run
|
|
|
+ println!(
|
|
|
+ "\nSimulation ended with {} users and {} bridges",
|
|
|
+ users.len(),
|
|
|
+ bridges.len()
|
|
|
+ );
|
|
|
+ println!("The censor learned {} bridges", censor.known_bridges.len());
|
|
|
+
|
|
|
+ println!(
|
|
|
+ "\nMaximum physical memory usage during simulation: {}",
|
|
|
+ max_physical_mem
|
|
|
+ );
|
|
|
+ println!(
|
|
|
+ "Maximum virtual memory usage during simulation: {}\n",
|
|
|
+ max_virtual_mem
|
|
|
+ );
|
|
|
+
|
|
|
println!("True Positives: {}", true_pos);
|
|
|
println!("True Negatives: {}", true_neg);
|
|
|
println!("False Positives: {}", false_pos);
|
|
|
println!("False Negatives: {}", false_neg);
|
|
|
|
|
|
+ println!("\nFull stats per bridge:");
|
|
|
+
|
|
|
println!(
|
|
|
"Fingerprint,first_distributed,first_blocked,first_detected_blocked,first_positive_report"
|
|
|
);
|