#!/bin/bash
#
# $1 = 'before' or 'after'
# $2 = Logdir	  (absolute path to existing log directory)
# $3 = Run number (optional)

. /etc/autobench.conf || . functions

if [ $# -le 1 ]
then
	echo "Usage: $0 'before|after' logdir [run_number]"
	echo "logdir = toplevel directory for output, directory must exist prior to invocation" 
	echo "run_number is options number suffix for output files."
	return 1
fi    

RUN_SUFFIX=
if [ $# -ge 3 ]
then
        RUN_SUFFIX=.$3
fi  

if [ $1 != 'after' ]
then
	mkdir -p $2/proc/sys/net/core
	if [ -e /proc/sys/net/core/hot_list_length ]; then
		# This doesn't seem to exist in 2.6 kernels
	        cat /proc/sys/net/core/hot_list_length    > $2/proc/sys/net/core/hot_list_length.$1$RUN_SUFFIX
	fi;
        cat /proc/sys/net/core/netdev_max_backlog > $2/proc/sys/net/core/netdev_max_backlog.$1$RUN_SUFFIX
        cat /proc/sys/net/core/rmem_default       > $2/proc/sys/net/core/rmem_default.$1$RUN_SUFFIX
        cat /proc/sys/net/core/wmem_default       > $2/proc/sys/net/core/wmem_default.$1$RUN_SUFFIX
        cat /proc/sys/net/core/rmem_max           > $2/proc/sys/net/core/rmem_max.$1$RUN_SUFFIX
        cat /proc/sys/net/core/wmem_max           > $2/proc/sys/net/core/wmem_max.$1$RUN_SUFFIX
        
        mkdir -p $2/proc/sys/net/ipv4
        cat /proc/sys/net/ipv4/tcp_mem            > $2/proc/sys/net/ipv4/tcp_mem.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_rmem           > $2/proc/sys/net/ipv4/tcp_rmem.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_wmem           > $2/proc/sys/net/ipv4/tcp_wmem.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_timestamps     > $2/proc/sys/net/ipv4/tcp_timestamps.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_sack           > $2/proc/sys/net/ipv4/tcp_sack.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_window_scaling > $2/proc/sys/net/ipv4/tcp_window_scaling.$1$RUN_SUFFIX
        cat /proc/sys/net/ipv4/tcp_adv_win_scale  > $2/proc/sys/net/ipv4/tcp_adv_win_scale.$1$RUN_SUFFIX
        
        mkdir -p $2/proc/sys/kernel
        cat /proc/sys/kernel/sem     > $2/proc/sys/kernel/sem.$1$RUN_SUFFIX
        if [ -f /proc/sys/kernel/msgnmi ]; then
		cat /proc/sys/kernel/msgnmi  > $2/proc/sys/kernel/msgnmi.$1$RUN_SUFFIX
	fi

        mkdir -p $2/proc/sys/fs
        cat /proc/sys/fs/file-max    > $2/proc/sys/fs/file-max.$1$RUN_SUFFIX

        #
        mkdir -p $2/config
        env > $2/config/env.$1$RUN_SUFFIX
	cp /var/log/messages $2/config/messages$RUN_SUFFIX
	if [ -e /var/log/boot.msg ]; then
		cp /var/log/boot.msg $2/config/boot.msg$RUN_SUFFIX
	fi
	if [ -e /var/log/dmesg ]; then
		cp /var/log/dmesg $2/config/dmesg$RUN_SUFFIX
	fi

        ### add network info - netstat etc

        #
        # General System Info
        #
        cat /proc/version    > $2/proc/version.$1$RUN_SUFFIX
        cat /proc/cmdline    > $2/proc/cmdline.$1$RUN_SUFFIX
        lspci -vv > $2/proc/lspci_vv.$1$RUN_SUFFIX 2>&1
        hostname > $2/proc/hostname.$1$RUN_SUFFIX
        #
        if [ -f /proc/pci ]; then
        	cat /proc/pci > $2/proc/pci.$1$RUN_SUFFIX
        fi
        #
        #
        if [ -f /proc/config.gz ]; then
        	cat /proc/config.gz > $2/proc/config.gz.$1$RUN_SUFFIX
        fi
	
        if [ -f /proc/buddyinfo ]; then
        	cat /proc/buddyinfo > $2/proc/buddyinfo.$1$RUN_SUFFIX
        fi

        #
        # Disk IO Info
        #
        if [ -d /proc/scsi ]; then
                mkdir -p $2/proc/scsi
        	if [ -d /proc/scsi/ips ]; then
                        mkdir -p $2/proc/scsi/ips
                        for i in 0 1 2 3 4 5 6 7 8 9
                        do
        		        if [ -f /proc/scsi/ips/$i ]; then
        			        cat /proc/scsi/ips/$i > $2/proc/scsi/ips/$i.$1$RUN_SUFFIX
        		        fi
                        done
                fi
        	if [ -d /proc/scsi/qla2300 ]; then
                        mkdir -p $2/proc/scsi/qla2300
                        for i in 0 1 2 3 4 5 6 7 8 9
                        do
        		        if [ -f /proc/scsi/qla2300/$i ]; then
        			        cat /proc/scsi/qla2300/$i > $2/proc/scsi/qla2300/$i.$1$RUN_SUFFIX
        		        fi
                        done
                fi
        	if [ -d /proc/scsi/qla2200 ]; then
                        mkdir -p $2/proc/scsi/qla2200
                        for i in 0 1 2 3 4 5 6 7 8 9
                        do
        		        if [ -f /proc/scsi/qla2200/$i ]; then
        			        cat /proc/scsi/qla2200/$i > $2/proc/scsi/qla2200/$i.$1$RUN_SUFFIX
        		        fi
                        done
                fi
        	if [ -d /proc/scsi/qla1280 ]; then
                        mkdir -p $2/proc/scsi/qla1280
                        for i in 0 1 2 3 4 5 6 7 8 9
                        do
        		        if [ -f /proc/scsi/qla1280/$i ]; then
        			        cat /proc/scsi/qla1280/$i > $2/proc/scsi/qla1280/$i.$1$RUN_SUFFIX
        		        fi
                        done
                fi
        	if [ -d /proc/scsi/aic7xxx ]; then
                        mkdir -p $2/proc/scsi/aic7xxx
                        for i in 0 1
                        do
        		        if [ -f /proc/scsi/aic7xxx/$i ]; then
        			        cat /proc/scsi/aic7xxx/$i > $2/proc/scsi/aic7xxx/$i.$1$RUN_SUFFIX
        		        fi
                        done
        	fi
        fi
		cp -a /sys/block $2/sys/block$1$RUN_SUFFIX
else 
	diff /var/log/messages $2/config/messages$RUN_SUFFIX > $2/config/log_messages$RUN_SUFFIX
	rm $2/config/messages$RUN_SUFFIX
fi

# ifconfig doesn't like to be in the path sometimes
PATH=$PATH:/sbin:/usr/sbin
ifconfig > $2/config/ifconfig.$1$RUN_SUFFIX
mount    > $2/proc/mount.$1$RUN_SUFFIX
cat /proc/cpuinfo    > $2/proc/cpu_info.$1$RUN_SUFFIX
cat /proc/slabinfo   > $2/proc/slabinfo.$1$RUN_SUFFIX
cat /proc/meminfo    > $2/proc/meminfo.$1$RUN_SUFFIX
cat /proc/interrupts > $2/proc/interrupts.$1$RUN_SUFFIX
cat /proc/stat       > $2/proc/stat.$1$RUN_SUFFIX
cat /proc/uptime     > $2/proc/uptime.$1$RUN_SUFFIX
netstat -a > $2/proc/sys/net/netstata.$1$RUN_SUFFIX
netstat -rn > $2/proc/sys/net/netstatrn.$1$RUN_SUFFIX

if [ -e /proc/meminfo.numa ]; then
	cat /proc/meminfo.numa    > $2/proc/meminfo.numa.$1$RUN_SUFFIX
fi
if [ -f /proc/vmstat ]; then
      	cat /proc/vmstat > $2/proc/vmstat.$1$RUN_SUFFIX
fi
