#!/pkg/bin/ksh
# ---------------------------------------------------------------------
# show_techsupport_fast_alarm_mgr - show commands for show tech-support alarm-mgr 
#
# Aug 2014, ssudhans
#
# Copyright (c) 2010-2017 by cisco Systems, Inc.
# All rights reserved.
# --------------------------------------------------------------------

. /pkg/bin/show_tech_main_fragment

__cardtype="unspecified"
ctrace_directory="/var/log/ctrace"
decode_directory="/pkg/ctrace"

# 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_techsupport_fast_alarm_mgr: output file not specified"
    exit
fi

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

#####################################################################
#  Commands that run on SYS node (i.e. the node where the show tech
#  command is issued from)
#####################################################################
sys_exec[1]="show platform"
sys__ksh[1]='show_platform_sysdb'
sys_exec[2]="show version"
sys__ksh[2]='ng_show_version'
sys_exec[3]='show logging'
sys__ksh[3]='show_logging'
sys_exec[4]="show running-config"
sys__ksh[4]='nvgen -c -l 1 -t 1 -i1 -o 1'
sys_exec[5]="show alarms"
sys__ksh[5]='show_operational -a Alarms'
sys_exec[6]="show sysdb registrations edm shared-plane"
sys__ksh[6]='sysdbshow -s -c show edm all'

sys__ksh[7]=''

################################################################
# Commands that run only on RP
################################################################
rp_exec[1]="run history_decoder"
rp__ksh[1]='history_decoder'
rp_exec[2]="run ls -all /var/log/calv_alarm_sm.log"
rp__ksh[2]='ls -all /var/log/calv_alarm_sm.log'
rp_exec[3]="run ls -all /var/log/calv_alarm_sm_history.log"
rp__ksh[3]='ls -all /var/log/calv_alarm_sm_history.log'
rp_exec[4]="run cat /var/log/calv_alarm_sm.log"
rp__ksh[4]='cat /var/log/calv_alarm_sm.log'
rp_exec[5]="run ls -all /tmp/calv_alarm_sm_history.txt"
rp__ksh[5]='ls -all /tmp/calv_alarm_sm_history.txt'
rp_exec[6]="run cat /tmp/calv_alarm_sm_history.txt"
rp__ksh[6]='cat /tmp/calv_alarm_sm_history.txt'
rp_exec[7]="show am-client-lib process SNMP trace all"
rp__ksh[7]='alarm_mgr_client_lib_trace -P SNMP -F all'
rp_exec[8]="show am-client-lib process TL1 trace all"
rp__ksh[8]='alarm_mgr_client_lib_trace -P TL1 -F all'
rp_exec[9]="show am-client-lib process XML trace all"
rp__ksh[9]='alarm_mgr_client_lib_trace -P XML -F all'
rp_exec[10]="show am-client-lib process NETCONF trace all"
rp__ksh[10]='alarm_mgr_client_lib_trace -P NETCONF -F all'
rp_exec[11]="show redundancy"
rp__ksh[11]='redcon_show'
rp_exec[12]="show install active"
rp__ksh[12]='sdr_instcmd show install active'
rp_exec[13]="show inventory"
rp__ksh[13]='show_inventory -e'

rp_exec[14]="run alarm_mgr_txlist_dump"
rp__ksh[14]='alarm_mgr_txlist_dump'
rp_exec[15]="run cat /var/log/alarm_sm_active.txt"
rp__ksh[15]='cat /var/log/alarm_sm_active.txt'
rp_exec[16]="run cat /var/log/alarm_sm_history.txt"
rp__ksh[16]='cat /var/log/alarm_sm_history.txt'
rp_exec[17]="run cat /var/log/alarm_sm_suppressed.txt"
rp__ksh[17]='cat /var/log/alarm_sm_suppressed.txt'
#rp_exec[17]="run cat /var/log/alarm_sm_client.txt"
#rp__ksh[17]='cat /var/log/alarm_sm_client.txt'

rp__ksh[18]=''

################################################################
# Commands that should run in parallel on all applicable nodes
################################################################
rplc_exec[1]="run ls -all /var/log/calv_alarm_nm.log"
rplc__ksh[1]='ls -all /var/log/calv_alarm_nm.log'
rplc_exec[2]="run cat /var/log/calv_alarm_nm.log"
rplc__ksh[2]='cat /var/log/calv_alarm_nm.log'
rplc_exec[3]="show processes blocked $location"
rplc__ksh[3]='sh_proc_ng_blocked -l $fq_nodeid'
rplc_exec[4]="show processes calv_alarm_mgr $location"
rplc__ksh[4]='sysmgr_show -o -p calv_alarm_mgr -n $fq_nodeid'
rplc_exec[5]="show sysdb registrations edm location $location"
rplc__ksh[5]='sysdbshow -l $fq_nodeid -c show edm all'
rplc_exec[6]="run cat /etc/build-info.txt"
rplc__ksh[6]='cat /etc/build-info.txt'

rplc_exec[7]="run alarm_mgr_txlist_dump"
rplc__ksh[7]='alarm_mgr_txlist_dump'
rplc_exec[8]="run cat /var/log/alarm_nm_active.txt"
rplc__ksh[8]='cat /var/log/alarm_nm_active.txt'
rplc_exec[9]="run cat /var/log/alarm_nm_history.txt"
rplc__ksh[9]='cat /var/log/alarm_nm_history.txt'
rplc_exec[10]="run cat /var/log/alarm_nm_suppressed.txt"
rplc__ksh[10]='cat /var/log/alarm_nm_suppressed.txt'
#rplc_exec[11]="run cat /var/log/alarm_nm_client.txt"
#rplc__ksh[11]='cat /var/log/alarm_nm_client.txt'

rplc__ksh[12]=''

display() {
    print_main_heading "show tech-support alarm-mgr" 
    if [ "$__cardtype" == "SYS" ]; then
        exec_commands sys
   else
         case "$__cardtype" in
           "DRP"|"RP")
             exec_commands rp
             exec_commands rplc
             ;;
           "LC")
             exec_commands rplc
             ;;
         esac
 
    fi
    print_main_heading "show tech-support alarm-mgr complete"
}

collect_ctrace_data() {
    print_main_heading "ctrace tech-support alarm_mgr"

    if [ "$__cardtype" != "SYS" ]; then
        cd $__tar_file_directory_on_node
        if [[ $? != 0 ]]; then
            echo "ABORT: cd to showtech directory is not successful"
            return
        fi

        find /var/log/ctrace/alarm_mgr -name *.ctrl | xargs touch > /dev/null 2>&1
        if [[ $? != 0 ]]; then
            echo "updating buffer with alarm mgr trace files not successful"
        fi

        sleep 2

        node_name=`uname -n`

        tar -zcPf ctrace_"$node_name".tgz -b 1024 "$ctrace_directory"
        if [[ $? != 0 ]]; then
            echo "ABORT: Tar of ctrace directory is not successful"
            return
        fi

        tar -zhcPf decode_"$node_name".tgz -b 1024 "$decode_directory"
        if [[ $? != 0 ]]; then
            echo "tar of decode binaries is not successful"
        fi

    fi
}

collect_ctrace_data

# 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
