Files
dss/demo/tools/discovery/discover-docker.sh
Digital Production Factory 276ed71f31 Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
2025-12-09 18:45:48 -03:00

122 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
#
# DSS - Docker Discovery
# Container status, images, networks, volumes
#
set -e
PROJECT_PATH="${1:-.}"
# Check if Docker is available
if ! command -v docker &> /dev/null; then
cat <<EOF
{
"scan_type": "docker",
"available": false,
"message": "Docker not installed or not in PATH"
}
EOF
exit 0
fi
# Check if Docker daemon is running
if ! docker info &> /dev/null; then
cat <<EOF
{
"scan_type": "docker",
"available": true,
"daemon_running": false,
"message": "Docker daemon not running or no permissions"
}
EOF
exit 0
fi
# Get running containers
get_containers() {
local containers=()
while IFS= read -r line; do
if [[ -n "$line" ]]; then
local id=$(echo "$line" | cut -d'|' -f1)
local name=$(echo "$line" | cut -d'|' -f2)
local image=$(echo "$line" | cut -d'|' -f3)
local status=$(echo "$line" | cut -d'|' -f4)
local ports=$(echo "$line" | cut -d'|' -f5 | sed 's/"/\\"/g')
containers+=("{\"id\":\"$id\",\"name\":\"$name\",\"image\":\"$image\",\"status\":\"$status\",\"ports\":\"$ports\"}")
fi
done < <(docker ps --format '{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}' 2>/dev/null)
echo "${containers[@]}"
}
# Get images
get_images() {
local images=()
while IFS= read -r line; do
if [[ -n "$line" ]]; then
local repo=$(echo "$line" | cut -d'|' -f1)
local tag=$(echo "$line" | cut -d'|' -f2)
local size=$(echo "$line" | cut -d'|' -f3)
images+=("{\"repository\":\"$repo\",\"tag\":\"$tag\",\"size\":\"$size\"}")
fi
done < <(docker images --format '{{.Repository}}|{{.Tag}}|{{.Size}}' 2>/dev/null | head -20)
echo "${images[@]}"
}
# Check for docker-compose files
get_compose_info() {
local compose_files=()
for file in "docker-compose.yml" "docker-compose.yaml" "compose.yml" "compose.yaml"; do
if [[ -f "$PROJECT_PATH/$file" ]]; then
local services=$(grep -E "^ [a-zA-Z]" "$PROJECT_PATH/$file" 2>/dev/null | sed 's/://g' | tr -d ' ' | head -10)
compose_files+=("{\"file\":\"$file\",\"services\":$(echo "$services" | jq -R -s 'split("\n") | map(select(. != ""))')}")
fi
done
echo "${compose_files[@]}"
}
# Get resource usage
get_stats() {
local stats=$(docker stats --no-stream --format '{"name":"{{.Name}}","cpu":"{{.CPUPerc}}","memory":"{{.MemUsage}}"}' 2>/dev/null | head -10 | tr '\n' ',' | sed 's/,$//')
echo "[$stats]"
}
# Build output
containers=$(get_containers)
images=$(get_images)
compose=$(get_compose_info)
stats=$(get_stats)
containers_json=$(IFS=,; echo "${containers[*]}")
images_json=$(IFS=,; echo "${images[*]}")
compose_json=$(IFS=,; echo "${compose[*]}")
cat <<EOF
{
"scan_type": "docker",
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"available": true,
"daemon_running": true,
"docker_version": "$(docker --version | cut -d' ' -f3 | tr -d ',')",
"containers": {
"running": $(docker ps -q 2>/dev/null | wc -l),
"total": $(docker ps -aq 2>/dev/null | wc -l),
"list": [${containers_json:-}]
},
"images": {
"total": $(docker images -q 2>/dev/null | wc -l),
"list": [${images_json:-}]
},
"compose_files": [${compose_json:-}],
"resource_usage": ${stats:-[]}
}
EOF