104 lines
2.1 KiB
Bash
Executable File
104 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
while read line; do
|
|
# Check if this is a new batch of sensors and get the name to set a prefix
|
|
if [[ $(grep -Po '^\S+$' <<< "$line") ]]; then
|
|
OLDIFS=$IFS
|
|
IFS='-'
|
|
read -a splitline <<< "$line"
|
|
IFS=$OLDIFS
|
|
|
|
# Make a prefix for duplicate sensors
|
|
case ${splitline[0]} in
|
|
nvme)
|
|
prefix=${splitline[0]}_${splitline[2]}_
|
|
;;
|
|
|
|
jc42)
|
|
prefix=${splitline[0]}_${splitline[3]}_
|
|
;;
|
|
|
|
acpitz)
|
|
prefix=${splitline[0]}_
|
|
;;
|
|
|
|
*)
|
|
prefix=""
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Process the sensor readings
|
|
reading_name=$(grep -Po '^.*?(?=:)' <<< "$line")
|
|
reading_val=$(grep -Po ':\s*\+?\K-?[0-9.]+' <<< "$line")
|
|
reading_units=$(grep -Po ':\s*\+?-?[0-9.]+\s?\K[^0-9. ]+' <<< "$line")
|
|
|
|
# Make reading name lowercase and convert spaces to underscore
|
|
reading_name=${reading_name,,*}
|
|
reading_name=${reading_name// /_}
|
|
# Fixes for weird characters
|
|
reading_name=${reading_name//+/}
|
|
reading_name=${reading_name//-/minus}
|
|
# Remove some extra unit markings from the name
|
|
# Zenpower
|
|
reading_name=${reading_name//_p_/_}
|
|
reading_name=${reading_name//_c_/_}
|
|
# Others
|
|
reading_name=${reading_name//_temp/}
|
|
reading_name=${reading_name//temp1/1}
|
|
reading_name=${reading_name//temp2/2}
|
|
reading_name=${reading_name//temp3/3} # Just in case
|
|
|
|
# Ganglia does not like the degrees symbol
|
|
reading_units=${reading_units//°/}
|
|
|
|
# Suffix a description of the type of reading
|
|
case $reading_units in
|
|
V | mV)
|
|
suffix="_voltage"
|
|
;;
|
|
|
|
RPM)
|
|
suffix="_speed"
|
|
;;
|
|
|
|
C)
|
|
suffix="_temp"
|
|
;;
|
|
|
|
A)
|
|
suffix="_current"
|
|
;;
|
|
|
|
W)
|
|
suffix="_power"
|
|
;;
|
|
|
|
GHz)
|
|
suffix="_freq"
|
|
;;
|
|
|
|
*)
|
|
suffix=""
|
|
;;
|
|
esac
|
|
|
|
# Ignore some unset/unconnected values
|
|
if [[ "$reading_val" ]]; then
|
|
case $reading_val in
|
|
-40.0 | 0.0 | 0.00 | 0 | 127.0)
|
|
;;
|
|
|
|
*)
|
|
# Log the reading
|
|
if [[ "$1" == "debug" ]]; then
|
|
echo $prefix$reading_name$suffix = $reading_val : $reading_units
|
|
else
|
|
gmetric --name="$prefix$reading_name$suffix" --value="$reading_val" --units="$reading_units" --type=float --group=sensors
|
|
fi
|
|
|
|
;;
|
|
esac
|
|
fi
|
|
done <<<$(sensors;/usr/local/bin/zen-rapl)
|