# 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 \
      --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
