use anyhow::{Context, bail};
use futures::TryStreamExt;
use tokio::io::{AsyncBufRead, BufReader};
use tokio_util::io::StreamReader;
use super::MantaClient;
use super::client::unwrap_error_body;
impl MantaClient {
pub async fn stream_session_logs(
&self,
session_name: &str,
timestamps: bool,
) -> anyhow::Result<impl AsyncBufRead + Send + Unpin> {
let url = format!("{}/sessions/{}/logs", self.base_url(), session_name);
let builder = self
.raw
.get(&url)
.header("X-Manta-Site", self.site_name())
.query(&[("timestamps", timestamps.to_string())]);
Self::log_request_as_curl(&builder);
let resp = builder
.send()
.await
.context("HTTP GET session logs failed")?;
if !resp.status().is_success() {
let status = resp.status();
let body = resp.text().await.unwrap_or_default();
bail!("GET session logs returned {status}: {}", unwrap_error_body(&body));
}
let byte_stream = resp.bytes_stream().map_err(std::io::Error::other);
Ok(BufReader::new(StreamReader::new(byte_stream)))
}
}