Add trace logging to the docker refresh

That way we can see what's going on with docker responses if they're weird.
This commit is contained in:
John Doty 2024-08-12 10:07:42 -07:00
parent e27b788e8f
commit 665fccf753

View file

@ -1,4 +1,5 @@
use anyhow::{bail, Context, Result}; use anyhow::{bail, Context, Result};
use log::trace;
use std::collections::HashMap; use std::collections::HashMap;
use tokio::io::{ use tokio::io::{
AsyncBufReadExt, AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt, AsyncBufReadExt, AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt,
@ -26,6 +27,7 @@ Accept: */*\r\n\
// Check the HTTP response. // Check the HTTP response.
let mut line = String::new(); let mut line = String::new();
stream.read_line(&mut line).await?; stream.read_line(&mut line).await?;
trace!("[docker] {}", line.trim_end());
let parts: Vec<&str> = line.split(" ").collect(); let parts: Vec<&str> = line.split(" ").collect();
if parts.len() < 2 || parts[1] != "200" { if parts.len() < 2 || parts[1] != "200" {
bail!("Error response from docker: {line}"); bail!("Error response from docker: {line}");
@ -36,6 +38,7 @@ Accept: */*\r\n\
loop { loop {
line.clear(); line.clear();
stream.read_line(&mut line).await?; stream.read_line(&mut line).await?;
trace!("[docker] {}", line.trim_end());
if line.trim().is_empty() { if line.trim().is_empty() {
break; break;
} }
@ -49,6 +52,17 @@ Accept: */*\r\n\
let mut response_buffer = vec![0; content_length]; let mut response_buffer = vec![0; content_length];
stream.read_exact(&mut response_buffer).await?; stream.read_exact(&mut response_buffer).await?;
if log::log_enabled!(log::Level::Trace) {
match std::str::from_utf8(&response_buffer) {
Ok(s) => trace!("[docker][{}b] {}", s.len(), s),
Err(_) => trace!(
"[docker][{}b, raw] {:?}",
response_buffer.len(),
&response_buffer
),
}
}
// Done with the stream. // Done with the stream.
Ok(response_buffer) Ok(response_buffer)
} }
@ -56,6 +70,7 @@ Accept: */*\r\n\
async fn list_containers() -> Result<Vec<u8>> { async fn list_containers() -> Result<Vec<u8>> {
let host = std::env::var("DOCKER_HOST") let host = std::env::var("DOCKER_HOST")
.unwrap_or_else(|_| DEFAULT_DOCKER_HOST.to_string()); .unwrap_or_else(|_| DEFAULT_DOCKER_HOST.to_string());
trace!("[docker] Connecting to {host}");
match host { match host {
h if h.starts_with("unix://") => { h if h.starts_with("unix://") => {
let socket_path = &h[7..]; let socket_path = &h[7..];