#!/bin/sh

. ../common/ajax_common

MONITOR_CONF="${PGETC}/web/if_link_vrrp.conf"


load_monitor_conf()
{
    if [ ! -f "${MONITOR_CONF}" ]; then
        printf "{}"
        return
    fi

    awk -F"=" \
    'BEGIN{
        dot = "";
        printf "{"
    }{
        printf "%s\"%s\":\"%s\"", dot, $1, $2;
        if(dot == "") dot = ",";
    }END{
        printf "}";
    }' ${MONITOR_CONF}
}


load_monitor_pxylist()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"interface\":`lib_interface_list`"
    printf ",\"pxy\":`lib_proxy_list`"
    printf ",\"conf\":`load_monitor_conf`"
    printf "}"
}


get_vpmonitor_conf()
{
    if [ ! -f "${MONITOR_CONF}" ]; then
        printf "{\"conf\":{},\"link\":[]}"
        return
    fi

    . ${MONITOR_CONF}

    printf "{"
    printf "\"conf\":`load_monitor_conf`"
    printf ",\"list\":["

    for int in `echo ${interface} | tr "," " "`
    do
        stat=0
        up=`${FLOWEYE} if get ${int} | grep link-state=up`
        [ "${up}" != "" ] && stat=1

        printf "${dot}{"
        printf "\"obj\":\"${int}\""
        printf ",\"type\":\"nic\""
        printf ",\"stat\":\"${stat}\""
        printf "}"

        [ "${dot}" = "" ] && dot=","
    done

    for pxy in `echo ${proxy} | tr "," " "`
    do
        [ "${interface}" != "" ] && dot=","
        stat=`${FLOWEYE} nat getproxy ${pxy} | grep ^state | head -1 | cut -d"=" -f2`
        name=`${FLOWEYE} nat getproxy ${pxy} | grep ^name | cut -d"=" -f2`
        printf "${dot}{"
        printf "\"obj\":\"${name}\""
        printf ",\"pid\":\"${pxy}\""
        printf ",\"type\":\"pxy\""
        printf ",\"stat\":\"${stat}\""
        printf "}"

        [ "${dot}" = "" ] && dot=","
    done

    printf "]}"
}


set_vrrp_monitor()
{
    [ "${CGI_if}" = "" ] && CGI_if="NULL"

    if [ "${CGI_if}" != "NULL" ]; then
        for obj in `echo ${CGI_if} | tr "," " "`
        do
            ${FLOWEYE} if list | grep "${obj}" >/dev/null
            [ $? -ne 0 ] && retjson 1 "δҵ:${obj}"
        done
    fi

    mkdir -p ${PGETC}/web/
    echo "interface=${CGI_if}" > ${PGETC}/web/if_link_vrrp.conf

    ${WEBUICTL} start if_vrrp >/dev/null 2>&1 &

    WEB_LOGGER "VRRP" "interface=${CGI_if}"
    retjson 0 "ɹ"
}


set_vpmonitor_conf()
{
    mkdir -p ${PGETC}/web/

    [ ! -f ${MONITOR_CONF} ] && touch ${MONITOR_CONF}

    grep -vE "monitor_enable|switch_type" ${MONITOR_CONF} > ${MONITOR_CONF}.bak
    echo "monitor_enable=${CGI_monitor_enable}" >> ${MONITOR_CONF}.bak
    echo "switch_type=${CGI_switch_type}" >> ${MONITOR_CONF}.bak

    mv ${MONITOR_CONF}.bak ${MONITOR_CONF}

    ${WEBUICTL} start if_vrrp >/dev/null 2>&1 &

    WEB_LOGGER "VRRP" "enable=${CGI_monitor_enable}"
    retjson 0 "ɹ"
}


add_vpmonitor_obj()
{
    mkdir -p ${PGETC}/web/

    [ ! -f ${MONITOR_CONF} ] && touch ${MONITOR_CONF}

    grep -vE "interface|proxy" ${MONITOR_CONF} > ${MONITOR_CONF}.bak
    echo "interface=${CGI_interface}" >> ${MONITOR_CONF}.bak
    echo "proxy=${CGI_proxy}" >> ${MONITOR_CONF}.bak

    mv ${MONITOR_CONF}.bak ${MONITOR_CONF}

    ${WEBUICTL} start if_vrrp >/dev/null 2>&1 &

    WEB_LOGGER "VRRPض"
    retjson 0 "ɹ"
}


load_vpmonitor_log()
{
    log_file="${DATAPATH}/if_link_vrrp.log"

    if [ ! -f "${log_file}" ]; then
        printf "[]"
        return
    fi

    awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        printf "%s{", dot;
        printf "\"time\":%s,", $1;
        printf "\"event\":\"%s\"", $2;
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }' ${log_file}
}


case "${CGI_action}" in
    "load_monitor_pxylist")
        retjson 0 "OK" "`load_monitor_pxylist`"
        ;;

    "get_vpmonitor_conf")
        retjson 0 "OK" "`get_vpmonitor_conf`"
        ;;

    "set_vpmonitor_conf")
        action_check
        set_vpmonitor_conf
        ;;

    "add_vpmonitor_obj")
        action_check
        add_vpmonitor_obj
        ;;

    "load_vpmonitor_log")
        retjson 0 "OK" "`load_vpmonitor_log`"
        ;;

    *)
        retjson 1 "UNKNOW_ACTION!"
        ;;
esac
