#!/bin/bash
# -----------------------------------------------------------------------------
# tech_fpd                     
#                                      
# Copyright (c) 2012-2017 by cisco Systems, Inc.
# All rights reserved.
#------------------------------------------------------------------------------

#
# Load the script provided by show-tech infra, which provides worker functions
#
source /opt/cisco/calvados/script/show_tech_main_fragment

#
# Parse the arguments to the script - card type and interface filter are the 
# only support options currently.  No need to use the default parser function,
# as this has been done by caller.
#
__cardtype="unspecified"
trace_only="0"
show_only="0"

while [ "$#" -gt "0" ]; do
    case "$1" in
        -T) trace_only="1"; shift 1;;
        -S) show_only="1"; shift 1;;
        -t) __cardtype="$2"; shift 2;;
        -L) location="$2"; shift 2;;
        *) shift;;
    esac
done
if [ "$__cardtype" == "unspecified" ]; then
    __cardtype=`/opt/cisco/calvados/script/node_type`
fi

__card=`uname -n | cut -d ":" -f2`

#
# List of commands to be run.  East set must finish with a pair of empty 
# strings.  Note that it is important to use single quotes rather than double 
# quotes for the strings containing your commands.
#
# For all of these the __ksh variable is the process that will actually be 
# spawned, the _exec variable is just a string that is printed in the output to
# describe it. 
#

###############################################################################
# Show commands that run on all RP cards                                      #
###############################################################################

#
# misc show RP
#
rp_show_exec[1]='show version'
rp_show__ksh[1]='cat /etc/show_version.txt'

rp_show_exec[2]='show fpdserv log'
rp_show__ksh[2]='cat /misc/scratch/calvados_log_* &>/dev/null'

rp_show_exec[4]='pstack fpdserv'
rp_show__ksh[4]='pstack `pidof fpdserv` &>/dev/null'

rp_show_exec[6]='pstack ccc_driver'
rp_show__ksh[6]='pstack `pidof ccc_driver`'

rp_show_exec[7]='pstack shelf_mgr'
rp_show__ksh[7]='pstack `pidof shelf_mgr`'

rp_show_exec[8]='pstack bios_fpd'
rp_show__ksh[8]='pstack `pidof bios_fpd`'

rp_show_exec[9]='pstack sata_fpd'
rp_show__ksh[9]='pstack `pidof sata_fpd`'

#
# Show commands
#
sys_show_exec[1]='show platform'
sys_show__ksh[1]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show platform"'

sys_show_exec[2]='show platform detail'
sys_show__ksh[2]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show platform detail"'

sys_show_exec[3]='show inventory all'
sys_show__ksh[3]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show inventory all"'

sys_show_exec[4]='show diag detail'
sys_show__ksh[4]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show diag detail"'

sys_show_exec[5]='show hw-module fpd'
sys_show__ksh[5]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show hw-module fpd"'

sys_show_exec[6]='show processes fpdserv location all'
sys_show__ksh[6]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show processes fpdserv location all"'

sys_show_exec[7]='show logging'
sys_show__ksh[7]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show logging | nomore"'

sys_show_exec[8]='show fpd package'
sys_show__ksh[8]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show fpd package"'

sys_show_exec[9]='show processes ccc_driver location all'
sys_show__ksh[9]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show processes ccc_driver location all"'

sys_show_exec[10]='show processes bios_fpd location all'
sys_show__ksh[10]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show processes bios_fpd location all"'

sys_show_exec[11]='show processes sata_fpd location all'
sys_show__ksh[11]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show processes sata_fpd location all"'

function getcmdlinearg {
     awk -vRS=' ' -vFS='='  /$1/' {print $2}' /proc/cmdline
 }

PLATFORM=$(getcmdlinearg platform)

#
# The display() function is the one that does all the work - called by us as 
# this is a worker script.
#
display() {
    print_main_heading "General fpd tech-support info"

    echo "-------Extracting bios_fpd/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/bios_fpd/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd bios_fpd/fpdmgr 2>&1
    fi
    echo "-------Extracting bios_fpd/fpdmgr ctrace logs end----------"
    echo " "
    echo "-------Extracting sata_fpd/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/sata_fpd/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd sata_fpd/fpdmgr 2>&1
    fi
    echo "-------Extracting sata_fpd/fpdmgr ctrace logs end----------"
    echo " "

    echo "-------Extracting plx_fpd/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/plx_fpd/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd plx_fpd/fpdmgr 2>&1
    fi
    echo "-------Extracting plx_fpd/fpdmgr ctrace logs end----------"
    echo " "

    echo "-------Extracting environment/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/environment/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd environment/fpdmgr 2>&1
    fi
    echo "-------Extracting environment/fpdmgr ctrace logs end----------"
    echo " "

    echo "-------Extracting craft_mgr/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/craft_mgr/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd craft_mgr/fpdmgr 2>&1
    fi
    echo "-------Extracting craft_mgr/fpdmgr ctrace logs end----------"
    echo " "

    echo "-------Extracting ccc_driver/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/ccc_driver/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd ccc_driver/fpdmgr 2>&1
    else
        echo "fpdmgr is not running on ccc_driver @loc : $__card "
    fi
    echo "-------Extracting ccc_driver/fpdmgr ctrace logs end----------"
    echo " "
	
    echo "-------Extracting card_mgr/fpdmgr ctrace logs start----------"
    if [ -d "/var/log/ctrace/card_mgr/fpdmgr" ]; then
        /opt/cisco/calvados/bin/ctracedec -gtkAwpd card_mgr/fpdmgr 2>&1
    fi
    echo "-------Extracting card_mgr/fpdmgr ctrace logs end----------"
    echo " "
 
    if [ "$__cardtype" = "SYS" ]; then
        if [ "$trace_only" = "0" ]; then
                exec_commands sys_show
        fi

    else
        case "$__cardtype" in
        "RP"|"CC")
            exec_commands rp_show
            # inv dump
            file=`/opt/cisco/calvados/bin/inv_dump_tool rack | grep inv_RACK | cut -d':' -f2`
            mv $file  /misc/disk1/showtech-fpd-dumps
            echo " "
            echo "inv_dump_tool log moved to /misc/disk1/showtech-fpd-dumps"
    	    if [ "$__cardtype" = "RP" ]; then 
                if [ "$PLATFORM" = "asr9k" ];then
                    echo "-------Extracting fpdserv ctrace for location $location logs start----------"
                     /opt/cisco/calvados/bin/show_cmd "terminal length 0;show fpdserv trace all location $location"
                    echo "-------Extracting fpdserv ctrace for location $location logs end----------"
                    echo " "

                fi	
            fi
            ;;

        "LC")
            ;;

        "FC")
            ;;

        "XC")
            ;;

        esac
    fi
   
    print_main_heading "General fpd tech-support info complete"
}

display
