diff options
-rwxr-xr-x | smarttemp_exporter/smarttemp_exporter | 24 | ||||
-rw-r--r-- | smarttemp_exporter/smarttemp_exporter.openrc | 14 |
2 files changed, 38 insertions, 0 deletions
diff --git a/smarttemp_exporter/smarttemp_exporter b/smarttemp_exporter/smarttemp_exporter new file mode 100755 index 0000000..2cacb07 --- /dev/null +++ b/smarttemp_exporter/smarttemp_exporter @@ -0,0 +1,24 @@ +#!/bin/sh +# Copyright 2023-2025 Guillermo Ramos <gramos@gramos.me> + +# Flush HTTP request +while read -r LINE && ! echo "$LINE" | grep -qE '^\s*$'; do + true +done + +printf 'HTTP/1.1 200 OK\n' +printf 'Content-Type: text/plain\n\n' + +echo '# HELP smart_temp_celsius SMART drive temperature attribute' +echo '# TYPE smart_temp_celsius gauge' + +drives="$(ls /dev/sd?)" +for drive in $drives; do + smartdata="$(smartctl -a "$drive")" + serial="$(echo "$smartdata" | awk -F':[[:space:]]+' '$1 == "Serial Number" {print $2}')" + model="$(echo "$smartdata" | awk -F':[[:space:]]+' '$1 == "Device Model" {print $2}')" + temp="$(echo "$smartdata" | awk '$2 == "Temperature_Celsius" {print $10}')" + if [ -n "$serial" ] && [ -n "$model" ]; then + printf 'smart_temp_celsius{device="%s", model="%s", serial="%s"} %s\n' "$drive" "$model" "$serial" "$temp" + fi +done diff --git a/smarttemp_exporter/smarttemp_exporter.openrc b/smarttemp_exporter/smarttemp_exporter.openrc new file mode 100644 index 0000000..6663f22 --- /dev/null +++ b/smarttemp_exporter/smarttemp_exporter.openrc @@ -0,0 +1,14 @@ +#!/sbin/openrc-run +# Copyright 2023-2025 Guillermo Ramos <gramos@gramos.me> +# Distributed under the terms of the GNU General Public License v2 +# +# Requirements: +# - perl +# - ucspi-tcp + +command='/usr/bin/tcpserver' +command_args='-H 0.0.0.0 9123 /usr/local/bin/smarttemp_exporter' +command_background='true' +pidfile="/run/${RC_SVCNAME}.pid" +output_log="/var/log/${RC_SVCNAME}.log" +error_log="/var/log/${RC_SVCNAME}.log" |