#!/bin/bash

ALWAYS_RUNNING=("")
IGNORED_LABELS=("")

source /etc/check_mk/docker_containers.cfg &>/dev/null

type /usr/bin/docker &>/dev/null

if [[ $? -eq 0 && -f /etc/check_mk/docker_containers.cfg ]] ; then

    MESSAGE=""
    
    DOCKER_PS=$(docker ps -a --format "{{.ID}};{{.Names}};{{.Status}}" 2>/dev/null)

    while read -r LINE; do
    
        LABELS=$(docker inspect -f '{{ range $k, $v := .Config.Labels -}} {{ $k }}={{ $v }} {{ end -}}' $(echo $LINE | awk -F ";" '{print $1}') 2>/dev/null)
        
        SKIP=false
        for (( i=0; i<${#IGNORED_LABELS[@]}; i++ )); do
            for j in $LABELS; do
                if [[ $j == ${IGNORED_LABELS[$i]} ]]; then
                    SKIP=true
                fi 
            done
        done
        
        if $SKIP; then
            continue
        fi

        ERROR=$(echo "$LINE" | awk -F ";" '{
                if ($3 ~ "^Exited.*" && $3 !~ "^Exited \(0\).*") 
                    printf($2" - "$3";");
                }' 2>/dev/null)

        if [[ ${#ERROR} != 0 ]] ; then
            MESSAGE="$MESSAGE $ERROR"
        fi
    done <<< "$DOCKER_PS"

    for (( i=0; i<${#ALWAYS_RUNNING[@]}; i++ )); do
        if [ $(echo $DOCKER_PS | grep -E ";${ALWAYS_RUNNING[$i]};Up" | wc -l) -eq 0 ] ; then
            MESSAGE="$MESSAGE Container ${ALWAYS_RUNNING[$i]} not runnning;"   
        fi
    done

    if [[ "$MESSAGE" == "" ]] ; then
        echo "0 docker_containers - OK"
    else
        echo "2 docker_containers - $MESSAGE"
    fi
fi    
