dockcheck/extras/pc_brief.sh

62 lines
2.2 KiB
Bash
Raw Normal View History

Upstream patches and additional patching (#2) * Ensures DSM GUI refreshes its updates * Removed whale icon and changed verbosity * Added addon for Prometheus+node_exporter * Changed local image check to check on image ID rather than name * Update podcheck.sh changed docker->podman, typo * - **v0.6.0**: - **Grafana & Prometheus Integration:** - Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check. - Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring. - **Improved Error Handling & Code Refactoring:** - Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour. - Standardised container name handling and refined the Quadlet detection logic. - **Self-Update Enhancements:** - Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments. - **Miscellaneous Improvements:** - Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`. - General code refactoring across the project for better readability and maintainability. * Update podcheck.sh * increment version * Update Quadlet detection logic Update Quadlet detection logic to support flexible service naming - Modified the quadlet update block to first try an exact match for "$i.service". - If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units. - When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate. - This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db). * search name fix * fixes to arg parsing * Logic overhaul, verbose output and better syntax * Added support for prometheus --------- Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
#!/usr/bin/env bash
# pc_brief.sh - Provides a brief diagnostic summary of Podman Compose containers.
# Usage: pc_brief.sh <name-filter>
set -euo pipefail
# Check if a name filter argument was provided
if [ "$#" -eq 0 ]; then
echo "Usage: $0 <name-filter>"
exit 1
fi
SearchName="$1"
# Use a while-read loop to correctly handle container names with spaces
podman ps --filter "name=$SearchName" --format '{{.Names}}' | while IFS= read -r container; do
echo "------------ $container ------------"
# Retrieve container labels and image name
ContLabels=$(podman inspect "$container" --format '{{json .Config.Labels}}')
ContImage=$(podman inspect "$container" --format '{{.ImageName}}')
# Extract Docker Compose-related labels via jq; default to empty if null
ContPath=$(jq -r '."com.docker.compose.project.working_dir"' <<< "$ContLabels")
[ "$ContPath" == "null" ] && ContPath=""
ContConfigFile=$(jq -r '."com.docker.compose.project.config_files"' <<< "$ContLabels")
[ "$ContConfigFile" == "null" ] && ContConfigFile=""
ContName=$(jq -r '."com.docker.compose.service"' <<< "$ContLabels")
[ "$ContName" == "null" ] && ContName=""
ContEnv=$(jq -r '."com.docker.compose.project.environment_file"' <<< "$ContLabels")
[ "$ContEnv" == "null" ] && ContEnv=""
ContUpdateLabel=$(jq -r '."sudo-kraken.podcheck.update"' <<< "$ContLabels")
[ "$ContUpdateLabel" == "null" ] && ContUpdateLabel=""
ContRestartStack=$(jq -r '."sudo-kraken.podcheck.restart-stack"' <<< "$ContLabels")
[ "$ContRestartStack" == "null" ] && ContRestartStack=""
# Determine the full path to the compose file(s)
if [[ $ContConfigFile = /* ]]; then
ComposeFile="$ContConfigFile"
else
ComposeFile="$ContPath/$ContConfigFile"
fi
# Output a concise summary of container configuration
echo -e "Service name:\t\t$ContName"
echo -e "Project working dir:\t$ContPath"
echo -e "Compose files:\t\t$ComposeFile"
echo -e "Environment files:\t$ContEnv"
echo -e "Container image:\t$ContImage"
echo -e "Update label:\t\t$ContUpdateLabel"
echo -e "Restart Stack label:\t$ContRestartStack"
echo
echo "Mounts:"
podman inspect -f '{{ range .Mounts }}{{ .Source }}:{{ .Destination }}{{ "\n" }}{{ end }}' "$container"
echo
done