#!/bin/sh

# This seems to be quite complicated.. but necessary.
# The memory usage was too high (breaks some quadros)... so i create smaller chunks

if [ -f /etc/image_features ] ; then
    . /etc/image_features
fi

#The first parameter should be the log zipping directory (f.e. /tmp or /mnt/bbram)

USE_INCREMENTAL_TAR=0

COMPRESS_FOLDER_PATH=$1/compressfolder

/bin/rm -rf $COMPRESS_FOLDER_PATH
/bin/mkdir $COMPRESS_FOLDER_PATH

LOGS_FOLDER_NAME=logs
PROC_FOLDER_NAME=proc
PROGRAMS_FOLDER_NAME=programs
VAR_FOLDER_NAME=var

##. /tmp/featurestatus.conf

# remember IRQ rate values
##LOAD_RATE=$(/bin/cat /proc/sys/debug/irq_rate/fec_load_ir_rate)
##NO_LOAD_RATE=$(/bin/cat /proc/sys/debug/irq_rate/fec_noload_ir_rate)

##echo "10000" > /proc/sys/debug/irq_rate/fec_load_ir_rate
##echo "10000" > /proc/sys/debug/irq_rate/fec_noload_ir_rate
##echo "10000" > /proc/sys/debug/irq_rate/fec_irq_rate

OLDDIR=`pwd`

# pickup failure logs and user logs

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
	cd /mnt/bbram/state
	/bin/tar -cnh failurelogs.tar.gz 2> /dev/null
	/bin/tar -cnh userlogs.tar.gz 2> /dev/null
	for file in `ls failurelogs_*` ; do
		/bin/tar -cnh $file 2> /dev/null
	done
	for file in `ls userlogs_*` ; do
		/bin/tar -cnh $file 2> /dev/null
	done
	cd $OLDDIR
else
	cp -f "/mnt/bbram/state/failurelogs.tar.gz" $COMPRESS_FOLDER_PATH
	cp -f "/mnt/bbram/state/userlogs.tar.gz" $COMPRESS_FOLDER_PATH
	for file in `ls /mnt/bbram/state/failurelogs_*` ; do
		cp -f "$file" $COMPRESS_FOLDER_PATH
	done
	for file in `ls -t /mnt/bbram/state/userlogs_*` ; do
		cp -f "$file" $COMPRESS_FOLDER_PATH
	done
fi

# logs collection part

# Dump MGK connections (this line should be always BEFORE 'for' cycle for /tmp/logs dump)
##/bin/cat /proc/mgk/stream_info > /dev/null

COMPRESS_FOLDER_DIR=$COMPRESS_FOLDER_PATH/$LOGS_FOLDER_NAME
/bin/mkdir $COMPRESS_FOLDER_DIR
for i in `/bin/ls /var/log` ; do
	# check for character device files
	if [ -c /var/log/$i ] || [ -f /var/log/$i ] ; then
		/bin/nbcat /var/log/$i                    >$COMPRESS_FOLDER_DIR/$i
	fi
done

for i in `/bin/ls /tmp/logs` ; do
	# check for character device files
	if [ -c /tmp/logs/$i ] || [ -f /tmp/logs/$i ] ; then
		/bin/nbcat /tmp/logs/$i                   >$COMPRESS_FOLDER_DIR/$i
	fi
done

if [ -c /tmp/cm.out ] ; then
	/bin/nbcat /tmp/cm.out > $COMPRESS_FOLDER_DIR/cm.out
fi

/bin/cp -f /tmp/tcpdump.log $COMPRESS_FOLDER_DIR/tcpdump.log
##/bin/cp -f /tmp/atm.cap $COMPRESS_FOLDER_DIR/atm.cap

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -cnh $LOGS_FOLDER_NAME 2> /dev/null
cd $OLDDIR
/bin/rm -rf $COMPRESS_FOLDER_DIR
fi

# /proc stuff

COMPRESS_FOLDER_DIR=$COMPRESS_FOLDER_PATH/$PROC_FOLDER_NAME
/bin/mkdir $COMPRESS_FOLDER_DIR

/bin/cat /proc/slabinfo                           >$COMPRESS_FOLDER_DIR/proc-slabinfo
/bin/cat /proc/meminfo                            >$COMPRESS_FOLDER_DIR/proc-meminfo
/bin/cat /proc/cpuinfo                            >$COMPRESS_FOLDER_DIR/proc-cpuinfo
/bin/cat /proc/stat                               >$COMPRESS_FOLDER_DIR/proc-stat
/bin/cat /proc/version                            >$COMPRESS_FOLDER_DIR/proc-version
##/bin/cat /proc/epygi_version                      >$COMPRESS_FOLDER_DIR/proc-epygi_version
/bin/cat /proc/uptime                             >$COMPRESS_FOLDER_DIR/proc-uptime
/bin/cat /proc/net/ip_conntrack                   >$COMPRESS_FOLDER_DIR/proc-ip_conntrack

##/bin/cat /proc/fiad/nand/p5-aux1                  >$COMPRESS_FOLDER_DIR/proc-p5-aux1

if [ "$HW_TYPE" == "HW_TYPE_SUNXI" ] ; then
	/bin/cat /proc/fiad/hw-info                       >$COMPRESS_FOLDER_DIR/proc-hw-info
fi

if [ "$HW_TYPE" == "HW_TYPE_PC" ] && [ "$FEATURE_CLOUD_IPPBX_OWN_SERVICE" != "1" ] && [ "$FEATURE_QX1500_IPPBX_OWN_SERVICE" != "1" ]; then
	echo "Unique ID Format -> 06-Firmware Version Number-Last three octets of DSPCARD0_MAC_ADDRESS"  >$COMPRESS_FOLDER_DIR/proc-uniqueid
	/bin/cat /proc/dspmac                       >>$COMPRESS_FOLDER_DIR/proc-uniqueid
fi

##/bin/cat /proc/net/eth0                           >$COMPRESS_FOLDER_DIR/proc-net-eth0
##/bin/cat /proc/net/eth1                           >$COMPRESS_FOLDER_DIR/proc-net-eth1
# looks like 2.6 kernel doesn't have this file
#/bin/cat /proc/net/lan0                           >$COMPRESS_FOLDER_DIR/proc-net-lan0
##/bin/cat /proc/net/irq_rate_info                  >$COMPRESS_FOLDER_DIR/proc-net-irq_rate_info

##/bin/cat /proc/driver/fiadlog_volatile            >$COMPRESS_FOLDER_DIR/proc-fiad_volatile
##/bin/cat /proc/driver/fiadlog_persistent          >$COMPRESS_FOLDER_DIR/proc-fiad_persistent

for i in $(/bin/ls /proc) ; do if [ -d /proc/$i ] ; then cat /proc/$i/status ; echo ; fi ; done > $COMPRESS_FOLDER_DIR/proc-status.txt 2>/dev/null

##my_logfile=$COMPRESS_FOLDER_DIR/proc-fiad
##echo > $my_logfile
##for file in `ls /proc/fiad`; do
##	if [ "$file" != "pld" ]; then
##		echo                                      >>$my_logfile
##		echo "#####################"              >>$my_logfile
##		echo "FILE: /proc/fiad/$file"             >>$my_logfile
##		cat /proc/fiad/$file                      >>$my_logfile
##		echo                                      >>$my_logfile
##	fi
##done
##for file in `ls /proc/fiad/pld`; do
##	if [ "$file" != "register" ]; then
##		echo                                      >>$my_logfile
##		echo "#####################"              >>$my_logfile
##		echo "FILE: /proc/fiad/pld/$file"         >>$my_logfile
##		cat /proc/fiad/pld/$file                  >>$my_logfile
##		echo                                      >>$my_logfile
##	fi
##done
##for file in `ls /proc/fiad/pld/register`; do
##    echo                                          >>$my_logfile
##    echo "#####################"                  >>$my_logfile
##    echo "FILE: /proc/fiad/pld/register/$file"    >>$my_logfile
##    cat /proc/fiad/pld/register/$file             >>$my_logfile
##    echo                                          >>$my_logfile
##done
##my_logfile=$COMPRESS_FOLDER_DIR/proc-mpc8xx_io
##echo > $my_logfile
##for file in `ls /proc/mpc8xx_io`; do
##	echo                                          >>$my_logfile
##	echo "#####################"                  >>$my_logfile
##	echo "FILE: /proc/mpc8xx_io/$file"            >>$my_logfile
##	cat /proc/mpc8xx_io/$file                     >>$my_logfile
##	echo                                          >>$my_logfile
##done

# atm proc files
##ATM_PROC_DIR=$COMPRESS_FOLDER_DIR/proc-atm
##mkdir $ATM_PROC_DIR

##mkdir $ATM_PROC_DIR/net
##for i in `/bin/ls -1 /proc/net/atm` ; do
##	cp -r /proc/net/atm/$i $ATM_PROC_DIR/net
##done

##mkdir $ATM_PROC_DIR/860
##for i in `/bin/ls -1 /proc/mpc8xx_io/860` ; do
##	if [ "`echo /proc/mpc8xx_io/860/$i | grep -v cap | grep -v addr`" != "" ] ; then
##		cp -r /proc/mpc8xx_io/860/$i $ATM_PROC_DIR/860
##	fi
##done
##mkdir $ATM_PROC_DIR/adsl
##for i in `/bin/ls -1 /proc/net/adsl*` ; do
##	if [ "`echo $i | grep -v log`" != "" ] ; then
##		cp -r /proc/net/adsl/$i $ATM_PROC_DIR/adsl
##	fi
##done
##mkdir $ATM_PROC_DIR/gs2237
##for i in `/bin/ls -1 /proc/net/gs2237*` ; do
### (stephan) why did I exculde the status files?
###	if [ "`echo $i | grep -v status`" != "" ] ; then
##		cp -r /proc/net/gs2237/$i $ATM_PROC_DIR/gs2237
###	fi
##done

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -cnh $PROC_FOLDER_NAME 2> /dev/null
cd $OLDDIR
/bin/rm -rf $COMPRESS_FOLDER_DIR
fi

# configuration
if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
	#cd /mnt/flashfs/configs && /bin/tar -cnh current 2> /dev/null
	#cd $OLDDIR
	# exclude ssl.user dir from logs
	cd /mnt/flashfs/configs/current
	CURRENTCONFIGDIRARGS=`/bin/ls * -Ad | grep -v "ssl.user"`
	cd /mnt/flashfs/configs
	for i in $CURRENTCONFIGDIRARGS ; do
		/bin/tar -cnh current/$i
	done
	cd $OLDDIR
else
    #cp -dfR /mnt/flashfs/configs/current $COMPRESS_FOLDER_PATH
    # exclude ssl.user dir from logs
    /bin/mkdir $COMPRESS_FOLDER_PATH/current
	for i in `/bin/ls /mnt/flashfs/configs/current/* -Ad | grep -v "ssl.user"` ; do
	cp -dfR $i $COMPRESS_FOLDER_PATH/current
    done

    if [ "$FEATURE_CLOUD_IPPBX_OWN_SERVICE" = "1" ] ; then
        if [ -f $COMPRESS_FOLDER_PATH/current/dyndns.conf ] ; then
            cat $COMPRESS_FOLDER_PATH/current/dyndns.conf | grep -v "password" >$COMPRESS_FOLDER_PATH/current/dyndns.conf_temp
            mv $COMPRESS_FOLDER_PATH/current/dyndns.conf_temp $COMPRESS_FOLDER_PATH/current/dyndns.conf
        fi
    fi
    if [ -f $COMPRESS_FOLDER_PATH/current/rsyncd.password ] ; then
        rm -f $COMPRESS_FOLDER_PATH/current/rsyncd.password
        rm -f $COMPRESS_FOLDER_PATH/current/rsyncd.secrets
    fi
fi

# calldata (call statistics)
# SPE 17656 Exclude the archive folder from the system logs
if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
#cd /mnt/bbram && /bin/tar -cnh calldata 2> /dev/null
#cd $OLDDIR
cd /mnt/bbram/calldata
CALLDATADIRARGS=`/bin/ls * -Ad | grep -v "archive"`
cd /mnt/bbram
for i in $CALLDATADIRARGS ; do
/bin/tar -cnh calldata/$i
done
cd $OLDDIR
else
#cp -dfR /mnt/bbram/calldata $COMPRESS_FOLDER_PATH
/bin/mkdir $COMPRESS_FOLDER_PATH/calldata
calldatadir=/mnt/bbram/calldata
for i in $(find /mnt/bbram/calldata ! -path "*/archive/*" | grep -v "/mnt/bbram/calldata/archive") ; do
	newpath=${i#"$calldatadir"}
	if [ -d $i ]; then
		/bin/mkdir -p $COMPRESS_FOLDER_PATH/calldata/$newpath
	else
		if [ -c $i ]; then
			/bin/nbcat $i > $COMPRESS_FOLDER_PATH/calldata/$newpath
		else
			cp -dfR $i $COMPRESS_FOLDER_PATH/calldata/$newpath
		fi
	fi
done
fi

# autoconfiguration files
if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd /tmp && /bin/tar -cnh tftproot httpipeconfig 2> /dev/null
cd $OLDDIR
else
cp -dfR /tmp/tftproot $COMPRESS_FOLDER_PATH
cp -dfR /tmp/httpipeconfig $COMPRESS_FOLDER_PATH
fi

# program outputs

COMPRESS_FOLDER_DIR=$COMPRESS_FOLDER_PATH/$PROGRAMS_FOLDER_NAME
/bin/mkdir $COMPRESS_FOLDER_DIR

/bin/date                                         >$COMPRESS_FOLDER_DIR/date-localtime 2>&1
/bin/date -u                                      >$COMPRESS_FOLDER_DIR/date-systemtime 2>&1
/bin/ls -lR /mnt/flashfs                          >$COMPRESS_FOLDER_DIR/ls_of_flashfs 2>&1
/bin/ls -lR /mnt/bbram                            >$COMPRESS_FOLDER_DIR/ls_of_bbram 2>&1
/bin/ls -lR /mnt/ramdisk                          >$COMPRESS_FOLDER_DIR/ls_of_ramdisk 2>&1
/bin/ps -eFL                                      >$COMPRESS_FOLDER_DIR/ps 2>&1
/bin/df                                           >$COMPRESS_FOLDER_DIR/df 2>&1
/bin/ip route show table all                      >$COMPRESS_FOLDER_DIR/ip_route_all 2>&1
/bin/ip addr show                                 >$COMPRESS_FOLDER_DIR/ip_addr_show 2>&1
/bin/ip neigh show                                >$COMPRESS_FOLDER_DIR/ip_neigh_show 2>&1
/bin/ip -s -s link show                           >$COMPRESS_FOLDER_DIR/ip_link_show 2>&1
/bin/ip -6 route                                  >$COMPRESS_FOLDER_DIR/ipv6_route 2>&1
/sbin/route -A inet6                              >>$COMPRESS_FOLDER_DIR/ipv6_route 2>&1
/sbin/ifconfig                                     >$COMPRESS_FOLDER_DIR/ifconfig 2>&1
if [ "$HW_TYPE" == "HW_TYPE_SUNXI" ] ; then
/bin/netstat -an                                 >$COMPRESS_FOLDER_DIR/netstat 2>&1
else
/bin/netstat -apn                                 >$COMPRESS_FOLDER_DIR/netstat 2>&1
fi
/bin/iptables -t nat -nvL                         >$COMPRESS_FOLDER_DIR/iptables_nat 2>&1
/bin/iptables -t filter -nvL                      >$COMPRESS_FOLDER_DIR/iptables_filter 2>&1

/bin/dmesg                                        >$COMPRESS_FOLDER_DIR/dmesg 2>&1

if [ "$HW_TYPE" == "HW_TYPE_PC" ] ; then
/bin/journalctl                                        >$COMPRESS_FOLDER_DIR/journalctl 2>&1
fi

/usr/bin/top -d 1 -n 2 -b                             >>$COMPRESS_FOLDER_DIR/top_stat 2>&1
for sec in `seq 1 2`; do
/usr/bin/top -n 1 -b                                  >>$COMPRESS_FOLDER_DIR/top_proc_stat 2>&1
/bin/cat /proc/stat                               >>$COMPRESS_FOLDER_DIR/top_proc_stat 2>&1
/bin/sleep 1
done

/bin/cat /tmp/runtimeinfo                          >$COMPRESS_FOLDER_DIR/device_info 2>&1

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -cnh $PROGRAMS_FOLDER_NAME 2> /dev/null
cd $OLDDIR
/bin/rm -rf $COMPRESS_FOLDER_DIR
fi

# /var data

COMPRESS_FOLDER_DIR=$COMPRESS_FOLDER_PATH/$VAR_FOLDER_NAME
/bin/mkdir $COMPRESS_FOLDER_DIR

/bin/cat /var/run/interfaces                      >$COMPRESS_FOLDER_DIR/interfaces
/bin/cat /var/run/dhcpd.conf                      >$COMPRESS_FOLDER_DIR/dhcpd.conf
##/bin/cat /var/run/yaku-ns.conf                    >$COMPRESS_FOLDER_DIR/yaku-ns.conf
if [ "$HW_TYPE" == "HW_TYPE_SUNXI" ] ; then
/bin/nbcat /tmp/pending_events.db                 >$COMPRESS_FOLDER_DIR/pending_events.db
/bin/cat /tmp/reg_status_file                     >$COMPRESS_FOLDER_DIR/reg_status_file
/bin/cat /var/state/pending_events.db             >>$COMPRESS_FOLDER_DIR/pending_events.db
else
/bin/cat /var/state/pending_events.db             >$COMPRESS_FOLDER_DIR/pending_events.db
fi

/bin/cat /var/state/dhcp/dhcpd.leases             >$COMPRESS_FOLDER_DIR/dhcpd.leases
/bin/cat /var/state/dhcp/dhclient.leases          >$COMPRESS_FOLDER_DIR/dhclient.leases
/bin/cat /var/state/userstates/globalstatedb      >$COMPRESS_FOLDER_DIR/globalstatedb
/bin/cat /tmp/sessiondatadb                       >$COMPRESS_FOLDER_DIR/sessiondatadb
/bin/cat /tmp/featurestatus.conf                  >$COMPRESS_FOLDER_DIR/featurestatus.conf

# export feature keys with details
/bin/feature -P | grep -v Env: | grep -v Demo:| awk '{printf ("%-60s\t%-5s\t%-10s\t%-10s\t%-10s\t%-80s\n",$1,$2,$4,$6,$7,$8)}' FS='\t' >$COMPRESS_FOLDER_DIR/features

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -cnh $VAR_FOLDER_NAME 2> /dev/null
cd $OLDDIR
/bin/rm -rf $COMPRESS_FOLDER_DIR
fi

# version

/bin/cp -f /etc/version.txt $COMPRESS_FOLDER_PATH/00-version.txt
/bin/cp -f /etc/image_label.txt $COMPRESS_FOLDER_PATH/01-image_label.txt
/bin/cp -f /etc/image_features $COMPRESS_FOLDER_PATH/02-image_features

if [ "$USE_INCREMENTAL_TAR" == '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -c 00-version.txt 01-image_label.txt 02-image_features 2> /dev/null
cd $OLDDIR
fi

if [ "$USE_INCREMENTAL_TAR" != '1' ] ; then
cd $COMPRESS_FOLDER_PATH && /bin/tar -ch * 2> /dev/null
cd $OLDDIR
fi

/bin/rm -rf $COMPRESS_FOLDER_PATH

# write original IRQ rates back

##echo $LOAD_RATE > /proc/sys/debug/irq_rate/fec_load_ir_rate
##echo $NO_LOAD_RATE > /proc/sys/debug/irq_rate/fec_noload_ir_rate
