#!/pkg/bin/ksh
#
# Copyright (c) 2020-2021 by cisco Systems, Inc.
# All rights reserved.

. /pkg/bin/show_tech_main_fragment

__cardtype="unspecified"
__tar_file_directory_on_node="unspecified"
__file="unspecified"

default_parser_function "$@"
mark_script_started

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

if [ "$__tar_file_directory_on_node" == "unspecified" ]; then
    echo "ABORT: showtech directory unspecified"
    return
fi

if [ ! -d "$__tar_file_directory_on_node" ]; then
    echo "ABORT: showtech directory $__showtech_directory does not exist"
    return
fi

if [ "$__file" == "unspecified" ]; then
    echo "ABORT: dsc node name unspecified"
    return
fi

rplc_exec[1]="Build Info"
rplc__ksh[1]='cat /etc/build-info.txt'
rplc_exec[2]="Kernel Version: uname -a"
rplc__ksh[2]='uname -a 2>/dev/null'
rplc_exec[3]="Kernel cmdline: /proc/cmdline"
rplc__ksh[3]='cat /proc/cmdline 2>/dev/null'
rplc_exec[4]="Ulimits: ulimit -a"
rplc__ksh[4]='xr_ulimit 2>/dev/null'
rplc_exec[5]="Kernel Settings: sysctl -a"
rplc__ksh[5]='sysctl -a 2>/dev/null'
rplc_exec[6]="PCI info: lspci -tv"
rplc__ksh[6]='lspci -tv 2>/dev/null'
rplc_exec[7]="lspci -vv"
rplc__ksh[7]='lspci -vv 2>/dev/null'
rplc_exec[8]="Active mounts"
rplc__ksh[8]='cat /proc/mounts'
rplc_exec[9]="fstab file"
rplc__ksh[9]='cat /etc/fstab'
rplc_exec[10]="Network statistics"
rplc__ksh[10]='cat /proc/net/dev'
rplc_exec[11]="Interface status"
rplc__ksh[11]='ip addr show'
rplc_exec[12]="IP table"
rplc__ksh[12]='route'
rplc_exec[13]="Disk utilization"
rplc__ksh[13]='df -hl'
rplc_exec[14]="Logical Volumes"
rplc__ksh[14]='lvscan -a'
rplc_exec[15]="Attributes of LVs"
rplc__ksh[15]='lvdisplay'
rplc_exec[16]="Physical Volumes"
rplc__ksh[16]='pvscan'
rplc_exec[17]="List partition layout"
rplc__ksh[17]='fdisk -l'
rplc_exec[18]="Memory utilization"
rplc__ksh[18]='cat /proc/meminfo'
rplc_exec[19]="Virtual memory statistics"
rplc__ksh[19]='vmstat'
rplc_exec[20]="Processes"
rplc__ksh[20]='ps -ef 2>/dev/null'
rplc_exec[21]="Top Processes"
rplc__ksh[21]='top -b -n 1 2>/dev/null'
rplc_exec[22]="Interrupts"
rplc__ksh[22]='cat /proc/interrupts'
rplc_exec[23]="iomem"
rplc__ksh[23]='cat /proc/iomem'
rplc_exec[24]="Systemd status"
rplc__ksh[24]='systemctl'
rplc_exec[25]="Cgroup Memory limit in bytes"
rplc__ksh[25]='cat /sys/fs/cgroup/memory/memory.limit_in_bytes'
rplc_exec[26]="Cgroup Memory usage in bytes"
rplc__ksh[26]='cat /sys/fs/cgroup/memory/memory.usage_in_bytes'
rplc_exec[27]="Cgroup Memory Max usage in bytes"
rplc__ksh[27]='cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes'
rplc_exec[28]="Cgroup Memory statistics"
rplc__ksh[28]='cat /sys/fs/cgroup/memory/memory.stat'
rplc_exec[29]="Dmesg output"
rplc__ksh[29]='dmesg 2>/dev/null'
rplc_exec[30]="Profile systemd"
rplc__ksh[30]='systemd-analyze'
rplc_exec[31]="MTD partitions"
rplc__ksh[31]='cat /proc/mtd'
rplc_exec[32]="TAM stats"
rplc__ksh[32]="cat /sys/devices/platform/tpm_tam/stats"
rplc_exec[33]="CPU info"
rplc__ksh[33]="cat /proc/cpuinfo"
rplc_exec[34]=""
rplc__ksh[34]=''


collect_os_logs() {
    # Add files to be collected here
    local log_files=(var/log/messages*
            var/log/audit/*
            var/log/lvm2.log*
            var/log/mcelog.log
            var/log/journal/*/*
            var/log/xr_audit_trail_logs/*
            var/log/old*/*
            var/log/check_flash*.log*
            var/log/syslog
            var/log/enc.log
           )

    if [ "$__cardtype" != "SYS" ]; then
        cd /
        for file in ${log_files[@]}; do
            if [ -f $file ]; then
                tar --warning=no-file-changed -uf $__tar_file_directory_on_node/"$__file".os.tar $file
            fi
        done
        if [ -f $__tar_file_directory_on_node/"$__file".os.tar ]; then
            gzip -fq $__tar_file_directory_on_node/"$__file".os.tar
        fi
    fi
}


display() {
    print_main_heading "show tech-support OS"
    if [ "$__cardtype" != "SYS" ]; then
        exec_commands rplc
    fi
    print_main_heading "show tech-support OS complete"

}
# Collect log files
collect_os_logs

. /pkg/bin/show_tech_file_fragment


