# Copyright 2020 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.

description   "Report hardware_verifier UMA statistics"
author        "chromeos-hw-checker@google.com"

start on started system-services
task

# Allow us to be killed as we are not critical to the system.
oom score -100

# Let the process crash if it grows too much.  "as" for "address space".
# Currently it uses about 25MB (by checking /proc/$PID/status).
limit as 125000000 unlimited

script
  RESULT_FILE="/var/cache/hardware_verifier.result"
  TMP_FILE="$(mktemp --tmpdir hardware_verifier.XXXXXXXXXX)"

  logit() {
    logger -t "${UPSTART_JOB}" "$*"
  }

  exit_on_error() {
    exit_status=0
    output="$("$@" 2>&1)" || exit_status="$?"
    if [ "${exit_status}" != "0" ]; then
      logit "$1 error: exit status: ${exit_status}, output: ${output}"
      exit "${exit_status}"
    fi
  }

  hv_exit_status=0

  # We sleep for 30 seconds to ensure that peripheral components we are
  # interested are properly initialized.
  sleep 30

  minijail0 -e -p -r -v -l --uts -n \
    -u hardware_verifier -g hardware_verifier -G \
    --profile=minimalistic-mountns \
    -k 'tmpfs,/run,tmpfs,MS_NODEV|MS_NOEXEC|MS_NOSUID,mode=755,size=10M' \
    -k 'tmpfs,/var,tmpfs,MS_NODEV|MS_NOEXEC|MS_NOSUID,mode=755,size=10M' \
    -b /run/dbus \
    -b /var/lib/metrics,,1 \
    -- /usr/bin/hardware_verifier \
      --send_to_uma \
      --pii \
      --output_format=text >"${TMP_FILE}" || hv_exit_status="$?"

  exit_on_error mv -T "${TMP_FILE}" "${RESULT_FILE}"
  exit_on_error chmod +r "${RESULT_FILE}"

  if [ "${hv_exit_status}" != "0" ]; then
    logit "exit status: ${hv_exit_status}"
    exit "${hv_exit_status}"
  fi
end script
