blob: 19d3e362940f5f33b409638e0f49cd32492ddb09 [file] [log] [blame]
#!/bin/sh
# Copyright 2017 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
. /usr/share/misc/shflags
DEFINE_boolean 'test' "${FLAGS_FALSE}" "For unit testing."
# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
set -e
if [ "${FLAGS_test}" -eq "${FLAGS_FALSE}" ]; then
. /usr/share/cros/disk_utils.sh
else
. ./disk_utils.sh
fi
dmesg_matches() {
if dmesg | grep -q "$1"; then
echo 1
else
echo 0
fi
}
gather_battery_errors() {
# The metrics library requires a max value of 2 rather than 1
# (http://crbug.com/338015).
metrics_client -e Platform.BatteryAbsent "$(
dmesg_matches "ACPI: Battery Slot.*absent")" 2
}
gather_wifi_error() {
local count
count=$(grep -l "^DEVTYPE=wlan" /sys/class/net/*/uevent | wc -l)
if [ "${count}" -gt 9 ]; then
count=9
fi
metrics_client -e Platform.WiFiDeviceCount "${count}" 10
}
gather_fs_error() {
# Gather filesystem errors.
local dev_stateful fs_error_count
# shellcheck disable=SC2034
dev_stateful="$(
get_stateful_df_data | awk '{print $1}' | sed -e 's#^/dev/##')"
if [ -z "${dev_stateful}" ]; then
return
fi
metrics_client -e "Platform.FileSystem.Stateful_RecoveryNeeded" \
"$(dmesg_matches "EXT4-fs (${dev_stateful}): recovery complete")" 2
metrics_client -e "Platform.FileSystem.Stateful_FsckNeeded" \
"$(dmesg_matches \
"EXT4-fs (${dev_stateful}): warning: mounting fs with errors")" 2
fs_error_count="$(dumpe2fs -h "/dev/${dev_stateful}" 2>/dev/null | \
sed -En '/FS Error count/s/.* +([0-9]+)$/\1/p')"
: "${fs_error_count:=0}"
metrics_client "Platform.FileSystem.Stateful_ErrorCount" \
"${fs_error_count}" 0 100000 20
}
gather_errors() {
gather_battery_errors
# The wifi devices may take some time to appear.
sleep 10
gather_wifi_error
gather_fs_error
}
main() {
if [ "${FLAGS_test}" -eq "${FLAGS_TRUE}" ]; then
return
fi
if [ $# -ne 0 ]; then
flags_help
exit 1
fi
gather_errors
}
main "$@"