#!/pkg/bin/ksh
#---------------------------------------------------------------------------
#
# show tech-support install command
#
# Jan 2013, Alakananda Krishnamurthy
#
# Copyright (c) 2009, 2013-2019 by cisco Systems, Inc.
# All rights reserved.
#----------------------------------------------------------------------------

. /pkg/bin/show_tech_main_fragment

shopt -s nullglob


#############################################################################
# Commands to be executed once per system
#############################################################################

sys_exec[1]="show platform"
sys__ksh[1]='show_platform_sysdb'
sys_exec[2]="show redundancy"
sys__ksh[2]='redcon_show'
sys_exec[3]="show placement trace all location all"
sys__ksh[3]='show_ltrace_placed -i all -T all'
sys_exec[4]="show config trace"
sys__ksh[4]='show_config_ltrace'
sys_exec[5]="show logging"
sys__ksh[5]='show_logging'
sys_exec[6]="show running config"
sys__ksh[6]='nvgen -c -l 1 -t 1 -o 1'
sys_exec[7]="show install repository"
sys__ksh[7]='sdr_instcmd show install repository'
sys_exec[8]="show install request"
sys__ksh[8]='sdr_instcmd show install request'
sys_exec[9]="show install active"
sys__ksh[9]='sdr_instcmd show install active'
sys_exec[10]="show install inactive"
sys__ksh[10]='sdr_instcmd show install inactive'
sys_exec[11]="show install prepare"
sys__ksh[11]='sdr_instcmd show install prepare'
sys_exec[12]="show install committed"
sys__ksh[12]='sdr_instcmd show install committed'
sys_exec[13]="show install log"
sys__ksh[13]='sdr_instcmd show install log 0'
sys_exec[14]="show version"
sys__ksh[14]='ng_show_version'
sys_exec[15]="show context"
sys__ksh[15]='corehelper_context -c 0x1 -n all'
sys_exec[16]="show placement program sdr_instmgr"
sys__ksh[16]='placed_show -p sdr_instmgr'
sys__ksh[17]=''

collect_logs_system() {
    a=(/etc/build-info.txt)
    if [ -f "$a" ]; then
        all_log1_exec[1]="run cat /etc/build-info.txt"
        all_log1__ksh[1]='cat /etc/build-info.txt'
        all_log1__ksh[2]=''
        exec_commands all_log1
    fi

    b=(/var/log/install/instdb/log/)
    if [ -d "$b" ]; then
        c=(/var/log/install/instdb/log/*.log)
        if [ -f "$c" ]; then
            ls -tr /var/log/install/instdb/log/ > tmpXX.txt
            chmod 777 tmpXX.txt
            while read line; do
                if [ -n "$line" ]; then
                    all_log2_exec[1]="run cat "/var/log/install/instdb/log/"$line"
                    all_log2__ksh[1]="cat "/var/log/install/instdb/log/"$line"
                    all_log2__ksh[2]=''
                    exec_commands all_log2
                fi
            done < tmpXX.txt
            rm tmpXX.txt
        fi
    fi
}

#############################################################################
# Commands to be executed on RPs alone
#############################################################################

rp_pstack_sdr_instmgr_exec[1]="run pstack "$(pgrep sdr_instmgr)""
rp_pstack_sdr_instmgr__ksh[1]='pstack "$(pgrep sdr_instmgr)"'
rp_pstack_sdr_instmgr__ksh[2]=''

rp_show_exec[1]="show processes sdr_instmgr"
rp_show__ksh[1]='sysmgr_show -p sdr_instmgr'
rp_show__ksh[2]=''

collect_logs_on_rp() {
# Collect sdr_instmgr important ctrace    
    rp_trace1_exec[1]="run /pkg/bin/ctracedec -kdtg -A sdr_instmgr/main sdr_instmgr/instcomm_util"
    rp_trace1__ksh[1]="/pkg/bin/ctracedec -kdtg -A sdr_instmgr/main sdr_instmgr/instcomm_util"
    rp_trace1__ksh[2]=''
    exec_commands rp_trace1

# Collect sdr_instmgr less important ctrace    
    rp_trace2_exec[1]="run /pkg/bin/ctracedec -kdtg -A sdr_instmgr/pkgdist_send_lib sdr_instmgr/pkgdist_send_err sdr_instmgr/rpsync sdr_instmgr/rpsync_err"
    rp_trace2__ksh[1]="/pkg/bin/ctracedec -kdtg -A sdr_instmgr/pkgdist_send_lib sdr_instmgr/pkgdist_send_err sdr_instmgr/rpsync sdr_instmgr/rpsync_err"
    rp_trace2__ksh[2]=''
    exec_commands rp_trace2

# Collect sdr_instcmd trace    
    rp_trace3_exec[1]="run /pkg/bin/ctracedec -kdtg -A sdr_instcmd/main"
    rp_trace3__ksh[1]="/pkg/bin/ctracedec -kdtg -A sdr_instcmd/main"
    rp_trace3__ksh[2]=''
    exec_commands rp_trace3
}

#############################################################################
# Commands to be executed on all cards
#############################################################################

all_exec[1]="run ps -ef"
all__ksh[1]='ps -ef'
all_exec[2]="run install_notify_show_ltrace"
all__ksh[2]='install_notify_show_ltrace'
all_exec[3]="show processes blocked loc all"
all__ksh[3]='sh_proc_ng_blocked -l all'
all_exec[4]="show processes boot"
all__ksh[4]='sysmgr_show -o -b'
all_exec[5]="show processes sdr_instagt"
all__ksh[5]='sysmgr_show -p sdr_instagt'
all_exec[6]="run top -bn1"
all__ksh[6]='top -bn1'
all_exec[7]="run rpm -qa"
all__ksh[7]='rpm -qa'
all_exec[8]="run find /var/log/install"
all__ksh[8]='find /var/log/install'
all_exec[9]="run smap /proc/*"
all__ksh[9]='smap /proc/*'
all_exec[10]="run df -h --block-size=M"
all__ksh[10]='df -h --block-size=M'
if [ -d /misc/disk1 ]; then
    all_exec[11]="run df -kh /misc/disk1"
    all__ksh[11]='df -kh /misc/disk1'
fi
all_exec[12]="run du -chx --max-depth=1 /"
all__ksh[12]='du -chx --max-depth=1 /'
all_exec[13]="run du -chx --max-depth=1 /opt/cisco"
all__ksh[13]='du -chx --max-depth=1 /opt/cisco'
all_exec[14]="run free -m"
all__ksh[14]='free -m'
all_exec[15]="run ls -l /pkg/bin/sdr_instmgr"
all__ksh[15]='ls -l /pkg/bin/sdr_instmgr'
all_exec[16]="run ls -l /pkg/bin/sdr_instagt"
all__ksh[16]='ls -l /pkg/bin/sdr_instagt'
all_exec[17]="run losetup -a"
all__ksh[17]='losetup -a'
all_exec[18]="run ifconfig"
all__ksh[18]='ifconfig'
all__ksh[19]=''

all_pstack_sdr_instagt_exec[1]="run pstack "$(pgrep sdr_instagt)""
all_pstack_sdr_instagt__ksh[1]='pstack "$(pgrep sdr_instagt)"'
all_pstack_sdr_instagt__ksh[2]=''

dump_sdr_instmgr_pstack() {
    pid=`pgrep sdr_instmgr`
    if [ -n "$pid" ]; then
        exec_commands rp_pstack_sdr_instmgr
    fi
}

dump_sdr_instagt_pstack() {
    pid=`pgrep sdr_instagt`
    if [ -n "$pid" ]; then
        exec_commands all_pstack_sdr_instagt
    fi
}

#This will backup local rpm database
dump_local_rpmdb()
{
        echo "***backing up local rpm database ***"
        rpmdb_path=`rpm --eval '%{_dbpath}'`
        dst=$__tar_file_directory_on_node"/local"
        mkdir $dst
        `cp -rf  ${rpmdb_path}/* $dst/`
}

collect_logs_on_all_nodes() {
# Collect sdr_instagt important ctrace    
    all_trace1_exec[1]="run /pkg/bin/ctracedec -kdtg -A sdr_instagt/main sdr_instagt/instcomm_util"
    all_trace1__ksh[1]="/pkg/bin/ctracedec -kdtg -A sdr_instagt/main sdr_instagt/instcomm_util"
    all_trace1__ksh[2]=''
    exec_commands all_trace1

# Collect sdr_instagt less important ctrace    
    all_trace2_exec[1]="run /pkg/bin/ctracedec -kdtg -A sdr_instagt/pkgdist_recv_err sdr_instagt/pkgdist_recv_lib sdr_instagt/rpsync sdr_instagt/rpsync_err sdr_instagt/dx"
    all_trace2__ksh[1]="/pkg/bin/ctracedec -kdtg -A sdr_instagt/pkgdist_recv_err sdr_instagt/pkgdist_recv_lib sdr_instagt/rpsync sdr_instagt/rpsync_err sdr_instagt/dx"
    all_trace2__ksh[2]=''
    exec_commands all_trace2

    a=(/install/instdb/local/*.txt)
    if [ -n "$a" ]; then
        all_log2_exec[1]="run cat /install/instdb/local/*.txt"
        all_log2__ksh[1]='cat /install/instdb/local/*.txt'
        all_log2__ksh[2]=''
        exec_commands all_log2 
    fi

    b=(/install/local/*.txt)
    if [ -n "$b" ]; then
        all_log3_exec[1]="run cat /install/local/*.txt"
        all_log3__ksh[1]='cat /install/local/*.txt'
        all_log3__ksh[2]=''
       exec_commands all_log3 
    fi

    c=(/install/local/*.log)
    if [ -n "$c" ]; then
        all_log4_exec[1]="run cat /install/local/*.log"
        all_log4__ksh[1]='cat /install/local/*.log'
        all_log4__ksh[2]=''
        exec_commands all_log4
    fi

    d=(/var/log/install/local/*log)
    if [ -n "$d" ]; then
        all_log5_exec[1]="run cat /var/log/install/local/*log"
        all_log5__ksh[1]='cat /var/log/install/local/*log'
        all_log5__ksh[2]=''
        exec_commands all_log5
    fi

    e=(/var/log/install/)
    if [ -d "$e" ]; then
        all_log6_exec[1]="run find /var/log/install/ -ls"
        all_log6__ksh[1]='find /var/log/install/ -ls'
        all_log6__ksh[2]=''
        exec_commands all_log6
    fi

    f=(/install/)
    if [ -d "$f" ]; then
        all_log7_exec[1]="run find /install/ -ls"
        all_log7__ksh[1]='find /install/ -ls'
        all_log7__ksh[2]=''
        exec_commands all_log7
    fi

    g=(/misc/scratch/core/*core*)
    if [ -n "$g" ]; then
        all_corefiles_exec[1]="run ls -l /misc/scratch/core/*core*"
        all_corefiles__ksh[1]='ls -l /misc/scratch/core/*core*'
        all_corefiles__ksh[2]=''
        exec_commands all_corefiles
    fi

    i=(/dev/shmem/)
    if [ -d "$i" ]; then
        j=(/dev/shmem/sysmgr.log)
        if [ -f "$j" ]; then
            all_log8_exec[1]="run cat /dev/shmem/sysmgr.log"
            all_log8__ksh[1]='cat /dev/shmem/sysmgr.log'
            all_log8__ksh[2]=''
            exec_commands all_log8
        fi
    fi  

}

__cardtype="unspecified";

while [ "$#" -gt "0" ]; do
    case "$1" in
       -t) __cardtype="$2"; shift 2;;
       -l) location="$2"; shift 2;; 
        *) default_parser_function $@; shift $#;;  
    esac
done

if [ "$__cardtype" == "unspecified" ]; then
    __cardtype=`node_type`
fi

cp="/bin/cp"
mkdir="/bin/mkdir"
node_name=`uname -n`
node_subdir=$__tar_file_directory_on_node/$node_name

if [ ! -d "$node_subdir" ]; then
     $mkdir $node_subdir
fi
a=(/var/log/install/sdr_instagt.log*)
if [ -n "$a" ]; then 
   $cp /var/log/install/sdr_instagt.log* $node_subdir
fi
b=(/var/log/install/sdr_instmgr.log*)
if [ -n "$b" ]; then 
   $cp /var/log/install/sdr_instmgr.log* $node_subdir
fi
c=(/var/log/install/sdr_instcmd.log*)
if [ -n "$c" ]; then 
   $cp /var/log/install/sdr_instcmd.log* $node_subdir
fi
d=(/var/log/install/inst_update.log*)
if [ -n "$d" ]; then 
   $cp /var/log/install/inst_update.log* $node_subdir
fi
d=(/var/log/install/disk*log*)
if [ -n "$d" ]; then 
   $cp /var/log/install/disk*log* $node_subdir
fi
e=(/var/log/install/install_functions_py.log*)
if [ -n "$e" ]; then
  $cp /var/log/install/install_functions_py.log* $node_subdir
fi  
f=(/var/log/install/sdr_actioncmd.log*)
if [ -n "$f" ]; then 
   $cp /var/log/install/sdr_actioncmd.log* $node_subdir
fi
g=(/var/log/install/netconf.log*)
if [ -n "$g" ]; then 
   $cp /var/log/install/netconf.log* $node_subdir
fi

display() {
    print_main_heading "show tech-support install"

    if [ "$__cardtype" == "ONESYS" ]; then
         #setting admin flag for collecting showtech from calvados install
         echo "one showtech" >> $__tar_file_directory_on_node/admin_flag 

         #checking for chvrf support
         if [[ `which chvrf` != "" ]]; then
             #adding -n option to prevent calvados console from time out
             ./pkg/sbin/admin-cli-proxy-xr_static -n -p XR << EOF
             run uname -a;run which scp;run chvrf 0 /opt/cisco/calvados/script/show_tech_fast -r -c install -i '$RP_IP' -t /'$__tar_file_directory'/  -m show_tech_install 
EOF
         else
             #adding -n option to prevent calvados console from time out
             /pkg/sbin/admin-cli-proxy-xr_static -n -p XR << EOF
             run uname -a;run which scp;run /opt/cisco/calvados/script/show_tech_fast -r -c install -i '$RP_IP' -t /'$__tar_file_directory'/  -m show_tech_install 
EOF
         fi

    elif [ "$__cardtype" == "SYS" ]; then
        exec_commands sys
        collect_logs_system
	dump_local_rpmdb
    else
        case "$__cardtype" in
          "DRP"|"RP")
            exec_commands rp_show
            dump_sdr_instmgr_pstack
            collect_logs_on_rp
            ;;
        "SC")
            ;;
        "LC")
            ;;
        esac

        exec_commands all
        dump_sdr_instagt_pstack 
        collect_logs_on_all_nodes
    fi
    
    print_main_heading "show tech-support install complete"
}

. /pkg/bin/show_tech_file_fragment


