Add full JSON dump to get_container_status diagnostic logging
Replaces key-only log with complete json.dumps output (up to 2000 chars) so the actual DSM response structure is visible in Claude Desktop logs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@@ -128,7 +129,8 @@ def register_containers(mcp: FastMCP, config: AppConfig, client: DsmClient) -> N
|
|||||||
return f"Error getting container '{container_name}': {e}"
|
return f"Error getting container '{container_name}': {e}"
|
||||||
|
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
f"[get_container_status] name={clean_name!r} data_keys={list(data.keys())}\n"
|
f"[get_container_status] name={clean_name!r} "
|
||||||
|
f"raw response: {json.dumps(data, indent=2, default=str)[:2000]}\n"
|
||||||
)
|
)
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
|
|
||||||
@@ -338,12 +340,7 @@ def _format_container_detail(name: str, data: dict[str, Any]) -> str:
|
|||||||
status/image fields as returned by the list endpoint).
|
status/image fields as returned by the list endpoint).
|
||||||
"""
|
"""
|
||||||
# Unwrap "container" wrapper if present (common DSM API pattern)
|
# Unwrap "container" wrapper if present (common DSM API pattern)
|
||||||
if "container" in data and isinstance(data["container"], dict):
|
raw = data["container"] if "container" in data and isinstance(data["container"], dict) else data
|
||||||
sys.stderr.write("[get_container_status] unwrapping 'container' key\n")
|
|
||||||
sys.stderr.flush()
|
|
||||||
raw = data["container"]
|
|
||||||
else:
|
|
||||||
raw = data
|
|
||||||
|
|
||||||
# Docker Engine inspect format: State / Config / HostConfig
|
# Docker Engine inspect format: State / Config / HostConfig
|
||||||
state = raw.get("State", {}) or {}
|
state = raw.get("State", {}) or {}
|
||||||
@@ -355,11 +352,6 @@ def _format_container_detail(name: str, data: dict[str, Any]) -> str:
|
|||||||
running = state.get("Running") if "Running" in state else (status_str == "running")
|
running = state.get("Running") if "Running" in state else (status_str == "running")
|
||||||
image_str = config.get("Image") or raw.get("image") or "?"
|
image_str = config.get("Image") or raw.get("image") or "?"
|
||||||
|
|
||||||
sys.stderr.write(
|
|
||||||
f"[get_container_status] status={status_str!r} running={running!r} image={image_str!r}\n"
|
|
||||||
)
|
|
||||||
sys.stderr.flush()
|
|
||||||
|
|
||||||
lines = [
|
lines = [
|
||||||
f"Container: {name}",
|
f"Container: {name}",
|
||||||
f" Status: {status_str}",
|
f" Status: {status_str}",
|
||||||
|
|||||||
Reference in New Issue
Block a user