use pb_mapper::{Client, ClientConfig, SessionPath};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new(ClientConfig {
server: std::env::var("PB_MAPPER_SERVER")?,
credential: std::env::var("MSG_HEADER_KEY")?,
keep_alive: false,
namespace: None,
})?;
println!("SDK {}", pb_mapper::SDK_VERSION);
let keys = client.list_keys().await?;
println!("{} service(s): {keys:?}", keys.len());
for key in &keys {
for conn in client.service_status(key.as_str()).await? {
println!(
" {key}: conn {} generation {} healthy={} last heard {} ms ago",
conn.conn_id, conn.generation, conn.healthy, conn.last_rx_age_ms
);
}
}
for session in client.sessions().await? {
let path = session
.consumer
.as_ref()
.or(session.provider.as_ref())
.map(|observed| observed.report.path);
println!(
" session to `{}`: {} (stale={}, restored={})",
session.service,
match path {
Some(SessionPath::Direct) => "direct",
Some(SessionPath::Relay) => "relay",
None => "unreported",
},
session.stale,
session.restored
);
}
let remote = client.remote_id().await?;
println!("active: {}\nidle: {}", remote.active, remote.idle);
Ok(())
}