2024-03-07 04:14:25 -08:00
|
|
|
use std::env::args;
|
|
|
|
|
2024-01-08 17:07:00 -08:00
|
|
|
use xenstore::client::{XsdClient, XsdInterface};
|
2024-01-30 01:58:10 -08:00
|
|
|
use xenstore::error::Result;
|
2024-01-08 12:43:16 -08:00
|
|
|
|
2024-03-07 04:14:25 -08:00
|
|
|
async fn list_recursive(client: &XsdClient, path: &str) -> Result<()> {
|
|
|
|
let mut pending = vec![path.to_string()];
|
2024-01-08 12:43:16 -08:00
|
|
|
|
2024-03-07 04:14:25 -08:00
|
|
|
while let Some(ref path) = pending.pop() {
|
|
|
|
let children = client.list(path).await?;
|
|
|
|
for child in children {
|
|
|
|
let full = format!("{}/{}", if path == "/" { "" } else { path }, child);
|
|
|
|
let value = client
|
|
|
|
.read_string(full.as_str())
|
|
|
|
.await?
|
|
|
|
.expect("expected value");
|
|
|
|
println!("{} = {:?}", full, value,);
|
|
|
|
pending.push(full);
|
|
|
|
}
|
2024-01-08 12:43:16 -08:00
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2024-02-23 04:37:53 +00:00
|
|
|
#[tokio::main]
|
|
|
|
async fn main() -> Result<()> {
|
2024-03-07 04:14:25 -08:00
|
|
|
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("warn")).init();
|
|
|
|
let client = XsdClient::open().await?;
|
|
|
|
loop {
|
|
|
|
list_recursive(&client, "/").await?;
|
|
|
|
if args().nth(1).unwrap_or("none".to_string()) != "stress" {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2024-01-08 12:43:16 -08:00
|
|
|
Ok(())
|
|
|
|
}
|