# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This file is parsed by chromeos::KeyValueStore. It has the format:
#
# <exec_name>=<shell command>\n
#
# When a collector processes a crash, the corresponding command is executed and
# its standard output and standard error are attached to the crash report.
#
# The <exec_name> corresponds to exec_name used in the various collectors.
# For OS programs that crash (e.g. coredump), this will be the program's
# basename.  For example, if /usr/bin/powerd crashes, it will be "powerd".
# For other collectors, the exec_name might have other values, so you'll have
# to consult the collector itself.  For example, kernel warnings might be one
# of "kernel-warning", or "kernel-wifi-warning", or "kernel-suspend-warning".
#
# Shell commands may be split across multiple lines using trailing backslashes.
#
# The contents of the log will be stripped for some potentially sensitive info
# (see CrashCollector::StripSensitiveData for a description of what gets
# stripped), but try to avoid collection of potential PII at all times.
#
# Use caution in modifying this file. Only run common Unix commands here, as
# these commands will be run when a crash has recently occurred and we should
# avoid running anything that might cause another crash. Similarly, these
# commands block notification of the crash to parent processes, so commands
# should execute quickly.

update_engine=cat $(ls -1tr /var/log/update_engine | tail -5 | \
  sed s.^./var/log/update_engine/.) | tail -c 50000

# Append the authpolicy logs when authpolicyd crashes. Authpolicyd is the daemon
# that handles Active Directory (AD) device management. It is disabled if AD
# management is not used, e.g. for ordinary cloud managed Chromebooks.
authpolicyd=\
  echo "===authpolicyd output==="; \
  tail -c 50000 /var/log/authpolicy.log

# The cros_installer output is logged into the update engine log file,
# so it is handled in the same way as update_engine.
cros_installer=cat $(ls -1tr /var/log/update_engine | tail -5 | \
  sed s.^./var/log/update_engine/.) | tail -c 50000

# Dump the last 20 lines of the last two files in Chrome's system and user log
# directories, along with the last 20 messages from the session manager.
chrome=\
  for f in $(ls -1rt /var/log/chrome/chrome_[0-9]* | tail -2) \
    $(ls -1rt /home/chronos/u-*/log/chrome_[0-9]* 2>/dev/null | tail -2); do \
    echo "===$f (tail)==="; \
    tail -20 $f; \
    echo EOF; \
    echo; \
  done; \
  echo "===session_manager (tail)==="; \
  awk '$3 ~ "^session_manager\\[" { print }' /var/log/messages | tail -20; \
  echo EOF

# Just grab /home/chronos/user/lacros/lacros.log
lacros_chrome=\
  echo "===lacros.log (tail)==="; \
  tail -100 /home/chronos/user/lacros/lacros.log; \
  echo EOF

# For JavaScript errors from Chrome's SendJavaScriptErrorReport, just include
# the current Chrome logs. Session_manager logs aren't useful, and the previous
# Chrome log isn't useful (since JavaScript can't restart Chrome like a crash
# does). But do show the last few JavaScript printouts (usually marked with
# "CONSOLE") even if C++ is spitting out lots of irrelevant messages.
jserror=\
  for f in $(ls -1rt /var/log/chrome/chrome_[0-9]* | tail -1) \
    $(ls -1rt /home/chronos/u-*/log/chrome_[0-9]* 2>/dev/null | tail -1); do \
    echo "===$f (tail)==="; \
    tail -20 $f; \
    echo EOF; \
    echo; \
    echo "===$f (CONSOLE tail)==="; \
    tail -1000 $f | grep CONSOLE | tail -20; \
    echo EOF; \
    echo; \
  done;

# Dump the last DriveFS instance log for every account in every profile,
# last syslog messages related to either drivefs or cros-disks,
# and DriveFS' data directory structure.
drivefs=\
  for i in /home/chronos/u-*/GCache/v2/*; do \
    echo "===ls ${i}==="; \
    ls -la "${i}"; \
    echo "===ls ${i}/Logs==="; \
    ls -la "${i}/Logs"; \
    echo "===${i} drivefs==="; \
    cat "${i}/Logs/drivefs.txt"; \
    echo EOF; \
    echo; \
  done; \
  echo "===messages (grep|tail)==="; \
  egrep -a ' (disks|drivefs)\[' /var/log/messages | tail -20; \
  echo EOF

# The following rule is used for generating additional diagnostics when
# collection of user crashes fails.  This output should not be too large
# as it is stored in memory.  The output format specified for 'ps' is the
# same as with the "u" ("user-oriented") option, except it doesn't show
# the commands' arguments (i.e. "comm" instead of "command").
crash_reporter-user-collection=\
  echo "===ps output==="; \
  ps axw -o user,pid,%cpu,%mem,vsz,rss,tname,stat,start_time,bsdtime,comm | \
    tail -c 25000; \
  echo "===meminfo==="; \
  cat /proc/meminfo

# This rule is similar to the crash_reporter-user-collection rule, except it is
# run for kernel errors reported through udev events.
crash_reporter-udev-collection-change-card0-drm=\
  echo "===i915/parameters==="; \
  grep '' /sys/module/i915/parameters/* | \
    sed -e 's!^/sys/module/i915/parameters/!!'; \
  for dri in /sys/kernel/debug/dri/*; do \
    echo "===$dri/i915_error_state==="; \
    cat $dri/i915_error_state; \
    echo "===$dri/i915_capabilities==="; \
    cat $dri/i915_capabilities; \
    echo "===$dri/i915_wa_registers==="; \
    cat $dri/i915_wa_registers; \
  done; \
  echo EOF

# When trackpad driver cyapa detects some abnormal behavior, we collect
# additional logs from kernel messages.
crash_reporter-udev-collection-change--i2c-cyapa=\
  /usr/sbin/kernel_log_collector.sh cyapa 30
# When trackpad/touchscreen driver atmel_mxt_ts detects some abnormal behavior,
# we collect additional logs from kernel messages.
crash_reporter-udev-collection-change--i2c-atmel_mxt_ts=\
  /usr/sbin/kernel_log_collector.sh atmel_mxt_ts 30
# When touch device noise are detected, we collect relevant logs.
# (crosbug.com/p/16788)
crash_reporter-udev-collection---TouchNoise=cat /var/log/touch_noise.log
# Periodically collect touch event log for debugging (crosbug.com/p/17244)
crash_reporter-udev-collection---TouchEvent=cat /var/log/touch_event.log

# Collect the last 50 lines of /var/log/messages and /var/log/net.log for
# intel wifi driver (iwlwifi) for debugging purpose.
crash_reporter-udev-collection-devcoredump-iwlwifi=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages; \
  echo "===/var/log/net.log==="; \
  tail -n 50 /var/log/net.log; \
  echo EOF

crash_reporter-udev-collection-devcoredump-msm=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages; \
  echo EOF

crash_reporter-udev-collection-devcoredump-qcom-venus=\
  echo "===dmesg==="; \
  dmesg | tail -n 50; \
  echo EOF

# When the usb controller dies, collect all logs from the last 30 seconds
# that contain "xhci_hcd" or "usb".
crash_reporter-udev-collection-dead--usb=\
  /usr/sbin/kernel_log_collector.sh 'xhci_hcd\|usb' 30

# This rule is used only in Tast integration tests to test crash reporting
# via udev.
crash_reporter-udev-collection---tast_udev_crash_test=echo ok

# Grep crash_reporter logs along with processes and meminfo to send over for
# when crash_reporter itself crashes.
crash_reporter_failure=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages; \
  echo EOF

# Dump the last 50 lines of the last two powerd log files -- if the job has
# already restarted, we want to see the end of the previous instance's logs.
powerd=\
  for f in $(ls -1tr /var/log/power_manager/powerd.[0-9]* | tail -2); do \
    echo "===$(basename $f) (tail)==="; \
    tail -50 $f; \
    echo EOF; \
  done
# If power_supply_info aborts (due to e.g. a bad battery), its failure message
# could end up in various places depending on which process was running it.
# Attach the end of powerd's log since it might've also logged the underlying
# problem.
power_supply_info=\
  echo "===powerd.LATEST (tail)==="; \
  tail -50 /var/log/power_manager/powerd.LATEST; \
  echo EOF
# powerd_setuid_helper gets run by powerd, so its stdout/stderr will be mixed in
# with powerd's stdout/stderr.
powerd_setuid_helper=\
  echo "===powerd.OUT (tail)==="; \
  tail -50 /var/log/powerd.out; \
  echo EOF

# For ARC service failures in journal, collect:
# * the last 50 lines of syslog
# * the last 50 lines up before the line indicating upstart process termination
# * the last 50 lines in /var/log/arc.log.
arc-service-failure=\
  echo "=== syslog ==="; \
  tail -n 50 /var/log/messages; \
  echo "=== upstart ==="; \
  grep -a -B50 ' process ([0-9]*) terminated with status ' /var/log/upstart.log\
    | tail -50; \
  echo "===/var/log/arc.log==="; \
  tail -n 50 /var/log/arc.log; \
  echo EOF

# For service failures in journal, collect:
# * the last 50 lines of syslog
# * the last 50 lines up until the line indicating upstart process termination
service-failure=\
  echo "=== syslog ==="; \
  tail -n 50 /var/log/messages; \
  echo "=== upstart ==="; \
  grep -a -B50 ' process ([0-9]*) terminated with status ' /var/log/upstart.log\
    | tail -50; \
  echo EOF

# Collect the tail of the dmesg buffer.
kernel-warning=\
  echo "===dmesg==="; \
  dmesg | tail -n 100; \
  echo EOF

# Collect the dmesg buffer and lspci. Compress this in
# KernelWarningCollector. For the lspci command, 0280 refers to the network
# controller, and 0604 refers to the PCI bridge.
kernel-wifi-warning=\
  echo "===dmesg==="; \
  dmesg; \
  echo "===lspci==="; \
  lspci -vvvv -d ::0280 | sed "/Device Serial Number/d"; \
  lspci -vvvv -d ::0604 | sed "/Device Serial Number/d"; \
  echo EOF

# Collect the smmu fault which is in the dmesg buffer. Compress it in
# KernelWarningCollector.
kernel-smmu-fault=\
  echo "===dmesg==="; \
  dmesg | tail -n 100; \
  echo "==smmu devices=="; \
  ls -l /sys/class/iommu/*/devices; \
  echo "==coreboot log=="; \
  tail -50 /sys/firmware/log; \
  echo EOF

# Collect the suspend log which is in the dmesg buffer. Compress it in
# KernelWarningCollector.
kernel-suspend-warning=\
  echo "===dmesg==="; \
  dmesg; \
  echo EOF

# Collect the suspend log which is in the dmesg buffer. Compress it in
# KernelWarningCollector.
kernel-iwlwifi-error=\
  echo "===dmesg==="; \
  dmesg; \
  echo EOF

# Collect ath10k log which is in the dmesg buffer. Compress it in
# KernelWarningCollector.
kernel-ath10k-error=\
  echo "===dmesg==="; \
  dmesg; \
  echo EOF

# Collect syslog and powerd logs for suspend failures.
# syslog is pretty verbose on suspend, so grab the latest 1000 lines.
suspend-failure=\
  echo "=== syslog ==="; \
  croslog | grep -a -B1000 'Error writing to /sys/power/state: ' \
    | tail -1000; \
  echo "===powerd.LATEST (tail)==="; \
  tail -50 /var/log/power_manager/powerd.LATEST; \
  echo EOF

# if set_wifi_transmit_power fails, we need to collect some logs to be able to know
# the status of the WiFi module at the time of the request.
set_wifi_transmit_power=\
    echo "===powerd.LATEST (tail)==="; \
    tail -50 /var/log/power_manager/powerd.LATEST; \
    echo "===/var/log/messages==="; \
    tail -n 50 /var/log/messages; \
    echo "===/var/log/net.log==="; \
    tail -n 50 /var/log/net.log; \
    echo EOF

# Collect 100 lines of the system log for generic failures that don't specify a
# different exec name.
generic-failure=\
  echo "=== syslog ==="; \
  croslog --lines=100; \
  echo EOF

# The following rules are only for testing purposes.
crash_log_test=echo hello world
crash_log_recursion_tast_test=sleep 1 && \
  /usr/local/libexec/tast/helpers/local/cros/crash_log_recursion_tast_test

# Collect the last 50 lines of /var/log/messages and for
# mosys for debugging purpose.
mosys=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep mosys; \
  echo EOF

# Collect the last 50 lines of /var/log/messages and grep for memd because it
# outputs human readable error messages when it panics.
memd=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep memd; \
  echo EOF

# Collect the last 50 lines of /var/log/messages and grep for anomaly_detector
# because it outputs human readable error messages when it panics. Note that
# I'm deliberately not using journalctl -t anomaly_detector here; many of
# anomaly_detector's failures relate to not being able to parse the journal.
# The first tail (-n 1000) avoids reading excessive data from large log files.
anomaly_detector=\
  echo "===/var/log/messages==="; \
  tail -n 1000 /var/log/messages | grep anomaly.detector | tail -n 50; \
  echo EOF

# Collect ec_info and ap version, which is useful information for debugging
# EC crashes.
embedded-controller=\
  echo "===ec_info==="; \
  tail -c4096 /var/log/ec_info.txt; \
  echo "===bios_info==="; \
  tail -n 500 /var/log/bios_info.txt | grep fwid | tail -c4096; \
  echo EOF

# Collect the first 100 lines of dmesg after kernel crash. This is useful for
# debugging when combined with the kernel crash logs from the last boot.
kernel=\
  echo "===dmesg==="; \
  dmesg | head -n 100; \
  echo EOF

crash_sender=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep crash_sender; \
  dirs="/var/spool/crash /home/chronos/crash /run/daemon-store/crash/*/\
      /home/chronos/user/crash"; \
  echo "===spool contents==="; \
  ls -l $dirs; \
  echo "===in-progress meta contents==="; \
  for d in $dirs; do \
    for p in $d/*.processing; do \
      if [ -f $p ]; then\
        echo "$p:"; \
        cat ${p%.processing}.meta; \
      fi \
    done; \
  done; \
  echo EOF

# Collect auth failure log
auth-failure=\
  echo "===auth-failure=="; \
  tail -n 200 /var/log/tcsd/auth_failure.previous; \
  echo EOF

# Collect last 100 lines of logs from mount-encrypted for debugging encrypted
# stateful mount failures.
mount-encrypted=\
  echo "===mount-encrypted==="; \
  tail -n 100 /run/mount_encrypted/mount-encrypted.log; \
  echo EOF

# Collect ramoops for collecting early boot mount failures. There can be more
# than one record. Plus, for <linux-3.19, it's named "console-ramoops", but for
# newer versions, it's named "console-ramoops-#".
#
# Omit lines that could contain the pmsg-key.
# Under some conditions, the pmsg ramoops record can get exported as
# console ramoops, see crbug.com/1093897.
console-ramoops=\
  echo "===ramoops==="; \
  for ramoops in /sys/fs/pstore/console-ramoops*; do \
    echo "===${ramoops}==="; \
    tail -n 100 $ramoops | grep -v pmsg-key; \
  done; \
  echo EOF

# Collect logs related to a clobber-state call triggered by something other
# than a mount error.
# *   tmpfiles.log - recreated on every boot to capture error messages from
#     systemd-tmpfiles during early boot (init/pre-startup and init/startup).
#     If this log containers errors they are a strong indicator of the reason
#     of the clobber.
# *   clobber.log - written when the stateful partition is wiped during
#     chromeos_startup. This helps debug early boot issues from failures such
#     as systemd-tmpfiles exiting with an error.
#     Note: that /mnt/stateful_partition/unencrypted/clobber.log exists before
#     the clobber is performed, it is temporarily moved to /tmp/clobber.log
#     during the clobber, and it is moved to /var/log/clobber.log after the
#     clobber is completed.
# *   dmesg - included so it is possible to identify when a localized
#     filesystem corruption renders a file unusable. Check for an ext4 log
#     entry that mentions what operation failed.
clobber-state=\
  echo "===systemd-tmpfiles (tmpfiles.log)==="; \
  head -n 500 /run/tmpfiles.log; \
  echo "===clobber-state (clobber.log)==="; \
  tail -n 500 /mnt/stateful_partition/unencrypted/clobber.log; \
  echo "===dmesg (EXT4-fs only)==="; \
  dmesg | grep EXT4-fs | tail -n 500; \
  echo EOF

# Collect stateful partition dumpe2fs for debugging early boot mount failures.
# Only collect data on the superblock information and no detail about the block
# groups. In order to avoid increasing the permissions available to
# crash-reporter (/dev), run dumpe2fs from chromeos_startup and just log data
# from here.
dumpe2fs_stateful=\
  echo "===dumpe2fs (stateful partition)==="; \
  head -n 100 /run/dumpe2fs_stateful.log; \
  echo EOF

# Collect encrypted stateful partition dumpe2fs for debugging early boot mount
# mount failures. On failing to mount the encrypted stateful partition,
# mount-encrypted dumps the superblock information into
# /run/dumpe2fs_encstateful.log. Note that this cannot be done out of band:
# mount-encrypted cleans up the dm-crypt mount on failure.
dumpe2fs_encstateful=\
  echo "===dumpe2fs (/dev/mapper/encstateful)==="; \
  head -n 100 /run/mount_encrypted/dumpe2fs.log; \
  echo EOF

# Collect logs from the shutdown umount failure state. On failing to shutdown
# cleanly, chromeos_shutdown logs current mounts, active processes and mount
# namespaces associated with them.
shutdown_umount_failure_state=\
  echo "===shutdown umount() failure logs==="; \
  head -n 200 /run/shutdown_umount_failure.log; \
  echo EOF

# Collect logs from 'mount-encrypted umount' to log failures during shutdown.
umount-encrypted=\
  echo "===umount-encrypted==="; \
  tail -n 100 /run/mount_encrypted/umount-encrypted.log; \
  echo EOF

# Collect the last 100 lines of /var/log/messages and grep for bluetoothd for
# debugging purposes.
bluetoothd=\
  echo "===/var/log/messages==="; \
  tail -n 100 /var/log/messages | grep bluetoothd; \
  echo EOF

vm_concierge=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep vm_concierge; \
  echo EOF

vm_cicerone=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep vm_cicerone; \
  echo EOF

seneschal=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep seneschal; \
  echo EOF

vmlog_forwarder=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep vmlog_forwarder; \
  echo EOF

chunneld=\
  echo "===/var/log/messages==="; \
  tail -n 50 /var/log/messages | grep chunneld; \
  echo EOF

cryptohome=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep cryptohome; \
  echo EOF

tcsd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep tcsd; \
  echo EOF

trunksd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep trunksd; \
  echo EOF

tpm_managerd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep -e trunksd -e tpm_manager; \
  echo EOF

chapsd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep -e trunksd -e chaps -e cryptohome; \
  echo EOF

bootlockboxd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep bootlockbox; \
  echo EOF

pca_agentd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep pca_agent; \
  echo EOF

attestationd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep -e tpm_manager -e attestation; \
  echo EOF

cryptohomed=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | \
  grep -e trunksd -e tpm_manager -e cryptohome; \
  echo EOF

cryptohome-proxy=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | \
  grep -e attestation -e tpm_manager -e cryptohome; \
  echo EOF

u2fd=\
  echo "===/var/log/messages==="; \
  tail -n 200 /var/log/messages | grep -e trunksd -e attestation -e u2f; \
  echo EOF

metrics_daemon=\
  echo "===/var/log/messages==="; \
  tail -n 100 /var/log/messages | grep metrics_daemon; \
  echo EOF

cros_camera_algo=\
  echo "===/var/log/messages==="; \
  tail -n 100 /var/log/messages | grep camera; \
  echo EOF

cros_camera_service=\
  echo "===/var/log/messages==="; \
  tail -n 100 /var/log/messages | grep camera; \
  echo "===dmesg==="; \
  dmesg | tail -n 100; \
  echo EOF

cras=\
  echo "===/var/log/messages==="; \
  tail -n 100 /var/log/messages | grep cras_; \
  echo EOF

# Fingerprint system early boot TPM seed transfer task.
bio_crypto_init=\
  for f in bio_crypto_init.LATEST bio_crypto_init.PREVIOUS; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/bio_crypto_init/$f; \
    echo EOF; \
  done; \
  for f in cros_fp.log cros_fp.previous; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/$f; \
    echo EOF; \
  done

# Fingerprint system firmware updating task.
bio_fw_updater=\
  for f in bio_crypto_init.LATEST bio_crypto_init.PREVIOUS; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/bio_crypto_init/$f; \
    echo EOF; \
  done; \
  for f in bio_fw_updater.LATEST bio_fw_updater.PREVIOUS; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/biod/$f; \
    echo EOF; \
  done; \
  for f in cros_fp.log cros_fp.previous; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/$f; \
    echo EOF; \
  done

# Fingerprint system daemon.
# Unfortunately, the fingerprint services are somewhat coupled together through
# communication with the FPMCU. So, errors that could occur in bio_crypto_init
# and bio_fw_updater can cause bad behavior in biod. For this reason, we must
# collect logs from the previous tasks to understand a biod failure.
# Keep in mind that the minidump itself could be about 50KB, the process_tree
# log could be about 2KB, and each additional biod related log could be nearly
# 10KB. The max combined upload size must be less than 1MB, or the additional
# logs will be omitted.
biod=\
  for f in bio_crypto_init.LATEST bio_crypto_init.PREVIOUS; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/bio_crypto_init/$f; \
    echo EOF; \
  done; \
  for f in bio_fw_updater.LATEST bio_fw_updater.PREVIOUS \
    biod.LATEST biod.PREVIOUS; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/biod/$f; \
    echo EOF; \
  done; \
  for f in cros_fp.log cros_fp.previous; do \
    echo "===$f (tail)==="; \
    tail -n 100 /var/log/$f; \
    echo EOF; \
  done

# hps daemon go/cros-hps
# powerd is the user of hps and may have more information
hpsd=\
  echo "=== syslog ==="; \
  croslog --grep=hpsd --lines=1000 | tail -n 100; \
  echo "===powerd.LATEST (tail)==="; \
  tail -100 /var/log/power_manager/powerd.LATEST; \
  echo EOF
