3 # if this chart is called X.chart.sh, then all functions and global variables
6 sensors_sys_dir="/sys/devices"
9 # _update_every is a special variable - it holds the number of seconds
10 # between the calls of the _update() function
13 sensors_find_all_files() {
14 find $1 -maxdepth $sensors_sys_depth -name \*_input -o -name temp 2>/dev/null
17 sensors_find_all_dirs() {
18 sensors_find_all_files $1 | while read
24 # _check is called once, to find out if this chart should be enabled or not
28 # - 0 to enable the chart
29 # - 1 to disable the chart
31 [ ! -z "$( sensors_find_all_files $sensors_sys_dir )" ] && return 0
35 sensors_check_files() {
39 echo >&2 "checking $f"
42 [ $v -ne 0 ] && echo "$f"
46 # _create is called once, to create the charts
48 local path= dir= name= x= file= lfile= labelname= labelid= device= subsystem= id= type= mode= files= multiplier= divisor=
50 echo >$TMP_DIR/temp.sh "sensors_update() {"
52 for path in $( sensors_find_all_dirs $sensors_sys_dir | sort -u )
54 dir=$( basename $path )
61 [ -h $path/device ] && device=$( readlink -f $path/device )
62 [ ! -z "$device" ] && device=$( basename $device )
63 [ -z "$device" ] && device="$dir"
65 [ -h $path/subsystem ] && subsystem=$( readlink -f $path/subsystem )
66 [ ! -z "$subsystem" ] && subsystem=$( basename $subsystem )
67 [ -z "$subsystem" ] && subsystem="$dir"
69 [ -f $path/name ] && name=$( cat $path/name )
70 [ -z "$name" ] && name="$dir"
72 [ -f $path/type ] && type=$( cat $path/type )
73 [ -z "$type" ] && type="$dir"
75 id="$( fixid "$device.$subsystem.$dir" )"
77 echo >&2 "charts.d: sensors on path='$path', dir='$dir', device='$device', subsystem='$subsystem', id='$id', name='$name'"
79 for mode in temperature voltage fans power current energy humidity
88 files="$( ls $path/temp*_input 2>/dev/null; ls $path/temp 2>/dev/null )"
89 files="$( sensors_check_files $files )"
90 [ -z "$files" ] && continue
91 echo "CHART sensors.temp_${id} '' '${name} Temperature' 'Celcius' '${device}' '' line 6000 $sensors_update_every"
92 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.temp_${id} \$1\""
97 files="$( ls $path/in*_input 2>/dev/null )"
98 files="$( sensors_check_files $files )"
99 [ -z "$files" ] && continue
100 echo "CHART sensors.volt_${id} '' '${name} Voltage' 'Volts' '${device}' '' line 6001 $sensors_update_every"
101 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.volt_${id} \$1\""
106 files="$( ls $path/curr*_input 2>/dev/null )"
107 files="$( sensors_check_files $files )"
108 [ -z "$files" ] && continue
109 echo "CHART sensors.curr_${id} '' '${name} Current' 'Ampere' '${device}' '' line 6002 $sensors_update_every"
110 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.curr_${id} \$1\""
115 files="$( ls $path/power*_input 2>/dev/null )"
116 files="$( sensors_check_files $files )"
117 [ -z "$files" ] && continue
118 echo "CHART sensors.power_${id} '' '${name} Power' 'Watt' '${device}' '' line 6003 $sensors_update_every"
119 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.power_${id} \$1\""
124 files="$( ls $path/fan*_input 2>/dev/null )"
125 files="$( sensors_check_files $files )"
126 [ -z "$files" ] && continue
127 echo "CHART sensors.fan_${id} '' '${name} Fans Speed' 'Rotations / Minute' '${device}' '' line 6004 $sensors_update_every"
128 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.fan_${id} \$1\""
132 files="$( ls $path/energy*_input 2>/dev/null )"
133 files="$( sensors_check_files $files )"
134 [ -z "$files" ] && continue
135 echo "CHART sensors.energy_${id} '' '${name} Energy' 'Joule' '${device}' '' areastack 6005 $sensors_update_every"
136 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.energy_${id} \$1\""
137 algorithm="incremental"
142 files="$( ls $path/humidity*_input 2>/dev/null )"
143 files="$( sensors_check_files $files )"
144 [ -z "$files" ] && continue
145 echo "CHART sensors.humidity_${id} '' '${name} Humidity' 'Percent' '${device}' '' line 6006 $sensors_update_every"
146 echo >>$TMP_DIR/temp.sh "echo \"BEGIN sensors.humidity_${id} \$1\""
158 fid="$( fixid "$file" )"
159 lfile="$( basename $file | sed "s|_input$|_label|g" )"
160 labelname="$( basename $file | sed "s|_input$||g" )"
162 if [ ! "$path/$lfile" = "$file" -a -f "$path/$lfile" ]
164 labelname="$( cat "$path/$lfile" )"
167 echo "DIMENSION $fid '$labelname' $algorithm $multiplier $divisor"
168 echo >>$TMP_DIR/temp.sh "printf \"SET $fid = \"; cat $file "
171 echo >>$TMP_DIR/temp.sh "echo END"
175 echo >>$TMP_DIR/temp.sh "}"
176 cat >&2 $TMP_DIR/temp.sh
182 # _update is called continiously, to collect the values
184 # the first argument to this function is the microseconds since last update
185 # pass this parameter to the BEGIN statement (see bellow).
187 # do all the work to collect / calculate the values
189 # remember: KEEP IT SIMPLE AND SHORT
191 # . $TMP_DIR/temp.sh $1