#!/bin/sh -u
# 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.

. /usr/share/misc/storage-info-common.sh
. /usr/share/misc/shflags

DEFINE_boolean 'test' "${FLAGS_FALSE}" "For unit testing."

# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# This file is used for userfeedback as well.
STORAGE_INFO_FILE="/var/log/storage_info.txt"
INVALID="-1"

# Report disk health from SMART (S.M.A.R.T.) parameters.
# usage:
#   report_smart_metrics <uncorrectable-errors> <transfer-errors>
report_smart_metrics() {
  if [ -n "$1" ]; then
    if [ "$1" -ne "${INVALID}" ]; then
      metrics_client Platform.SmartUncorrectableErrors "$1" 1 1000000 20
    fi
  fi
  if [ -n "$2" ]; then
    if [ "$2" -ne "${INVALID}" ]; then
      metrics_client Platform.SmartTransferErrors "$2" 1 1000000 20
    fi
  fi
}

# Sata information.
GET_SMART_ERRORS='
  $2 == "Reported_Uncorrect" { uncorr = $8 }
  $2 == "UDMA_CRC_Error_Count" { txfer = $8 }
  END { print uncorr, txfer }
'

sata_disk_metrics() {
  # Extract revelevant SMART information from this file, if any.
  report_smart_metrics $(awk -v uncorr="${INVALID}" -v txfer="${INVALID}" \
                         "${GET_SMART_ERRORS}" "${STORAGE_INFO_FILE}")
}

emmc_disk_metrics() {
  local life type

  # Extract revelevant eMMC information from this file, if any.
  for type in 'A' 'B'; do
    life="$(sed -ne "/DEVICE_LIFE_TIME_EST_TYP_${type}/s/.*: \(0x.*\)]$/\1/p" \
            "${STORAGE_INFO_FILE}")"
    if [ -n "${life}" ]; then
      metrics_client -s "Platform.Emmc.LifeUsed.Type${type}" \
                     "$(printf "%d" "${life}")"
    fi
  done
}

sindin8de2_disk_metrics() {
  # Sandisk SDIN8DE2-*G 4.51 stores eMMC device health in vendor registers:
  # 94: MLC Device health.
  # 87: SLC Device health.
  local offset_A=94
  local offset_B=87
  local offset life type

  if grep -qe "^name.*SEM..G" "${STORAGE_INFO_FILE}"; then
    for type in 'A' 'B'; do
      eval "offset=\"\${offset_${type}}\""

      life="$(sed -ne "/Vendor Specific Fields \[VENDOR_SPECIFIC_FIELD\[${offset}\]\]:/s/.*: \(0x.*\)$/\1/p" \
        "${STORAGE_INFO_FILE}")"
      if [ -n "${life}" ]; then
        metrics_client -s "Platform.Emmc.LifeUsed.Type${type}" \
          "$(printf "%d" "${life}")"
      fi
    done
  fi
}

nvme_disk_metrics() {
  local used

  # Extract revelevant NVMe information from this file, if any.
  used="$(sed -ne "/Percentage Used/s/[^0-9]*//p" \
          "${STORAGE_INFO_FILE}" | sed -ne "s/%//p")"
  if [ -n "${used}" ]; then
    metrics_client -s "Platform.Storage.Nvme.PercentageUsed" \
                     "$(printf "%d" "${used}")"
  fi
}

ufs_disk_metrics() {
  local life method type

  # Extract revelevant UFS information from this file, if any.
  for method in 'a' 'b'; do
    life="$(sed -ne "/life_time_estimation_${method}/s/.*:\(0x.*\)$/\1/p" \
            "${STORAGE_INFO_FILE}")"
    if [ -n "${life}" ]; then
      type="$(echo "${method}" | sed 's/.*/\u&/')"
      metrics_client -s "Platform.Storage.Ufs.LifeUsed.Type${type}" \
                     "$(printf "%d" "${life}")"
    fi
  done
}

# Invoke main if not in test mode, otherwise let the test code call.
main() {
  if [ "${FLAGS_test}" -eq "${FLAGS_TRUE}" ]; then
    return
  fi
  if [ $# -ne 0 ]; then
    flags_help
    exit 1
  fi
  rm -f "${STORAGE_INFO_FILE}"
  get_storage_info > "${STORAGE_INFO_FILE}"
  sata_disk_metrics
  emmc_disk_metrics
  sindin8de2_disk_metrics
  nvme_disk_metrics
  ufs_disk_metrics
}
main "$@"
