#!/bin/bash # Emits {"cpu":} — CPU usage percent since the previous invocation. # Deltas are computed against a cached state file, so this script must be # polled periodically rather than run once. set -uo pipefail STATE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/omaspeedmeter" STATE_FILE="$STATE_DIR/cpu" mkdir -p -m 700 "$STATE_DIR" prev_total=0 prev_idle=0 have_prev=0 if [[ -f "$STATE_FILE" ]]; then while IFS='=' read -r key value; do case "$key" in prev_total) [[ "$value" =~ ^[0-9]+$ ]] && prev_total="$value" && have_prev=1 ;; prev_idle) [[ "$value" =~ ^[0-9]+$ ]] && prev_idle="$value" ;; esac done <"$STATE_FILE" fi read -r _ cu cn cs ci ciow cirq csirq cst _ 0)); then cpu_pct=$(awk -v dt="$d_total" -v di="$d_idle" 'BEGIN { p = (dt-di)/dt*100; if (p<0) p=0; if (p>100) p=100; printf "%.0f", p }') fi fi tmp_file=$(mktemp "$STATE_DIR/cpu.XXXXXX") { echo "prev_total=$cpu_total" echo "prev_idle=$cpu_idle" } >"$tmp_file" mv -f "$tmp_file" "$STATE_FILE" printf '{"cpu":%s}\n' "$cpu_pct"