#!/bin/bash

ORG_PATH=`echo $PATH`
export PATH=/fabos/link_bin:/bin:/usr/bin:/sbin:/usr/sbin:/fabos/link_abin:/fabos/link_sbin:/fabos/link_rbin:/fabos/factory:/fabos/xtool:.:/

if [ $# -ne 1 ]; then
	echo "Usage: sys_mon_dump.sh <number of iterations>"
	exit 1
fi

i=0
iter=$1


if [ $((iter)) -le '0' ]; then
	echo "***ERROR***:      Invalid iteration entered"
	exit 1
fi

for ((i=0; i<$((iter)); i++))
do
mkdir f$i
echo "a_lnk_index,a_lnk_sid,a_lnk_did,a_rxpt,a_txpt,a_sfid,a_dfid,">f$i/f$i.lnk.csv
echo "a_lnk_sts_index,a_lnk_sts_fid,a_lnk_sts_sid,a_lnk_sts_did,a_rxw,a_rxf,a_lnk_sts_ch_hdl,">f$i/f$i.lnk_sts.csv
echo "a_ios_index,a_ios_sid,a_ios_did,a_ios_sfid,a_ios_ch_hdl,">f$i/f$i.ios.csv
echo "a_ios_sts_index,a_ios_sts_type,a_ios_sts_io_num,a_ios_sts_io_cur,a_ios_sts_io_max,a_ios_sts_ect_max,a_ios_sts_frt_max,a_ios_sts_ect,a_ios_sts_frt,a_ios_sts_oio_acc,a_ios_io_num_all,a_ios_ect_all,a_ios_frt_all,">f$i/f$i.ios_sts.csv
echo "a_ios_sts_index,a_ios_sts_type,a_ios_sts_frm_cnt,a_ios_sts_frm_len_acc,">f$i/f$i.ios_int_sts.csv
echo "a_ftb_index,a_ftb_sid,a_ftb_did,">f$i/f$i.ftb.csv
echo "a_ftb_sts_index,a_wr_frmcnt,a_wr_wrdcnt,a_rd_frmcnt,a_rd_wrdcnt,">f$i/f$i.ftb_sts.csv
echo "a_dae_fc_fl_index,a_dae_fc_flow_index,a_dae_fc_stats_index,a_dae_fc_sid,a_dae_fc_did,a_dae_fc_sfid,a_dae_fc_dfid,a_dae_fc_txport,a_dae_fc_rxport,a_dae_fc_ch_hdl,">f$i/f$i.dae.fclrn.csv
echo "a_dae_io_fl_index,a_dae_io_flow_index,a_dae_io_stats_index,a_dae_io_sid,a_dae_io_did,a_dae_io_sfid,a_dae_io_isnvme,a_dae_io_lun_nsid,a_dae_io_svm,a_dae_io_ch_hdl,">f$i/f$i.dae.iolrn.csv
echo "a_dae_fc_st_index,a_dae_fc_flow_index,a_dae_fc_stats_index,a_dae_fc_wcnt,a_dae_fc_frm_cnt,">f$i/f$i.dae.fcstats.csv
echo "a_dae_io_st_index,a_dae_io_stats_index,a_dae_io_cnt,a_dae_io_wcnt,a_dae_io_ect_acc,a_dae_io_ect_max,a_dae_io_frt_acc,a_dae_io_frt_max,a_dae_io_act_io,a_dae_io_act_acc_io,a_dae_io_mact_Act_io,a_dae_io_st_ch_hdl,a_dae_io_st_type,">f$i/f$i.dae.iostats.csv

slotinfo=`ls /proc/fabos/blade/| awk -F '/' '{for(j=1;j<=NF;j++){printf "%s \n", $j}}'`
isslotbased=0
chipinfo=0
slot_nums=0

echo "BEGIN Iteration ####-- $i --#####" >> run_log.txt
echo "BEGIN Iteration #####-- $i --#####"
if [ $slotinfo == 0 ]; then
    bdinfo=`ls /var/images/ | cut -d '/' -f1 | sed 's/SWBD/ /g'`
	echo "slotinfo bdinfo" >> run_log.txt
	echo "$slotinfo $bdinfo" >> run_log.txt
    if [ $bdinfo == 173 ]; then
        chipinfo=6
    elif [ $bdinfo == 184 ]; then
        chipinfo=5
    else
        chipinfo=1
    fi
else
	slot_nums=`slotshow -m | grep ENABLED | grep -E "AP|SW" | awk -F " " '{print $1}'`
	isslotbased=1
	chipinfo=2
fi

echo slotinfo >> run_log.txt
echo $slotinfo >> run_log.txt
echo isslotbased >> run_log.txt
echo $isslotbased >> run_log.txt
echo chipinfo >> run_log.txt
echo $chipinfo >> run_log.txt
echo slot_nums >> run_log.txt
echo $slot_nums >> run_log.txt

for slot in $slot_nums
do
	if [ $isslotbased == 1 ]; then #Get final chip count for slotbased 
		chipinfo=`bladeportmap $slot | grep minis_count | cut -d " " -f1 | cut -d "=" -f2`
	fi
	#get blade id and determine gen6/gen7 db command to be executed
	bladeid=`bladevershow $slot | grep -i 'id'| awk -F':' '{print $2}' | awk -F ' ' '{print $1}'`

	for((chip = 0; chip < $chipinfo; chip++));
	do
		# Refer vobs/projects/springboard/common_src/fos/common/include/fos_swbd.h for blade id info
		case "$bladeid" in
			170|171|178|186|190|196|201|202|204|213)
			#WEDGE | WEDGE64 | SKYWALKER | CHEWBACCA | CHEWBACCA24 | WEDGE_PLUS | TYR | ANAKIN | A_WING | GIMLET
			#C4, C4 plus, GE chip DB commands
			echo "DB command execution for bladeid $bladeid, on slot $slot for chip $chip" >> run_log.txt
			db $slot/$chip stats 13 0 511 | grep sid | grep -v "sid ffff" | awk '{print $1","$3","$5","$7","$9","$11","$13","}' >tmp
			cat tmp>>f$i/f$i.lnk.csv 
			range0=$(cat tmp | wc -l)
			if [ $range0 -eq 0 ];then
				continue
			fi
			db $slot/$chip stats 23 0 $range0| grep sid | awk '{ print $4","$8","$12","$14","$16","$18","$2","}' >tmp
			range0_sts=$(cat tmp | wc -l)
			F0=0
			F1=0
			rm tmp1 >/dev/null 2>&1
			rm tmp2 >/dev/null 2>&1
			while IFS= read -r line;
			do
				F0=$((F1+1))
				F1=$(echo $line | cut -d ',' -f 1)
				for((idx=$((F0)) ;idx<$((F1)); idx++))
				do
					echo "$idx,,,,,,">>tmp1
				done
				echo $line >>tmp1
			done < tmp
			echo "==A==" >> run_log.txt
			cat tmp1 >> f$i/f$i.lnk_sts.csv 
			db $slot/$chip ios show cam main 1024 range $range0 | grep sid | grep -v ffffff | awk '{print NR","$6","$4","$14","$16","}' >tmp
			cat tmp>>f$i/f$i.ios.csv
			range=$(cat tmp | wc -l)
			range=$((range * 2))
			echo "==B==" >> run_log.txt
			db $slot/$chip ios show stats index 4096 range $range >tmp
			cat tmp | head -$((range * 12)) | grep -v "IOS Cmd" | cut -d ":" -f 2 | awk '{print $1}' | tr '\n' ' '  | sed 's/Show/\nShow/g' | sed 's/ /,/g' | sed '1d' |awk -F, '{if(NR%2 == 1) sub("Show","WR");else sub("Show","RD");print}' >tmp2
			cat tmp2 |  awk '{if(NR %2 == 1) a[NR] = $0; else print NR-2 "," a[NR-1] "\n" NR-1 "," $0}' >tmp1
			cat tmp1 >>f$i/f$i.ios_sts.csv
			echo "==C==" >> run_log.txt
			cat tmp | tail -$((range * 3)) | cut -d ":" -f 2 | awk '{print $1}' | tr '\n' ' ' | sed 's/Show/\nShow/g' | sed 's/ /,/g' | sed '1d' |awk -F, '{if(NR%2 == 1) sub("Show","WR");else sub("Show","RD");print}' >tmp2
			cat tmp2 |  awk '{if(NR %2 == 1) a[NR] = $0; else print NR-2 "," a[NR-1] "\n" NR-1 "," $0}' >tmp1
			cat tmp1 >>f$i/f$i.ios_int_sts.csv
			echo "==D==" >> run_log.txt
			db $slot/$chip ftb show ee_stats | grep next_ptr | awk '{ print NR" ," $6"," $5","}' | sed 's/00,/,/g'|sed 's/0x//g'>tmp
			cat tmp>>f$i/f$i.ftb.csv
			range1=$(cat tmp | wc -l)
			range1=$((range1 * 2))
			echo "==E==" >> run_log.txt
			db $slot/$chip ftb show sts_memory 0 $range1 | grep 0x | sed 's/0x//g' | awk '{ print $3","$5$4"," }' | awk '{if(NR %2 == 1) a[NR] = $0; else print NR/2 "," a[NR -1] $0 }' >>f$i/f$i.ftb_sts.csv
				;;

			216|217|218|221|222|223|224)
			#C5 chip DB commands
				db $slot/$chip dae show mem fclrn 0 32768 >tmp
				cat tmp | grep SID | awk -F "]: " '{print $2}' | awk '{print $2","$4","$6","$8","$16","$18","$20","}' > fcpid.txt
				cat tmp | grep SID | awk -F "]:" '{print $1}' | awk -F "[" '{print $2}' | awk -F ":" '{print NR","$1","$2}' > fcidx.txt
				awk 'BEGIN {OFS=" "}{getline line < "fcpid.txt" 
				print $0","line
				}' fcidx.txt >> f$i/f$i.dae.fclrn.csv

				db $slot/$chip dae show mem iolrn 0 12288 >tmp
				cat tmp | grep SID | awk -F "]: " '{print $2}' | awk '{print $2","$4","$6","$8","$10","$12","$14","}' > iopid.txt
				cat tmp | grep SID | awk -F "]:" '{print $1}' | awk -F "[" '{print $2}' | awk -F ":" '{print NR","$1","$2}' > ioidx.txt
				awk 'BEGIN {OFS=" "}{getline line < "iopid.txt" 
				print $0","line
				}' ioidx.txt >> f$i/f$i.dae.iolrn.csv

				db $slot/$chip dae show mem fcstats 0 32768 > tmp
				cat tmp | grep wcnt | awk -F "]: " '{print $2}' | awk '{print $2","$4","}' > fcstats_cnt.txt
				cat tmp | grep wcnt | awk -F "]:" '{print $1}' | awk -F "[" '{print $2}' | awk -F ":" '{print NR","$1","$2}' > fcstats_idx.txt 
				awk 'BEGIN {OFS=" "}{getline line < "fcstats_cnt.txt"
				print $0","line
				}' fcstats_idx.txt >> f$i/f$i.dae.fcstats.csv

				db $slot/$chip dae show mem iostats 0 12288 > tmp
				cat tmp | grep io_cnt | awk -F ":" '{print $2 }' | awk '{print $5","$7","$9","$11","$13","$15","$17","$19","$21","$2","$3","}' > iostats_cnt.txt
				cat tmp | grep "0x"| awk -F "]:" '{print $1}'| awk -F "[" '{printf(NR","$2"\n"NR","$2"\n")}' > iostats_idx.txt
				awk 'BEGIN {OFS=" "}{getline line < "iostats_cnt.txt"
				print $0","line
				}' iostats_idx.txt >> f$i/f$i.dae.iostats.csv

				;;
			*)
				echo "Default case DB commands not executed for the slot $slot with chipid $chip" >> run_log.txt
				continue
				;;
		esac
	done
done

# KSM Layer
flow --debug lnk_flows >/dev/null
cp /tmp/npd-ksm-fc-flows.csv f$i/f$i.ksmlnk.csv

flow --debug lnk_stats >/dev/null
cp /tmp/npd-ksm-fc-stats.csv f$i/f$i.ksmlnk_sts.csv

flow --debug ios_flows >/dev/null
cp /tmp/npd-ksm-ios-flows.csv f$i/f$i.ksmios.csv

flow --debug ios_stats >/dev/null
cp /tmp/npd-ksm-ios-stats.csv f$i/f$i.ksmios_sts.csv

flow --debug dae_fcflows >/dev/null
cp /tmp/npd-ksm-dae-fc-flows.csv f$i/f$i.ksmdae_fc_flow.csv

flow --debug dae_fcstats >/dev/null
cp /tmp/npd-ksm-dae-fc-stats.csv f$i/f$i.ksmdae_fc_sts.csv

flow --debug dae_ioflows >/dev/null
cp /tmp/npd-ksm-dae-io-flows.csv f$i/f$i.ksmdae_io_flows.csv

flow --debug dae_iostats >/dev/null
cp /tmp/npd-ksm-dae-io-stats.csv f$i/f$i.ksmdae_io_sts.csv

flow --debug sfm >/dev/null
cp /tmp/np_sfm.csv f$i/f$i.np_sfm.csv

flow --debug sfm_it >/dev/null 
cp /tmp/np_sfm_it.csv f$i/f$i.np_sfm_it.csv

gzip -r f$i/. >/dev/null 2>&1
tar -czvvf f$i/archive.tar.gz f$i/* >/dev/null 2>&1
rm f$i/f* >/dev/null 2>&1
sleep 10
echo "END Iteration #####-- $i --#####" >> run_log.txt
echo "" >> run_log.txt
echo "END Iteration #####-- $i --#####" 
echo ""
done
