#!/pkg/bin/ksh
# ---------------------------------------------------------------------
# cnbng_mem_snapshot - Show tech-support cnbng memory
#
# Hazaratham Kakumani. 
#
# Copyright (c) 2020-2021 by cisco Systems, Inc.
# All rights reserved.
#--------------------------------------------------------------------

processes="cnbng_nal subdb_svr pppoe_ea ppp_ea dhcpv6d \
             ipsub_ea dhcpd"

# directory is received as part of entry to this function
DIR=""

node=`uname -n`

while [ $# -gt 0 ]; do
    case "$1" in
        -d) arg_dir="$2"; shift 2;;
        *)  default_parser_function "$@"; shift $#;;
    esac
done

if [ "${arg_dir}" == "" ]; then
    echo "$0 -d directory"
    exit
fi

DIR="${arg_dir}/${node}"
mkdir ${DIR}

# global data

PLATFORM_TYPE=`uname -m`

echo "=== show_processes -m -t -h ===" > ${DIR}/show_processes_m_h_t
    show_processes -m -t -h >> ${DIR}/show_processes_m_h_t

echo "=== show_memory -a ===" > ${DIR}/show_memory_a
if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
    show_memory_ng -a >> ${DIR}/show_memory_ng_a
else
    show_memory -a >> ${DIR}/show_memory_a
fi    

#show shmwin all pool all-pools
echo "=== shmwin_show -N all -c 0x11 === " > ${DIR}/shmwin_pools
shmwin_show -N all -c 0x11 >> ${DIR}/shmwin_pools

#show shmwin summary
echo "=== shmwin_show -N all -S ===" > ${DIR}/shmwin_summary
shmwin_show -N all -S >> ${DIR}/shmwin_summary

#show memory heap summary all
echo "=== malloc_dump -A -s ===" > ${DIR}/show_memory_heap_sum_all
malloc_dump -A -s >> ${DIR}/show_memory_heap_sum_all

#show processes memory
echo "=== show_processes -m ===" > ${DIR}/show_proc_mem
if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
    sh_proc_ng_all -m >> ${DIR}/show_proc_ng_mem
else
    show_processes -m >> ${DIR}/show_proc_mem
fi    

# per-process data

for proc_name in ${processes}
do
  pid=`sysmgr_show -p ${proc_name} | grep "PID" | cut -d: -f 2`
  jid=`sysmgr_show -p ${proc_name} | grep "Job Id" | cut -d: -f 2`
  echo -n "Collecting data for process ${proc_name}, PID: ${pid}, JID: ${jid}.."
  if [ "${pid}" == "" ]; then
      echo "Process ${proc_name} not running" > ${DIR}/${proc_name}.meminfo
  else
      cmd_num=0
      echo "=== Process name: ${proc_name} ===" > ${DIR}/${proc_name}.meminfo

      echo "=== Running dlladmin -i all -p ${pid} ===" >> ${DIR}/${proc_name}.meminfo
      dlladmin -i all -p ${pid} >> ${DIR}/${proc_name}.meminfo
      echo "=== Finished dlladmin -i all -p ${pid} ===" >> ${DIR}/${proc_name}.meminfo

      echo "=== Running malloc_dump -a -P ${pid} -H 0 -d ===" >> ${DIR}/${proc_name}.meminfo
      malloc_dump -a -P ${pid} -H 0 -d >> ${DIR}/${proc_name}.meminfo
      echo "=== Finished malloc_dump -a -P ${pid} -H 0 -d ===" >> ${DIR}/${proc_name}.meminfo

      echo "=== Running malloc_dump -A -P ${pid} -d ===" >> ${DIR}/${proc_name}.meminfo
      malloc_dump -A -P ${pid} -d >> ${DIR}/${proc_name}.meminfo
      echo "=== Finished malloc_dump -A -P ${pid} -d ===" >> ${DIR}/${proc_name}.meminfo

      echo "=== Running show_memory -p ${jid} -h ===" >> ${DIR}/${proc_name}.meminfo
      if [[ "${PLATFORM_TYPE}" == "x86_64" ]]; then
          show_memory_ng -p ${jid} -h >> ${DIR}/${proc_name}.meminfo
      else
          show_memory -p ${jid} -h >> ${DIR}/${proc_name}.meminfo
      fi    
      echo "=== Finished show_memory -p ${jid} -h ===" >> ${DIR}/${proc_name}.meminfo

      echo "=== Running pidin -p ${pid} mapinfo ===" >> ${DIR}/${proc_name}.meminfo
      pidin -p ${pid} mapinfo >> ${DIR}/${proc_name}.meminfo
      echo "=== Finished pidin -p ${pid} mapinfo ===" >> ${DIR}/${proc_name}.meminfo
      
  fi
  echo "done"
done

