(
results: &[CheckResult],
history: &HashMap<String, TrackerHistory>,
input_file: &str,
output_file: &str,
)
| 591 | } |
| 592 | |
| 593 | fn generate_github_pages( |
| 594 | results: &[CheckResult], |
| 595 | history: &HashMap<String, TrackerHistory>, |
| 596 | input_file: &str, |
| 597 | output_file: &str, |
| 598 | ) -> Result<(), String> { |
| 599 | fs::create_dir_all("docs/public-stats") |
| 600 | .map_err(|e| format!("Failed to create docs directory: {}", e))?; |
| 601 | |
| 602 | let total = results.len(); |
| 603 | let alive = results.iter().filter(|r| r.status == Status::Alive).count(); |
| 604 | let dead = results.iter().filter(|r| r.status == Status::Dead).count(); |
| 605 | let invalid = results.iter().filter(|r| r.status == Status::Invalid).count(); |
| 606 | |
| 607 | let mut http_count = 0usize; |
| 608 | let mut https_count = 0usize; |
| 609 | let mut udp_count = 0usize; |
| 610 | let mut wss_count = 0usize; |
| 611 | |
| 612 | for r in results { |
| 613 | match tracker_protocol(&r.url) { |
| 614 | "http" => http_count += 1, |
| 615 | "https" => https_count += 1, |
| 616 | "udp" => udp_count += 1, |
| 617 | "wss" => wss_count += 1, |
| 618 | _ => {} |
| 619 | } |
| 620 | } |
| 621 | |
| 622 | let uptime_pct = if total == 0 { |
| 623 | 0.0 |
| 624 | } else { |
| 625 | (alive as f64) * 100.0 / (total as f64) |
| 626 | }; |
| 627 | |
| 628 | // let ts = SystemTime::now() |
| 629 | // .duration_since(UNIX_EPOCH) |
| 630 | // .map(|d| d.as_secs()) |
| 631 | // .unwrap_or(0); |
| 632 | |
| 633 | let alive_list = sort_and_dedupe( |
| 634 | results |
| 635 | .iter() |
| 636 | .filter(|r| r.status == Status::Alive) |
| 637 | .map(|r| r.url.clone()) |
| 638 | .collect(), |
| 639 | ); |
| 640 | |
| 641 | let alive_http = sort_and_dedupe( |
| 642 | results |
| 643 | .iter() |
| 644 | .filter(|r| r.status == Status::Alive) |
| 645 | .filter(|r| tracker_protocol(&r.url) == "http") |
| 646 | .map(|r| r.url.clone()) |
| 647 | .collect(), |
| 648 | ); |
| 649 | let alive_https = sort_and_dedupe( |
| 650 | results |
no test coverage detected