#!/bin/bash
LOG=/var/log/flight-recorder.log
i=0
hdr="# ts load1 maxtemp_mC cpu0_freq_kHz psi_cpu_some10 psi_io_some10 memavail_kB cpu0_c3_usage runproc"
[ -s "$LOG" ] || echo "$hdr" >> "$LOG"
while :; do
  ts=$(date '+%F %T' 2>/dev/null || cat /proc/uptime)
  load1=$(cut -d' ' -f1 /proc/loadavg)
  maxt=0; for f in /sys/class/hwmon/hwmon*/temp*_input; do [ -r "$f" ] || continue; v=$(cat "$f" 2>/dev/null||echo 0); [ "$v" -gt "$maxt" ] && maxt=$v; done
  freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>/dev/null || echo 0)
  pcpu=$(awk '/some/{print $2;exit}' /proc/pressure/cpu 2>/dev/null | cut -d= -f2)
  pio=$(awk '/some/{print $2;exit}' /proc/pressure/io 2>/dev/null | cut -d= -f2)
  memav=$(awk '/MemAvailable/{print $2}' /proc/meminfo)
  c3=$(cat /sys/devices/system/cpu/cpu0/cpuidle/state3/usage 2>/dev/null || echo 0)
  rp=$(awk -F/ '/procs_running/{print $0}' /proc/stat 2>/dev/null | awk '{print $2}')
  echo "$ts $load1 $maxt $freq ${pcpu:-0} ${pio:-0} $memav $c3 ${rp:-0}" >> "$LOG"
  sync "$LOG" 2>/dev/null || sync
  i=$((i+1))
  # rotate at ~25k lines (~few days) to bound size
  if [ $((i % 200)) -eq 0 ] && [ "$(wc -l < "$LOG")" -gt 25000 ]; then
    tail -n 5000 "$LOG" > "$LOG.tmp" && mv "$LOG.tmp" "$LOG"; sync "$LOG" 2>/dev/null || true
  fi
  sleep 3
done
