diff options
Diffstat (limited to '')
-rw-r--r-- | collectors/charts.d.plugin/sensors/Makefile.inc | 13 | ||||
-rw-r--r-- | collectors/charts.d.plugin/sensors/README.md | 52 | ||||
-rw-r--r-- | collectors/charts.d.plugin/sensors/sensors.chart.sh (renamed from charts.d/sensors.chart.sh) | 113 | ||||
-rw-r--r-- | collectors/charts.d.plugin/sensors/sensors.conf (renamed from conf.d/charts.d/sensors.conf) | 0 |
4 files changed, 124 insertions, 54 deletions
diff --git a/collectors/charts.d.plugin/sensors/Makefile.inc b/collectors/charts.d.plugin/sensors/Makefile.inc new file mode 100644 index 000000000..f466a1b62 --- /dev/null +++ b/collectors/charts.d.plugin/sensors/Makefile.inc @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +# THIS IS NOT A COMPLETE Makefile +# IT IS INCLUDED BY ITS PARENT'S Makefile.am +# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT + +# install these files +dist_charts_DATA += sensors/sensors.chart.sh +dist_chartsconfig_DATA += sensors/sensors.conf + +# do not install these files, but include them in the distribution +dist_noinst_DATA += sensors/README.md sensors/Makefile.inc + diff --git a/collectors/charts.d.plugin/sensors/README.md b/collectors/charts.d.plugin/sensors/README.md new file mode 100644 index 000000000..ddc3650d6 --- /dev/null +++ b/collectors/charts.d.plugin/sensors/README.md @@ -0,0 +1,52 @@ +> THIS MODULE IS OBSOLETE. +> USE THE PYTHON ONE - IT SUPPORTS MULTIPLE JOBS AND IT IS MORE EFFICIENT + +> Unlike the python one, this module can collect temperature on RPi. + +# sensors + +The plugin will provide charts for all configured system sensors + +> This plugin is reading sensors directly from the kernel. +> The `lm-sensors` package is able to perform calculations on the +> kernel provided values, this plugin will not perform. +> So, the values graphed, are the raw hardware values of the sensors. + +The plugin will create netdata charts for: + +1. **Temperature** +2. **Voltage** +3. **Current** +4. **Power** +5. **Fans Speed** +6. **Energy** +7. **Humidity** + +One chart for every sensor chip found and each of the above will be created. + +### configuration + +This is the internal default for `/etc/netdata/sensors.conf` + +```sh +# the directory the kernel keeps sensor data +sensors_sys_dir="${NETDATA_HOST_PREFIX}/sys/devices" + +# how deep in the tree to check for sensor data +sensors_sys_depth=10 + +# if set to 1, the script will overwrite internal +# script functions with code generated ones +# leave to 1, is faster +sensors_source_update=1 + +# how frequently to collect sensor data +# the default is to collect it at every iteration of charts.d +sensors_update_every= + +# array of sensors which are excluded +# the default is to include all +sensors_excluded=() +``` + +--- diff --git a/charts.d/sensors.chart.sh b/collectors/charts.d.plugin/sensors/sensors.chart.sh index f21248da1..54368f1e0 100644 --- a/charts.d/sensors.chart.sh +++ b/collectors/charts.d.plugin/sensors/sensors.chart.sh @@ -1,9 +1,10 @@ +# shellcheck shell=bash # no need for shebang - this file is loaded from charts.d.plugin +# SPDX-License-Identifier: GPL-3.0-or-later # netdata # real-time performance and health monitoring, done right! # (C) 2016 Costa Tsaousis <costa@tsaousis.gr> -# GPL v3+ # # sensors docs @@ -32,13 +33,14 @@ sensors_priority=90000 declare -A sensors_excluded=() sensors_find_all_files() { - find $1 -maxdepth $sensors_sys_depth -name \*_input -o -name temp 2>/dev/null + find "$1" -maxdepth $sensors_sys_depth -name \*_input -o -name temp 2>/dev/null } sensors_find_all_dirs() { - sensors_find_all_files $1 | while read + # shellcheck disable=SC2162 + sensors_find_all_files "$1" | while read do - dirname $REPLY + dirname "$REPLY" done | sort -u } @@ -49,7 +51,7 @@ sensors_check() { # - 0 to enable the chart # - 1 to disable the chart - [ -z "$( sensors_find_all_files $sensors_sys_dir )" ] && error "no sensors found in '$sensors_sys_dir'." && return 1 + [ -z "$( sensors_find_all_files "$sensors_sys_dir" )" ] && error "no sensors found in '$sensors_sys_dir'." && return 1 return 0 } @@ -57,15 +59,15 @@ sensors_check_files() { # we only need sensors that report a non-zero value # also remove not needed sensors - local f= v= excluded= - for f in $* + local f v excluded + for f in "$@" do [ ! -f "$f" ] && continue - for ex in ${sensors_excluded[@]}; do + for ex in "${sensors_excluded[@]}"; do [[ $f =~ .*$ex$ ]] && excluded='1' && break done - [ "$excluded" != "1" ] && v="$( cat $f )" || v=0 + [ "$excluded" != "1" ] && v="$( cat "$f" )" || v=0 v=$(( v + 1 - 1 )) [ $v -ne 0 ] && echo "$f" && continue excluded= @@ -78,14 +80,15 @@ sensors_check_temp_type() { # valid temp types are 1 to 6 # disabled sensors have the value 0 - local f= t= v= - for f in $* + local f t v + for f in "$@" do - t=$( echo $f | sed "s|_input$|_type|g" ) + # shellcheck disable=SC2001 + t=$( echo "$f" | sed "s|_input$|_type|g" ) [ "$f" = "$t" ] && echo "$f" && continue [ ! -f "$t" ] && echo "$f" && continue - v="$( cat $t )" + v="$( cat "$t" )" v=$(( v + 1 - 1 )) [ $v -ne 0 ] && echo "$f" && continue @@ -95,34 +98,34 @@ sensors_check_temp_type() { # _create is called once, to create the charts sensors_create() { - local path= dir= name= x= file= lfile= labelname= labelid= device= subsystem= id= type= mode= files= multiplier= divisor= + local path dir name x file lfile labelname device subsystem id type mode files multiplier divisor # we create a script with the source of the # sensors_update() function # - the highest speed we can achieve - - [ $sensors_source_update -eq 1 ] && echo >$TMP_DIR/sensors.sh "sensors_update() {" + [ $sensors_source_update -eq 1 ] && echo >"$TMP_DIR/sensors.sh" "sensors_update() {" - for path in $( sensors_find_all_dirs $sensors_sys_dir | sort -u ) + for path in $( sensors_find_all_dirs "$sensors_sys_dir" | sort -u ) do - dir=$( basename $path ) + dir=$( basename "$path" ) device= subsystem= id= type= name= - [ -h $path/device ] && device=$( readlink -f $path/device ) - [ ! -z "$device" ] && device=$( basename $device ) + [ -h "$path/device" ] && device=$( readlink -f "$path/device" ) + [ ! -z "$device" ] && device=$( basename "$device" ) [ -z "$device" ] && device="$dir" - [ -h $path/subsystem ] && subsystem=$( readlink -f $path/subsystem ) - [ ! -z "$subsystem" ] && subsystem=$( basename $subsystem ) + [ -h "$path/subsystem" ] && subsystem=$( readlink -f "$path/subsystem" ) + [ ! -z "$subsystem" ] && subsystem=$( basename "$subsystem" ) [ -z "$subsystem" ] && subsystem="$dir" - [ -f $path/name ] && name=$( cat $path/name ) + [ -f "$path/name" ] && name=$( cat "$path/name" ) [ -z "$name" ] && name="$dir" - [ -f $path/type ] && type=$( cat $path/type ) + [ -f "$path/type" ] && type=$( cat "$path/type" ) [ -z "$type" ] && type="$dir" id="$( fixid "$device.$subsystem.$dir" )" @@ -138,66 +141,66 @@ sensors_create() { case $mode in temperature) - files="$( ls $path/temp*_input 2>/dev/null; ls $path/temp 2>/dev/null )" - files="$( sensors_check_files $files )" - files="$( sensors_check_temp_type $files )" + files="$( ls "$path"/temp*_input 2>/dev/null; ls "$path/temp" 2>/dev/null )" + files="$( sensors_check_files "$files" )" + files="$( sensors_check_temp_type "$files" )" [ -z "$files" ] && continue echo "CHART sensors.temp_$id '' '$name Temperature' 'Celsius' 'temperature' 'sensors.temp' line $((sensors_priority + 1)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.temp_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.temp_$id \$1\"" divisor=1000 ;; voltage) - files="$( ls $path/in*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/in*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.volt_$id '' '$name Voltage' 'Volts' 'voltage' 'sensors.volt' line $((sensors_priority + 2)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.volt_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.volt_$id \$1\"" divisor=1000 ;; current) - files="$( ls $path/curr*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/curr*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.curr_$id '' '$name Current' 'Ampere' 'current' 'sensors.curr' line $((sensors_priority + 3)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.curr_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.curr_$id \$1\"" divisor=1000 ;; power) - files="$( ls $path/power*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/power*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.power_$id '' '$name Power' 'Watt' 'power' 'sensors.power' line $((sensors_priority + 4)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.power_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.power_$id \$1\"" divisor=1000000 ;; fans) - files="$( ls $path/fan*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/fan*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.fan_$id '' '$name Fans Speed' 'Rotations / Minute' 'fans' 'sensors.fans' line $((sensors_priority + 5)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.fan_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.fan_$id \$1\"" ;; energy) - files="$( ls $path/energy*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/energy*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.energy_$id '' '$name Energy' 'Joule' 'energy' 'sensors.energy' areastack $((sensors_priority + 6)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.energy_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.energy_$id \$1\"" algorithm="incremental" divisor=1000000 ;; humidity) - files="$( ls $path/humidity*_input 2>/dev/null )" - files="$( sensors_check_files $files )" + files="$( ls "$path"/humidity*_input 2>/dev/null )" + files="$( sensors_check_files "$files" )" [ -z "$files" ] && continue echo "CHART sensors.humidity_$id '' '$name Humidity' 'Percent' 'humidity' 'sensors.humidity' line $((sensors_priority + 7)) $sensors_update_every" - echo >>$TMP_DIR/sensors.sh "echo \"BEGIN sensors.humidity_$id \$1\"" + echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN sensors.humidity_$id \$1\"" divisor=1000 ;; @@ -210,26 +213,27 @@ sensors_create() { do file="$x" fid="$( fixid "$file" )" - lfile="$( basename $file | sed "s|_input$|_label|g" )" - labelname="$( basename $file | sed "s|_input$||g" )" + lfile="$( basename "$file" | sed "s|_input$|_label|g" )" + labelname="$( basename "$file" | sed "s|_input$||g" )" - if [ ! "$path/$lfile" = "$file" -a -f "$path/$lfile" ] - then + if [ ! "$path/$lfile" = "$file" ] && [ -f "$path/$lfile" ] + then labelname="$( cat "$path/$lfile" )" fi echo "DIMENSION $fid '$labelname' $algorithm $multiplier $divisor" - echo >>$TMP_DIR/sensors.sh "echo \"SET $fid = \"\$(< $file )" + echo >>"$TMP_DIR/sensors.sh" "echo \"SET $fid = \"\$(< $file )" done - echo >>$TMP_DIR/sensors.sh "echo END" + echo >>"$TMP_DIR/sensors.sh" "echo END" done done - [ $sensors_source_update -eq 1 ] && echo >>$TMP_DIR/sensors.sh "}" + [ $sensors_source_update -eq 1 ] && echo >>"$TMP_DIR/sensors.sh" "}" # ok, load the function sensors_update() we created - [ $sensors_source_update -eq 1 ] && . $TMP_DIR/sensors.sh + # shellcheck source=/dev/null + [ $sensors_source_update -eq 1 ] && . "$TMP_DIR/sensors.sh" return 0 } @@ -243,7 +247,8 @@ sensors_update() { # for each dimension # remember: KEEP IT SIMPLE AND SHORT - [ $sensors_source_update -eq 0 ] && . $TMP_DIR/sensors.sh $1 + # shellcheck source=/dev/null + [ $sensors_source_update -eq 0 ] && . "$TMP_DIR/sensors.sh" "$1" return 0 } diff --git a/conf.d/charts.d/sensors.conf b/collectors/charts.d.plugin/sensors/sensors.conf index bcb28807d..bcb28807d 100644 --- a/conf.d/charts.d/sensors.conf +++ b/collectors/charts.d.plugin/sensors/sensors.conf |