Expand description
§Overview
bgpkit-broker is a package that allows accessing the BGPKIT Broker API and search for BGP archive files with different search parameters available.
§Examples
§Basic Usage with Iterator
The recommended usage to collect BrokerItems is to use the built-in iterator. The BrokerItemIterator handles making API queries so that it can continuously stream new items until it reaches the end of items. This is useful for simply getting all matching items without need to worry about pagination.
use bgpkit_broker::{BgpkitBroker, BrokerItem};
let broker = BgpkitBroker::new()
.ts_start("2022-01-01")
.ts_end("2022-01-02")
.collector_id("route-views2");
// Iterate by reference (reusable broker)
for item in &broker {
println!("BGP file: {} from {} ({})",
item.url, item.collector_id, item.data_type);
}
// Or collect into vector
let items: Vec<BrokerItem> = broker.into_iter().collect();
println!("Found {} BGP archive files", items.len());§Practical BGP Data Analysis with Shortcuts
The SDK provides convenient shortcuts for common BGP data analysis patterns:
§Daily RIB Analysis Across Diverse Collectors
use bgpkit_broker::BgpkitBroker;
// Find the most diverse collectors for comprehensive analysis
let broker = BgpkitBroker::new()
.ts_start("2024-01-01")
.ts_end("2024-01-31");
let diverse_collectors = broker.most_diverse_collectors(5, None).unwrap();
println!("Selected {} diverse collectors: {:?}",
diverse_collectors.len(), diverse_collectors);
// Get daily RIB snapshots from these collectors
let daily_ribs = broker
.clone()
.collector_id(&diverse_collectors.join(","))
.daily_ribs().unwrap();
println!("Found {} daily RIB snapshots for analysis", daily_ribs.len());
for rib in daily_ribs.iter().take(3) {
println!("Daily snapshot: {} from {} at {}",
rib.collector_id,
rib.ts_start.format("%Y-%m-%d"),
rib.url);
}§Recent BGP Updates Monitoring
use bgpkit_broker::BgpkitBroker;
// Monitor recent BGP updates from multiple collectors
let recent_updates = BgpkitBroker::new()
.collector_id("route-views2,rrc00,route-views6")
.recent_updates(6).unwrap(); // last 6 hours
println!("Found {} recent BGP update files", recent_updates.len());
for update in recent_updates.iter().take(5) {
println!("Update: {} from {} at {}",
update.collector_id,
update.ts_start.format("%Y-%m-%d %H:%M:%S"),
update.url);
}§Project-specific Analysis
use bgpkit_broker::BgpkitBroker;
// Compare RouteViews vs RIPE RIS daily snapshots
let routeviews_ribs = BgpkitBroker::new()
.ts_start("2024-01-01")
.ts_end("2024-01-07")
.project("routeviews")
.daily_ribs().unwrap();
let ripe_ribs = BgpkitBroker::new()
.ts_start("2024-01-01")
.ts_end("2024-01-07")
.project("riperis")
.daily_ribs().unwrap();
println!("RouteViews daily RIBs: {}", routeviews_ribs.len());
println!("RIPE RIS daily RIBs: {}", ripe_ribs.len());§Advanced Collector Selection
use bgpkit_broker::BgpkitBroker;
let broker = BgpkitBroker::new();
// Get diverse RouteViews collectors for focused analysis
let rv_collectors = broker.most_diverse_collectors(3, Some("routeviews")).unwrap();
println!("Diverse RouteViews collectors: {:?}", rv_collectors);
// Use them to get comprehensive recent updates
let comprehensive_updates = broker
.clone()
.collector_id(&rv_collectors.join(","))
.recent_updates(12).unwrap(); // last 12 hours
println!("Got {} updates from {} collectors",
comprehensive_updates.len(), rv_collectors.len());§Routing Table Snapshot Reconstruction
use bgpkit_broker::BgpkitBroker;
// Get the MRT files needed to construct a routing table snapshot
let broker = BgpkitBroker::new();
let snapshots = broker.get_snapshot_files(
&["route-views2", "rrc00"],
"2024-01-01T12:00:00Z"
).unwrap();
for snapshot in snapshots {
println!("Collector: {}", snapshot.collector_id);
println!("RIB dump: {}", snapshot.rib_url);
println!("Updates to apply: {}", snapshot.updates_urls.len());
// Use with bgpkit-parser to reconstruct routing table:
// 1. Parse RIB dump for initial state
// 2. Apply updates in order to reach target timestamp
}§Manual Page Queries
For fine-grained control over pagination or custom iteration patterns:
use bgpkit_broker::BgpkitBroker;
let mut broker = BgpkitBroker::new()
.ts_start("2022-01-01")
.ts_end("2022-01-02")
.page(1)
.page_size(50);
// Query specific page
let page1_items = broker.query_single_page().unwrap();
println!("Page 1: {} items", page1_items.len());
// Move to next page
broker.turn_page(2);
let page2_items = broker.query_single_page().unwrap();
println!("Page 2: {} items", page2_items.len());§Getting Latest Files and Peer Information
Access the most recent data and peer information:
use bgpkit_broker::BgpkitBroker;
// Get latest files from all collectors
let broker = BgpkitBroker::new();
let latest_files = broker.latest().unwrap();
println!("Latest files from {} collectors", latest_files.len());
// Get full-feed peers from specific collector
let peers = BgpkitBroker::new()
.collector_id("route-views2")
.peers_only_full_feed(true)
.get_peers().unwrap();
println!("Found {} full-feed peers", peers.len());
for peer in peers.iter().take(3) {
println!("Peer: AS{} ({}) - v4: {}, v6: {}",
peer.asn, peer.ip, peer.num_v4_pfxs, peer.num_v6_pfxs);
}Structs§
- Bgpkit
Broker - BgpkitBroker struct maintains the broker’s URL and handles making API queries.
- Broker
Item - BGPKIT Broker data item.
- Broker
Item Iterator - Iterator for BGPKIT Broker that iterates through one BrokerItem at a time.
- Broker
Peer - MRT collector peer information
- Collector
- Query
Params - QueryParams represents the query parameters to the backend API.
- Snapshot
Files - MRT files needed to construct a routing table snapshot for a specific collector.
Enums§
- Broker
Error - Broker error enum.
- Sort
Order - Sorting order enum