#!/bin/sh

. ../common/ajax_common

lib_url_list()
{
	${FLOWEYE} newurl list type=tree node=root | awk \
	-v lang="${PALANG}" \
	'BEGIN{
		dot = "";

		printf "[";
	}{
		if($3 == "unknown" || $3 == "default") next;

		title = lang == "" ? $4 : $3;

		printf "%s{", dot;
		if(dot == "") dot = ",";

		printf "\"id\":\"%s\",", $1;
		printf "\"pid\":\"%s\",", $2;
		printf "\"title\":\"%s\",", title;
		printf "\"type\":\"%s\",", $5;
		printf "\"desc\":\"%s\",", $6;
		printf "\"ifblock\":\"%s\",", $7;
		printf "\"blocks\":\"%s\",", $8;
		printf "\"url_num\":\"%s\"", $9;

		printf "}";
	}END{
		printf "]";
	}'
}

add_black(){
    errmsg=`${FLOWEYE} newurl add node=${CGI_node}`
    [ $? -ne 0 ] && retjson "${LANG012:=ʧ}:${errmsg}"
    WEB_LOGGER "URL" "node=${CGI_node}"
    retjson 0 "${LANG006:=ɹ}"
}

remove_black(){
    errmsg=`${FLOWEYE} newurl remove node=${CGI_node}`
    [ $? -ne 0 ] && retjson "${LANG012:=ʧ}:${errmsg}"
    WEB_LOGGER "URL" "node=${CGI_node}"
    retjson 0 "${LANG006:=ɹ}"
}

load_url_log()
{
	[ "${CGI_sort}" = "" ] && CGI_sort="last"
	[ "${CGI_page}" = "" ] && CGI_page=1
	[ "${CGI_limit}" = "" ] && CGI_limit=100

	end=$((${CGI_page} * ${CGI_limit}))
	start=$((${end} - ${CGI_limit}))

	# appid appname flow node aup adown all per1 lup ldown lall per2 bpsup bpsdn bpsall natupbps natdownbps theother
	${FLOWEYE} newurl list type=hitlog | grep -i "${CGI_keyword}" | awk \
	-v end=${end} -v start=${start} -v type=${CGI_type} \
	'BEGIN{
		row = 0;
		dot = "";
		printf "{\"data\":[";
	}{
		if(type != "all" && $6 != type) next;
		row++;
        if(row > end || row <= start) next;
		printf "%s", dot;
		printf "{";
		printf "\"time\":\"%s\",", $2;
		printf "\"url\":\"%s\",", $3;
		printf "\"name\":\"%s\",", $4;
		printf "\"type\":\"%s\"", $5;
		printf "}";
		if(dot == "") dot = ",";
	}END{
		printf "],\"total\":%s}", row;
	}'
}

export_url_log()
{    
    file_name="url_`date +"%Y%m%d%H%M%S"`.log"
    file_path="${WEB_DOWNLOAD}/${file_name}"

    mkdir -p ${WEB_DOWNLOAD}

    [ "${CGI_id}" = "" ] && CGI_id=0
    [ "${CGI_type}" != "" ] && cmdargs="type=${CGI_type}"

    ${FLOWEYE} newurl list type=hitlog | grep -i "${CGI_keyword}" > ${file_path}

    retjson 0 "OK" "\"${file_name}\""
}

query_domain(){
	${FLOWEYE} newurl get url=${CGI_url} | awk \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		if(dot == "") dot = ",";
		printf "\"url\":\"%s\",", $1;
		printf "\"type\":\"%s\",", $4;
		printf "\"ptype\":\"%s\",", $7;
		printf "\"blocks\":\"%s\"", $5;
	}END{
		printf "}";
	}'
}

load_sys_env(){
    ${FLOWEYE} newurl get url_base=1 | awk '
    {
      printf "{";
      for(i=1;i<=NF;i++){
        split($i, arr, "=");
        printf "\"%s\":\"%s\"", arr[1], arr[2];
        if(i<NF) printf ",";
      }
      printf "}";
    }'
}

upgrade_version(){
    errmsg=`${FLOWEYE} newurl load file=${CGI_file}`
	if [ $? -ne 0 ]; then
	   retjson "${LANG012:=ʧ}:${errmsg}"
	else
       cp -f "${CGI_file}" "${PGETC}/url.enc"
	   mv "${CGI_file}" "url.enc"
	   WEB_LOGGER "汾" "file=${CGI_file}"
	   retjson 0 "${LANG006:=ɹ}"
	fi
}

load_urlwhite_list(){
	total=0 dot=""
	[ "${CGI_page}" = "" ] && CGI_page=1
	[ "${CGI_limit}" = "" ] && CGI_limit=100
	end=$((${CGI_page} * ${CGI_limit}))
	start=$((${end} - ${CGI_limit}))

    result=`${FLOWEYE} newurl list type=whitelist | grep -i "${CGI_keyword}" | grep -i "${CGI_firstlevel}" | grep -i "${CGI_secondlevel}"`

	if [ "${result}" = "" ]; then
		echo "{\"total\":0,\"data\":[]}"
		return 0
	fi
    
	printf "{\"data\":["
	
	while read urlid group_id url desc firstlevel secondlevel
	do
		total=$((${total}+1))
		[ ${total} -le ${start} -o ${total} -gt ${end} ] && continue

        printf "${dot}"
        printf "{"
        printf "\"urlid\":\"${urlid}\","
        printf "\"group_id\":\"${group_id}\","
        printf "\"url\":\"${url}\","
        printf "\"desc\":\"${desc}\","
        printf "\"firstlevel\":\"${firstlevel}\","
        printf "\"secondlevel\":\"${secondlevel}\""
        printf "}"
		
		[ "${dot}" = "" ] && dot=","
		
	done << EOF
	${result}
EOF

	printf "],\"total\":%d}" ${total};
}

add_urlwhite(){
    errmsg=`${FLOWEYE} newurl add whitelist=1 url=${CGI_url} desc=${CGI_desc}`
    [ $? -ne 0 ] && retjson "${LANG012:=ʧ}:${errmsg}"
    WEB_LOGGER "" "url=${CGI_url} desc=${CGI_desc}"
    retjson 0 "${LANG006:=ɹ}"
}

remove_urlwhite(){
    for obj in `echo "${CGI_urlid}" | tr "," " "`
       do 
           cmdargs="urlid=$obj"
           errmsg=`${FLOWEYE} newurl remove whitelist=1 ${cmdargs}`
           [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
      done
    WEB_LOGGER "ɾ" "urlid=${CGI_urlid}"
    retjson 0 "${LANG006:=ɹ}"
}

export_urlwhite_csv(){

    mkdir -p ${WEB_DOWNLOAD}

    file_name="_`date "+%Y%m%d_%H%M%S"`.csv"
    download_path="${WEB_DOWNLOAD}/${file_name}"

    echo ",,Ϣ" > ${download_path}

    ${FLOWEYE} newurl list type=whitelist | awk \
    '{
        printf "%s,%s,%s\n", NR, $3, $4;
    }' >> ${download_path}

    WEB_LOGGER ""
    retjson 0 "OK" "\"${file_name}\""
}

import_urlwhite_csv(){
    while read -r line
    do
       # ȥβĿհַոƱз
       line=$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
    
       # 
       [ -z "$line" ] && continue

       set -- $line

       # ļʽУ飺ֶΣ
       if [ $# -ne 2 ]; then
          rm -rf ${CGI_file}
          retjson 1 "${LANG012:=ʧ}: ļʽȷÿиʽΪ ÿո"
       fi

       # ȥ $1  $2 ǰĿոͻз
       url=$(echo "$1" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
       raw_desc=$(echo "$2" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')

       desc=`utf8togb2312 "$raw_desc"`
       errmsg=`${FLOWEYE} newurl add whitelist=1 url=$1 desc=$desc`
       if [ $? -ne 0 ]; then
          rm -rf ${CGI_file}
          retjson 1 "${LANG012:=ʧ}:${errmsg}"
       fi
    done <<EOF
`cat ${CGI_file}`
EOF
       rm -rf ${CGI_file}
       WEB_LOGGER ""
       retjson 0 "${LANG006:=ɹ}"
}

case "${CGI_action}" in
	"lib_url_list")
		retjson 0 "OK" "`lib_url_list`"
		;;
	"add_black")
        action_check
        add_black
        ;;
	"remove_black")
        action_check
        remove_black
        ;;
	"load_url_log")
		retjson 0 "OK" "`load_url_log`"
		;;
	"export_url_log")
        action_check
        export_url_log
        ;;
	"query_domain")
        action_check
        retjson 0 "OK" "`query_domain`"
        ;;
    "load_sys_env")
		retjson 0 "OK" "`load_sys_env`"
		;;
    "upgrade_version")
        action_check
        upgrade_version
        ;;
    "load_urlwhite_list")
		retjson 0 "OK" "`load_urlwhite_list`"
		;;
    "add_urlwhite")
        action_check
        add_urlwhite
        ;;
    "remove_urlwhite")
        action_check
        remove_urlwhite
        ;;
    "export_urlwhite_csv")
       action_check
       export_urlwhite_csv
       ;;
    "import_urlwhite_csv")
       action_check
       import_urlwhite_csv
       ;;
	*)
		retjson 1 "UNKNOW_ACTION!"
		;;
esac