#!/pkg/bin/ksh
# ---------------------------------------------------------------------
# show_tech_syslog - SYSLOG show tech commands
#
# March 2014 - Aditya Dogra
#
# Copyright (c) 2014, 2019 by cisco Systems, Inc.
# All rights reserved.
#--------------------------------------------------------------------

. /pkg/bin/show_tech_main_fragment


__cardtype="unspecified"

# Parse the arguments to the script.
while [ "$#" -gt "0" ]; do
    case "$1" in
        -t) __cardtype="$2"; shift 2;;
        *)  default_parser_function "$@"; shift $#;;
    esac
done

if [ "$__filename" = "unspecified" ]; then
    echo "show_tech_syslog: output file not specified"
    exit
fi

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


# ***********************************************************
#  Show commands to be run by the show tech-support commands
# ***********************************************************

#############################################################
# Show commands that run once per system
sys_show_exec[1]='show version'
sys_show_exec[2]='show logging'
sys_show__ksh[2]='show_logging'
sys_show_exec[3]="show install active summary"
sys_show_exec[4]="show placement"
sys_show__ksh[4]='placed_show -c node/'
sys_show_exec[5]='show running-config'
sys_show__ksh[5]='nvgen -c -l 1 -t 1 -o 1'
sys_show_exec[6]='show platform'
if [[ "$platform" = "viking" ]]; then
     sys_show__ksh[1]='show_version -b'
     sys_show__ksh[3]='instcmd show install active summary'
     sys_show__ksh[6]='show_platform_vkg -e'
elif [[ "$platform" = "panini" ]]; then
     sys_show__ksh[1]='ng_show_version'
     sys_show__ksh[3]='sdr_instcmd show install active'
     sys_show__ksh[6]='show_platform_sysdb -v'
else
     sys_show__ksh[1]='show_version -b'
     sys_show__ksh[3]='instcmd show install active summary'
     sys_show__ksh[6]='show_platform -a'
fi
sys_show_exec[7]='show processes syslogd location all'
sys_show__ksh[7]='sysmgr_show -o -p syslogd -n all'
sys_show_exec[8]='show syslog trace self error location all'
sys_show__ksh[8]='show_syslog_ltrace -i all -E'
sys_show_exec[9]='show syslog trace self slow location all'
sys_show__ksh[9]='show_syslog_ltrace -i all -S'
sys_show_exec[10]='show syslog trace self fast location all'
sys_show__ksh[10]='show_syslog_ltrace -i all -F'
sys_show_exec[11]='show processes correlatord location all'
sys_show__ksh[11]='sysmgr_show -o -p correlatord -n all'
sys_show_exec[12]='show logging correlator trace'
sys_show__ksh[12]='correlator_show_ltrace'
sys_show_exec[13]='show logging correlator rule all detail'
sys_show__ksh[13]='ac_show_correlator_rule -a -o 0x2'
sys_show_exec[14]='show syslog trace lib error location all'
sys_show__ksh[14]='show_syslog_lib_ltrace -i all -E'
sys_show_exec[15]='show processes syslogd_helper location all'
sys_show__ksh[15]='sysmgr_show -o -p syslogd_helper -n all'
sys_show_exec[16]='show syslog trace helper slow location all'
sys_show__ksh[16]='show_syslogd_helper_ltrace -i all -S'
sys_show_exec[17]='show syslog trace helper error location all'
sys_show__ksh[17]='show_syslogd_helper_ltrace -i all -E'
sys_show_exec[18]='show ipv4 interface brief'
sys_show__ksh[18]='show_ip_interface -b -v default'
sys_show_exec[19]='show ipv6 interface brief'
sys_show__ksh[19]='show_ipv6_interface -b -v default'
sys_show__ksh[20]=''

##########################################################################
# Commands that will be run as system tech as collect sysdb related info #
##########################################################################
shared_exec[1]="show sysdb trace access shared-plane"
shared__ksh[1]='sysdb_show_ltrace -T access -s active'
shared_exec[2]="show sysdb trace connections shared-plane"
shared__ksh[2]='sysdb_show_ltrace -T conn -s active'
shared_exec[3]="show sysdb trace edm shared-plane"
shared__ksh[3]='sysdb_show_ltrace -T edm -s active'
shared_exec[4]="show sysdb trace notification shared-plane"
shared__ksh[4]='sysdb_show_ltrace -T nfn -s active'
shared_exec[5]="show sysdb trace replication shared-plane"
shared__ksh[5]='sysdb_show_ltrace -T rpl -s active'
shared_exec[6]="show sysdb trace responses shared-plane"
shared__ksh[6]='sysdb_show_ltrace -T response -s active'
shared_exec[7]="show sysdb trace restart-timeout shared-plane"
shared__ksh[7]='sysdb_show_ltrace -T rst_tmo -s active'
shared_exec[8]="show sysdb trace verification shared-plane"
shared__ksh[8]='sysdb_show_ltrace -T vrfn -s active'
shared_exec[9]="show sysdb connections detail shared-plane"
shared__ksh[9]='sysdbshow -s -c show conn advanced'
shared_exec[10]="show sysdb registrations edm detail shared-plane"
shared__ksh[10]='sysdbshow -s -c show edm advanced'
shared_exec[11]="show sysdb registrations notification detail shared-plane"
shared__ksh[11]='sysdbshow -s -c show nfn advanced'
shared_exec[12]="show sysdb registrations verification detail shared-plane"
shared__ksh[12]='sysdbshow -s -c show vrfn advanced'
shared__ksh[13]=''
#############################################################
# Commands that run on RP and LC nodes                      #
#############################################################

rplc_show_exec[1]='show process blocked location $location'
rplc_show_exec[2]='show processes log location $location'
rplc_show__ksh[2]='cat /dev/shmem/sysmgr.log'
rplc_show_exec[3]='run top procs'
if [[ "$platform" = "panini" ]]; then
    rplc_show__ksh[1]='sh_proc_ng_blocked -l $fq_nodeid'
    rplc_show__ksh[3]='top -bn1'
else
    rplc_show__ksh[1]='show_processes -b $fq_nodeid'
    rplc_show__ksh[3]='top_procs -n10 -D -i1'
fi
rplc_show_exec[4]='show syslog trace hm self slow location all'
rplc_show__ksh[4]='show_syslog_hm_ltrace -i all -S'
rplc_show_exec[5]='show syslog trace hm self fast location all'
rplc_show__ksh[5]='show_syslog_hm_ltrace -i all -F'
rplc_show_exec[6]='show syslog trace hm self error location all'
rplc_show__ksh[6]='show_syslog_hm_ltrace -i all -E'
rplc_show_exec[7]='show syslog trace hm lib rd-info location all'
rplc_show__ksh[7]='show_syslog_hm_ltrace -i all -R'
rplc_show_exec[8]='show syslog trace hm lib wr-info location all'
rplc_show__ksh[8]='show_syslog_hm_ltrace -i all -W'
rplc_show__ksh[9]=''

##########################################################################
#  Commands that will be run as node tech as collect sysdb related info  #
##########################################################################
local_exec[1]='show sysdb trace access location $location'
local__ksh[1]='sysdb_show_ltrace -T access -i $fq_nodeid'
local_exec[2]='show sysdb trace clientlib edm-access location $fq_nodeid'
local__ksh[2]='sysdb_show_clientlib_ltrace -T edm_acc -i $fq_nodeid'
local_exec[3]='show sysdb trace clientlib reconnection location $location'
local__ksh[3]='sysdb_show_clientlib_ltrace -T recon -i $fq_nodeid'
local_exec[4]='show sysdb trace connections location $location'
local__ksh[4]='sysdb_show_ltrace -T conn -i $fq_nodeid'
local_exec[5]='show sysdb trace edm location $location'
local__ksh[5]='sysdb_show_ltrace -T edm -i $fq_nodeid'
local_exec[6]='show sysdb trace requests location $location'
local__ksh[6]='sysdb_show_ltrace -T request -i $fq_nodeid'
local_exec[7]='show sysdb trace responses location $location'
local__ksh[7]='sysdb_show_ltrace -T response -i $fq_nodeid'
local_exec[8]='show sysdb connections detail location $location'
local__ksh[8]='sysdbshow -l $fq_nodeid -c show conn advanced'

##########################################################################
#  Commands that will be run as node tech as collect sysdb related info  #
##########################################################################
local_exec[1]='show sysdb trace access location $location'
local__ksh[1]='sysdb_show_ltrace -T access -i $fq_nodeid'
local_exec[2]='show sysdb trace clientlib edm-access location $fq_nodeid'
local__ksh[2]='sysdb_show_clientlib_ltrace -T edm_acc -i $fq_nodeid'
local_exec[3]='show sysdb trace clientlib reconnection location $location'
local__ksh[3]='sysdb_show_clientlib_ltrace -T recon -i $fq_nodeid'
local_exec[4]='show sysdb trace connections location $location'
local__ksh[4]='sysdb_show_ltrace -T conn -i $fq_nodeid'
local_exec[5]='show sysdb trace edm location $location'
local__ksh[5]='sysdb_show_ltrace -T edm -i $fq_nodeid'
local_exec[6]='show sysdb trace requests location $location'
local__ksh[6]='sysdb_show_ltrace -T request -i $fq_nodeid'
local_exec[7]='show sysdb trace responses location $location'
local__ksh[7]='sysdb_show_ltrace -T response -i $fq_nodeid'
local_exec[8]='show sysdb connections detail location $location'
local__ksh[8]='sysdbshow -l $fq_nodeid -c show conn advanced'
local_exec[9]='show sysdb medusa connections detail location $location'
local__ksh[9]='sysdbshow -m $fq_nodeid -c show conn medusa-advanced'
local_exec[10]='show sysdb medusa registrations edm location $location'
local__ksh[10]='sysdbshow -m $fq_nodeid -c show edm all'
local_exec[11]='show sysdb medusa registrations notification location $location'
local__ksh[11]='sysdbshow -m $fq_nodeid -c show nfn all'
local_exec[12]='show sysdb medusa registrations verification location $location'
local__ksh[12]='sysdbshow -m $fq_nodeid -c show vrfn all'
local_exec[13]='show sysdb registrations notification detail location $location'
local__ksh[13]='sysdbshow -l $fq_nodeid -c show nfn advanced'
local__ksh[14]=''

#############################################################
#  Display function for show tech syslog Script             #
#############################################################

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

    if [ "$__cardtype" == "SYS" ]; then
        exec_commands sys_show
        exec_commands shared
    else
        case "$__cardtype" in
        "RP")
            exec_commands rplc_show
            exec_commands local
            ;;
        "DRP")
            exec_commands rplc_show
            exec_commands local
            ;;
        "LC")
            exec_commands rplc_show
            ;;
        esac
    fi

    print_main_heading "show tech-support syslog complete"
}

# Run the appropriate function depending on the node specified and if a
# file is specified write the output to that file. We need to redirect
# stderr to stdout when writing to a file because some of the show
# commands output to stderr instead of stdout
. /pkg/bin/show_tech_file_fragment
