summaryrefslogtreecommitdiffstats
path: root/collectors/charts.d.plugin/sensors
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--collectors/charts.d.plugin/sensors/Makefile.inc13
-rw-r--r--collectors/charts.d.plugin/sensors/README.md52
-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