#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Add_Virtual_Data_link"	#ͨ
	LANG002="Success"	#ɹ
	LANG003="Error"		#ʧ
	LANG004="Set_Virtual_Data_link"	#༭ͨ
	LANG005="Del_Virtual_Data_link"	#ɾͨ
fi


list_data_pie()
{
    ${FLOWEYE} policy listbwo | grep "${CGI_keyword}" | awk \
    -v status="${CGI_status}" \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        if(status != "" && $10 != status) next;

        col = 1;
        printf "%s{", dot;
        printf "\"id\":\"%s\",", $(col++);
        printf "\"name\":\"%s\",", $(col++);
        printf "\"rate\":\"%s\",", $(col++);
        printf "\"bytes\":\"%s\",", $(col++);
        printf "\"size\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\",", $(col++);
        printf "\"dropbps\":\"%s\",", $(col++);
        printf "\"quota\":\"%s\",", $(col++);
        printf "\"left\":\"%s\",", $(col++);
        printf "\"active\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


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


get_data_pie()
{
	printf "{"

    for line in `${FLOWEYE} policy getbwo name=${CGI_name}`
    do
        key=`echo ${line} | cut -d"=" -f1`
        val=`echo ${line} | cut -d"=" -f2`
        printf "\"${key}\":\"${val}\","
    done

    ${FLOWEYE} policy gethtb ${CGI_name} | awk \
    'BEGIN{
        dot="";
        printf "\"htb\":[";
    }{
        if($1=="pri") next;

        col=1;

        printf "%s{", dot;
        printf "\"pri\":\"%s\",", $(col++);
        printf "\"gbw\":\"%s\",", $(col++);
        printf "\"maxrate\":\"%s\",", $(col++);
        printf "\"bytes\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\",", $(col++);
        printf "\"dropbps\":\"%s\",", $(col++);
        printf "\"desc\":\"%s\"", $(col++);
        printf "}";
        if(dot=="") dot=","
    }END{
        printf "]";
    }'

    printf "}"
}


load_edit_env()
{
    printf "{"
    printf "\"policy\":`get_policy_stat`"
    printf ",\"pie\":`get_data_pie`"
    printf "}"
}


add_data_pie()
{
    [ "${CGI_quota}" = "" ] && CGI_quota=0
    [ "${CGI_name}" = "" ] && retjson 1 "INV_NAME"
    [ "${CGI_rate}" = "" ] && retjson 1 "INV_RATE"

	errmsg=`${FLOWEYE} policy addbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}`

	if [ $? -ne 0 ]; then
		retjson 1 "${errmsg}"
	else
        sync_floweye "policy addbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}"
		WEB_LOGGER "${LANG001:=ͨ}" "name=${CGI_pname} rate=${CGI_rate} quota=${CGI_quota}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


edit_data_pie()
{
    [ "${CGI_name}" = "" ] && retjson 1 "INV_NAME"
    pri_max_num=`${FLOWEYE} policy stat | grep MAX_PRIORITY | cut -d"=" -f2`

    # ʱĴ󣬱Ᵽ֤ܴ
    tmpargs="id=${CGI_id} name=${CGI_name} rate=16000000 quota=${CGI_quota}"
	errmsg=`${FLOWEYE} policy setbwo ${tmpargs}`
    sync_floweye "policy setbwo ${tmpargs}"

    num=1
    while [ ${num} -le ${pri_max_num} ]
    do
        eval cmdargs="\"name=${CGI_name} pri=${num} maxrate=\$CGI_maxrate_${num} gbw=\$CGI_gbw_${num} desc=\$CGI_desc_${num}\""
        errmsg=`${FLOWEYE} policy sethtb ${cmdargs}`
        [ $? -ne 0 ] && retjson 1 "${LANG003:=ʧ}"
        sync_floweye "policy sethtb ${cmdargs}"
        num=$((${num}+1))
    done

    [ "${CGI_quota}" = "" ] && CGI_quota=0

    editargs="id=${CGI_id} name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}"
	errmsg=`${FLOWEYE} policy setbwo ${editargs}`

    [ $? -ne 0 ] && retjson 1 "${LANG003:=ʧ}:${errmsg}"

    sync_floweye "policy setbwo ${editargs}"
    WEB_LOGGER "${LANG004:=༭ͨ}" "${editargs}"
    retjson 0 "${LANG002:=ɹ}"
}


copy_data_pie()
{
    # ͨ
    [ "${CGI_quota}" = "" ] && CGI_quota=0
    [ "${CGI_name}" = "" ] && retjson 1 "INV_NAME"
    [ "${CGI_rate}" = "" ] && retjson 1 "INV_RATE"

    errmsg=`${FLOWEYE} policy addbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}`

    if [ $? -ne 0 ]; then
        retjson 1 "${errmsg}"
    else
        sync_floweye "policy addbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}"
    fi

    # ༭ͨ
    pri_max_num=`${FLOWEYE} policy stat | grep MAX_PRIORITY | cut -d"=" -f2`
    num=1
    while [ ${num} -le ${pri_max_num} ]
    do
        eval cmdargs="\"name=${CGI_name} pri=${num} maxrate=\$CGI_maxrate_${num} gbw=\$CGI_gbw_${num} desc=\$CGI_desc_${num}\""
        errmsg=`${FLOWEYE} policy sethtb ${cmdargs}`
        [ $? -ne 0 ] && retjson 1 "${LANG003:=ʧ}"
        sync_floweye "policy sethtb ${cmdargs}"
        num=$((${num}+1))
    done

    [ "${CGI_quota}" = "" ] && CGI_quota=0
    errmsg=`${FLOWEYE} policy setbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}`

    [ $? -ne 0 ] && retjson 1 "${LANG003:=ʧ}:${errmsg}"

    sync_floweye "policy setbwo name=${CGI_name} rate=${CGI_rate} quota=${CGI_quota}"
    WEB_LOGGER "ͨ" "name=${CGI_name} rate=${CGI_rate} ${CGI_quota}"
    retjson 0 "${LANG002:=ɹ}"
}


del_data_pie()
{
    [ "${CGI_name}" = "" ] && retjson 1 "INV_NAME"
    
    errmsg=`${FLOWEYE} policy rmvbwo name=${CGI_name}`

    if [ $? -ne 0 ]; then
        retjson 1 "${errmsg}"
    else
        sync_floweye "policy rmvbwo name=${CGI_name}"
        WEB_LOGGER "${LANG005:=ɾͨ}" "name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
    fi
}


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

    "get_policy_stat")
        retjson 0 "OK" "`get_policy_stat`"
        ;;
        
    "load_edit_env")
        retjson 0 "OK" "`load_edit_env`"
        ;;

    "add_data_pie")
        action_check
        add_data_pie
        ;;

    "edit_data_pie")
        action_check
        edit_data_pie
        ;;
    
    "copy_data_pie")
        action_check
        copy_data_pie
        ;;

    "del_data_pie")
        action_check
        del_data_pie
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
