#!/bin/bash
#Copyright: Horizon Robotic
#Function: Pack kernel/usersapce/mcu/dsp/bpu/bl31/hsm/uboot/pstore/coredump/reset log

#How change the log directory ?
#1. change usr/bin/hobot-log

#How change the ROTATEGENS and ROTATESIZE ?
#1. change usr/bin/hobot-log

#mask some pipe err
# exec 2> /dev/null

ROTATESIZE=2048 #KB
ROTATESIZE_REMOTE=1024 #KB
ROTATEGENS_KER=200
ROTATEGENS_USR=200
ROTATEGENS_REMOTE=200
ROTATEGENS_ALL=$((${ROTATEGENS_REMOTE} * 5 + ${ROTATEGENS_KER} + ${ROTATEGENS_USR}))
ROTATESIZE_BYTES=$((${ROTATESIZE} * 1024))
ROTATESIZE_REMOTE_BYTES=$((${ROTATESIZE_REMOTE} * 1024))
conf_path=/tmp/hb_log.conf
restart_flag_path=/tmp/hb_log_restart_flag

#soc platform
SOC=SuperSoC
#log dir
SOURCE_DIR=/log
source_dir_tmp=$(awk -F '=' '/LOG_DEPLOY_DIR/{print $2}' /etc/runtime_config)
if [ -n "${source_dir_tmp}" ] && [ "${source_dir_tmp}" != "${SOURCE_DIR}" ]; then
	SOURCE_DIR=${source_dir_tmp}
	echo "log source dir: ${SOURCE_DIR}"
	ls /log &> /dev/null || ln -srf ${SOURCE_DIR} /log
fi
LOG_SOURCE_DIR=${SOURCE_DIR}
LOG_FILE_NAME=message
LOG_ARCHIVE_DIR=archive
LOG_SUFFIX=".Log"
LOG_RENAME_CONFIG_FILE=${LOG_SOURCE_DIR}/hb_log_rename.conf
#kernel log information
KER_ORI_LOG_DIR=${LOG_SOURCE_DIR}/kernel
KER_LOG_PREFIX="${SOC}_Kernel"
KER_LOG_NODE=/dev/kmsg
#usersapce log information
USR_ORI_LOG_DIR=${LOG_SOURCE_DIR}/usr
USR_LOG_PREFIX="${SOC}_Usr"
USR_LOG_NODE=/dev/log_main
#mcu0 log information
MCU0_ORI_LOG_DIR=${LOG_SOURCE_DIR}/mcu0
MCU0_LOG_PREFIX="${SOC}_Mcu0"
MCU0_LOG_NODE=/proc/remoteproc_mcu0
#mcu0 log information
MCU1_ORI_LOG_DIR=${LOG_SOURCE_DIR}/mcu1
MCU1_LOG_PREFIX="${SOC}_Mcu1"
MCU1_LOG_NODE=/proc/remoteproc_mcu1
#DSP log information
DSP0_ORI_LOG_DIR=${LOG_SOURCE_DIR}/dsp0
DSP0_LOG_PREFIX="${SOC}_Dsp0"
DSP0_LOG_NODE=/sys/class/remoteproc/remoteproc_vdsp0/log
DSP1_ORI_LOG_DIR=${LOG_SOURCE_DIR}/dsp1
DSP1_LOG_PREFIX="${SOC}_Dsp1"
DSP1_LOG_NODE=/sys/class/remoteproc/remoteproc_vdsp1/log
#BPU log information
BPU0_ORI_LOG_DIR=${LOG_SOURCE_DIR}/bpu0
BPU0_LOG_PREFIX="${SOC}_Bpu0"
BPU0_LOG_NODE=/proc/bpu0_msg
BPU1_ORI_LOG_DIR=${LOG_SOURCE_DIR}/bpu1
BPU1_LOG_PREFIX="${SOC}_Bpu1"
BPU1_LOG_NODE=/proc/bpu1_msg
BPU2_ORI_LOG_DIR=${LOG_SOURCE_DIR}/bpu2
BPU2_LOG_PREFIX="${SOC}_Bpu2"
BPU2_LOG_NODE=/proc/bpu2_msg
BPU3_ORI_LOG_DIR=${LOG_SOURCE_DIR}/bpu3
BPU3_LOG_PREFIX="${SOC}_Bpu3"
BPU3_LOG_NODE=/proc/bpu3_msg
#BL31 log information
BL31_ORI_LOG_DIR=${LOG_SOURCE_DIR}/bl31
BL31_LOG_PREFIX="${SOC}_Bl31"
BL31_LOG_NODE=/dev/bl31_log_dev
#HSM log information
HSM_ORI_LOG_DIR=${LOG_SOURCE_DIR}/hsm
HSM_LOG_PREFIX="${SOC}_Hsm"
HSM_LOG_NODE=support
#OPTEE log information
OPTEE_ORI_LOG_DIR=${LOG_SOURCE_DIR}/optee
OPTEE_LOG_PREFIX="${SOC}_Optee"
OPTEE_LOG_NODE=support
#lantin log information
LANTIN_ORI_LOG_DIR=${LOG_SOURCE_DIR}/lantin
LANTIN_LOG_PREFIX="${SOC}_Lantin"
LANTIN_LOG_NODE=/dev/lantin_log
LANTIN_LOG_PREV_BOOT_FILE="/proc/lantin_log/prev_boot_log"
#uboot log information
UBOOT_FS="/proc/bootloader_log"
UBOOT_LOG=${LOG_SOURCE_DIR}/uboot
UBOOT_LOGMAX=100
#pstore log information
PSTORE_FS=$(awk '/^pstore/{print $2}' /proc/mounts 2> /dev/null)
PSTORE_LOG=${LOG_SOURCE_DIR}/pstore
PSTORE_LOGMAX=100
#mcu ramdump log information
MDUMP_LOG=${LOG_SOURCE_DIR}/mrdump
MDUMP_FS="/sys/devices/platform/soc/soc:mcu_crash"
MDUMP_LOGMAX=100
#reset log information
RESET_LOG_DIR=${LOG_SOURCE_DIR}
RESET_COUNT_MAX=9999
RESET_COUNT=""
RESET_COUNT_LAST=""
RESET_COUNT_NOW=""
#timestamp information for timesync failed
LATEST_LOG_TS=""
TS_COUNT=""
#coredump log information
CORE_DUMP_LOG_DIR=${LOG_SOURCE_DIR}/coredump
CORE_DUMP_LOG_DIR_SIZE=2097152 #KB
STACKDUMP_LOG_DIR=${LOG_SOURCE_DIR}/stackdump
#reset reason
BOOTREASON=$(awk '{print $3}' /sys/kernel/debug/reboot_reason/reboot_reason)
RESET_REASON_MAX=$((1024 * 1024)) #1M
#systemd journal
JOURNAL_LOG_DIR=${LOG_SOURCE_DIR}/journal
JOURNAL_SIZE=102400		#KB, only for calculated capacity occupancy
#wait timesync
WAIT_FOR_TIMESYNC_TIMEOUT=24	#second
YEAR_LIMIT=20250826

output()
{
	echo "hobot-log: $1"
	if [ -e "/dev/kmsg" ]; then
		echo "hobot-log: $1" > /dev/kmsg
	fi
}

#Determine the number of logs based on the size of the file system
calculate_rotate_num()
{
	local SOURCE_DIR_PARENT=$(echo "${SOURCE_DIR}" | awk -F '/' '{print "/"$2}')
	local log_part_size=$(df -Pk "${SOURCE_DIR_PARENT}" | grep -w "${SOURCE_DIR_PARENT}" | awk '{print $2}')
	if [ -z "${log_part_size}" ]; then
		output "ERR: ${SOURCE_DIR_PARENT} not found"
		#automatically creating a log directory in informal environment
		grep -i -e qemu -e fpga -e recovery /proc/cmdline || exit 1
		mkdir -p ${SOURCE_DIR}
		output "WARN: mkdir ${SOURCE_DIR}"
	fi

	#check if system_log_size is greater than the partition size
	expr ${log_part_size} / 1 &> /dev/null
	if [ $? -eq 0 ]; then
		local system_log_size=$((${ROTATESIZE} * ${ROTATEGENS_ALL} + ${JOURNAL_SIZE}))
		if [ "${log_part_size}" -le "${system_log_size}" ]; then
			output "WARN: ${SOURCE_DIR} part size is less then all log size"
		fi
	fi

	echo "ROTATESIZE=${ROTATESIZE}" > ${conf_path}
	echo "ROTATESIZE_REMOTE=${ROTATESIZE_REMOTE}" >> ${conf_path}
	echo "ROTATEGENS_KER=${ROTATEGENS_KER}" >> ${conf_path}
	echo "ROTATEGENS_USR=${ROTATEGENS_USR}" >> ${conf_path}
	echo "ROTATEGENS_REMOTE=${ROTATEGENS_REMOTE}" >> ${conf_path}
	echo "LOG_FILE_NAME=${LOG_FILE_NAME}" >> ${conf_path}
	echo "KER_ORI_LOG_DIR=${KER_ORI_LOG_DIR}" >> ${conf_path}
	echo "USR_ORI_LOG_DIR=${USR_ORI_LOG_DIR}" >> ${conf_path}
	echo "MCU0_ORI_LOG_DIR=${MCU0_ORI_LOG_DIR}" >> ${conf_path}
	echo "MCU1_ORI_LOG_DIR=${MCU1_ORI_LOG_DIR}" >> ${conf_path}
	echo "DSP0_ORI_LOG_DIR=${DSP0_ORI_LOG_DIR}" >> ${conf_path}
	echo "DSP1_ORI_LOG_DIR=${DSP1_ORI_LOG_DIR}" >> ${conf_path}
	echo "BPU0_ORI_LOG_DIR=${BPU0_ORI_LOG_DIR}" >> ${conf_path}
	echo "BPU1_ORI_LOG_DIR=${BPU1_ORI_LOG_DIR}" >> ${conf_path}
	echo "BPU2_ORI_LOG_DIR=${BPU2_ORI_LOG_DIR}" >> ${conf_path}
	echo "BPU3_ORI_LOG_DIR=${BPU3_ORI_LOG_DIR}" >> ${conf_path}
	echo "BL31_ORI_LOG_DIR=${BL31_ORI_LOG_DIR}" >> ${conf_path}
	echo "HSM_ORI_LOG_DIR=${HSM_ORI_LOG_DIR}" >> ${conf_path}
	echo "OPTEE_ORI_LOG_DIR=${OPTEE_ORI_LOG_DIR}" >> ${conf_path}
	echo "LANTIN_ORI_LOG_DIR=${LANTIN_ORI_LOG_DIR}" >> ${conf_path}
	echo "MCU0_LOG_NODE=${MCU0_LOG_NODE}" >> ${conf_path}
	echo "MCU1_LOG_NODE=${MCU1_LOG_NODE}" >> ${conf_path}
	echo "DSP0_LOG_NODE=${DSP0_LOG_NODE}" >> ${conf_path}
	echo "DSP1_LOG_NODE=${DSP1_LOG_NODE}" >> ${conf_path}
	echo "BPU0_LOG_NODE=${BPU0_LOG_NODE}" >> ${conf_path}
	echo "BPU1_LOG_NODE=${BPU1_LOG_NODE}" >> ${conf_path}
	echo "BPU2_LOG_NODE=${BPU2_LOG_NODE}" >> ${conf_path}
	echo "BPU3_LOG_NODE=${BPU3_LOG_NODE}" >> ${conf_path}
	echo "BL31_LOG_NODE=${BL31_LOG_NODE}" >> ${conf_path}
	echo "LANTIN_LOG_NODE=${LANTIN_LOG_NODE}" >> ${conf_path}
}

format_log_rename_config()
{
	printf "%-40s %-15s %-15s %-15s %-15s %-15s %-15s %-15s\n" $1 $2 $3 $4 $5 $6 $7 $8 >> ${LOG_RENAME_CONFIG_FILE}
}
create_log_rename_config()
{
	rm ${LOG_RENAME_CONFIG_FILE}
	format_log_rename_config  \#device_node       ori_dir               prefix               suffix         rotate_num            rotate_size                 log_file_name      log_archive_dir
	format_log_rename_config  ${KER_LOG_NODE}    ${KER_ORI_LOG_DIR}    ${KER_LOG_PREFIX}    ${LOG_SUFFIX}  ${ROTATEGENS_KER}     ${ROTATESIZE_BYTES}         ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${USR_LOG_NODE}    ${USR_ORI_LOG_DIR}    ${USR_LOG_PREFIX}    ${LOG_SUFFIX}  ${ROTATEGENS_USR}     ${ROTATESIZE_BYTES}         ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${MCU0_LOG_NODE}    ${MCU0_ORI_LOG_DIR}    ${MCU0_LOG_PREFIX}    ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_BYTES}         ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${MCU1_LOG_NODE}    ${MCU1_ORI_LOG_DIR}    ${MCU1_LOG_PREFIX}    ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_BYTES}         ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${DSP0_LOG_NODE}   ${DSP0_ORI_LOG_DIR}   ${DSP0_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${DSP1_LOG_NODE}   ${DSP1_ORI_LOG_DIR}   ${DSP1_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${BPU0_LOG_NODE}   ${BPU0_ORI_LOG_DIR}   ${BPU0_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${BPU1_LOG_NODE}   ${BPU1_ORI_LOG_DIR}   ${BPU1_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${BPU2_LOG_NODE}   ${BPU2_ORI_LOG_DIR}   ${BPU2_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${BPU3_LOG_NODE}   ${BPU3_ORI_LOG_DIR}   ${BPU3_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${BL31_LOG_NODE}   ${BL31_ORI_LOG_DIR}   ${BL31_LOG_PREFIX}   ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${HSM_LOG_NODE}    ${HSM_ORI_LOG_DIR}    ${HSM_LOG_PREFIX}    ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${OPTEE_LOG_NODE}  ${OPTEE_ORI_LOG_DIR}  ${OPTEE_LOG_PREFIX}  ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	format_log_rename_config  ${LANTIN_LOG_NODE} ${LANTIN_ORI_LOG_DIR} ${LANTIN_LOG_PREFIX} ${LOG_SUFFIX}  ${ROTATEGENS_REMOTE}  ${ROTATESIZE_REMOTE_BYTES}  ${LOG_FILE_NAME}   ${LOG_ARCHIVE_DIR}
	echo "RESET_COUNT_LAST=${RESET_COUNT_LAST}" >> ${LOG_RENAME_CONFIG_FILE}
	echo "RESET_COUNT_NOW=${RESET_COUNT_NOW}" >> ${LOG_RENAME_CONFIG_FILE}
}

del_by_resetcount_and_time()
{
	local dir="$1"
	local log_cnt_max="$2"
	local log_cnt=$(ls ${dir} | wc -l)
	while [ ${log_cnt} -gt ${log_cnt_max} ]; do
		delfile_name=$(ls ${dir} | awk -F '-' '$2 > '"${RESET_COUNT_NOW}"'' | sort -t '-' -nk 2 -nk 3 | head -n 1)
		if [ -z "${delfile_name}" ]; then
			delfile_name=$(ls ${dir} | sort -t '-' -nk 2 -nk 3 | head -n 1)
			if [ -z "${delfile_name}" ]; then
				return
			fi
		fi
		rm -rf ${dir}/${delfile_name}
		log_cnt=$(ls ${dir} | wc -l)
	done
}

set_pstore()
{
	if [ -n "${PSTORE_FS}" ]; then
		if [ "$(ls -A ${PSTORE_FS})" == "" ];then
			return 0
		fi

		if [ "${BOOTREASON}" == "mainreboot" ] || [ "${BOOTREASON}" == "offsleep" ] || [ "${BOOTREASON}" == "poweroff" ] || [ "${BOOTREASON}" == "hwreset" ] || [ "${BOOTREASON}" == "mreboot" ] || [ "${BOOTREASON}" == "deepsleep" ] || [ "${BOOTREASON}" == "lightsleep" ] || [ "${BOOTREASON}" == "scpreboot" ] || [ "${BOOTREASON}" == "splreboot" ] || [ "${BOOTREASON}" == "freboot" ] || [ "${BOOTREASON}" == "oreboot" ] || [ "${BOOTREASON}" == "ureboot" ] || [ "${BOOTREASON}" == "upanic" ] || [ "${BOOTREASON}" == "kreboot" ] || [ "${BOOTREASON}" == "unknown" ] || [ "${BOOTREASON}" == "mpanic" ]; then
			return 0
		fi

		local pstore_log_date=$(date +%Y_%m_%d_%H_%M_%S)
		local pstore_log_dir="${PSTORE_LOG}/${SOC}_Pstore-${RESET_COUNT_NOW}-${pstore_log_date}"
		mkdir -p ${pstore_log_dir}
		output "pstore log to ${pstore_log_dir}"
		cp ${PSTORE_FS}/* ${pstore_log_dir}/
		hrut_sched_log_parse ${PSTORE_FS}/sched-ramoops-0 > ${pstore_log_dir}/sched-ramoops-0
		if [ -f "${LANTIN_LOG_PREV_BOOT_FILE}" ]; then
			cp ${LANTIN_LOG_PREV_BOOT_FILE} ${pstore_log_dir}/lantinhv-ramoops-0
		fi
		optee_log -p ${pstore_log_dir}/optee-ramoops-0

		del_by_resetcount_and_time ${PSTORE_LOG} ${PSTORE_LOGMAX}
		sync
	fi
}

function set_mrdump() {
	local BOOTREASON=$(cat /sys/kernel/debug/reboot_reason/reboot_reason | awk '{print $3}')
	if [ "${BOOTREASON}" == "mpanic" ]; then
		local mdump_log_date=$(date +%Y_%m_%d_%H_%M_%S)
		local mdump_log_dir="${MDUMP_LOG}/${SOC}_Mdump-${RESET_COUNT_NOW}-${mdump_log_date}"
		mkdir -p ${mdump_log_dir}
		output "mdump log to ${mdump_log_dir}"
		cp ${MDUMP_FS}/crash ${mdump_log_dir}/

		local mdump_log_cnt=$(ls -l ${MDUMP_LOG} | grep "^d" | wc -l)
		while [ ${mdump_log_cnt} -gt ${MDUMP_LOGMAX} ]; do
			local deldir_name=$(ls -ltr ${MDUMP_LOG} | grep "^d" -m 1 | awk '{print $9}')
			rm -rf ${MDUMP_LOG}/${deldir_name}
			mdump_log_cnt=$(ls -l ${MDUMP_LOG} | grep "^d" | wc -l)
		done
		sync
	fi
}

function set_uboot()
{
	if [ -e "${UBOOT_FS}" ]; then
		local uboot_log_date=$(date +%Y_%m_%d_%H_%M_%S)
		local uboot_log_dir="${UBOOT_LOG}/${LOG_ARCHIVE_DIR}"
		mkdir -p ${uboot_log_dir}
		cp ${UBOOT_FS} ${uboot_log_dir}/${SOC}_Uboot-${RESET_COUNT_NOW}-${uboot_log_date}.Log
		del_by_resetcount_and_time ${uboot_log_dir} ${UBOOT_LOGMAX}
		sync
	fi
}

record_reset_count()
{
	if [ ! -f "${RESET_LOG_DIR}/reset_count.txt" ] || [ -z "$(cat "${RESET_LOG_DIR}/reset_count.txt")" ]; then
		RESET_COUNT_LAST="0"
		RESET_COUNT_NOW="0"
	else
		RESET_COUNT_LAST=$(cat "${RESET_LOG_DIR}/reset_count.txt")
		if [ ${RESET_COUNT_LAST} -eq ${RESET_COUNT_MAX} ]; then
			RESET_COUNT_NOW="0"
		else
			RESET_COUNT_NOW=$(expr ${RESET_COUNT_LAST} + 1)
		fi
	fi

	if [ "${is_restart}" != "1" ]; then
		echo "${RESET_COUNT_NOW}" > "${RESET_LOG_DIR}/reset_count.txt"
		sync
		RESET_COUNT_LAST=$(echo ${RESET_COUNT_LAST} | awk '{printf "%04d\n", $1}')
		RESET_COUNT_NOW=$(echo ${RESET_COUNT_NOW} | awk '{printf "%04d\n", $1}')
	else
		RESET_COUNT_LAST=$(echo ${RESET_COUNT_LAST} | awk '{printf "%04d\n", $1}')
		RESET_COUNT_NOW="${RESET_COUNT_LAST}"
	fi
}

#record reset reason, max is 1M
record_reset_reason()
{
	if [ -f ${RESET_LOG_DIR}/reset_reason.txt ]; then
		local file_size=$(wc -c < ${RESET_LOG_DIR}/reset_reason.txt)
		if [ ${file_size} -gt ${RESET_REASON_MAX} ]; then
			tail -n 100 ${RESET_LOG_DIR}/reset_reason.txt > ${RESET_LOG_DIR}/reset_reason_tmp.txt
			cat ${RESET_LOG_DIR}/reset_reason_tmp.txt > ${RESET_LOG_DIR}/reset_reason.txt
			rm ${RESET_LOG_DIR}/reset_reason_tmp.txt
		fi
	fi

	local VERSION=$(cat /etc/version)
	if [ -z "${RESET_COUNT_NOW}" ]; then
		RESET_COUNT_NOW=$(awk '{printf "%04d\n", $1}' "${RESET_LOG_DIR}/reset_count.txt")
	fi
	echo -e "2024-01-01-00-00-00: ${BOOTREASON} \t\t${VERSION} \t${RESET_COUNT_NOW}" >> "${RESET_LOG_DIR}/reset_reason.txt"
	sync
}

update_time_resetreason()
{
	sed -i "\$ s/2024-01-01-00-00-00/$(date +"%Y-%m-%d-%H-%M-%S")/" ${RESET_LOG_DIR}/reset_reason.txt
	sync
}

make_log_dir()
{
	if [ ! -d ${RESET_LOG_DIR} ]; then
		mkdir -p ${RESET_LOG_DIR}
	fi

	if [ ! -d ${STACKDUMP_LOG_DIR} ]; then
		mkdir -p ${STACKDUMP_LOG_DIR}
	fi
}

wait_for_timesync()
{
	local year=$(date +%Y%m%d)
	local loop=0

	while [ "${year}" -lt "${YEAR_LIMIT}" ]; do
		sleep 1
		if [ "$((++loop))" -ge "${WAIT_FOR_TIMESYNC_TIMEOUT}" ]; then
			break;
		fi
		year=$(date +%Y%m%d)
	done

	if [ "${year}" -lt "${YEAR_LIMIT}" ]; then
		output "ERR: timesync failed, change the file time for keep the latest log"
	fi
}

system_config()
{
	#config coredump
	mkdir -p ${CORE_DUMP_LOG_DIR}
	echo "${CORE_DUMP_LOG_DIR}/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
	echo 1 > /proc/sys/kernel/core_uses_pid
}

systemd_journal_config()
{
	#systemd journal
	mkdir -p ${JOURNAL_LOG_DIR}/
	ls /var/log/journal 2> /dev/null || ln -s ${JOURNAL_LOG_DIR}/ /var/log/journal
	journalctl --flush &
	echo "save systemd journal to ${JOURNAL_LOG_DIR}/"
}

message_rotate_and_add_resetcount()
{
	local dir=""
	local num=""
	local tmp_file="/tmp/.hobot-log.message_rotate_and_add_resetcount"
	awk '/message/{print $2,$5}' ${LOG_RENAME_CONFIG_FILE} > ${tmp_file}
	while IFS=' ' read -r dir num; do
		hrut_log_utils rotate ${dir}  ${num}
		hrut_log_utils add_resetcount ${dir} ${RESET_COUNT_LAST}
	done < ${tmp_file}
	sync
}

#for record suspend and resume
echo "$@" | grep -wq "record_reset_reason" && {
	record_reset_reason
	update_time_resetreason
	exit 0
}

if [ -f "${restart_flag_path}" ]; then
	is_restart=$(cat ${restart_flag_path})
else
	is_restart=0
fi
calculate_rotate_num
make_log_dir
record_reset_count
system_config
create_log_rename_config
if [ "${is_restart}" != "1" ]; then
	record_reset_reason
	message_rotate_and_add_resetcount
fi
wait_for_timesync
if [ "${is_restart}" != "1" ]; then
	update_time_resetreason
	set_pstore
	set_mrdump
	set_uboot
	systemd_journal_config
else
	output "WARN: progress restart"
fi

echo 1 > ${restart_flag_path}
systemd-notify --ready

while true; do
	hrut_log_utils del_by_cnt_keyword ${CORE_DUMP_LOG_DIR} "vdsp0" 20
	hrut_log_utils del_by_cnt_keyword ${CORE_DUMP_LOG_DIR} "vdsp1" 20
	hrut_log_utils del_by_cnt ${STACKDUMP_LOG_DIR} 20
	hrut_log_utils del_by_size ${CORE_DUMP_LOG_DIR} ${CORE_DUMP_LOG_DIR_SIZE}

	sleep 600
done

exit 1
