#!/bin/bash
# -----------------------------------------------------------------------------
# tech_fpd                     
#                                      
# Copyright (c) 2012-2019 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`
__loc=${__card//_/$'/'}

#
# 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"'

sys_show_exec[12]='show install active'
sys_show__ksh[12]='/opt/cisco/calvados/bin/show_cmd "terminal length 0; show install active"'

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 fpdserv ctrace for location $__loc logs start----------"
    /opt/cisco/calvados/bin/show_cmd "terminal length 0;show fpdserv trace all location $__loc"
    echo "-------Extracting fpdserv ctrace for location $__loc logs end----------"
    echo " "

    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"
            ;;

        "LC")
            ;;

        "FC")
            ;;

        "XC")
            ;;

        esac
    fi

    if [ "$PLATFORM" = "asr9k" ];then
        if [ "$__cardtype" = "RP" -o "$__cardtype" = "LC" ];then
            echo "-------Extracting rmon_spi_writer ctrace logs start----------"
            if [ "$__cardtype" = "RP" ];then
                chvrf 0 scp my_host://var/log/ctrace/rmon_spi_writer_rp/rmon_spi_writer_rp/ctrace_* /var/log/ctrace/rmon_spi_writer_rp/rmon_spi_writer_rp/
                /opt/cisco/calvados/bin/ctracedec -gtlkAwpd rmon_spi_writer_rp | grep src/spi_writer
            else
                chvrf 0 scp my_host://var/log/ctrace/rmon_spi_writer_lc/rmon_spi_writer_lc/ctrace_* /var/log/ctrace/rmon_spi_writer_lc/rmon_spi_writer_lc/
                /opt/cisco/calvados/bin/ctracedec -gtlkAwpd rmon_spi_writer_lc | grep src/spi_writer
            fi
            echo "-------Extracting rmon_spi_writer ctrace logs end----------"
            echo "  "
            echo "-------Dump current golden locking glock.log start----------"
            cat /misc/scratch/pcie/glock.log 2>&1
            echo "-------Dump current golden locking glock.log end----------"
            echo "  "
            echo "-------Dump current golden locking flash.calvados.log start----------"
            cat /misc/scratch/pcie/flash.calvados.log 2>&1
            echo "-------Dump current golden locking flash.calvados.log end----------"
            echo "  "
            echo "-------Dump older golden locking logs start----------"
            iteration=0;
            for f in /misc/scratch/pcie.*/pcie.tgz; do
                if [ -r $f ];then
                    iteration=$((iteration+1))
                    echo "-------Dump older golden locking Iteration $iteration start----------"
                    tar -xf $f glock.log
                    tar -xf $f flash.calvados.log
                    echo "-------Dump older golden locking glock.log $iteration ----------"
                    cat glock.log 2>&1
                    echo "  "
                    echo "-------Dump older golden locking flash.calvados.log $iteration ----------"
                    cat flash.calvados.log 2>&1
                    echo "  "
                    echo "-------Dump older golden locking Iteration $iteration end----------"
                    echo "  "
                fi
            done
            echo "-------Dump older golden locking logs end----------"
            echo "  "

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

display
