#!/usr/bin/env bash

# program : docker_check_status.sh
#  author : wangqijia@youzan.com
#    date : 2020-06-23
# version : 0.0.0.1


# exit shell with err_code
# $1 : err_code : check result  0 ==> success, 1 ==> fail
# $2 : err_msg


exit_on_err()
{
    [[ ! -z "${2}" ]] && echo "${2}" 1>&2
    exit ${1}
}

# display usage
function usage() {
echo "
usage: ${0} [n] [f]

    -h : help
         Prints the ${0} help
    -t : docker service type
         specify service type, eg: -n mysql | -n redis
    -p : docker instance status
         check docker service instance status UP|DOWN
    -i : docker image status
	 check docker image status EXIST | not exist
"
}

function version_ge() {
    test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"
}

function docker_install(){
    MIN_DOCKER_VERSION="17.03"

    echo "检查Docker......"
    DOCKER_VERSION_STR=`docker -v`

    if [ $? -eq 0 ]; then
        echo "检查到Docker本地已安装！"
        DOCKER_VERSION=`echo $DOCKER_VERSION_STR | grep -Eo '([0-9]+\.){1,2}[0-9]+'`
        if version_ge $DOCKER_VERSION $MIN_DOCKER_VERSION; then
            echo "当前Docker版本$DOCKER_VERSION, 检查Docker版本OK！"
        else
            exit_on_err 1 "当前Docker版本$DOCKER_VERSION, 请安装Docker CE 17.03及以上版本！"
        fi
    else
        exit_on_err 1 "请先安装Docker，Docker CE 17.03及以上版本！"
    fi
}

 

# the main function
function main() {
    DOCKER_TYPE=""
    CHECK_INSTANCE_FLAG=0
    CHECK_IMAGE_FLAG=0

    while getopts "ht:pi" ARG
    do
        case ${ARG} in
            h)
                usage
                exit
            ;;
            t)
                DOCKER_TYPE=$OPTARG
                echo "您指定要检查的容器服务类型为：${DOCKER_TYPE}"
            ;;
            p)
                CHECK_INSTANCE_FLAG=1
                echo "检查容器服务实例状态"
	    ;;
	    i)
		CHECK_IMAGE_FLAG=1
		echo "检查容器镜像状态"
            ;;  
        esac
    done

    docker_install

    if [ $CHECK_INSTANCE_FLAG -eq 1 ]; then
        if [ $DOCKER_TYPE = "mysql" ]; then
            #检查mysql容器是否已存在
            docker ps | grep "yz-mysql"
            if [ $? -ne 0 ]; then
                exit_on_err 1 "本地mysql容器实例还未启动!"
            else
                echo "本地mysql容器实例已启动"
                exit 0
            fi
	else
            #检查redis容器是否存在
            docker ps | grep "yz-redis"
            if [ $? -ne 0 ]; then
                exit_on_err 1 "本地redis容器实例还未启动!"
            else
                echo "本地redis容器实例已启动"
                exit 0
            fi
        fi
    fi

    if [ $CHECK_IMAGE_FLAG -eq 1 ]; then
        if [ $DOCKER_TYPE = "mysql" ]; then
            docker images | grep "hub-mirror.c.163.com/library/mysql"
            if [ $? -ne 0 ]; then
                exit_on_err 1 "本地mysql镜像不存在"
            else
                echo "本地mysql镜像已存在"
                exit 0
            fi
        else
            docker images | grep "hub-mirror.c.163.com/library/redis"
            if [ $? -ne 0 ]; then
                exit_on_err 1 "本地redis镜像不存在"
            else
                echo "本地redis镜像已存在"
                exit 0
            fi
        fi
    fi
}

main "${@}"
