#!/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 "$@"
