#!/bin/bash

set -o errexit
set -o xtrace

[ -z "${UPDATE_DIR}" ] && UPDATE_DIR=/srv/update

check_root() {
    if [ "x$(id -u)" != "x0" ]; then
        echo "You need to be root to perform this command" >&2
        exit 2
    fi
}

enable_logging() {
    LOG_DIR="${UPDATE_DIR}/log"
    LOG=${LOG_DIR}/$(basename $0)__$(date '+%FT%T').log
    install -d -m0777 ${LOG_DIR}

    exec > >(tee -a ${LOG})
    exec 2>&1

    echo "CMD: $0 $@"
    echo "PID: $$"
    echo "LOG: ${LOG}"
}

check_pid() {
    PID_FILE=${UPDATE_DIR}/$(basename $0).pid
    PID=$(cat "${PID_FILE}" 2>/dev/null || :)
    if [ -n "${PID}" ]; then
        PID_CMD=$(ps -o cmd= "${PID}" || :)
        if echo ${PID_CMD} | grep $0; then
            echo "Update is running, pid ${PID}" >&2
            exit 1
        fi
    fi
    echo $$ > ${PID_FILE}
}

failover_update() {
    find /var/tmp/ -name "pmm-tmp"  | xargs rm -rf

	# don't replace tabs by spaces in this block, due to '<<-EOF' syntax
	cat - <<-EOF > ${UPDATE_DIR}/yum.conf
		[main]
		keepcache = 0
		reposdir = ${UPDATE_DIR}/cache
		cachedir = ${UPDATE_DIR}/cache
		persistdir = ${UPDATE_DIR}/cache

		[pmm-tmp]
		name = pmm-tmp
		baseurl = http://repo.percona.com/pmm/7/RPMS/x86_64/
		enabled = 1
		gpgcheck = 1
		gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona
	EOF

    pushd $UPDATE_DIR
        rm -rf usr pmm-update-*.rpm || :
        yumdownloader --config=${UPDATE_DIR}/yum.conf --destdir=$UPDATE_DIR pmm-update
        rpm2cpio $(/bin/ls -t pmm-update-*.rpm | head -1) | cpio -id
    popd
}

main() {
    local RPM_ROOT=$1

    yum -y --enablerepo=pmm clean all || :
    yum -y --disablerepo='*' --enablerepo=pmm install pmm-update && EC=$? || EC=$?
    if [ "x$EC" != "x0" ]; then
        failover_update
        RPM_ROOT=$UPDATE_DIR
    fi

    exec $RPM_ROOT/usr/bin/pmm-update-stage2 $RPM_ROOT
}

check_root
enable_logging
check_pid
main $@
