lmsensors 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|