summaryrefslogtreecommitdiff
path: root/contrib/scripts/ast_coredumper
diff options
context:
space:
mode:
authorGeorge Joseph <gjoseph@digium.com>2017-01-13 10:03:15 -0700
committerKevin Harwell <kharwell@digium.com>2017-01-20 11:21:47 -0600
commitc628a7acacea0d519e0e5919a2a1db1ba5851ee0 (patch)
treee19cefc0b78700d34e35d371ab3cb6cde9d608c5 /contrib/scripts/ast_coredumper
parent473330983b47618772b1dd414df8e063e5da6a53 (diff)
debug_utilities: Create ast_loggrabber
ast_loggrabber gathers log files from customizable search patterns, optionally converts POSIX timestamps to a readable format and tarballs the results. Also a few tweaks were made to ast_coredumper. Change-Id: I8bfe1468ada24c1344ce4abab7b002a59a659495 (cherry picked from commit 5fa1c56d7e76999aa14f133a33f6b168e7c3b99c)
Diffstat (limited to 'contrib/scripts/ast_coredumper')
-rwxr-xr-xcontrib/scripts/ast_coredumper39
1 files changed, 26 insertions, 13 deletions
diff --git a/contrib/scripts/ast_coredumper b/contrib/scripts/ast_coredumper
index c82732be9..81e94e945 100755
--- a/contrib/scripts/ast_coredumper
+++ b/contrib/scripts/ast_coredumper
@@ -15,6 +15,7 @@ SYNOPSIS
$prog [ --help ] [ --running | --RUNNING ] [ --latest ]
[ --tarball-coredumps ] [ --delete-coredumps-after ]
[ --tarball-results ] [ --delete-results-after ]
+ [ --tarball-uniqueid="<uniqueid>" ]
[ --no-default-search ] [ --append-coredumps ]
[ <coredump> | <pattern> ... ]
@@ -81,6 +82,11 @@ DESCRIPTION
to use this option unless you have also specified
--tarball-results.
+ --tarball-uniqueid="<uniqueid>"
+ Normally DATEFORMAT is used to make the tarballs unique
+ but you can use your own unique id in the tarball names
+ such as the Jira issue id.
+
--no-default-search
Ignore COREDUMPS from the config files and process only
coredumps listed on the command line (if any) and/or
@@ -111,6 +117,8 @@ DESCRIPTION
/tmp/core[-._]\$(hostname)!(*.txt)
NOTES
+ You must be root to use $prog.
+
The script relies on not only bash, but also recent GNU date and
gdb with python support. *BSD operating systems may require
installation of the 'coreutils' and 'devel/gdb' packagess and minor
@@ -171,6 +179,11 @@ EOF
exit 1
}
+if [ $EUID -ne 0 ] ; then
+ echo "You must be root to use $prog."
+ exit 1
+fi
+
running=false
RUNNING=false
latest=false
@@ -245,6 +258,9 @@ for a in "$@" ; do
--append-coredumps)
append_coredumps=true
;;
+ --tarball-uniqueid=*)
+ tarball_uniqueid=${a#*=}
+ ;;
--help|-*)
print_help
;;
@@ -294,7 +310,7 @@ if [ ${#COREDUMPS[@]} -gt 0 ] && $latest ; then
fi
# Timestamp to use for output files
-df=$(${DATEFORMAT})
+df=${tarball_uniqueid:-$(${DATEFORMAT})}
if $running || $RUNNING ; then
# We need to go through some gyrations to find the pid of the running
@@ -321,12 +337,9 @@ if $running || $RUNNING ; then
read -p "WARNING: Taking a core dump of the running asterisk instance will suspend call processing while the dump is saved. Do you wish to continue? (y/N) " answer
fi
if [[ "$answer" =~ ^[Yy] ]] ; then
- cf="/tmp/core.asterisk.running.$df"
- # We want a consistent coredump so stop the process
- # and continue it after the dump is complete.
- # kill -STOP $pid
+ cf="/tmp/core-asterisk-running-$df"
+ echo "Dumping running asterisk process to $cf"
${GDB} -p $pid -q --batch --ex "gcore $cf" >/dev/null 2>&1
- # kill -CONT $pid
COREDUMPS+=("$cf")
else
echo "Skipping dump of running process"
@@ -343,17 +356,17 @@ fi
# and save them to /tmp/.gdbinit
ss=`egrep -n "^#@@@SCRIPTSTART@@@" $0 |cut -f1 -d:`
-tail -n +${ss} $0 >/tmp/.gdbinit
+tail -n +${ss} $0 >/tmp/.ast_coredumper.gdbinit
# Now iterate over the coredumps and dump the debugging info
for i in ${!COREDUMPS[@]} ; do
cf=${COREDUMPS[$i]}
echo "Processing $cf"
- ${GDB} -n --batch -q --ex "source /tmp/.gdbinit" $(which asterisk) "$cf" 2>/dev/null | (
+ ${GDB} -n --batch -q --ex "source /tmp/.ast_coredumper.gdbinit" $(which asterisk) "$cf" 2>/dev/null | (
of=/dev/null
while IFS= read line ; do
if [[ "$line" =~ !@!@!@!\ ([^\ ]+)\ !@!@!@! ]] ; then
- of=$cf.${BASH_REMATCH[1]}
+ of=${cf}-${BASH_REMATCH[1]}
of=${of//:/-}
rm -f "$of"
echo "Creating $of"
@@ -364,7 +377,7 @@ for i in ${!COREDUMPS[@]} ; do
done
if $tarball_coredumps ; then
- tf=/tmp/asterisk.$df.coredumps.tar
+ tf=/tmp/asterisk-$df.coredumps.tar
echo "Creating $tf.gz"
for i in ${!COREDUMPS[@]} ; do
tar -uvf $tf "${COREDUMPS[@]}" 2>/dev/null
@@ -379,17 +392,17 @@ if $delete_coredumps_after ; then
fi
if $tarball_results ; then
- tf=/tmp/asterisk.$df.results.tar
+ tf=/tmp/asterisk-$df-results.tar
echo "Creating $tf.gz"
for i in ${!COREDUMPS[@]} ; do
- tar -uvf $tf "${COREDUMPS[$i]//:/-}".{brief,full,thread1,locks}.txt 2>/dev/null
+ tar -uvf $tf "${COREDUMPS[$i]//:/-}"-{brief,full,thread1,locks}.txt 2>/dev/null
done
gzip $tf
fi
if $delete_results_after ; then
for i in ${!COREDUMPS[@]} ; do
- rm -rf "${COREDUMPS[$i]//:/-}".{brief,full,thread1,locks}.txt
+ rm -rf "${COREDUMPS[$i]//:/-}"-{brief,full,thread1,locks}.txt
done
fi