ci / audit (push) Failing after 26s
- scheduler/: day/night engine (conf-driven redesign), psi/perfsnap collectors, proxmox-ctl, systemd timer templates — ported from ~/projects/ultix per the breakout map in scheduler/README.md - loop/: perf-loop driver (baseline/audit/tweak/rebaseline), cpu-bench (new CPU leg), baseline-diff (tolerance compare) — smoke-tested locally - docs/ARCHITECTURE.md: full program design (loop, resource groups, VM/spindle balancing, k8s-vs-Slurm, beszel+RAPL/iDRAC telemetry spine, workload classes, solar/HA + two-site power economics) - docs/report-amt-power-telemetry.md + docs/report-moonlight-desktop.md Redmine: https://projects.knownelement.com/issues/826#note-2
44 lines
1.7 KiB
Bash
Executable File
44 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# KNELPerf PSI (pressure stall info) avg60 -> node_exporter textfile collector.
|
|
# Ported from ultix staged/ukrrs-psi-textfile.sh (#826); generalizations:
|
|
# - cgroup glob is env-driven (any slice namespace, not just ukrrs-*)
|
|
# - metric prefix is env-driven (default knelperf_)
|
|
set -u
|
|
OUT_DIR=${KNELPERF_TEXTFILE_DIR:-/var/lib/node_exporter/textfile}
|
|
CGROOT=${KNELPERF_CGROOT:-/sys/fs/cgroup}
|
|
CG_GLOB=${KNELPERF_CG_GLOB:-"$CGROOT"/system.slice/knelperf-*.slice}
|
|
PREFIX=${KNELPERF_PREFIX:-knelperf}
|
|
mkdir -p "$OUT_DIR"
|
|
tmp=$(mktemp "$OUT_DIR/.knelperf.XXXXXX")
|
|
|
|
some60() { # file -> prints avg60 value or nothing
|
|
awk '$1=="some"{for(i=2;i<=NF;i++) if($i ~ /^avg60=/){sub("avg60=","",$i); print $i; exit}}' "$1" 2>/dev/null
|
|
}
|
|
|
|
emit() { # name cgroup_path
|
|
local res v
|
|
for res in cpu memory io; do
|
|
[ -r "$2/$res.pressure" ] || continue
|
|
v=$(some60 "$2/$res.pressure")
|
|
[ -n "${v:-}" ] && echo "${PREFIX}_slice_pressure_some60{slice=\"$1\",res=\"$res\"} $v"
|
|
done
|
|
}
|
|
|
|
echo "# HELP ${PREFIX}_slice_pressure_some60 PSI some avg60 (percent) per slice" >>"$tmp"
|
|
echo "# TYPE ${PREFIX}_slice_pressure_some60 gauge" >>"$tmp"
|
|
for cg in $CG_GLOB; do
|
|
[ -d "$cg" ] && emit "${cg##*/}" "$cg"
|
|
done
|
|
[ -d "$CGROOT/user.slice" ] && emit "user.slice" "$CGROOT/user.slice"
|
|
|
|
echo "# HELP ${PREFIX}_host_pressure_some60 PSI some avg60 (percent) host-wide" >>"$tmp"
|
|
echo "# TYPE ${PREFIX}_host_pressure_some60 gauge" >>"$tmp"
|
|
for res in cpu memory io; do
|
|
[ -r "/proc/pressure/$res" ] || continue
|
|
v=$(some60 "/proc/pressure/$res")
|
|
[ -n "${v:-}" ] && echo "${PREFIX}_host_pressure_some60{res=\"$res\"} $v"
|
|
done
|
|
|
|
mv "$tmp" "$OUT_DIR/${PREFIX}_pressure.prom"
|
|
chmod 0644 "$OUT_DIR/${PREFIX}_pressure.prom"
|