#!/bin/sh

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

# Logger wrapper.
log_message() {
  logger -t temp_logger "$@"
}

# Output xx:yyC where xx is temp sensor id and yy is the actual temperature.
get_sensor_temp() {
  local zone="$1"
  local namepath=""
  local name=""
  local tempc=0
  local tempstr=""

  if [ ! -r "${zone}" ]; then
    return
  fi
  namepath="$(dirname "${zone}")/type"
  name="$(tr ' ' '_' < "${namepath}")"
  tempc=$(($(cat "${zone}") / 1000))
  tempstr=$(printf "%s:%dC" "${name}" "${tempc}")
  echo "${tempstr}"
}

# Glob all temp sensors sysfs and output temperatures with get_sensor_temp().
get_all_sensor_temps() {
  local logstr=""
  local tempstr=""

  for zone in /sys/class/thermal/thermal_zone*/temp; do
    tempstr=$(get_sensor_temp "${zone}")
    logstr="${logstr} ${tempstr}"
  done

  echo "${logstr}"
}

# Read PL1 from powercap sysfs (Intel only), output nothing otherwise.
get_pl1() {
  local pl1="/sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw"
  local pl1uw=0
  local pl1str=""

  if [ ! -r "${pl1}" ]; then
    return
  fi
  pl1uw=$(cat "${pl1}")
  pl1str=$(printf "PL1:%.3fW" "$((pl1uw))e-6")
  echo "${pl1str}"
}

main() {
  if [ $# -ne 0 ]; then
    echo "Usage: $0" >&2
    exit 1
  fi

  if [ ! -d "/sys/class/thermal/thermal_zone0" ]; then
    log_message "Exiting temp_logger, system does not have any temp sensor."
    exit 0
  fi

  while true; do
    log_message "$(get_all_sensor_temps)" "$(get_pl1)"
    sleep 60
  done
}

main "$@"
