From 250e1f1bb23cd318390f7523ee2a8337a6372170 Mon Sep 17 00:00:00 2001 From: Pim Date: Fri, 10 Jan 2025 20:53:12 +0100 Subject: [PATCH] feat: add turbostat plugin (#1469) * feat: add turbostat plugin * chore: remove unused fn & only suggest graphs when turbostat exists * chore: code style * chore: prefer tabs over spaces for all indentation --- .../example-graphs/turbostat_watt-day.png | Bin 0 -> 29183 bytes plugins/sensors/turbostat_ | 217 ++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 plugins/sensors/example-graphs/turbostat_watt-day.png create mode 100755 plugins/sensors/turbostat_ diff --git a/plugins/sensors/example-graphs/turbostat_watt-day.png b/plugins/sensors/example-graphs/turbostat_watt-day.png new file mode 100644 index 0000000000000000000000000000000000000000..899a8203c95ba3ce47650c40a79b9a3e73394eb3 GIT binary patch literal 29183 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/dev/null; then + TURBOSTAT_PATH="turbostat" + else + return 1 + fi + + # Check if we can really run turbostat, because the command might be + # executable but only return a WARNING that it needs to be installed + $TURBOSTAT_PATH --help >/dev/null 2>&1 + if [ $? -gt 1 ]; then + return 1 + fi + + return 0 +} + +# Emit config for package watt graph +function emit_watt_graph { + local col label + + cat <