#![doc(
html_logo_url = "https://raw.githubusercontent.com/bgpkit/assets/main/logos/icon-transparent.png",
html_favicon_url = "https://raw.githubusercontent.com/bgpkit/assets/main/logos/favicon.ico"
)]
use crate::as2rel::As2relBgpkit;
use crate::asinfo::AsInfoUtils;
use crate::bogons::Bogons;
use crate::countries::Countries;
use crate::mrt_collectors::{MrtCollector, MrtCollectorPeer};
use crate::rpki::RpkiTrie;
use anyhow::Result;
use chrono::NaiveDate;
pub mod as2rel;
pub mod asinfo;
pub mod bogons;
pub mod countries;
pub mod mrt_collectors;
pub mod rpki;
#[derive(Default)]
pub struct BgpkitCommons {
countries: Option<Countries>,
rpki_trie: Option<RpkiTrie>,
mrt_collectors: Option<Vec<MrtCollector>>,
mrt_collector_peers: Option<Vec<MrtCollectorPeer>>,
bogons: Option<Bogons>,
asinfo: Option<AsInfoUtils>,
as2rel: Option<As2relBgpkit>,
}
impl BgpkitCommons {
pub fn new() -> Self {
Self::default()
}
pub fn reload(&mut self) -> Result<()> {
if self.countries.is_some() {
self.load_countries()?;
}
if let Some(rpki) = self.rpki_trie.as_mut() {
rpki.reload()?;
}
if self.mrt_collectors.is_some() {
self.load_mrt_collectors()?;
}
if self.mrt_collector_peers.is_some() {
self.load_mrt_collector_peers()?;
}
if self.bogons.is_some() {
self.load_bogons()?;
}
if let Some(asinfo) = self.asinfo.as_mut() {
asinfo.reload()?;
}
if self.as2rel.is_some() {
self.load_as2rel()?;
}
Ok(())
}
pub fn load_countries(&mut self) -> Result<()> {
self.countries = Some(Countries::new()?);
Ok(())
}
pub fn load_rpki(&mut self, date_opt: Option<NaiveDate>) -> Result<()> {
if let Some(date) = date_opt {
self.rpki_trie = Some(RpkiTrie::from_ripe_historical(date)?);
} else {
self.rpki_trie = Some(RpkiTrie::from_cloudflare()?);
}
Ok(())
}
pub fn load_mrt_collectors(&mut self) -> Result<()> {
self.mrt_collectors = Some(mrt_collectors::get_all_collectors()?);
Ok(())
}
pub fn load_mrt_collector_peers(&mut self) -> Result<()> {
self.mrt_collector_peers = Some(mrt_collectors::get_mrt_collector_peers()?);
Ok(())
}
pub fn load_bogons(&mut self) -> Result<()> {
self.bogons = Some(Bogons::new()?);
Ok(())
}
pub fn load_asinfo(
&mut self,
load_as2org: bool,
load_population: bool,
load_hegemony: bool,
load_peeringdb: bool,
) -> Result<()> {
self.asinfo = Some(AsInfoUtils::new(
load_as2org,
load_population,
load_hegemony,
load_peeringdb,
)?);
Ok(())
}
pub fn load_asinfo_cached(&mut self) -> Result<()> {
self.asinfo = Some(AsInfoUtils::new_from_cached()?);
Ok(())
}
pub fn load_as2rel(&mut self) -> Result<()> {
self.as2rel = Some(As2relBgpkit::new()?);
Ok(())
}
}