Skip to content

Instantly share code, notes, and snippets.

@book000
Last active April 2, 2023 21:28
Show Gist options
  • Save book000/cb1ac37d5b966ac55bf74afab7f77762 to your computer and use it in GitHub Desktop.
Save book000/cb1ac37d5b966ac55bf74afab7f77762 to your computer and use it in GitHub Desktop.
#!/bin/bash
cd "$(dirname "$0")" || exit
progress() {
local message=$1
local space
space=$(printf '%*s' $(( $(tput cols) - ${#message} )) ' ')
echo -ne "$message$space\r"
}
# Check if the container is running
# Get folders (only directories)
folders=$(find . -maxdepth 1 -type d -not -path . | sed 's/^\.\///g')
rm -f results.ndjson && touch results.ndjson
# Loop through folders
count=0
folder_count=$(echo "$folders" | wc -l)
for folder in $folders; do
count=$((count + 1))
progress "Checking $folder ($count/$folder_count)"
# Check if the folder is a container (docker-compose.yml or compose.yaml or compose.yml)
if [ ! -f "$folder/docker-compose.yml" ] && [ ! -f "$folder/compose.yaml" ] && [ ! -f "$folder/compose.yml" ]; then
continue
fi
cd "$folder" || exit
results=$(docker compose ps -a --format json)
for service in $(echo "$results" | jq -r '.[] | .Service'); do
isError=$(docker compose logs --tail 100 "$service" | grep Error >/dev/null 2>&1 && echo true || echo false)
results=$(echo "$results" | jq --arg service "$service" --arg isError "$isError" '(.[] | select(.Service == $service) | .IsError) |= $isError')
done
echo "$results" >> ../results.ndjson
cd ..
done
echo -e "\e[32mGreen\e[0m: Running or Exited & No error | \e[1;33mYellow\e[0m: Running & Error | \e[1;35mMagenta\e[0m: Failed exited & No error | \e[1;31mRed\e[0m: Exited & Error"
echo
jq -r '.[] | [.Name, .State, .ExitCode, .IsError, .Command] | @tsv' results.ndjson | column -t -s "$(printf '\t')" | sed -r "s/(.*running.*false.*)/\x1b[32m\1\x1b[0m/g" | sed -r "s/(.*exited.*0.*false.*)/\x1b[32m\1\x1b[0m/g" | sed -r "s/(.*running.*true.*)/\x1b[1;33m\1\x1b[0m/g" | sed -r "s/(.*exited.*1.*false.*)/\x1b[1;35m\1\x1b[0m/g" | sed -r "s/(.*exited.*true.*)/\x1b[1;31m\1\x1b[0m/g"
jq -r '.[] | [.Name, .State, .ExitCode, .IsError, .Command] | @tsv' results.ndjson > results.tsv
rm -f results.ndjson
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment