#!/bin/sh

. ../common/ajax_common
. /etc/PG.conf
PAINF="${RAMDISK}/etc/panabit.inf"
HTMLROOT="/usr/ramdisk/admin/html"

[ -f "${PAINF}" ] && . ${PAINF}


bridge_list()
{
	# id bps_in bps_out tmp1 tmp2 name
	${FLOWEYE} bridge list format=long | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		printf "%s", dot;
		printf "{";
		printf "\"id\":\"%s\",",  $1;
		printf "\"name\":\"%s\"", $6;
		printf "}";
		if ( dot == "" ) dot = ",";
	}END{
		printf "]";
	}'
}


get_user_info()
{
	login_level=1

	ckfile=`get_cookie_file`
	
	[ -f "${ckfile}" ] && . ${ckfile}
}


load_sys_menu()
{
	[ -f "${PAINF}" ] && . ${PAINF}
	
	menu="${HTMLROOT}/assert/menu/menu.json"

	if [ "${Prober}" = "1" ]; then
		menu="${HTMLROOT}/App/prober/assert/menu.json"
	elif [ "${TAP}" = "1" ]; then
		menu="${HTMLROOT}/App/tap/assert/menu.json"
	elif [ "${PANAFLOW}" = "1" ]; then
		menu="${HTMLROOT}/App/panaflow/assert/menu.json"
	elif [ "${NTM}" = "1" ]; then
		menu="${HTMLROOT}/App/ntm/assert/menu/menu.json"
	fi

	[ "${OEM}" = "cmcc" -o "${OEM}" = "cmcc_ntm" ] && menu="${HTMLROOT}/App/ntm/assert/menu/cmcc_menu.json"
	[ "${OEM}" = "pac" ] && menu="${HTMLROOT}/App/ntm/assert/menu/cmcc_menu.json"
	[ "${CTEL_DOCKER}" = "1" ] && menu="${HTMLROOT}/App/ntm/assert/menu/ctel_menu.json"
	[ "${WUYING}" = "1" ] && menu="${HTMLROOT}/App/ntm/assert/menu/wuying_menu.json"

	# ҳʵȼ
	user_menu="${RAMDISK}/etc/webuser/menu_${PANABIT_USER}.json"

	if [ -f "${user_menu}" -a "${level}" != "0" ]; then
		menu="${user_menu}"
	fi

	print_json_file ${menu}
}


load_sys_url()
{
	[ -f "${PAINF}" ] && . ${PAINF}

	url_file="${HTMLROOT}/assert/menu/url.json"

	if [ "${Prober}" = "1" ]; then
		url_file="${HTMLROOT}/App/prober/assert/url.json"
	elif [ "${TAP}" = "1" ]; then
		url_file="${HTMLROOT}/App/tap/assert/url.json"
	elif [ "${PANAFLOW}" = "1" ]; then
		url_file="${HTMLROOT}/App/panaflow/assert/url.json"
	elif [ "${NTM}" = "1" ]; then
		url_file="${HTMLROOT}/App/ntm/assert/menu/url.json"
	fi

	[ "${OEM}" = "cmcc" ] && url_file="${HTMLROOT}/App/ntm/assert/menu/cmcc_url.json"
	[ "${OEM}" = "pac" ] && url_file="${HTMLROOT}/App/ntm/assert/menu/cmcc_url.json"
	[ "${CTEL_DOCKER}" = "1" ] && url_file="${HTMLROOT}/App/ntm/assert/menu/ctel_url.json"

	print_json_file "${url_file}"
}


get_segdelay()
{
	${FLOWEYE} ntmsegdelay stat | awk -F"=" \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		if($0 == "MODULE_NEXIST") exit;

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


load_sys_release()
{
	L_end=0
	L_start=0
	forever=0
	quick_menu=0
	default_password="panabit"
	WEBACL="${PGETC}/web/webacl.conf"
	
	#OEM
	if [ -f "${RAMDISK}/etc/panabit.inf" ]; then
		. ${RAMDISK}/etc/panabit.inf
	fi

	# PNţȨС3000죬Ϊް桰
	data=`${FLOWEYE} key info`
	if [ $? -eq 0 ]; then
		for nameval in ${data}; do
			eval "L_${nameval}"
		done

		ispn=`echo ${L_oem} | grep "^PN"`
		key_leftdays=`${FLOWEYE} system stat | grep "key_leftdays" | cut -d"=" -f2`
		[ "${ispn}" != "" -a ${key_leftdays} -le 3000 ] && JOS_RELEASE=3
	fi

	# OEM汾Ϣ
	if [ "${CMCC}" = "1" ]; then
		OEM="cmcc_ntm"
		default_password="admin"
	fi

	#Űȫè
	if [ -d "${RAMDISK}/app/catwizade" ]; then
		OEM="ctsgw_cat"
	fi

	#氲TINTM
	if [ "${BUILDREL%% *}" = "QAX-TINTM" ]; then
		OEM="qax_tintm"	
	fi

	# ݲ˵
	if [ -f "${WEBACL}" ]; then
		exist=`grep "quick_menu=1" ${WEBACL}`
		[ "${exist}" != "" ] && quick_menu=1
	fi

	# ʾϲ·
	defult_schtime=`${FLOWEYE} route stat | grep "defult_schtime" | cut -d"=" -f2`

	printf "{"
	printf "\"oem\":\"${OEM}\""
	printf ",\"theme\":\"light\""
	printf ",\"cpuplt\":\"`uname -m`\""
	printf ",\"uname\":\"`uname`\""
	printf ",\"url\":`load_sys_url`"
	printf ",\"bridge\":`bridge_list`"
	printf ",\"pa_desc\":\"${PADESC}\""
	printf ",\"release\":${JOS_RELEASE}"
	printf ",\"login_user\":\"${PANABIT_USER}\""
	printf ",\"user_level\":${login_level}"
	printf ",\"web_ver\":\"${WEB_BUILD_TIME}\""
	printf ",\"license\":\"${L_oem}\""
	printf ",\"quick_menu\":\"${quick_menu}\""
	printf ",\"key\":\"`${FLOWEYE} key getcookie2`\""
	printf ",\"ifnum\":\"`${FLOWEYE} if list | awk 'END{print NR}'`\""
	printf ",\"policy_group\":`${FLOWEYE} policy listgrp | awk 'END{print NR}'`"
	printf ",\"default_malc\":\"`${FLOWEYE} malc list | tail -1 | cut -d" " -f1`\""
	printf ",\"defult_schtime\":\"${defult_schtime}\""
	printf ",\"NTM_PADESC\":\"${NTM_PADESC}\""
	printf ",\"NTM_VERSION\":\"${NTM_VERSION}\""
	printf ",\"NTM_PRODUCT\":\"${NTM_PRODUCT}\""

	[ "${CTEL_DOCKER}" = "1" ] && printf ",\"CTEL_DOCKER\":1"
	
	hwproduct=`vendor_storage -r VENDOR_PLANAR_VERSION_ID -t string 2>/dev/null | grep INFO | cut -d" " -f3`
	[ "${hwproduct}" != "MTAX150B" ] && hwproduct=`${FLOWEYE} cpu stat | grep hwproduct | cut -d'=' -f2`
	printf ",\"hwproduct\":\"${hwproduct}\""

	if [ "${NTM}" = "1" ]; then #NTM汾
		[ "${PAVER}" = "free" ] && JOS_RELEASE=0
		. ../common/ajax_object_lib
		if [ "${OEM}" = "cmcc_ntm" -o "${OEM}" = "cmcc" ]; then
			printf ",\"ntm\":1"
			printf ",\"have_disk\":0"
			printf ",\"cmcc_desc\":\"${CMCC_VERSION}\""
		elif [ "${OEM}" = "pac" ]; then
			printf ",\"ntm\":1"
			printf ",\"have_disk\":0"
		else
			printf ",\"have_disk\":1"
			printf ",\"ntm\":1"
		fi

		# NTM LiteǷҪʽӲ
		disk_need_format=0
		ntm_mountdisk="/usr/ramdisk/bin/ntm_mountdisk"
		[ -f ${ntm_mountdisk} ] && disk=`${ntm_mountdisk} getdisk`
		[ "${disk}" != "" ] && disk_need_format=1

		kywdgrp=`${FLOWEYE} ntmkeywd list showgroup=1`
		[ $? -ne 0 ] && kywdgrp="[]"

		printf ",\"disk_need_format\":${disk_need_format}"
		printf ",\"tunlist\":`lib_tun_list`"
		printf ",\"isp\":`lib_isp_list`"
		printf ",\"iptab\":`lib_iptable_list`"
		printf ",\"threat\":`lib_threat_list`"
		printf ",\"segdelay\":`get_segdelay`"
		printf ",\"kywdgrp\":${kywdgrp}"
	fi

	if [ -f "${PAINF}" ]; then
		awk -F "=" \
		'{
			gsub("\"", "", $2);
			printf ",\"inf_%s\":\"%s\"", $1, $2;
		}' ${PAINF}
	fi

	#TAP汾
	if [ "${TAP}" = "1" ]; then
		printf ",\"tap\":1"
		${FLOWEYE} swchip stat | awk -F "=" \
		'{
			printf ",\"%s\":\"%s\"", $1, $2;
		}'
	fi

	#Ű汾
	if [ "${PANAFLOW}" = "1" ]; then
		printf ",\"panaflow\":1"
	fi

    #ŵ
	if [ "${UNISASE}" = "1" ]; then
		printf ",\"unisase\":1"
	fi

	# is IPTV ?
	IPTV=0
	${FLOWEYE} iptv stat >/dev/null
	if [ $? -eq 0 ]; then
		IPTV=1 
		JOS_RELEASE=4
		printf ",\"iptv\":${IPTV}"
	fi

	realse=`${FLOWEYE} system stat | grep "^hotel=" | cut -d"=" -f2`
	[ "${realse}" = "1" ] && JOS_RELEASE=6

	lictype=`${FLOWEYE} system stat | grep lictype | cut -d"=" -f2`
	[ "${lictype}" = "srx" ] && JOS_RELEASE=7

	# жǷ֧ͨvMGT
	if [ `uname` = "Linux" ]; then
		support_vmgt=0
		have_kni=`ip link list | grep -E "vMGT1|vMGT0"`
		[ "${have_kni}" != "" ] && support_vmgt=1
		[ "${OEM}" != "pa" -a "${OEM}" != "pro" -a "${OEM}" != "wy" -a "${OEM}" != "ctsgw_cat" ] && support_vmgt=0
		printf ",\"support_vmgt\":\"${support_vmgt}\""
	fi
	
	# Ĭ
	is_default_passwd=0
	admin_file="${USER_DIR}/`${ESCTOOL} -e ${PANABIT_USER}`"
	enc_passwd=`grep "^password=" ${admin_file} | cut -d"=" -f2`
	src_passwd=`${ESCTOOL} -d ${enc_passwd}`
	[ "${src_passwd}" = "${default_password}" ] && is_default_passwd=1

	# WEB UI
	if [ -f "${PGETC}/web/webui.conf" ]; then
		awk -F"=" \
		'{
			printf ",\"%s\":\"%s\"", $1, $2;
		}' ${PGETC}/web/webui.conf
	fi

	printf ",\"is_default_passwd\":${is_default_passwd}"
	printf ",\"release\":${JOS_RELEASE}"
	printf "}"
}


load_base_info()
{
	printf "{"
	printf "\"env\":`load_sys_release`"
	printf ",\"menu\":`load_sys_menu`"

	login_level=1
	ckfile=`get_cookie_file`
	login_level=`grep login_level= ${ckfile} | cut -d"=" -f2`

	#ܲʾ
	if [ "${login_level}" = "0" ] ; then
		printf ",\"app\":"

		export CGI_action="_list_local_app_"
		sh ajax_app_store
	fi

	printf "}"

	export CGI_action="fetch_cloud_app"
	sh ajax_app_store >/dev/null 2>&1 &
}



load_base_info_pro()
{	
	type="pro"
	if [ "${CGI_type}" = "ngntm" -o  "${CGI_type}" = "ngnode" ]; then
		type="ngntm"
	fi
	printf "{"
	printf "\"url\":`print_json_file ${HTMLROOT}/App/ntm/assert/menu/${type}_url.json`"
	printf ",\"menu\":`print_json_file ${HTMLROOT}/App/ntm/assert/menu/${type}_menu.json`"
	printf "}"
}



load_sys_env()
{
	[ "${CGI_bridge}" = "" ] && CGI_bridge=0
	
	OSVER=`uname`
	COOKIE=`${FLOWEYE} key getcookie`
	[ "${COOKIE}" = "" ] && COOKIE=`${FLOWEYE} key getcookie2`

	if [ "${PALANG}" = "en" ]; then
		BUILDREL=`echo ${BUILDREL} | sed -r 's/\(.*\)//g'`
	fi

	ippool_max=`${FLOWEYE} ipobj stat | grep "ip_poolsize" | cut -d"=" -f2`
	flowpool_max=`${FLOWEYE} flow stat | grep "pool_size" | cut -d"=" -f2`
    ip_licensecnt=`${FLOWEYE} ipobj stat | grep "ip_licensecnt" | cut -d"=" -f2`

	printf "{"
	printf "\"OSVER\":\"${OSVER}\""
	printf ",\"SYS_TIME\":`date +%s`"
	printf ",\"BUILDDATE\":\"${BUILDDATE}\""
	printf ",\"JOS_RELEASE\":\"${JOS_RELEASE}\""
	printf ",\"BUILDREL\":\"${BUILDREL}\""
	printf ",\"BSDVER\":\"${BSDVER}\""
	printf ",\"L_devid\":\"${COOKIE}\""
	printf ",\"ippool_max\":\"${ippool_max}\""
	printf ",\"flowpool_max\":\"${flowpool_max}\""

    if [ "${PANAFLOW}" = "1" ];then   
       if [ "${ip_licensecnt}" = "40000" ]; then
          iplicense_max=20
       elif [ "${ip_licensecnt}" = "100000" ]; then
          iplicense_max=50
       elif [ "${ip_licensecnt}" = "200000" ]; then
          iplicense_max=100
       elif [ "${ip_licensecnt}" = "400000" ]; then
          iplicense_max=200
       elif [ "${ip_licensecnt}" = "800000" ]; then
          iplicense_max=400
        fi
       printf ",\"iplicense_max\":\"${iplicense_max}\""
    fi

	if [ "${NTM}" = "1" ]; then
		printf ",\"CMCC_DEVNAME\":\"${CMCC_DEVNAME}\""
		${NTMEYE} ntmkey stat | awk -F "=" '{
			printf ",\"N_%s\":\"%s\"", $1, $2;
		}'
		${FLOWEYE} ntmapp stat | awk -F "=" '{
			printf ",\"%s\":\"%s\"", $1, $2;
		}'

		if [ "${OSVER}" = "Linux" ]; then
			cat /proc/meminfo | awk -F " " '{
				split($1, name, ":");
				printf ",\"%s\":\"%s\"", name[1], $2;
			}'
		fi
	fi

	${FLOWEYE} key info | awk \
	'{
		for(i=1; i<NF; i++){
			split($i, a, "=");
			printf ",\"L_%s\":\"%s\"", a[1], a[2];
		}
	}'

	${FLOWEYE} system stat | awk -F "=" '{
		printf ",\"%s\":\"%s\"", $1, $2;
	}'

	${FLOWEYE} dpi stat | awk -F "=" '{
		printf ",\"dpi_%s\":\"%s\"", $1, $2;
	}'

	${FLOWEYE} cpu stat | awk -F "=" '{
		printf ",\"%s\":\"%s\"", $1, $2;
	}'

	curtime=`date +%s`
	
	if [ "`uname`" = "Linux" ]; then
		sysruntime=`cat /proc/stat | grep "^btime" | cut -d' ' -f2`
	else
		sysruntime=`sysctl -n kern.boottime | cut -d',' -f1 | cut -d'=' -f2`
	fi

	printf ",\"sysruntime\":\"$((${curtime} - ${sysruntime}))\""

	printf "}"
}


load_weblog()
{
	logfile="${DATAPATH}/web_${CGI_time}.log"
	
	if [ ! -f ${logfile} ]; then
		printf "[]"
		return
	fi

	awk \
	'BEGIN{
		dot="";
		printf "[";
	}{
		printf "%s", dot;
		printf "{";
		printf "\"time\":\"%s\",", $1;
		printf "\"ip\":\"%s\",", $2;
		printf "\"user\":\"%s\",", $3;
		printf "\"action\":\"%s\",", $4;
		printf "\"args\":\"%s\"", $5;
		printf "}";
		if(dot=="") dot=",";
	}END{
		printf "]";
	}' ${logfile}
}


load_disk_list()
{
	os=`uname`

	awk -v os=${os} \
	'BEGIN{
		dot = "";
		printf "[";	
	}{
		if(NR == 1) next;

		printf "%s", dot;
		printf "{";
		printf "\"filesystem\":\"%s\",", $1;
		printf "\"size\":\"%s\",", $2;
		printf "\"used\":\"%s\",", $3;
		printf "\"avail\":\"%s\",", $4;
		printf "\"capacity\":\"%s\",", $5;

		if(os == "Linux")
			printf "\"mounted\":\"%s\"", $6;
		else {
			printf "\"iused\":\"%s\",", $6;
			printf "\"ifree\":\"%s\",", $7;
			printf "\"iuser_per\":\"%s\",", $8;
			printf "\"mounted\":\"%s\"", $9;
		}
		
		printf "}";
		if(dot == "") dot=",";
	}END{
		printf "]";
	}' << EOF
`
	[ "${os}" = "Linux" ] && df -kh || df -ikh
`
EOF
}


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

cmcc_conf()
{
	if [ ${OEM} = "cmcc" ]; then
		ret=""
		data=`cat /usr/panaetc/ifadmin.conf | awk -F"=" \
			'BEGIN{
				dot = "";
				printf "{";
			}{
				printf "%s\"%s\":\"%s\"", dot, $1, $2;
				if(dot == "") dot= ",";
			}END{
				printf "}";
			}'`

		DIRECTORY="/usr/ramdisk/app/cmcc_wizard"
		ext=''
		if [ -d "$DIRECTORY" ]; then
			ext="1"
		else
			ext="0"
		fi
		ret="{data:${data},ext:${ext}}"

		retjson 0 "ѯɹ" ${ret}
	fi
	
}

case "${CGI_action}" in

	"load_sys_env")
		print_json_head
		load_sys_env
		;;

	"load_base_info")
		get_user_info
		retjson 0 "OK" "`load_base_info`"
		;;

	"load_base_info_pro")
		get_user_info
		retjson 0 "OK" "`load_base_info_pro`"
		;;


	"load_weblog")
		retjson 0 "OK" "`load_weblog`"
		;;
	
	"load_sys_release")
		get_user_info
		retjson 0 "OK" "`load_sys_release`"
		;;

	"_load_sys_release_")
		get_user_info
		load_sys_release
		;;

	"load_disk_list")
		retjson 0 "OK" "`load_disk_list`"
		;;


	"get_sys_time")
		retjson 0 "OK" "`get_sys_time`"
		;;

	"cmcc_conf")
		cmcc_conf
		;;
		

	*)
		retjson 1 "UNKNOW_ACTION!"
		;;
esac
