# SPDX-FileCopyrightText: 2022 Unisoc (Shanghai) Technologies Co., Ltd.
#
# SPDX-License-Identifier: LicenseRef-Unisoc-General-1.0

#Start before rsyslog, set for ##LASTLOG and others

#! /bin/sh
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DEBUG_VERSION=`cat /etc/os-release | grep "userdebug"`

do_status() {
	if [ ! -d /mnt/data/rsyslog.d ]; then
	    mkdir /mnt/data/rsyslog.d
	fi

	if [ ! -f /mnt/data/rsyslog.d/unirlog.ini ]; then
	    cp /etc/rsyslog.d/unirlog.ini /mnt/data/rsyslog.d/unirlog.ini
	fi

	if [ ! -f /mnt/data/unirlog-service.ini ]; then
	    cp /etc/rsyslog.d/unirlog-service.ini /mnt/data/unirlog-service.ini
	fi

	LAST_LOG_STATUS=`sed '/^last_log_statue/!d;s/.*=//' /mnt/data/rsyslog.d/unirlog.ini`
	CRASHLOG_STATUS=`sed '/^crashlog_status/!d;s/.*=//' /mnt/data/rsyslog.d/unirlog.ini`
	GRCY_STATUS=`sed '/^grcy_status/!d;s/.*=//' /mnt/data/rsyslog.d/unirlog.ini`
	SYSLOG_USER=`sed '/^syslog_user/!d;s/.*=//' /mnt/data/rsyslog.d/unirlog.ini`
	SYSLOG_STATUS=`sed '/^syslog_status/!d;s/.*=//' /mnt/data/rsyslog.d/unirlog.ini`
}

do_syslog() {
	let found_cali=`grep "sprdboot.mode=cali" /proc/cmdline -o | wc -l`
	let found_bbat=`grep "sprdboot.mode=autotest" /proc/cmdline -o | wc -l`
	let found_factorytest=`grep "sprdboot.mode=factorytest" /proc/cmdline -o | wc -l`
	let found_charger=`grep "sprdboot.mode=charger" /proc/cmdline -o | wc -l`
	if [ $SYSLOG_STATUS -eq 0 ]; then
		return
	fi
	if [[ $found_cali -ne 0 ]]||[[ $found_bbat -ne 0 ]]||[[ $found_factorytest -ne 0 ]]||[[ $found_charger -ne 0 ]]; then
		STARTMODE=2
	else
		STARTMODE=5
	fi

	if [ $GRCY_STATUS -ne 0 ]; then
		if [ ! -f /mnt/data/rsyslog.d/unisoc-rsyslog-gcry.conf ]; then
			cp -r /etc/rsyslog.d/unisoc-rsyslog-gcry.conf /mnt/data/rsyslog.d/unisoc-rsyslog-gcry.conf
		fi
	elif [ "$STARTMODE" = "5" ]; then
		if [ ! -f /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf ]; then
			if [ -n "$DEBUG_VERSION" ]; then
				cp -r /etc/rsyslog.d/unisoc-rsyslog-default.conf /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf
				rm /mnt/data/rsyslog.d/unisoc-rsyslog-cbf.conf
			else
				if [ $SYSLOG_USER -eq 0 ]; then
					echo "user enable syslog"
					cp -r /etc/rsyslog.d/unisoc-rsyslog-default.conf /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf
					rm /mnt/data/rsyslog.d/unisoc-rsyslog-cbf.conf
				else
					echo "user disable syslog"
					cp -r /etc/rsyslog.d/unisoc-rsyslog-default.conf /mnt/data/rsyslog.d/unisoc-rsyslog-default.tmpconf
					rm /mnt/data/rsyslog.d/unisoc-rsyslog-cbf.conf
				fi
			fi
		else
			let size=`stat -c "%s" /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf | awk '{print $1}'`
			if [ $size -lt 1024 ];then
			    echo "syslog conf size less 1024"
			    cp -r /etc/rsyslog.d/unisoc-rsyslog-default.conf /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf
			fi
			if [ $SYSLOG_USER -eq 1 ] && [ -z "$DEBUG_VERSION" ]; then
			    echo "user version stop syslog"
				mv -f /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf /mnt/data/rsyslog.d/unisoc-rsyslog-default.tmpconf
			fi
		fi
	else
		if [ ! -f /mnt/data/rsyslog.d/unisoc-rsyslog-cbf.conf ]; then
			cp -r /etc/rsyslog.d/unisoc-rsyslog-cbf.conf /mnt/data/rsyslog.d/unisoc-rsyslog-cbf.conf
			rm /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf
		fi
	fi
}

do_logrotate() {
	if [ ! -d /mnt/data/logrotate.d ]; then
		mkdir /mnt/data/logrotate.d
	fi
	if [ ! -f /mnt/data/logrotate.d/syslog.logrotate ]; then
		cp /etc/logrotate.d/syslog.logrotate /mnt/data/logrotate.d/syslog.logrotate
	fi

	if [ -f /etc/logrotate.d/syslogdir.logrotate ] && [ ! -f /mnt/data/logrotate.d/syslogdir.logrotate ]; then
		cp /etc/logrotate.d/syslogdir.logrotate /mnt/data/logrotate.d/syslogdir.logrotate
	fi
}

do_lastlog() {
	CURRENT_CONF=`cat /mnt/data/rsyslog.d/unisoc-rsyslog-default.conf | grep current.log`
	CURRENT_LOG_L=`echo ${CURRENT_CONF#*/}`
	CURRENT_LOG=/`echo ${CURRENT_LOG_L%;*}`
	CURRENT_PATH=`echo ${CURRENT_LOG%/*}`
	CURRENT_TMPPATH=`echo ${CURRENT_PATH%/*}`/
	
	if [ $LAST_LOG_STATUS -ne 0 ]; then
		if [ -f $CURRENT_LOG ]; then
			mv $CURRENT_LOG* $CURRENT_TMPPATH
			tar -zcvf $CURRENT_PATH/lastlog $CURRENT_TMPPATH/current.log* && \
			rm -rf $CURRENT_TMPPATH/current.log* && \
			logrotate  /mnt/data/logrotate.d/syslog.logrotate &
		fi
	else
		if [ -f $CURRENT_LOG ]; then
			rm -rf $CURRENT_LOG && \
			logrotate  /mnt/data/logrotate.d/syslog.logrotate &
		fi
	fi
}

do_crashlog() {
	if [ $CRASHLOG_STATUS -ne 0 ]; then
		sysctl kernel.print-fatal-signals=1
	else
		sysctl kernel.print-fatal-signals=0
	fi
}

do_setpath() {
	. /usr/bin/setup-log-path
}

case "$1" in
  start)
	echo "rsyslogsetup-init start..."
	do_status
	do_syslog
	do_logrotate
	#do_lastlog
	do_crashlog
	do_setpath
	echo "done"
       ;;
  stop)
        ;;
  reload|force-reload)
        ;;
  restart)
        ;;
  status)
        ;;
  *)
        ;;
esac
exit 0

