-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreader.rb
executable file
·52 lines (47 loc) · 1.45 KB
/
reader.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env ruby
require 'rubygems'
require 'yaml'
require 'logger'
require File.dirname(__FILE__)+'/lib/temperature_reader.rb'
require File.dirname(__FILE__)+'/lib/fake_temperature_reader.rb'
require File.dirname(__FILE__)+'/lib/temperature_dao.rb'
require File.dirname(__FILE__)+'/lib/measurement_buffer.rb'
STDOUT.sync = true
logger = Logger.new(STDOUT)
config = YAML.load(File.read(File.dirname($0)+"/config.yaml"))
dao = TemperatureDAO.factory(config['database'], logger)
buffer = MeasurementBuffer.new(config['buffer_file'], logger)
puts "Starting reading at #{Time.now}"
begin
if config['fake_reader_mode'] == true
temp_reader = FakeTemperatureReader.new
else
temp_reader = TemperatureReader.new(config["serial"], logger)
end
begin
begin
reading = temp_reader.next
if reading and reading.valid?
if config['fake_storage_mode'] == true
puts "fake storage mode: " + reading.inspect
else
buffer.store(reading)
end
end
end while reading
if config['fake_storage_mode'] != true
buffer.flush(dao)
end
sleep 5
end while true
rescue RuntimeError, SocketError, SystemCallError => e
logger.warn "Error during processing: #{$!}"
logger.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
if temp_reader.nil?
logger.warn "Reader device could not be initialized. Waiting for 5 seconds."
sleep 5
else
temp_reader.close
temp_reader = nil
end
end while true