use crate::Result;
use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
const COLLECTOR_PEERS_URL: &str = "https://api.bgpkit.com/v3/peers/list";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MrtCollectorPeersData {
pub count: u32,
pub data: Vec<MrtCollectorPeer>,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct MrtCollectorPeer {
pub date: NaiveDate,
pub ip: IpAddr,
pub asn: u32,
pub collector: String,
pub num_v4_pfxs: u32,
pub num_v6_pfxs: u32,
pub num_connected_asns: u32,
}
impl MrtCollectorPeer {
pub fn is_full_feed_v4(&self) -> bool {
self.num_v4_pfxs >= 700_000
}
pub fn is_full_feed_v6(&self) -> bool {
self.num_v6_pfxs >= 100_000
}
pub fn is_full_feed(&self) -> bool {
self.is_full_feed_v4() || self.is_full_feed_v6()
}
}
pub fn get_mrt_collector_peers() -> Result<Vec<MrtCollectorPeer>> {
let peers: MrtCollectorPeersData = oneio::read_json_struct(COLLECTOR_PEERS_URL)?;
Ok(peers.data)
}