#!/system/bin/sh

# Dumps to /tmp/state by default.
# Specify "-" to dump to stdout, or any file name to dump to that file.

crashmode=0
case $0 in
  dumpcrash|*/dumpcrash) crashmode=1 ;;
esac

case $1 in
  "") echo "DUMPING STATE TO /tmp/state"; exec 1>/tmp/state ;;
  -) ;;
  *)  echo "DUMPING STATE TO $1"; exec 1>$1 ;;
esac

case $crashmode in 0)
  echo "========================================================"
  echo "== dumpstate"
  echo "========================================================"
  echo "------ SYSTEM LOG ------"
  logcat -v time -d '*:v'
  echo "------ VM TRACES ------"
  cat /data/anr/traces.txt
  echo "------ EVENT LOG TAGS ------"
  cat /etc/event-log-tags
  echo "------ EVENT LOG ------"
  logcat -b events -v time -d '*:v'
  echo "------ RADIO LOG ------"
  logcat -b radio -v time -d '*:v'
  echo "------ NETWORK STATE ------"
  echo "Interfaces:"
  netcfg
  echo ""
  echo "Routes:"
  cat /proc/net/route
  echo "------ SYSTEM PROPERTIES ------"
  getprop
  echo "------ KERNEL LOG ------"
  dmesg
  echo "------ KERNEL WAKELOCKS ------"
  cat /proc/wakelocks
  echo ""
  echo "------ PROCESSES ------"
  ps
  echo "------ PROCESSES AND THREADS ------"
  ps -t -p
  echo "------ MEMORY INFO ------"
  cat /proc/meminfo
  echo "------ PSS INFO ------"
  top -n 1 -d 0 -m 15 -s pss 
  echo "------ PROCRANK ------"
  procrank
  echo "------ LIBRANK ------"
  librank
  echo "------ VIRTUAL MEMORY STATS ------"
  cat /proc/vmstat
  echo "------ SLAB INFO ------"
  cat /proc/slabinfo
  echo "------ ZONEINFO ------"
  cat /proc/zoneinfo
  echo "------ BINDER FAILED TRANSACTION LOG ------"
  cat /proc/binder/failed_transaction_log
  echo ""
  echo "------ BINDER TRANSACTION LOG ------"
  cat /proc/binder/transaction_log
  echo ""
  echo "------ BINDER TRANSACTIONS ------"
  cat /proc/binder/transactions
  echo ""
  echo "------ BINDER STATS ------"
  cat /proc/binder/stats
  echo ""
  for i in `ls /proc/binder/proc`; do
  echo "------ BINDER PROCESS STATE: $i ------"
  cat /proc/binder/proc/$i
  echo ""
  done
  echo "------ FILESYSTEMS ------"
  df
  echo "------ PACKAGE SETTINGS ------"
  cat /data/system/packages.xml
  echo "------ PACKAGE UID ERRORS ------"
  cat /data/system/uiderrors.txt
  echo "------ LAST KERNEL LOG ------"
  cat /proc/last_kmsg
;; esac

echo "========================================================"
echo "== build.prop"
echo "========================================================"

# the crash server parses key-value pairs between the VERSION INFO and
# END lines so we can aggregate crash reports based on this data.
echo "------ VERSION INFO ------"
echo "currenttime=`date`"
echo "kernel.version=`cat /proc/version`"
echo "kernel.cmdline=`cat /proc/cmdline`"
cat /system/build.prop
echo "gsm.version.ril-impl=`getprop gsm.version.ril-impl`"
echo "gsm.version.baseband=`getprop gsm.version.baseband`"
echo "gsm.imei=`getprop gsm.imei`"
echo "gsm.sim.operator.numeric=`getprop gsm.sim.operator.numeric`"
echo "gsm.operator.alpha=`getprop gsm.operator.alpha`"
echo "------ END ------"

case $crashmode in 0)
  echo "========================================================"
  echo "== dumpsys"
  echo "========================================================"
  dumpsys
;; esac

exit 0
