#!/bin/sh

. /etc/PG.conf

DEFAULT_SYNC_MODULE="${DEFAULT_SYNC_MODULE} agp app axpdns usernode cgnat conlimit dhcp "
DEFAULT_SYNC_MODULE="${DEFAULT_SYNC_MODULE} dnmap dnspolicy dpi if ipmac ipobj sdwsvr iwanmap logger "
DEFAULT_SYNC_MODULE="${DEFAULT_SYNC_MODULE} nevt policy policygroup2 ntmso pppoeacct pppoeippool "
DEFAULT_SYNC_MODULE="${DEFAULT_SYNC_MODULE} radius rtptime port table dns urlfilter wangroup snmp"
DEFAULT_SYNC_MODULE="${DEFAULT_SYNC_MODULE} malc malcdb malclog"

enable=0
sync_module="${DEFAULT_SYNC_MODULE}"
sync_conf="${PGETC}/web/config_sync.conf"
sync_list="${PGETC}/web/config_sync.list"

urlencode="/usr/ramdisk/bin/urlencode"
task_dir="/usr/ramdisk/tmp/ipe_syncd"
task_log="${task_dir}/ipe_syncd.log"

if [ "`uname -m`" = "aarch64" ]; then
	CURL="/usr/pabin/pacu --connect-timeout 60 -m 120 -k"
else
	CURL="curl --connect-timeout 60 -m 120 -k"
fi

save_log()
{
    cur_time=`date +%s`
	log_msg="{\"ip\":\"${1}\",\"time\":${cur_time},\"cmd\":\"${2}\",\"ret\":\"${3}\"}"

    if [ -f ${task_log} ]; then
        rows=`awk 'END{print NR}' ${task_log}`
        if [ ${rows} -gt 1024 ]; then
            echo "${log_msg}" > ${task_log}
        else
            echo ",${log_msg}" >> ${task_log}
        fi
    else
        echo "${log_msg}" >> ${task_log}
    fi
}


[ -f "${sync_conf}" ] && . ${sync_conf}
[ "${enable}" != "1" ] && exit 0
[ ! -f ${sync_list} ] && touch ${sync_list}

while true
do
    sleep 5

    for fp in `find ${task_dir} -name "*.syncd" | sort`
    do
        # жǷҪͬ
        task="`cat ${fp}`"        
        module=`echo "${task}" | cut -d" " -f1`
        need_sync=`echo " ${sync_module} " | grep " ${module} "`
        if [ "${need_sync}" = "" ]; then
            rm -rf ${fp}
            continue
        fi

        task="floweye ${task}"
        cmd=`${urlencode} -e "${task}"`

        # ͬ
        cat ${sync_list} | while read line
        do
            for item in ${line}
            do
                eval "obj_${item}"
            done

            [ "${obj_sync}" != "1" ] && continue
            [ "${obj_port}" = "" ] && obj_port=443
            obj_api="https://${obj_ip}:${obj_port}/api/config_sync.cgi"
            obj_url="${obj_api}?action=config_sync&key=${obj_key}&cmd=${cmd}"

            errmsg=`${CURL} "${obj_url}"`
            errcode=$?

            if [ ${errcode} -ne 0 ]; then
                save_log "${obj_ip}" "${task}" "طʧ:${errcode}"
            else
                is404=`echo ${errmsg} | grep 404`
                [ "${is404}" != "" ] && errmsg="δӿͬ:404"

                is500=`echo ${errmsg} | grep 500`
                [ "${is500}" != "" ] && errmsg="ͬӿִг:500"

                save_log "${obj_ip}" "${task}" "${errmsg}"
            fi
        done

        # ͬ
        rm -rf ${fp}

    done
done
