podman_client/containers/
stats.rs1use http_body_util::Empty;
2use hyper::body::Bytes;
3use url::form_urlencoded;
4
5use crate::{
6 client::Client,
7 models::{
8 connection::SendRequestOptions,
9 lib::Error,
10 podman::containers::stats::{ContainerStats, ContainerStatsOptions},
11 },
12 utils::bool_to_str::bool_to_str,
13};
14
15impl Client {
16 pub async fn container_stats(
17 &self,
18 options: Option<ContainerStatsOptions<'_>>,
19 ) -> Result<ContainerStats, Error> {
20 let mut path = "/libpod/containers/stats".to_owned();
21
22 if let Some(options) = options {
23 let mut query = form_urlencoded::Serializer::new(String::new());
24 if let Some(containers) = options.containers {
25 for container in containers {
26 query.append_pair("containers", container);
27 }
28 }
29 if let Some(interval) = options.interval {
30 query.append_pair("interval", itoa::Buffer::new().format(interval));
31 }
32 if let Some(stream) = options.stream {
33 query.append_pair("stream", bool_to_str(stream));
34 }
35 let query_string = query.finish();
36 if !query_string.is_empty() {
37 path += &["?", &query_string].concat();
38 }
39 }
40
41 let (_, data) = self
42 .send_request::<_, (), _>(SendRequestOptions {
43 method: "GET",
44 path: &path,
45 header: None,
46 body: Empty::<Bytes>::new(),
47 })
48 .await?;
49
50 Ok(data)
51 }
52}