#!/bin/bash
# Per-core CPU% sampler from /proc/stat (no sysstat dependency). CSV: t,core,pct_busy
OUT="${1:-/root/rtctest/percore.csv}"
N="${2:-40}"
: > "$OUT"
declare -A prev_total prev_idle
read_stat() {
  while read -r line; do
    case "$line" in
      cpu[0-9]*)
        core="${line%% *}"
        vals=($line)
        idle=${vals[4]}
        total=0
        for v in "${vals[@]:1}"; do total=$((total+v)); done
        echo "$core $total $idle"
        ;;
    esac
  done < /proc/stat
}
while read -r core total idle; do prev_total[$core]=$total; prev_idle[$core]=$idle; done < <(read_stat)
for i in $(seq 1 "$N"); do
  sleep 2
  t=$(date +%s)
  while read -r core total idle; do
    pt=${prev_total[$core]:-0}; pi=${prev_idle[$core]:-0}
    dt=$((total-pt)); di=$((idle-pi))
    pct="n/a"
    if [ "$dt" -gt 0 ]; then pct=$(awk -v dt="$dt" -v di="$di" 'BEGIN{printf "%.1f", 100*(dt-di)/dt}'); fi
    echo "$t,$core,$pct" >> "$OUT"
    prev_total[$core]=$total; prev_idle[$core]=$idle
  done < <(read_stat)
done
