#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Set_Vlink"	#·
	LANG003="Success"	#ɹ
	LANG004="Del_Vlink"	#ɾ·
	LANG005="Del_Vlink"	#ɾ·
fi


list_glink()
{
    ${FLOWEYE} ilink list | grep "${CGI_keyword}" | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s{", dot;
        printf "\"name\":\"%s\",", $(col++);
        printf "\"ipgid\":\"%s\",", $(col++);
        printf "\"ipgname\":\"%s\",", $(col++);
        printf "\"ifidx\":\"%s\",", $(col++);
        printf "\"inbps\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\",", $(col++);
        printf "\"inbytes\":\"%s\",", $(col++);
        printf "\"outbytes\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


load_addglink_env()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"iptab_list\":`lib_iptable_list`"
    printf ",\"interface_list\":`lib_interface_list`"
    printf "}"
}


add_glink()
{
    cmdargs="name=${CGI_name} ipgid=${CGI_ipgid}"
    if [ "${CGI_ifname}" != "" -a "${CGI_ifname}" != "any" ]; then
        cmdargs="${cmdargs} ifname=${CGI_ifname}"
    fi

	errmsg=`${FLOWEYE} ilink add ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        WEB_LOGGER "ilink" "${cmdargs}"
		retjson 0 "${LANG003:=ɹ}"
    fi
}


edit_glink()
{
    cmdargs="name=${CGI_name} ipgid=${CGI_ipgid}"
    if [ "${CGI_ifname}" != "" -a "${CGI_ifname}" != "any" ]; then
        cmdargs="${cmdargs} ifname=${CGI_ifname}"
    fi

	errmsg=`${FLOWEYE}  ilink set ${cmdargs}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        WEB_LOGGER "༭ilink" "${cmdargs}"
		retjson 0 "${LANG003:=ɹ}"
    fi
}


load_appstat()
{
    ${FLOWEYE} ilink get ipgid=${CGI_ipgid} cmdtype=0 | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s{", dot;
        printf "\"id\":\"%s\",", $(col++);
        printf "\"inbps\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\",", $(col++);
        printf "\"inbytes\":\"%s\",", $(col++);
        printf "\"outbytes\":\"%s\",", $(col++);
        printf "\"appname\":\"%s\",", $(col++);
        printf "\"appcname\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


rmv_glink()
{
    errmsg=`${FLOWEYE}  ilink remove ipgid=${CGI_ipgid}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        WEB_LOGGER "ɾilink" "${cmdargs}"
		retjson 0 "${LANG003:=ɹ}"
    fi
}


ipgroup_bps()
{
	${FLOWEYE} ilink get ipgid=${CGI_ipgid} cmdtype=1 | awk \
    'BEGIN{
        dot = "";

        inbps="";
        outbps="";
    }{
        if($1 == 0) next;
        time = $1 * 1000;
        inbps = sprintf("%s%s{\"x\":%s,\"y\":%s}", inbps, dot, time, $2);
        outbps = sprintf("%s%s{\"x\":%s,\"y\":%s}", outbps, dot, time, $3);
        
        if(dot == "") dot = ",";
    }END{
        printf "[";
        printf "{\"data\":[%s],\"name\":\"inbps\",\"turboThreshold\":0}", inbps;
        printf ",{\"data\":[%s],\"name\":\"outbps\",\"turboThreshold\":0}", outbps;
        printf "]";
    }'
}


ip_list_old()
{
    ${FLOWEYE} ipobj listipa -app ${CGI_name} monitor=1 | awk \
	'BEGIN{
		row = 0;
		dot = "";
		printf "{\"data\":[";
	}{
        
        row++;
		col = 1;
		printf "%s", dot;
		printf "{";
		printf "\"ip\":\"%s\",", $(col++);
		printf "\"appname\":\"%s\",", $(col++);
		printf "\"appcname\":\"%s\",", $(col++);
		printf "\"inbps\":\"%s\",", $(col++);
		printf "\"outbps\":\"%s\",", $(col++);
		printf "\"allbps\":\"%s\",", $(col++);
		printf "\"account\":\"%s\"", $(col++);
		printf "}";
		if(dot == "") dot = ",";
	}END{
		printf "],\"total\":%s}", row;
	}'
}


ip_list()
{
    row=0;
	dot="";
    printf "{\"data\":[";
    exist_id=`${FLOWEYE} table list | grep " ${CGI_ipgname}$" | cut -d" " -f1`
    while read ip appname appcname inbps outbps allbps acct
    do
        exist=`${FLOWEYE} table debug id=${exist_id} ip=${ip}`
        [ "${exist}" = "" ] && continue
        row=$((${row}+1))
        
        printf "${dot}{"
		printf "\"ip\":\"${ip}\","
		printf "\"appname\":\"${appname}\","
		printf "\"appcname\":\"${appcname}\","
		printf "\"inbps\":\"${inbps}\","
		printf "\"outbps\":\"${outbps}\","
		printf "\"allbps\":\"${allbps}\","
		printf "\"account\":\"${acct}\""
        printf "}"
        [ "${dot}" = "" ] && dot=","
    done <<EOF
        `${FLOWEYE} ipobj listipa -app ${CGI_name} monitor=1 `
EOF

    printf "],\"total\":${row}}";
}


apphour_bps()
{
	${FLOWEYE} ilink get ipgid=${CGI_ipgid} axpid=${CGI_axpid} cmdtype=2 | sort -k1 | awk \
    'BEGIN{
        dot = "";
        inbps="";
        outbps="";
    }{
        if($1 == 0) next;
        time = $1 * 1000;
        inbps = sprintf("%s%s{\"x\":%s,\"y\":%s}", inbps, dot, time, $2);
        outbps = sprintf("%s%s{\"x\":%s,\"y\":%s}", outbps, dot, time, $3);
        
        if(dot == "") dot = ",";
    }END{
        printf "[";
        printf "{\"data\":[%s],\"name\":\"inbps\",\"turboThreshold\":0}", inbps;
        printf ",{\"data\":[%s],\"name\":\"outbps\",\"turboThreshold\":0}", outbps;
        printf "]";
    }'
}


btnremove_glink()
{
    for id in `echo ${CGI_items} | tr ";" " "`
    do
        errmsg=`${FLOWEYE} ilink remove ipgid=${id}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
    done

    WEB_LOGGER "${LANG005:=ɾ·}" "ids=${CGI_items}"
	retjson 0 "${LANG003:=ɹ}"
}



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

    "load_addglink_env")
        retjson 0 "OK" "`load_addglink_env`"
        ;;

    "add_glink")
        action_check
        add_glink
        ;;
        
    "edit_glink")
        action_check
        edit_glink
        ;;

    "rmv_glink")
        action_check
        rmv_glink
        ;;

    "load_appstat")
        retjson 0 "OK" "`load_appstat`"
        ;;

    "ipgroup_bps")
		retjson 0 "OK" "`ipgroup_bps`"
		;;

    "ip_list")
		retjson 0 "OK" "`ip_list`"
		;;

    "apphour_bps")
		retjson 0 "OK" "`apphour_bps`"
		;;

    "btnremove_glink")
        action_check
        btnremove_glink
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
