123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- use crate::types::*;
- #[derive(Debug, Clone, Copy, Default)]
- pub struct CurrentStats {
- pub dirty: bool,
- pub min_tot_nodes: NodeCount,
- pub min_tot_nodes_quorum: RegionCount,
- pub max_tot_nodes: NodeCount,
- pub max_tot_nodes_quorum: RegionCount,
- pub min_tot_honest: NodeCount,
- pub min_tot_honest_quorum: RegionCount,
- pub max_tot_honest: NodeCount,
- pub max_tot_honest_quorum: RegionCount,
- pub min_tot_malicious: NodeCount,
- pub min_tot_malicious_quorum: RegionCount,
- pub max_tot_malicious: NodeCount,
- pub max_tot_malicious_quorum: RegionCount,
- pub min_tot_last_join: TimeCount,
- pub min_tot_last_join_quorum: RegionCount,
- pub max_tot_last_join: TimeCount,
- pub max_tot_last_join_quorum: RegionCount,
- pub min_b_0: f64,
- pub min_b_0_quorum: RegionCount,
- pub max_b_0: f64,
- pub max_b_0_quorum: RegionCount,
- }
- impl CurrentStats {
- pub fn update(&mut self, i: RegionCount, q: &Quorum, force: bool) -> bool {
- let mut below_bmax: bool = true;
- if self.dirty == false && (
- self.min_tot_nodes_quorum == i ||
- self.max_tot_nodes_quorum == i ||
- self.min_tot_honest_quorum == i ||
- self.max_tot_honest_quorum == i ||
- self.min_tot_malicious_quorum == i ||
- self.max_tot_malicious_quorum == i ||
- self.min_tot_last_join_quorum == i ||
- self.max_tot_last_join_quorum == i ||
- self.min_b_0_quorum == i ||
- self.max_b_0_quorum == i) {
- self.dirty = true;
- }
- let nodes = q.tot_honest + q.tot_malicious;
- if force || nodes < self.min_tot_nodes {
- self.min_tot_nodes = nodes;
- self.min_tot_nodes_quorum = i;
- }
- if force || nodes > self.max_tot_nodes {
- self.max_tot_nodes = nodes;
- self.max_tot_nodes_quorum = i;
- }
- if force || q.tot_honest < self.min_tot_honest {
- self.min_tot_honest = q.tot_honest;
- self.min_tot_honest_quorum = i;
- }
- if force || q.tot_honest > self.max_tot_honest {
- self.max_tot_honest = q.tot_honest;
- self.max_tot_honest_quorum = i;
- }
- if force || q.tot_malicious < self.min_tot_malicious {
- self.min_tot_malicious = q.tot_malicious;
- self.min_tot_malicious_quorum = i;
- }
- if force || q.tot_malicious > self.max_tot_malicious {
- self.max_tot_malicious = q.tot_malicious;
- self.max_tot_malicious_quorum = i;
- }
- if force || q.tot_last_join < self.min_tot_last_join {
- self.min_tot_last_join = q.tot_last_join;
- self.min_tot_last_join_quorum = i;
- }
- if force || q.tot_last_join > self.max_tot_last_join {
- self.max_tot_last_join = q.tot_last_join;
- self.max_tot_last_join_quorum = i;
- }
- let b_0 : f64 = (q.tot_malicious as f64) / (q.tot_honest as f64 + q.tot_malicious as f64);
- if force || (b_0 < self.min_b_0 && q.tot_malicious != 0) {
- self.min_b_0 = b_0;
- self.min_b_0_quorum = i;
- }
- if force || b_0 > self.max_b_0 {
- self.max_b_0 = b_0;
- self.max_b_0_quorum = i;
- if b_0 > 0.25 {
- below_bmax = false;
- }
- }
- below_bmax
- }
- #[allow(dead_code)]
- pub fn print(&self) {
- print!("nodes {} ({}) {} ({}) ", self.min_tot_nodes, self.min_tot_nodes_quorum, self.max_tot_nodes, self.max_tot_nodes_quorum);
- print!("honest {} ({}) {} ({}) ", self.min_tot_honest, self.min_tot_honest_quorum, self.max_tot_honest, self.max_tot_honest_quorum);
- print!("malicious {} ({}) {} ({}) ", self.min_tot_malicious, self.min_tot_malicious_quorum, self.max_tot_malicious, self.max_tot_malicious_quorum);
- print!("lastjoin {} ({}) {} ({}) ", self.min_tot_last_join, self.min_tot_last_join_quorum, self.max_tot_last_join, self.max_tot_last_join_quorum);
- println!("b_0 {} ({}) {} ({})", self.min_b_0, self.min_b_0_quorum, self.max_b_0, self.max_b_0_quorum);
- }
- }
- #[derive(Debug, Clone, Copy, Default)]
- pub struct CumulativeStats {
- pub max_tot_honest: NodeCount,
- pub min_tot_honest: NodeCount,
- pub min_tot_malicious: NodeCount,
- pub max_tot_malicious: NodeCount,
- pub min_tot_nodes: NodeCount,
- pub max_tot_nodes: NodeCount,
- pub min_age: TimeCount,
- pub max_age: TimeCount,
- pub min_b_0: f64,
- pub max_b_0: f64,
- }
- impl CumulativeStats {
- #[allow(dead_code)]
- pub fn print(&self) {
- println!("Total nodes: min {} max {}, honest: min {} max {}, malicious: min {} max {}, b_0: min {} max {}",
- self.min_tot_nodes, self.max_tot_nodes,
- self.min_tot_honest, self.max_tot_honest,
- self.min_tot_malicious, self.max_tot_malicious,
- self.min_b_0, self.max_b_0);
- }
- }
|