#!/bin/bash

if [ "$1" = "fix" ];then
    PKG_LIST=$(curl -s "http://c.yandex-team.ru/api/packages_on_host/$(hostname -f)" |awk '{print $1"="$3}' |xargs)
    echo -e "Going ot install: \n $PKG_LIST"
    apt-get install $PKG_LIST
    exit 0
fi

me=${0##*/}
ME=${me%.*}
CONFIG="$(dirname $0)/../etc/$ME.conf"
EXCLUDE_LIST="$(dirname $0)/../etc/pkgs_exclude.list"
IGNORE_EXT_REGEX=".pyc" # For sed. Example: IGNORE_EXT_REGEX=".pyc\|.gz\|.pl"
[ -r "$CONFIG" ] && source "$CONFIG"

CRITICAL=${CRITICAL:-24}
WARNING=${WARNING:-12}


die () {
	echo "PASSIVE-CHECK:$ME;$1;$2"
        exit
	}



curl -s "http://c.yandex-team.ru/api/packages_on_host/$(hostname -f)" > /tmp/pkg_check
if [ -e "${EXCLUDE_LIST}" ]; then
        for pkg in $(cat ${EXCLUDE_LIST}); do
                sed -i "/^$pkg\s/d" /tmp/pkg_check
        done
fi

#Never check python-netconfig
sed -i "/^python-netconfig\s/d" /tmp/pkg_check


FAILED_VERSION_PKGS=""
FAILED_MD5=""
NOT_INSTALLED_PKGS=""

while read line; do
	PKG_NAME=$(echo $line|awk '{print $1}')
	PKG_VERSION_FROM_C=$(echo $line|awk '{print $3}')
	PKG_VERION_CUR=$(dpkg-query -W --showformat='${Version}\n' $PKG_NAME 2>/dev/null)
	PKG_STATUS=$(dpkg-query -W --showformat='${Status}\n' $PKG_NAME 2>/dev/null)
	if [ "$PKG_STATUS" != "install ok installed" ];then
		NOT_INSTALLED_PKGS="$NOT_INSTALLED_PKGS ${PKG_NAME}"
	else
		if [ $PKG_VERSION_FROM_C != $PKG_VERION_CUR ];then
                	FAILED_VERSION_PKGS="$FAILED_VERSION_PKGS ${PKG_NAME}"
	        fi
	fi

	echo "$NOT_INSTALLED_PKGS" |grep -q ${PKG_NAME}
	if [ $? -eq 1 ];then 
		sums_f=`mktemp`
		# 'grep -v' for ignore cron-files of metrika deamons
		#sudo /usr/bin/debsums -ca ${PKG_NAME} | grep -v '/etc/cron.d/.*d-metrika-yandex' |grep -v '/etc/cron.d/clickhouse-server' > $sums_f
		sudo /usr/bin/debsums -c ${PKG_NAME} 2>/dev/null | grep -v '/etc/cron.d/.*d-metrika-yandex' |grep -v '/etc/cron.d/clickhouse-server' > $sums_f
		while read str; do
			FAILED_MD5="$FAILED_MD5 $str"
		done < $sums_f
		rm -f $sums_f
	fi
	
done < /tmp/pkg_check

[ -z "$FAILED_VERSION_PKGS" ] && [ -e /tmp/pkg_version_flag ] && rm /tmp/pkg_version_flag
if [ -n "$FAILED_VERSION_PKGS" -o -n "$FAILED_MD5" -o "$NOT_INSTALLED_PKGS" ];then
	if [ -n "$FAILED_VERSION_PKGS" ];then
		[ ! -e /tmp/pkg_version_flag ] && touch /tmp/pkg_version_flag
		ERR=0
		if [ $((`date +%s`-`stat --printf=%Y /tmp/pkg_version_flag`)) -ge 7200 ]; then
			FAILED_VERSION_PKGS="different pkg version:$FAILED_VERSION_PKGS,"
			ERR=2
		fi
	else
		[ -e /tmp/pkg_version_flag ] && rm /tmp/pkg_version_flag
	fi
	if [ -n "$FAILED_MD5" ];then
		FAILED_MD5="md5sum is different for:$FAILED_MD5,"
		ERR=1
	fi
	if [ -n "$NOT_INSTALLED_PKGS" ];then
		NOT_INSTALLED_PKGS="pkg is not installed:$NOT_INSTALLED_PKGS,"
		ERR=2
	fi
	die $ERR "${FAILED_VERSION_PKGS}${FAILED_MD5}${NOT_INSTALLED_PKGS}"
else	
	die 0 "OK"
fi
