#!/bin/bash

#log file
mkdir -p /var/log/perfsonar/
LOGFILE="/var/log/perfsonar/psconfig-pscheduler-migrate.log"
DATE=$(date)
echo "[$DATE] Migration started" >> $LOGFILE

# get timestamp
RUNTIME=$(echo $DATE | sed -e "s/ /_/g" | sed -e "s/:/_/g")

#MeshConfig files
MESHCONFIG_AGENT_CONF='/etc/perfsonar/meshconfig-agent.conf'
MESHCONFIG_AGENT_TASKS_CONF='/etc/perfsonar/meshconfig-agent-tasks.conf'
MESHCONFIG_CLIENT_UUID='/var/lib/perfsonar/meshconfig/client_uuid'
MESHCONFIG_PSC_TRACKER='/var/lib/perfsonar/meshconfig/psc_tracker'
TOOLKIT_GUI_DIR='/var/lib/perfsonar/toolkit'
TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF="${TOOLKIT_GUI_DIR}/gui-tasks.conf"
#PSConfig files
PSCONFIG_AGENT_JSON='/etc/perfsonar/psconfig/pscheduler-agent.json'
PSCONFIG_TEMPLATE='/etc/perfsonar/psconfig/pscheduler.d/toolkit-webui.json'
PSCONFIG_CLIENT_UUID='/var/lib/perfsonar/psconfig/client_uuid'
PSCONFIG_PSC_TRACKER='/var/lib/perfsonar/psconfig/psc_tracker'

#Migrate MeshConfig Agent file if exists
echo "" >> $LOGFILE
if [ -e "$MESHCONFIG_AGENT_CONF" ]; then
    tmpfile=$(mktemp)
    echo "$MESHCONFIG_AGENT_CONF exists, running 'psconfig pscheduler-translate --save-requesting-agent -o $tmpfile' $MESHCONFIG_AGENT_CONF" >> $LOGFILE
    psconfig pscheduler-translate --save-requesting-agent -o $tmpfile $MESHCONFIG_AGENT_CONF >> $LOGFILE 2>&1
    if [ $? -eq 0 ]; then
        if [ -e "$PSCONFIG_AGENT_JSON" ]; then
            echo "$PSCONFIG_AGENT_JSON exists, backing-up to ${PSCONFIG_AGENT_JSON}.${RUNTIME}" >> $LOGFILE
            mv $PSCONFIG_AGENT_JSON "${PSCONFIG_AGENT_JSON}.${RUNTIME}"
        fi
        echo "Moving to translated file to ${PSCONFIG_AGENT_JSON}" >> $LOGFILE
        mv $tmpfile $PSCONFIG_AGENT_JSON
        chown perfsonar:perfsonar $PSCONFIG_AGENT_JSON
        chmod 644 $PSCONFIG_AGENT_JSON 
        echo "Backing up $MESHCONFIG_AGENT_CONF to ${MESHCONFIG_AGENT_CONF}.${RUNTIME}" >> $LOGFILE
        mv $MESHCONFIG_AGENT_CONF ${MESHCONFIG_AGENT_CONF}.${RUNTIME}
    else
        echo "psconfig pscheduler-translate did not work, this is not an error if you didn't have any meshes configured" >> $LOGFILE
    fi
else
    echo "$MESHCONFIG_AGENT_CONF does not exist, so nothing to translate. That probably means this is a new install or has the host already been upgraded." >> $LOGFILE
fi

#Migrate MeshConfig Agent Tasks file if exists
echo "" >> $LOGFILE
if [ -e "$MESHCONFIG_AGENT_TASKS_CONF" ]; then
    tmpfile=$(mktemp)
    echo "$MESHCONFIG_AGENT_TASKS_CONF exists, running 'psconfig translate --save-global-archives -o $tmpfile $MESHCONFIG_AGENT_TASKS_CONF'" >> $LOGFILE
    psconfig translate --save-global-archives -o $tmpfile $MESHCONFIG_AGENT_TASKS_CONF >> $LOGFILE 2>&1
    if [ $? -eq 0 ]; then
        if [ -e "$PSCONFIG_TEMPLATE" ]; then
            echo "$PSCONFIG_TEMPLATE exists, backing-up to ${PSCONFIG_TEMPLATE}.${RUNTIME}" >> $LOGFILE
            mv $PSCONFIG_TEMPLATE "${PSCONFIG_TEMPLATE}.${RUNTIME}"
        fi
        echo "Moving to translated file to ${PSCONFIG_TEMPLATE}" >> $LOGFILE
        mv $tmpfile $PSCONFIG_TEMPLATE
        chown perfsonar:perfsonar $PSCONFIG_TEMPLATE
        chmod 644 $PSCONFIG_TEMPLATE 
    else
        echo "psconfig translate did not work, but it's probably not an error. It will only translate if there are tasks from the webui or created manually. Any global archives were still converted if this was the case." >> $LOGFILE
    fi
    #special step for toolkit gui
    if [ -e "$TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF" ]; then
        echo "Backing up $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF to ${TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF}.${RUNTIME}" >> $LOGFILE
        cp $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF "${TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF}.${RUNTIME}"
    fi
    #copy to toolkit gui locations
    echo "Copying $MESHCONFIG_AGENT_TASKS_CONF to $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF" >> $LOGFILE
    mkdir -p $TOOLKIT_GUI_DIR
    cp $MESHCONFIG_AGENT_TASKS_CONF $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF
    chown perfsonar:perfsonar $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF
    chmod 644 $TOOLKIT_GUI_MESHCONFIG_AGENT_TASKS_CONF 
    #always move since in most cases an error above is probably expected
    echo "Backing up $MESHCONFIG_AGENT_TASKS_CONF to ${MESHCONFIG_AGENT_TASKS_CONF}.${RUNTIME}" >> $LOGFILE
    mv $MESHCONFIG_AGENT_TASKS_CONF ${MESHCONFIG_AGENT_TASKS_CONF}.${RUNTIME}
else
    echo "$MESHCONFIG_AGENT_TASKS_CONF does not exist, so nothing to translate. That probably means this is a new install or has the host already been upgraded." >> $LOGFILE
fi

#Migrate client_uuid
echo "" >> $LOGFILE
if [ -e "$MESHCONFIG_CLIENT_UUID" ]; then
    echo "$MESHCONFIG_CLIENT_UUID exists, migrating" >> $LOGFILE
    if [ -e "$PSCONFIG_CLIENT_UUID" ]; then
        echo "$PSCONFIG_CLIENT_UUID exists, backing-up to ${PSCONFIG_CLIENT_UUID}.${RUNTIME}" >> $LOGFILE
        mv $PSCONFIG_CLIENT_UUID "${PSCONFIG_CLIENT_UUID}.${RUNTIME}"
    fi
    echo "Moving to $MESHCONFIG_CLIENT_UUID to $PSCONFIG_CLIENT_UUID" >> $LOGFILE
    mv $MESHCONFIG_CLIENT_UUID $PSCONFIG_CLIENT_UUID
else
    echo "$MESHCONFIG_CLIENT_UUID does not exist, nothing to migrate" >> $LOGFILE
fi

#migrate psc_tracker
echo "" >> $LOGFILE
if [ -e "$MESHCONFIG_PSC_TRACKER" ]; then
    echo "$MESHCONFIG_PSC_TRACKER exists, migrating" >> $LOGFILE
    if [ -e "$PSCONFIG_PSC_TRACKER" ]; then
        echo "$PSCONFIG_PSC_TRACKER exists, backing-up to ${PSCONFIG_PSC_TRACKER}.${RUNTIME}" >> $LOGFILE
        mv $PSCONFIG_PSC_TRACKER "${PSCONFIG_PSC_TRACKER}.${RUNTIME}"
    fi
    echo "Moving to $MESHCONFIG_PSC_TRACKER to $PSCONFIG_PSC_TRACKER" >> $LOGFILE
    mv $MESHCONFIG_PSC_TRACKER $PSCONFIG_PSC_TRACKER
else
    echo "$MESHCONFIG_PSC_TRACKER does not exist, nothing to migrate" >> $LOGFILE
fi

DATE=$(date)
echo "" >> $LOGFILE
echo "[$DATE] Migration complete" >> $LOGFILE