lmsensors 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/FMAPPER.md +20 -0
- data/LICENSE.txt +165 -0
- data/README.md +156 -0
- data/ext/lmsensors_base/extconf.rb +9 -0
- data/lib/lmsensors.rb +13 -0
- data/lib/lmsensors/feature.rb +11 -0
- data/lib/lmsensors/features/abs_feature.rb +85 -0
- data/lib/lmsensors/features/alarm.rb +38 -0
- data/lib/lmsensors/features/beep.rb +33 -0
- data/lib/lmsensors/features/current.rb +69 -0
- data/lib/lmsensors/features/fan.rb +52 -0
- data/lib/lmsensors/features/humidity.rb +35 -0
- data/lib/lmsensors/features/power.rb +80 -0
- data/lib/lmsensors/features/temp.rb +69 -0
- data/lib/lmsensors/features/voltage.rb +69 -0
- data/lib/lmsensors/lm_constants.rb +193 -0
- data/lib/lmsensors/lmsensors.rb +33 -0
- data/lib/lmsensors/sensors/abssensor.rb +151 -0
- data/lib/lmsensors/sensors/sensor.rb +148 -0
- data/lib/lmsensors/sensors/sensorspawner.rb +77 -0
- data/lib/lmsensors/version.rb +8 -0
- data/lib/lmsensors_base/lmsensors_base.so +0 -0
- metadata +96 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
# lib/lmsensors/features/alarm.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default formatting proc for ALARM types
|
13
|
+
FMT_ALARM = lambda do |feature|
|
14
|
+
# Formatted structure
|
15
|
+
unit = feature.unit
|
16
|
+
out = feature.feature
|
17
|
+
# Don't need to return unit, as it is proc for this feature type
|
18
|
+
out.delete(:unit)
|
19
|
+
|
20
|
+
# Format the outputs
|
21
|
+
feature.subfs.map do |k, v|
|
22
|
+
# Only check is alarm is enabled.
|
23
|
+
# The other option SSF_INTRUDE_BEEP
|
24
|
+
# is not formatted in the normal sensor program
|
25
|
+
if v[:subtype] == SSF_INTRUDE_ALARM then
|
26
|
+
out[k] = unit.call(v[:value]) end
|
27
|
+
end # End value mapper for alarm
|
28
|
+
out
|
29
|
+
end # End default alarm formatter
|
30
|
+
|
31
|
+
##
|
32
|
+
# The Alarm class is appended to the LmSensors module
|
33
|
+
# to handle analytic post-processing of the FEATURE_INTRUSION type.
|
34
|
+
class Alarm < LmSensors::Feature::GenFeature
|
35
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_ALARM end
|
36
|
+
end # End Alarm class
|
37
|
+
end # End Feature append
|
38
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# lib/lmsensors/features/beep.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default formatting proc for BEEP types
|
13
|
+
FMT_BEEP = lambda do |feature|
|
14
|
+
unit = feature.unit
|
15
|
+
out = feature.feature
|
16
|
+
# Don't need to return unit, as it is proc for this feature type
|
17
|
+
out.delete(:unit)
|
18
|
+
|
19
|
+
# Format the outputs
|
20
|
+
feature.subfs.map do |k, v|
|
21
|
+
out[k] = unit.call(v[:value])
|
22
|
+
end # End value mapper for beep
|
23
|
+
out
|
24
|
+
end # End default beep formatter
|
25
|
+
|
26
|
+
##
|
27
|
+
# The Beep class is appended to the LmSensors module
|
28
|
+
# to handle analytic post-processing of the FEATURE_BEEP_ENABLE type.
|
29
|
+
class Beep < LmSensors::Feature::GenFeature
|
30
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_BEEP end
|
31
|
+
end # End Beep class
|
32
|
+
end # End Feature append
|
33
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# lib/lmsensors/features/current.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default current formatting proc
|
13
|
+
FMT_CURR = lambda do |feature|
|
14
|
+
# Formatted structure
|
15
|
+
unit = feature.unit
|
16
|
+
out = feature.feature
|
17
|
+
tmp = { input: nil, max: nil }
|
18
|
+
|
19
|
+
# Format the outputs
|
20
|
+
# Strip each, in case the unit is empty
|
21
|
+
feature.subfs.values.map do |v|
|
22
|
+
case v[:subtype]
|
23
|
+
when SSF_CURR_INPUT
|
24
|
+
tmp[:input] = v[:value]
|
25
|
+
out[:input] = "#{v[:value].round(2)} #{unit}".strip
|
26
|
+
when SSF_CURR_MAX
|
27
|
+
if v[:value] != 0 then
|
28
|
+
tmp[:max] = v[:value]
|
29
|
+
out[:max] = "#{v[:value].round(2)} #{unit}".strip
|
30
|
+
end
|
31
|
+
when SSF_CURR_CRIT
|
32
|
+
if v[:value] != 0 then
|
33
|
+
tmp[:crit] = v[:value]
|
34
|
+
out[:crit] = "#{v[:value].round(2)} #{unit}".strip
|
35
|
+
end
|
36
|
+
when SSF_CURR_MIN
|
37
|
+
if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
|
38
|
+
end
|
39
|
+
end # End value mapper for fan
|
40
|
+
|
41
|
+
# Set the check symbols
|
42
|
+
# Symbol for input, symbol for limit
|
43
|
+
syi, syl = :input, :max
|
44
|
+
|
45
|
+
# Calculate the percentage of current max
|
46
|
+
# :percent is against max, for current
|
47
|
+
if tmp[syl] and tmp[syi] then
|
48
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
49
|
+
out[:percent] = "#{perc}%".strip
|
50
|
+
end # Only if both are present
|
51
|
+
|
52
|
+
syl = :crit
|
53
|
+
|
54
|
+
# Calculate the percentage of current crit
|
55
|
+
if tmp[syl] and tmp[syi] then
|
56
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
57
|
+
out[:percent_crit] = "#{perc}%".strip
|
58
|
+
end # Only if both are present
|
59
|
+
out
|
60
|
+
end # End current proc
|
61
|
+
|
62
|
+
##
|
63
|
+
# The Current class is appended to the LmSensors module
|
64
|
+
# to handle analytic post-processing of the FEATURE_CURR type.
|
65
|
+
class Current < LmSensors::Feature::GenFeature
|
66
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_CURR end
|
67
|
+
end # End Current class
|
68
|
+
end # end Feature append
|
69
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# lib/lmsensors/featureseatures/fan.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default formatting proc for
|
13
|
+
# the X_FAN subtype.
|
14
|
+
FMT_FAN = lambda do |feature|
|
15
|
+
# Formatted structure
|
16
|
+
unit = feature.unit
|
17
|
+
out = feature.feature
|
18
|
+
tmp = { input: nil, max: nil }
|
19
|
+
|
20
|
+
# Format the outputs
|
21
|
+
# Strip each, in case the unit is empty
|
22
|
+
feature.subfs.values.map do |v|
|
23
|
+
case v[:subtype]
|
24
|
+
when SSF_FAN_INPUT
|
25
|
+
tmp[:input] = v[:value]
|
26
|
+
out[:input] = "#{v[:value]} #{unit}".strip
|
27
|
+
when SSF_FAN_MAX
|
28
|
+
tmp[:max] = v[:value]
|
29
|
+
out[:max] = "#{v[:value]} #{unit}".strip
|
30
|
+
when SSF_FAN_MIN
|
31
|
+
out[:min] = "#{v[:value]} #{unit}".strip
|
32
|
+
end
|
33
|
+
end # End value mapper for fan
|
34
|
+
|
35
|
+
# Calculate the percentage of max speed of fan
|
36
|
+
if tmp[:max] and tmp[:input] then
|
37
|
+
perc = ((tmp[:input].to_f / tmp[:max]) * 100).round(2)
|
38
|
+
out[:percent] = "#{perc}%".strip
|
39
|
+
end # Only if both are present
|
40
|
+
out
|
41
|
+
end # End default fan formatter
|
42
|
+
|
43
|
+
##
|
44
|
+
# The Fan class is appended to the LmSensors module
|
45
|
+
# to handle analytic post-processing of the FEATURE_FAN type.
|
46
|
+
class Fan < LmSensors::Feature::GenFeature
|
47
|
+
##
|
48
|
+
# Override the default formatter
|
49
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_FAN end
|
50
|
+
end # End Fan class
|
51
|
+
end # End Feature append
|
52
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# lib/lmsensors/features/voltage.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default humidity formatting proc.
|
13
|
+
#
|
14
|
+
# I cannot test this on any of my systems,
|
15
|
+
# so it might need to be overridden.
|
16
|
+
FMT_HUMIDITY = lambda do |feature|
|
17
|
+
# Formatted structure
|
18
|
+
unit = feature.unit
|
19
|
+
out = feature.feature
|
20
|
+
|
21
|
+
# Format the outputs
|
22
|
+
feature.subfs.map do |k, v|
|
23
|
+
out[k] = "#{v[:value].round(2)}#{unit}"
|
24
|
+
end # End value mapper for humidity
|
25
|
+
out
|
26
|
+
end # End humidity proc
|
27
|
+
|
28
|
+
##
|
29
|
+
# The Humidity class is appended to the LmSensors module
|
30
|
+
# to handle analytic post-processing of the FEATURE_HUMIDITY type.
|
31
|
+
class Humidity < LmSensors::Feature::GenFeature
|
32
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_HUMIDITY end
|
33
|
+
end # End Humidity class
|
34
|
+
end # End Feature append
|
35
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# lib/lmsensors/features/power.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default power formatting proc
|
13
|
+
FMT_POWER = lambda do |feature|
|
14
|
+
# Formatted structure
|
15
|
+
unit = feature.unit
|
16
|
+
out = feature.feature
|
17
|
+
tmp = { input: nil, max: nil }
|
18
|
+
|
19
|
+
# Format the outputs
|
20
|
+
# Strip each, in case the unit is empty
|
21
|
+
feature.subfs.values.map do |v|
|
22
|
+
case v[:subtype]
|
23
|
+
when SSF_POWER_INPUT
|
24
|
+
out[:input] = "#{v[:value].round(2)} #{unit}".strip
|
25
|
+
when SSF_POWER_AVG
|
26
|
+
tmp[:average] = v[:value]
|
27
|
+
out[:average] = "#{v[:value].round(2)} #{unit}".strip
|
28
|
+
when SSF_POWER_MAX
|
29
|
+
tmp[:max] = v[:value]
|
30
|
+
out[:max] = "#{v[:value].round(2)} #{unit}".strip
|
31
|
+
when SSF_POWER_CRIT
|
32
|
+
tmp[:crit] = v[:value]
|
33
|
+
out[:crit] = "#{v[:value].round(2)} #{unit}".strip
|
34
|
+
when SSF_POWER_CAP
|
35
|
+
tmp[:cap] = v[:value]
|
36
|
+
out[:cap] = "#{v[:value].round(2)} #{unit}".strip
|
37
|
+
when SSF_POWER_MIN
|
38
|
+
out[:min] = "#{v[:value].round(2)} #{unit}".strip
|
39
|
+
end
|
40
|
+
end # End value mapper for fan
|
41
|
+
|
42
|
+
# Set the check symbols
|
43
|
+
# Symbol for input, symbol for limit
|
44
|
+
syi, syl = :average, :cap
|
45
|
+
|
46
|
+
# Calculate the percentage of power cap
|
47
|
+
# :percent is against cap for power, and it is
|
48
|
+
# in respect to :average, not :input, as not all
|
49
|
+
# sensors will use input for power.
|
50
|
+
if tmp[syl] and tmp[syi] then
|
51
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
52
|
+
out[:percent] = "#{perc}%".strip
|
53
|
+
end # Only if both are present
|
54
|
+
|
55
|
+
syl = :max
|
56
|
+
|
57
|
+
# Calculate the percentage of power max
|
58
|
+
if tmp[syl] and tmp[syi] then
|
59
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
60
|
+
out[:percent_max] = "#{perc}%".strip
|
61
|
+
end # Only if both are present
|
62
|
+
|
63
|
+
syl = :crit
|
64
|
+
|
65
|
+
# Calculate the percentage of power crit
|
66
|
+
if tmp[syl] and tmp[syi] then
|
67
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
68
|
+
out[:percent_crit] = "#{perc}%".strip
|
69
|
+
end # Only if both are present
|
70
|
+
out
|
71
|
+
end # End power proc
|
72
|
+
|
73
|
+
##
|
74
|
+
# The Power class is appended to the LmSensors module
|
75
|
+
# to handle analytic post-processing of the FEATURE_POWER type.
|
76
|
+
class Power < LmSensors::Feature::GenFeature
|
77
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_POWER end
|
78
|
+
end # End Power class
|
79
|
+
end # End Feature append
|
80
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# lib/lmsensors/features/temp.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default temperature formatting proc
|
13
|
+
FMT_TEMP = lambda do |feature|
|
14
|
+
# Formatted structure
|
15
|
+
unit = feature.unit
|
16
|
+
out = feature.feature
|
17
|
+
tmp = { input: nil, max: nil }
|
18
|
+
|
19
|
+
# Format the outputs
|
20
|
+
# Strip each, in case the unit is empty
|
21
|
+
feature.subfs.values.map do |v|
|
22
|
+
case v[:subtype]
|
23
|
+
when SSF_TEMP_INPUT
|
24
|
+
tmp[:input] = v[:value]
|
25
|
+
out[:input] = "#{v[:value].round(2)} #{unit}".strip
|
26
|
+
when SSF_TEMP_MAX
|
27
|
+
if v[:value] != 0 then
|
28
|
+
tmp[:max] = v[:value]
|
29
|
+
out[:max] = "#{v[:value].round(2)} #{unit}".strip
|
30
|
+
end
|
31
|
+
when SSF_TEMP_CRIT
|
32
|
+
if v[:value] != 0 then
|
33
|
+
tmp[:crit] = v[:value]
|
34
|
+
out[:crit] = "#{v[:value].round(2)} #{unit}".strip
|
35
|
+
end
|
36
|
+
when SSF_TEMP_MIN
|
37
|
+
if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
|
38
|
+
end
|
39
|
+
end # End value mapper for fan
|
40
|
+
|
41
|
+
# Set the check symbols
|
42
|
+
# Symbol for input, symbol for limit
|
43
|
+
syi, syl = :input, :max
|
44
|
+
|
45
|
+
# Calculate the percentage of voltage max
|
46
|
+
# :percent is against max, for voltage
|
47
|
+
if tmp[syl] and tmp[syi] then
|
48
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
49
|
+
out[:percent] = "#{perc}%".strip
|
50
|
+
end # Only if both are present
|
51
|
+
|
52
|
+
syl = :crit
|
53
|
+
|
54
|
+
# Calculate the percentage of voltage crit
|
55
|
+
if tmp[syl] and tmp[syi] then
|
56
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
57
|
+
out[:percent_crit] = "#{perc}%".strip
|
58
|
+
end # Only if both are present
|
59
|
+
out
|
60
|
+
end # End temp proc
|
61
|
+
|
62
|
+
##
|
63
|
+
# The Temp class is appended to the LmSensors module
|
64
|
+
# to handle analytic post-processing of the FEATURE_TEMP type.
|
65
|
+
class Temp < LmSensors::Feature::GenFeature
|
66
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_TEMP end
|
67
|
+
end # End Temp class
|
68
|
+
end # End Feature append
|
69
|
+
end # End LmSensors inclusion
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# lib/lmsensors/features/voltage.rb
|
2
|
+
|
3
|
+
# Make sure to include the constants
|
4
|
+
require_relative "../lm_constants"
|
5
|
+
require_relative "./abs_feature"
|
6
|
+
|
7
|
+
# :nodoc: Append to the main module
|
8
|
+
module LmSensors
|
9
|
+
# :nodoc: Append to the Feature module
|
10
|
+
module Feature
|
11
|
+
##
|
12
|
+
# Default voltage formatting proc
|
13
|
+
FMT_VOLTAGE = lambda do |feature|
|
14
|
+
# Formatted structure
|
15
|
+
unit = feature.unit
|
16
|
+
out = feature.feature
|
17
|
+
tmp = { input: nil, max: nil }
|
18
|
+
|
19
|
+
# Format the outputs
|
20
|
+
# Strip each, in case the unit is empty
|
21
|
+
feature.subfs.values.map do |v|
|
22
|
+
case v[:subtype]
|
23
|
+
when SSF_IN_INPUT
|
24
|
+
tmp[:input] = v[:value]
|
25
|
+
out[:input] = "#{v[:value].round(2)} #{unit}".strip
|
26
|
+
when SSF_IN_MAX
|
27
|
+
if v[:value] != 0 then
|
28
|
+
tmp[:max] = v[:value]
|
29
|
+
out[:max] = "#{v[:value].round(2)} #{unit}".strip
|
30
|
+
end
|
31
|
+
when SSF_IN_CRIT
|
32
|
+
if v[:value] != 0 then
|
33
|
+
tmp[:crit] = v[:value]
|
34
|
+
out[:crit] = "#{v[:value].round(2)} #{unit}".strip
|
35
|
+
end
|
36
|
+
when SSF_IN_MIN
|
37
|
+
if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
|
38
|
+
end
|
39
|
+
end # End value mapper for fan
|
40
|
+
|
41
|
+
# Set the check symbols
|
42
|
+
# Symbol for input, symbol for limit
|
43
|
+
syi, syl = :input, :max
|
44
|
+
|
45
|
+
# Calculate the percentage of voltage max
|
46
|
+
# :percent is against max, for voltage
|
47
|
+
if tmp[syl] and tmp[syi] then
|
48
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
49
|
+
out[:percent] = "#{perc}%".strip
|
50
|
+
end # Only if both are present
|
51
|
+
|
52
|
+
syl = :crit
|
53
|
+
|
54
|
+
# Calculate the percentage of voltage crit
|
55
|
+
if tmp[syl] and tmp[syi] then
|
56
|
+
perc = ((tmp[syi].to_f / tmp[syl]) * 100).round(2)
|
57
|
+
out[:percent_crit] = "#{perc}%".strip
|
58
|
+
end # Only if both are present
|
59
|
+
out
|
60
|
+
end # End voltage proc
|
61
|
+
|
62
|
+
##
|
63
|
+
# The Voltage class is appended to the LmSensors module
|
64
|
+
# to handle analytic post-processing of the FEATURE_IN type.
|
65
|
+
class Voltage < LmSensors::Feature::GenFeature
|
66
|
+
def def_fmt() @default_formatter = LmSensors::Feature::FMT_VOLTAGE end
|
67
|
+
end # End Voltage class
|
68
|
+
end # End Feature append
|
69
|
+
end # End LmSensors inclusion
|