16c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# Copyright (C) 2012 The Android Open Source Project
26c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung#
36c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# Licensed under the Apache License, Version 2.0 (the "License");
46c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# you may not use this file except in compliance with the License.
56c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# You may obtain a copy of the License at
66c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung#
76c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung#      http://www.apache.org/licenses/LICENSE-2.0
86c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung#
96c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# Unless required by applicable law or agreed to in writing, software
106c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# distributed under the License is distributed on an "AS IS" BASIS,
116c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
126c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# See the License for the specific language governing permissions and
136c34c2576eb241f134431b2cc847a6c7d70ef012Steve Fung# limitations under the License.
14c49dbd4775986f32b2f09659595f9f28ef7f6b44Ken Mixter
15731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# This file is parsed by chromeos::KeyValueStore. It has the format:
16c49dbd4775986f32b2f09659595f9f28ef7f6b44Ken Mixter#
17731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# <basename>=<shell command>\n
18c49dbd4775986f32b2f09659595f9f28ef7f6b44Ken Mixter#
19731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# Commands may be split across multiple lines using trailing backslashes.
20731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat#
21731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# When an executable named <basename> crashes, the corresponding command is
22731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# executed and its standard output and standard error are attached to the crash
23731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# report.
24731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat#
25731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# Use caution in modifying this file. Only run common Unix commands here, as
26731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# these commands will be run when a crash has recently occurred and we should
27731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# avoid running anything that might cause another crash. Similarly, these
28731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# commands block notification of the crash to parent processes, so commands
29731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# should execute quickly.
307e3b76d81fca476e08394eb40cc4b1ca8708475cDaniel Erat
31731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratupdate_engine=cat $(ls -1tr /var/log/update_engine | tail -5 | \
32731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  sed s.^./var/log/update_engine/.) | tail -c 50000
337e3b76d81fca476e08394eb40cc4b1ca8708475cDaniel Erat
34557bf456f7e58ad068ba13339b0877a4c6bc37a1Ben Chan# The cros_installer output is logged into the update engine log file,
35557bf456f7e58ad068ba13339b0877a4c6bc37a1Ben Chan# so it is handled in the same way as update_engine.
36731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcros_installer=cat $(ls -1tr /var/log/update_engine | tail -5 | \
37731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  sed s.^./var/log/update_engine/.) | tail -c 50000
38c49dbd4775986f32b2f09659595f9f28ef7f6b44Ken Mixter
398f5546adf995682142a3782036434c464ebfc885Daniel Erat# Dump the last 20 lines of the last two files in Chrome's system and user log
407e3b76d81fca476e08394eb40cc4b1ca8708475cDaniel Erat# directories, along with the last 20 messages from the session manager.
41731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratchrome=\
42731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  for f in $(ls -1rt /var/log/chrome/chrome_[0-9]* | tail -2) \
43731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    $(ls -1rt /home/chronos/u-*/log/chrome_[0-9]* 2>/dev/null | tail -2); do \
44731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo "===$f (tail)==="; \
45731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    tail -20 $f; \
46731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo EOF; \
47731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo; \
48731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  done; \
49731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo "===session_manager (tail)==="; \
50731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  awk '$3 ~ "^session_manager\[" { print }' /var/log/messages | tail -20; \
51731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo EOF
528f5546adf995682142a3782036434c464ebfc885Daniel Erat
531b8fe015585c0b966d5240b8e22eba1af8c69e88Ken Mixter# The following rule is used for generating additional diagnostics when
541b8fe015585c0b966d5240b8e22eba1af8c69e88Ken Mixter# collection of user crashes fails.  This output should not be too large
55c046f57ef36b14d01e49ae004c85bc7095a58430Michael Krebs# as it is stored in memory.  The output format specified for 'ps' is the
56c046f57ef36b14d01e49ae004c85bc7095a58430Michael Krebs# same as with the "u" ("user-oriented") option, except it doesn't show
57c046f57ef36b14d01e49ae004c85bc7095a58430Michael Krebs# the commands' arguments (i.e. "comm" instead of "command").
58731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-user-collection=\
59731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo "===ps output==="; \
60731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  ps axw -o user,pid,%cpu,%mem,vsz,rss,tname,stat,start_time,bsdtime,comm | \
61731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    tail -c 25000; \
62731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo "===meminfo==="; \
63731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  cat /proc/meminfo
641b8fe015585c0b966d5240b8e22eba1af8c69e88Ken Mixter
65f70060c5e610ed0aa648dcb6aaea5d859834b8baSimon Que# This rule is similar to the crash_reporter-user-collection rule, except it is
66f70060c5e610ed0aa648dcb6aaea5d859834b8baSimon Que# run for kernel errors reported through udev events.
67731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-udev-collection-change-card0-drm=\
68731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  for dri in /sys/kernel/debug/dri/*; do \
69731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo "===$dri/i915_error_state==="; \
70731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    cat $dri/i915_error_state; \
71731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  done
72f70060c5e610ed0aa648dcb6aaea5d859834b8baSimon Que
73bbda0787c9d84b577995e9d44039681ed9d66fd4Yufeng Shen# When trackpad driver cyapa detects some abnormal behavior, we collect
74bbda0787c9d84b577995e9d44039681ed9d66fd4Yufeng Shen# additional logs from kernel messages.
75731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-udev-collection-change--i2c-cyapa=\
76731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  /usr/sbin/kernel_log_collector.sh cyapa 30
77731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# When trackpad/touchscreen driver atmel_mxt_ts detects some abnormal behavior,
78731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# we collect additional logs from kernel messages.
79731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-udev-collection-change--i2c-atmel_mxt_ts=\
80731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  /usr/sbin/kernel_log_collector.sh atmel 30
81731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# When touch device noise are detected, we collect relevant logs.
82731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat# (crosbug.com/p/16788)
83731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-udev-collection---TouchNoise=cat /var/log/touch_noise.log
84ebb86ae82e7ed843683fd6b3502f669945be1c37Yufeng Shen# Periodically collect touch event log for debugging (crosbug.com/p/17244)
85731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_reporter-udev-collection---TouchEvent=cat /var/log/touch_event.log
86f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat
876aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu# Collect the last 50 lines of /var/log/messages and /var/log/net.log for
886aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu# intel wifi driver (iwlwifi) for debugging purpose.
896aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiucrash_reporter-udev-collection-devcoredump-iwlwifi=\
906aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu  echo "===/var/log/messages==="; \
916aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu  tail -n 50 /var/log/messages; \
926aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu  echo "===/var/log/net.log==="; \
936aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu  tail -n 50 /var/log/net.log; \
946aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu  echo EOF
956aa551ec416bac9ec96a6103e25be78221cf36a4Peter Qiu
96f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# Dump the last 50 lines of the last two powerd log files -- if the job has
97f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# already restarted, we want to see the end of the previous instance's logs.
98731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratpowerd=\
99731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  for f in $(ls -1tr /var/log/power_manager/powerd.[0-9]* | tail -2); do \
100731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo "===$(basename $f) (tail)==="; \
101731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    tail -50 $f; \
102731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat    echo EOF; \
103731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  done
104f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# If power_supply_info aborts (due to e.g. a bad battery), its failure message
105f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# could end up in various places depending on which process was running it.
106f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# Attach the end of powerd's log since it might've also logged the underlying
107f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# problem.
108731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratpower_supply_info=\
109731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo "===powerd.LATEST (tail)==="; \
110731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  tail -50 /var/log/power_manager/powerd.LATEST; \
111731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo EOF
112f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# powerd_setuid_helper gets run by powerd, so its stdout/stderr will be mixed in
113f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat# with powerd's stdout/stderr.
114731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratpowerd_setuid_helper=\
115731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo "===powerd.OUT (tail)==="; \
116731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  tail -50 /var/log/powerd.out; \
117731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  echo EOF
118f290e9873ef4cd9821ba0b03f45894e942c1115cDaniel Erat
119c49dbd4775986f32b2f09659595f9f28ef7f6b44Ken Mixter# The following rules are only for testing purposes.
120731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_log_test=echo hello world
121731da3379bd7ead7222b1a7add45e307bec7c865Daniel Eratcrash_log_recursion_test=sleep 1 && \
122731da3379bd7ead7222b1a7add45e307bec7c865Daniel Erat  /usr/local/autotest/tests/crash_log_recursion_test
123