rsensors 0.2.82

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/rsensors +68 -0
  3. data/lib/rsensors.rb +204 -0
  4. metadata +92 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4bda4f2f025e38d76c150ff9f87285bd6006e628
4
+ data.tar.gz: 525a419abaeb6c922292449e62f1f2aaeb6e06db
5
+ SHA512:
6
+ metadata.gz: 0c266fd6e5ed4fe33d75819698d7afe133785488d0beaac1c0395b35778cb272f7cce3ba49179eb5f64ee3459b05dfe61d9792add1f0a0cd6326a56887349ae8
7
+ data.tar.gz: 28b3fab9601c48b4e507c2aa33502b8496cc90722c3e367db40844f600b8002a34272d3fdf56bba15f09888e2c3504f3088bd18917ea23afad671ff89bfbaae8
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ require 'rsensors'
5
+
6
+ args = ARGV.dup
7
+ max_cpu = args[1].nil? ? 76 : args[1].to_f
8
+ max_hd = args[2].nil? ? 44 : args[2].to_f # get values
9
+ cron_value = args[3].nil? ? "22,44 * * * *" : args[3].to_s
10
+
11
+ case args[0]
12
+ when 'schedule', 'programar' # not use ||
13
+ Rsensors::Cronify.schedule(max_cpu, max_hd, cron_value)
14
+ when 'job' , 'test'
15
+ Rsensors::Notification.notify if (Rsensors::Sensor.temperature > max_cpu) || (Rsensors::Sensor.maxTemperatureHd > max_hd)
16
+ when 'help' ,'ayuda'
17
+ if (/es_.*/.match(ENV["LANG"])) # detecta español en consola
18
+ puts <<EOS
19
+ Rsensors versión 0.2.8 - Software LGPL-3.0
20
+ Usar con cuidado, probado pero sin ninguna garantía
21
+ Una gema Ruby para mostrar las temperaturas del sistema: CPU(s) y disco(s) duro(s)
22
+ https://github.com/jacob-mf/rsensors
23
+
24
+ Uso:
25
+ rsensors [comando] [parámetro(s)]
26
+
27
+ Por defecto, sin ningún comando se muestra notificación con las temperaturas medidas actuales
28
+ Los parámetros [CPU] y [disco duro] representan las temperaturas límite a comparar, para CPUs y discos duros. Se introducen como números naturales en escala de grados Celsius
29
+ Si no se indican límites, se toman por defecto, 76 grados Celsius para CPUs y 44°C para discos duros
30
+
31
+ El párametro [cron] especifica la cadena de configuración de fecha y tiempo para la aplicación crontab, que especifica la frecuencia en la que se chequean las temperaturas
32
+ Por defecto está establecido para lanzarse en minutos 22 y 44 de cada hora
33
+ Para más información y opciones de la cadena se puede consultar:
34
+ https://blog.desdelinux.net/cron-crontab-explicados/
35
+ https://linux.die.net/man/5/crontab (en inglés)
36
+
37
+ Comandos posibles:
38
+ programar [CPU] [disco duro] [cron] - programa la notificación de altas temperaturas cuando se supera algún límite establecido
39
+
40
+ test [CPU] [disco duro] - lanza la notificación de altas temperaturas cuando se supera algún límite establecido
41
+
42
+ ayuda - muestra éste mismo texto de ayuda. Para más información consultar en la web del proyecto
43
+
44
+ EOS
45
+ else
46
+ puts <<EOS
47
+
48
+ Rsensors 0.2.8 version - LGPL-3.0 software
49
+ Tested but no warranty, take care
50
+ A Ruby gem to help on ESMS games
51
+ More info about ESMS = Electronic Soccer Management Simulator
52
+ https://github.com/eliben/esms
53
+
54
+ Usage:
55
+ esms_tools [command] [parameter(s)]
56
+
57
+ Possible commands are:
58
+ ageCheck [file] [number] - test age limit condition on the line-up file
59
+ ageCheck273 [file] [number] - same as above for the ESMS 2.73 version
60
+ eosEffect [file] - apply end of season changes on the roster file
61
+
62
+ EOS
63
+ end
64
+
65
+ else
66
+ #puts "Nothing detected"
67
+ Rsensors::Notification.notify
68
+ end
@@ -0,0 +1,204 @@
1
+ # -*- coding: utf-8 -*-
2
+ #!/usr/bin/ruby
3
+
4
+ # @title Rsensors module
5
+ # A module to provide info about system temperatures, and cronify and triggers if conditions are fulfilled
6
+ # Available submodules:
7
+ # Sensor : Return all requested info from system sensors: CPU(s) and hard disk(s) temperatures
8
+ # Notification : Launch temperature notification on GUI and console text
9
+ # Cronify : Schedule notification by a crontab on selected conditions and limits
10
+
11
+ #Gem name Require statement Main class or module
12
+ #rsensors require 'libnotify' Rsensors
13
+ # more info Rsensors = Ruby Sensors https://github.com/jacob-mf/rsensors
14
+ # @version 0.2.8 @date 15-3-2018
15
+ # @author Luis Jacob Mariscal Fernández
16
+ # Currently works/tests only over Linux, on kernel above 3
17
+
18
+ require 'libnotify'
19
+
20
+ module Rsensors
21
+ # Temperature Sensor interface.
22
+
23
+ module Sensor
24
+ # == Returns:
25
+ # A float value of the system's temperature
26
+ def self.temperature1
27
+ if File.exists?('/sys/class/hwmon/hwmon0/temp1_input')
28
+ File.read('/sys/class/hwmon/hwmon0/temp1_input').to_f / 1000
29
+ else false
30
+ end
31
+ end
32
+ def self.temperature2
33
+ if File.exists?('/sys/class/hwmon/hwmon0/device/temp2_input')
34
+ File.read('/sys/class/hwmon/hwmon0/device/temp2_input').to_f / 1000
35
+ else false
36
+ end
37
+ end
38
+ def self.temperature4
39
+ if File.exists?('/sys/class/hwmon/hwmon0/device/temp4_input')
40
+ File.read('/sys/class/hwmon/hwmon0/device/temp4_input').to_f / 1000
41
+ else false
42
+ end
43
+ end
44
+ def self.temperature_hd # need superuser or privileges with apps
45
+ # 1st try hddtemp
46
+ temp = %x( hddtemp -uC /dev/?d? )
47
+ if $?.exitstatus != 0 # hddtemp not works, try hdparm
48
+ temp = %x( hdparm -Hi /dev/?d? )
49
+ temp = format_hdparm(temp) if $?.exitstatus == 0 # works fine
50
+ end #dtemp -n /dev/?d? ) # good for one line, one hard disk
51
+ return temp
52
+ end
53
+ def self.format_hdparm (text)
54
+ sol = ""
55
+ text.each_line { |line|
56
+ if /^\/dev/.match(line) # hard disk detected
57
+ sol[0] += line
58
+ elsif /^ drive temperature/.match(line) # info detected
59
+ sol += line
60
+ elsif /^ Model=(\w+),*/.match(line) # model detected
61
+ m1 = /^ Model=(\w+\s+\w+),*/.match(line)
62
+ #p m1
63
+ sol += m1[1]
64
+ end
65
+ }
66
+ return sol # return
67
+ end
68
+ def self.temperatureHd # return float of hd temperature or array if more disk(s) present
69
+ # need superuser or privileges with apps
70
+ # 1st try hddtemp, temp = -20 error temp
71
+ temp = -20
72
+ temp = %x( hddtemp -n /dev/?d? )
73
+ if $?.exitstatus != 0 # hddtemp not works, try hdparm
74
+ temp = %x( hdparm -H /dev/?d? )
75
+ temp = formatHdparm(temp) if $?.exitstatus == 0 # works fine
76
+ else # hddtemp ok
77
+ temp = formatHddtemp(temp) if temp.is_a? Array
78
+ end
79
+ return temp if temp.is_a? Array
80
+ return temp.to_f
81
+ end
82
+ def self.formatHdparm(entry)
83
+ sol = []
84
+ ok_sense = true
85
+ entry.each_line { |line|
86
+ if /^\/dev/.match(line) # hard disk detected
87
+ ok_sense = true # activate sense
88
+ elsif m1 = /^ drive temperature \(celsius\) is:\s+(d+)/.match(line) # info detected
89
+ sol << m1[1] if ok_sense
90
+ elsif /^SG_IO: bad\/missing sense data/.match(line) # sense problem detected
91
+ ok_sense = false
92
+ end
93
+ }
94
+ return sol[0].to_f if sol.size == 1
95
+ return sol
96
+ end
97
+ def self.formatHddtemp(entry)
98
+ sol = []
99
+ entry.each_line { |line|
100
+ if m1 = /\w+(\/?d?\/):(\w+) not available/.match(line) # error detected
101
+ puts "**warning** drive /dev/#{m1[1]} sensor not available"
102
+ elsif m1 = /^(d+)/.match(line) # info detected
103
+ sol << m1[1]
104
+ end
105
+ }
106
+ return sol[0].to_f if sol.size == 1
107
+ return sol
108
+ end
109
+ def self.maxTemperatureHd
110
+ temp = temperatureHd # float or array of temperatures
111
+ return temp if temp.is_a? Float
112
+ return temp.max
113
+ end
114
+ def self.temperature
115
+ if temperature1
116
+ return temperature1
117
+ elsif temperature2
118
+ return temperature2
119
+ elsif temperature4
120
+ return temperature4
121
+ else return 0 # to perform float test, give a correct answer
122
+ end
123
+ end
124
+ end
125
+
126
+ # Uses system notification to notify of current temperature.
127
+ # Currently works/tested only on Linux
128
+ module Notification
129
+ def self.notify (max_temp_cpu = 77, max_temp_hd = 46) # optional max_temperature CPU hard disk values
130
+ temp = Sensor.temperature1
131
+ temp2 = Sensor.temperature2
132
+ temp4 = Sensor.temperature4
133
+ temp_hd = Sensor.temperature_hd
134
+ # p Sensor.maxTemperatureHd
135
+ if temp2 && temp4
136
+ sentence = "Your computer's temperature is now:\n Core 2 #{temp2} °C, Core 4: #{temp4} °C\n Average temperature: #{(temp4+temp2)/2} °C\n" + temp_hd
137
+ n = Libnotify.new(
138
+ summary: 'Temperature',
139
+ body: sentence ,
140
+ timeout: 2.5,
141
+ append: true
142
+ )
143
+ n.urgency = temp2 > max_temp_cpu ? :critical : :normal
144
+ n.urgency = temp4 > max_temp_cpu ? :critical : :normal
145
+ n.urgency = Sensor.maxTemperatureHd > max_temp_hd ? :critical : :normal
146
+ elsif temp
147
+ sentence = "Your computer's temperature is now: #{temp} °C\n" + temp_hd
148
+ n = Libnotify.new(
149
+ summary: 'Temperature',
150
+ body: sentence ,
151
+ timeout: 2.5,
152
+ append: true
153
+ )
154
+ n.urgency = temp > max_temp ? :critical : :normal
155
+ n.urgency = Sensor.maxTemperatureHd > max_temp_hd ? :critical : :normal
156
+ else
157
+ sentence = "Your computer's temperature is currently unknown by this app, sorry. Wait for a brilliant update. Peace\n" + temp_hd
158
+ n = Libnotify.new(
159
+ summary: 'Temperature',
160
+ body: sentence ,
161
+ timeout: 2.5,
162
+ append: true
163
+ )
164
+ n.urgency = Sensor.maxTemperatureHd > max_temp_hd ? :critical : :normal # temp_hd[1] store number
165
+ end
166
+ puts sentence # check exit, now nothing on console
167
+ puts "URGENT!" if n.urgency
168
+ n.show!
169
+ exit(0)
170
+ end
171
+ end
172
+
173
+ # Module to write the cronjob
174
+ module Cronify
175
+ # Tries to write the crontab and exits with the appropiate code
176
+ # you can edit the file with command $ crontab -e
177
+ def self.schedule(max_cpu = 76, max_hd = 44, cron_value = "22,44 * * * *") # first cron_value = 0,10,20,30,40,50 * * * *
178
+ cron = <<-END.gsub(/^ {8}/, '') # Heredoc try
179
+ # Rsensors temperature notification
180
+ #{cron_value} /bin/bash -l -c 'rsensors job #{max_cpu} #{max_hd}'
181
+ # End Rsensors temperature notification
182
+ END
183
+
184
+ require 'tempfile'
185
+ file = Tempfile.new('temp_cronfile')
186
+ file.write(cron)
187
+ file.close
188
+
189
+ run(file)
190
+ end
191
+
192
+ def self.run(file)
193
+ if system("crontab #{file.path}")
194
+ puts 'INFO: Wrote rsensors on the crontab file'
195
+ file.unlink
196
+ exit(0)
197
+ else
198
+ warn 'ERROR: Failed to write rsensors on crontab'
199
+ file.unlink
200
+ exit(1)
201
+ end
202
+ end
203
+ end
204
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rsensors
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.82
5
+ platform: ruby
6
+ authors:
7
+ - L. Jacob Mariscal Fernández
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: libnotify
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.47.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.47.1
55
+ description: Show a notification of your computer's temperature. It can be programmed
56
+ as a cronjob, so you can be notified when the temperature is high | Muestra la temperatura
57
+ del sistema, puede igual actuar en segundo plano para alertar de alta temperatura
58
+ email: l.jacob.m.f@gmail.com
59
+ executables:
60
+ - rsensors
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - bin/rsensors
65
+ - lib/rsensors.rb
66
+ homepage: https://github.com/jacob-mf/rsensors
67
+ licenses:
68
+ - GPL-3.0
69
+ metadata: {}
70
+ post_install_message: Gracias por probar la gema rsensors | Thanks for installing
71
+ and trying rsensors gem
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.5.2
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: 'A gem to display system hardware temperature | Gema para mostrar la termperatura
91
+ del sistema: microprocesador(es) y disco(s) duro(s)'
92
+ test_files: []