Class: SAAL::DBStore
Constant Summary collapse
- MAX_LAST_VAL_AGE =
Only give out last_value if it’s less than 5 min old
5*60
Instance Method Summary collapse
- #average(sensor, from, to) ⇒ Object
- #db_initialize ⇒ Object
- #db_wipe ⇒ Object
- #each ⇒ Object
-
#initialize(conffile = SAAL::DBCONF) ⇒ DBStore
constructor
A new instance of DBStore.
- #last_value(sensor) ⇒ Object
- #maximum(sensor, from, to) ⇒ Object
- #minimum(sensor, from, to) ⇒ Object
- #write(sensor, date, value) ⇒ Object
Constructor Details
#initialize(conffile = SAAL::DBCONF) ⇒ DBStore
Returns a new instance of DBStore.
7 8 9 10 11 |
# File 'lib/dbstore.rb', line 7 def initialize(conffile=SAAL::DBCONF) @dbopts = YAML::load(File.new(conffile)) @db = nil db_initialize end |
Instance Method Details
#average(sensor, from, to) ⇒ Object
34 35 36 |
# File 'lib/dbstore.rb', line 34 def average(sensor, from, to) db_range("AVG", sensor, from, to) end |
#db_initialize ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/dbstore.rb', line 13 def db_initialize db_query "CREATE TABLE IF NOT EXISTS sensor_reads (sensor VARCHAR(100), date INT, value FLOAT) ENGINE=InnoDB" db_query "ALTER TABLE sensor_reads ADD INDEX sensor_date_value (sensor,date,value) USING BTREE", :ignoreerr => 1061 end |
#db_wipe ⇒ Object
22 23 24 |
# File 'lib/dbstore.rb', line 22 def db_wipe db_query "DROP TABLE sensor_reads" end |
#each ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/dbstore.rb', line 59 def each db_query "SELECT sensor,date,value FROM sensor_reads" do |r| r.num_rows.times do row = r.fetch_row yield [row[0],row[1].to_i, row[2].to_f] end end end |
#last_value(sensor) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/dbstore.rb', line 44 def last_value(sensor) db_query "SELECT date,value FROM sensor_reads WHERE sensor = '#{db_quote(sensor.to_s)}' AND date > '#{Time.now.utc.to_i - MAX_LAST_VAL_AGE}' ORDER BY date DESC LIMIT 1" do |r| if r.num_rows == 0 return nil else row = r.fetch_row date, value = [row[0].to_i, row[1].to_f] return value end end end |
#maximum(sensor, from, to) ⇒ Object
41 42 43 |
# File 'lib/dbstore.rb', line 41 def maximum(sensor, from, to) db_range("MAX", sensor, from, to) end |
#minimum(sensor, from, to) ⇒ Object
38 39 40 |
# File 'lib/dbstore.rb', line 38 def minimum(sensor, from, to) db_range("MIN", sensor, from, to) end |
#write(sensor, date, value) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/dbstore.rb', line 26 def write(sensor, date, value) raise ArgumentError, "Trying to store an empty sensor read" if !value raise ArgumentError, "Trying to store an empty timestamp" if !date raise ArgumentError, "Trying to store a timestamp <= 0" if date <= 0 db_query "INSERT INTO sensor_reads VALUES ('"+db_quote(sensor.to_s)+"',"+date.to_s+","+value.to_s+")" end |