#!/pkg/bin/ksh
#------------------------------------------------------------------
# show tech-support nrs command
#
# November 2006, Thomas Woolway
#
# Copyright (c) 2006-2007, 2009-2017 by cisco Systems, Inc.
# All rights reserved.
#------------------------------------------------------------------

#
# Include the standard show tech-support functions
#
. /pkg/bin/show_tech_main_fragment

#
# Shared Plane Commands
#
shared_exec[1]="show nrs handles data all"
shared__ksh[1]='nrs_show -d'
shared_exec[2]="show nrs trace boot"
shared__ksh[2]='nrs_boot_show_ltrace -L'
shared_exec[3]="show nrs trace error"
shared__ksh[3]='nrs_error_show_ltrace -L'
shared_exec[4]="show nrs trace function slow"
shared__ksh[4]='nrs_func_show_ltrace -L'
shared_exec[5]="show nrs trace function fast"
shared__ksh[5]='nrs_func_fast_show_ltrace -L'
shared_exec[6]="show nrs trace replication"
shared__ksh[6]='nrs_replic_show_ltrace -L'
shared_exec[7]="show nrs trace library error"
shared__ksh[7]='nrs_lib_show_ltrace -L error'
shared_exec[8]="show nrs trace library warning"
shared__ksh[8]='nrs_lib_show_ltrace -L warning'
shared_exec[9]="show nrs trace library function"
shared__ksh[9]='nrs_lib_show_ltrace -L function'
shared_exec[10]="show nrs trace chksm"
shared__ksh[10]='nrs_error_show_ltrace -D'
shared_exec[11]="show rds trace process nrssvr all"
shared__ksh[11]='show_ltrace_rds -P nrssvr -T all'
shared_exec[12]="show gsp trace lib gid 1002"
shared__ksh[12]='show_ltrace_gsp -G 0x3ea'
shared_exec[13]="show processes nrssvr"
shared__ksh[13]='sysmgr_show -o -p nrssvr'
shared_exec[14]="show health gsp"
shared__ksh[14]='show_health_gsp'

#
# Admin Plane Commands
#
admin_exec[1]="admin show nrs handles data all"
admin__ksh[1]='nrs_show -d -A'
admin_exec[2]="admin show nrs trace boot"
admin__ksh[2]='nrs_boot_show_ltrace -A'
admin_exec[3]="admin show nrs trace error"
admin__ksh[3]='nrs_error_show_ltrace -A'
admin_exec[4]="admin show nrs trace function slow"
admin__ksh[4]='nrs_func_show_ltrace -A'
admin_exec[5]="admin show nrs trace function fast"
admin__ksh[5]='nrs_func_fast_show_ltrace -A'
admin_exec[6]="admin show nrs trace replication"
admin__ksh[6]='nrs_replic_show_ltrace -A'
admin_exec[7]="admin show nrs trace library error"
admin__ksh[7]='nrs_lib_show_ltrace -L error'
admin_exec[8]="admin show nrs trace library warning"
admin__ksh[8]='nrs_lib_show_ltrace -L warning'
admin_exec[9]="admin show nrs trace library function"
admin__ksh[9]='nrs_lib_show_ltrace -L function'
admin_exec[10]="admin show nrs trace chksm"
admin__ksh[10]='nrs_error_show_ltrace -C'
admin_exec[11]="show rds trace process nrssvr_admin all"
admin__ksh[11]='show_ltrace_rds -P nrssvr_admin -T all'
admin_exec[12]="show gsp trace lib gid 2"
admin__ksh[12]='show_ltrace_gsp -G 0x2'
admin_exec[13]="show processes nrssvr_admin"
admin__ksh[13]='sysmgr_show -o -p nrssvr_admin'
admin_exec[14]="show health gsp"
admin__ksh[14]='show_health_gsp'

#
# Xversion Plane Commands
#
xversion_exec[1]="show nrs xversion handles data all"
xversion__ksh[1]='nrs_show -d -A'
xversion_exec[2]="show nrs xversion trace boot"
xversion__ksh[2]='nrs_boot_show_ltrace -A'
xversion_exec[3]="show nrs xversion trace error"
xversion__ksh[3]='nrs_error_show_ltrace -A'
xversion_exec[4]="show nrs xversion trace function slow"
xversion__ksh[4]='nrs_func_show_ltrace -A'
xversion_exec[5]="show nrs xversion trace function fast"
xversion__ksh[5]='nrs_func_fast_show_ltrace -A'
xversion_exec[6]="show nrs xversion trace replication"
xversion__ksh[6]='nrs_replic_show_ltrace -A'
xversion_exec[7]="show nrs xversion trace library error"
xversion__ksh[7]='nrs_lib_show_ltrace -L error'
xversion_exec[8]="show nrs xversion trace library warning"
xversion__ksh[8]='nrs_lib_show_ltrace -L warning'
xversion_exec[9]="show nrs xversion trace library function"
xversion__ksh[9]='nrs_lib_show_ltrace -L function'
xversion_exec[10]="show nrs xversion trace chksm"
xversion__ksh[10]='nrs_error_show_ltrace -C'
xversion_exec[11]="show health gsp"
xversion__ksh[11]='show_health_gsp'
xversion_exec[12]="show rds trace process nrssvr_global all"
xversion__ksh[12]='show_ltrace_rds -P nrssvr_global -T all'

#
# For admin client processes
#
admcli_exec[0]="admin show nrs trace library error"
admcli__ksh[0]='nrs_lib_show_ltrace -L error'
admcli_exec[1]="admin show nrs trace library warning"
admcli__ksh[1]='nrs_lib_show_ltrace -L warning'
admcli_exec[2]="admin show nrs trace library function"
admcli__ksh[2]='nrs_lib_show_ltrace -L function'

#
# For lr client processes
#
cli_exec[0]="show nrs trace library error"
cli__ksh[0]='nrs_lib_show_ltrace -L error'
cli_exec[1]="show nrs trace library warning"
cli__ksh[1]='nrs_lib_show_ltrace -L warning'
cli_exec[2]="show nrs trace library function"
cli__ksh[2]='nrs_lib_show_ltrace -L function'
#
# Show blocked processes
#
block_exec[1]="show processes block"
if [ "$platform" = "panini" ]; then
    block__ksh[1]='sh_proc_ng_blocked'
else
    block__ksh[1]='show_processes -b'
fi

#
# show logging
#
logging_exec[1]="show logging"
logging__ksh[1]='show_logging'

#
# system commands
#
system_exec[1]="show platform"
# Determine the right ksh command for "show platform"
if [ "$platform" == "viking" ]; then
   system__ksh[1]='show_platform_vkg -e'
elif [ "$platform" == "panini" ]; then
   system__ksh[1]='show_platform_sysdb'
else
   system__ksh[1]='show_platform'
fi
system_exec[2]="show redundancy"
system__ksh[2]='redcon_show'
system_exec[3]="show version"
if [ "$platform" = "panini" ]; then
    system__ksh[3]='ng_show_version'
else
    system__ksh[3]='show_version'
fi

system_exec[4]="sh processes boot"
system__ksh[4]='sysmgr_show -o -b'
system_exec[5]="show processes failover"
system__ksh[5]='sysmgr_show -o -f'

# Find pid of nrssvr and nrssvr_admin
nrssvr="pkg/bin/nrssvr"

OS_STRING=`uname -s`
if [[ ${OS_STRING} = "QNX" ]]; then
    nrssvr_pid=`pidin | grep $nrssvr | cut -c1-8 | head -n 1`
    nrssvr_global_pid=`pidin | grep nrssvr_global | cut -c1-8 | head -n 1`
else
    nrssvr_pid=`ps -ef | grep $nrssvr | grep -v grep | awk '{print $2}'`
    nrssvr_global_pid=`ps -ef | grep nrssvr_global | grep -v grep | awk '{print $2}'`
fi

#
# Follow (attach_process) Commands
#
attach_exec[1]="follow process $nrssvr_pid iteration 1 verbose"
attach__ksh[1]='attach_process -p $nrssvr_pid -i 1'
attach_exec[2]="follow process $nrssvr_global_pid iteration 1 verbose"
attach__ksh[2]='attach_process -p $nrssvr_global_pid -i 1'

#
# Variable used to enable admin mode and set card type commands
# 
admin=0;
__cardtype=`node_type`
xversion=0;
#
# We are interested in the -A and -t option, but send anything else to the standard
# handler
#
while [ "$#" -gt "0" ]; do
    case "$1" in
        -A) admin=1;                    shift 1;;
        -t) __cardtype="$2";            shift 2;;
        -G) xversion=1;                 shift 1;;
        *)  default_parser_function $@; shift $#;;
    esac
done

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

display() {
    #
    # Display a header
    #
    print_main_heading "show tech-support nrs"

    if [ "$__cardtype" == "SYS" ]; then
        #
        # Run logging
        #
        exec_commands logging

        #
        # Run system commands
        #
        exec_commands system
    else
        case "$__cardtype" in
        "DRP"|"RP")
            if [ admin -eq 1 ]; then
                #
                # Collect follow for both NRS processes.
                #  - Collect once here and once towards the end of the show tech to avoid
                #    the sleep which is normally between the iterations of follow
                #
                exec_commands attach
                exec_commands admin
                exec_commands attach
    
                #
                # Show blocked processes
                #
                exec_commands block
            else
                if [ "$xversion" -eq 1 ]; then
                    exec_commands attach
                    exec_commands xversion
                    exec_commands attach
                    #
                    # Show blocked processes
                    #
                else
                    exec_commands attach
                    exec_commands shared
                    exec_commands attach
                    exec_commands block
                fi
            fi
        esac

        case "$__cardtype" in
        "LC"|"SP") 
            if [ admin -eq 1 ]; then
                exec_commands admcli
            else
                exec_commands cli
            fi
        esac
    fi

    #
    # Display a footer
    #
    print_main_heading "show tech-support nrs complete"
}

. /pkg/bin/show_tech_file_fragment

