use std::str::FromStr;
use anyhow::Context;
use orchestra_toolkit::*;
fn run(session: Session, auth: Token, i: u32) -> anyhow::Result<()> {
let mut results = Vec::new();
for _ in 0..1000 {
results.push(
session
.invoke_entity(Entity::new(0, 0, 9), Method::Retrieve, auth)
.call(),
)
}
for r in results {
match r {
Ok(r) => println!("{}: {}", i, r),
Err(e) => println!("{}: {}", i, e),
}
}
Ok(())
}
fn main() -> anyhow::Result<()> {
dotenv::dotenv().ok();
let mut config = SessionConfig::default();
if let Ok(host) = std::env::var("AVESTERRA_HOST") {
config.address = host;
}
if let Ok(port_str) = std::env::var("AVESTERRA_PORT") {
config.port = u16::from_str(&port_str).context("Parsing `AVESTERRA_PORT`")?;
}
if let Ok(cert_dir_path) = std::env::var("AVESTERRA_CERTIFICATE_DIR_PATH") {
config.pem_filepath = (cert_dir_path + "/avesterra.pem").try_into()?;
}
let auth = if let Ok(auth_str) = std::env::var("AVESTERRA_AUTH") {
Token::from_str(&auth_str).context("Parsing authorization token given from env")?
} else {
Token::NULL
};
let session = Session::initialize(config)?;
let threads = (0..1000)
.map(|i| {
let s = session.clone();
std::thread::spawn(move || run(s, auth, i))
})
.collect::<Vec<_>>();
for t in threads {
let _ = t.join().unwrap();
}
Ok(())
}