saal 0.2.25 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 39379f2c03a4d1dfe41a1d481d2d90484b9d4e11b2c498f03c0f9ec064918850
4
+ data.tar.gz: ab741ee35c0c4528b89dbdbf32e17ca591d134f126db27e7a6974ce51e4a9723
5
+ SHA512:
6
+ metadata.gz: b2532eff01ab6a191106abe8984b46aa0f9b9b0ca461b87b6b09b5174334c4d054ea8ac335e17551e5c733ca0a1dd31356bc25d68b0d38140b27f89b041f257b
7
+ data.tar.gz: 4bc1474527de78d0a7c80248376f0ae56a4fbc680cbfa991851f41931b5f2bd78c5073ae6ea4217d4edb3b55fec8e105963026b3ca229b90d0868e7f0cfc7179
data/lib/chart.rb CHANGED
@@ -5,7 +5,7 @@ module SAAL
5
5
  @name = name
6
6
  @defs = defs
7
7
  @alignlabels = (defs['alignlabels'] || :center).to_sym
8
- @sensors = defs['sensors'].map{|name| sensors.send(name)}
8
+ @sensors = defs['sensors'].map{|sname| sensors.send(sname)}
9
9
  @num = defs['last']
10
10
  @periods = defs['periods']
11
11
  @alt = defs['alt']
data/lib/chart_data.rb CHANGED
@@ -39,7 +39,7 @@ module SAAL
39
39
  (0..num-2).map do |i|
40
40
  f = t + 1
41
41
  t = (f+step)
42
- v = sensor.send(method, f.to_i, t.to_i)
42
+ _v = sensor.send(method, f.to_i, t.to_i)
43
43
  end << sensor.send(method, (t+1).to_i, to.to_i)
44
44
  end
45
45
 
data/lib/dbstore.rb CHANGED
@@ -46,54 +46,51 @@ module SAAL
46
46
  WHERE sensor = '#{db_quote(sensor.to_s)}'
47
47
  AND date > '#{Time.now.utc.to_i - MAX_LAST_VAL_AGE}'
48
48
  ORDER BY date DESC LIMIT 1" do |r|
49
- if r.num_rows == 0
50
- return nil
49
+ row = r.first
50
+ if row
51
+ _date, value = [row["date"].to_i, row["value"].to_f]
52
+ value
51
53
  else
52
- row = r.fetch_row
53
- date, value = [row[0].to_i, row[1].to_f]
54
- return value
54
+ nil
55
55
  end
56
56
  end
57
57
  end
58
58
 
59
59
  def each
60
60
  db_query "SELECT sensor,date,value FROM sensor_reads" do |r|
61
- r.num_rows.times do
62
- row = r.fetch_row
63
- yield [row[0],row[1].to_i, row[2].to_f]
61
+ r.each do |row|
62
+ yield [row["sensor"],row["date"].to_i, row["value"].to_f]
64
63
  end
65
64
  end
66
65
  end
67
66
 
68
67
  private
69
68
  def db_range(function, sensor, from, to)
70
- db_query "SELECT #{function}(value) AS average FROM sensor_reads
69
+ db_query "SELECT #{function}(value) AS func FROM sensor_reads
71
70
  WHERE sensor = '#{db_quote(sensor.to_s)}'
72
71
  AND date >= #{from.to_s}
73
72
  AND date <= #{to.to_s}" do |r|
74
- if r.num_rows == 0
75
- nil
73
+ row = r.first
74
+ if row && row["func"]
75
+ row["func"].to_f
76
76
  else
77
- row = r.fetch_row
78
- row[0] ? row[0].to_f : nil
77
+ nil
79
78
  end
80
79
  end
81
80
  end
82
81
 
83
82
  def db_quote(text)
84
- Mysql.quote(text)
83
+ Mysql2::Client.escape(text)
85
84
  end
86
85
 
87
86
  def db_query(query, opts={})
88
87
  db = nil
89
88
  begin
90
89
  # connect to the MySQL server
91
- db = Mysql.new(@dbopts['host'],@dbopts['user'],@dbopts['pass'],
92
- @dbopts['db'],@dbopts['port'],@dbopts['socket'],
93
- @dbopts['flags'])
90
+ db = Mysql2::Client.new(@dbopts)
94
91
  res = db.query(query)
95
92
  yield res if block_given?
96
- rescue Mysql::Error => e
93
+ rescue Mysql2::Error => e
97
94
  $stderr.puts "MySQL Error #{e.errno}: #{e.error}" if !(e.errno == opts[:ignoreerr])
98
95
  ensure
99
96
  db.close if db
data/lib/dinrelay.rb CHANGED
@@ -42,6 +42,7 @@ module SAAL
42
42
  @cache_timeout = opts[:cache_timeout] || opts['cache_timeout'] || DEFAULT_CACHE_TIMEOUT
43
43
  @cache = nil
44
44
  @cachehit = nil
45
+ @cachetime = nil
45
46
  end
46
47
 
47
48
  def state(num)
data/lib/outliercache.rb CHANGED
@@ -41,7 +41,7 @@ module SAAL
41
41
  def valid_cache
42
42
  @compcache.sort!
43
43
  central = @compcache[1..(@compcache.size-2)]
44
- sum = central.inject(0.0){|sum,el| sum+el}
44
+ sum = central.inject(0.0){|csum,el| csum+el}
45
45
  return false if sum == 0.0
46
46
  average = sum/central.size
47
47
  central.each do |el|
data/lib/saal.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'yaml'
2
- require "mysql"
2
+ require "mysql2"
3
3
  require 'ownet'
4
4
  require 'nokogiri'
5
5
  require 'erb'
@@ -10,7 +10,7 @@ module SAAL
10
10
  DBCONF = CONFDIR+"database.yml"
11
11
  CHARTSCONF = CONFDIR+"charts.yml"
12
12
 
13
- VERSION = '0.2.25'
13
+ VERSION = '0.3.0'
14
14
  end
15
15
 
16
16
  require File.dirname(__FILE__)+'/dbstore.rb'
data/saal.gemspec CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.platform = Gem::Platform::RUBY
7
7
 
8
8
  s.name = 'saal'
9
- s.version = '0.2.25'
10
- s.date = '2014-01-03'
9
+ s.version = '0.3.0'
10
+ s.date = '2018-06-02'
11
11
 
12
12
  s.summary = "Thin abstraction layer for interfacing and recording sensors (currently onewire) and actuators (currently dinrelay)"
13
13
  s.description = <<EOF
@@ -19,6 +19,7 @@ EOF
19
19
  s.authors = ["Pedro Côrte-Real"]
20
20
  s.email = 'pedro@pedrocr.net'
21
21
  s.homepage = 'https://github.com/pedrocr/saal'
22
+ s.licenses = 'LGPL-2.1'
22
23
 
23
24
  s.require_paths = %w[lib]
24
25
 
@@ -28,9 +29,9 @@ EOF
28
29
 
29
30
  s.executables = Dir.glob("bin/*").map{|f| f.gsub('bin/','')}
30
31
 
31
- s.add_dependency('ownet', [">= 0.2.1"])
32
- s.add_dependency('nokogiri')
33
- s.add_dependency('mysql')
32
+ s.add_runtime_dependency 'ownet', "~>0.2"
33
+ s.add_runtime_dependency 'mysql2', "~>0.5"
34
+ s.add_runtime_dependency 'nokogiri', '~>1.8'
34
35
 
35
36
  # = MANIFEST =
36
37
  s.files = %w[
@@ -78,7 +78,7 @@ class TestChartData < Test::Unit::TestCase
78
78
  Time.utc(2012, 3, 25, 23, 59, 59),
79
79
  ["0"]+(2..23).map{|s| s.to_s}+["0"],
80
80
  Time.utc(2012, 3, 25, 23, 59, 59),
81
- "_changing_timezone_test","Europe/Lisbon")
81
+ "_changing_timezone_test2","Europe/Lisbon")
82
82
 
83
83
  assert_alignment_interval(24, :hours, Time.utc(2010, 12, 29, 16, 0, 0),
84
84
  Time.utc(2010, 12, 30, 15, 59, 59),
data/test/chart_test.rb CHANGED
@@ -16,7 +16,6 @@ class TestChart < Test::Unit::TestCase
16
16
 
17
17
  def test_average
18
18
  name = 'week'
19
- defs = @defs[name]
20
19
  chart = @charts.find(name)
21
20
  assert_equal ['Fri','Sat','Sun','Mon','Tue','Wed','Thu'], chart.periodnames
22
21
  chart.sensors.each {|s| s.mock_set(:average => 1)}
@@ -31,7 +30,6 @@ class TestChart < Test::Unit::TestCase
31
30
 
32
31
  def test_min_max_avg_1arity
33
32
  name = 'week'
34
- defs = @defs[name]
35
33
  chart = @charts.find(name)
36
34
  assert_equal ['Fri','Sat','Sun','Mon','Tue','Wed','Thu'], chart.periodnames
37
35
  v = {:minimum => 1.0, :maximum => 2.0, :average => 1.5}
@@ -43,7 +41,6 @@ class TestChart < Test::Unit::TestCase
43
41
 
44
42
  def test_min_max_0arity
45
43
  name = 'week'
46
- defs = @defs[name]
47
44
  chart = @charts.find(name)
48
45
  assert_equal ['Fri','Sat','Sun','Mon','Tue','Wed','Thu'], chart.periodnames
49
46
  v = {:minimum => 1.0, :maximum => 2.0, :average => 1.5}
data/test/daemon_test.rb CHANGED
@@ -18,7 +18,7 @@ class TestDaemon < Test::Unit::TestCase
18
18
  end
19
19
 
20
20
  db_test_query("SELECT * FROM sensor_reads") do |res|
21
- assert res.num_rows > 0, "No sensor reads in DB"
21
+ assert res.count > 0, "No sensor reads in DB"
22
22
  end
23
23
  end
24
24
 
@@ -38,7 +38,7 @@ class TestDaemon < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
  db_test_query("SELECT * FROM sensor_reads") do |res|
41
- assert res.num_rows == 0
41
+ assert res.count == 0
42
42
  end
43
43
  end
44
44
  end
data/test/dbstore_test.rb CHANGED
@@ -9,8 +9,11 @@ class TestFileStore < Test::Unit::TestCase
9
9
  @dbstore.write(:test_sensor, test_time, test_value)
10
10
 
11
11
  db_test_query("SELECT * FROM sensor_reads") do |res|
12
- assert_equal 1, res.num_rows
13
- assert_equal ["test_sensor", test_time.to_s, test_value.to_s], res.fetch_row
12
+ assert_equal 1, res.count
13
+ row = res.first
14
+ assert_equal "test_sensor", row["sensor"]
15
+ assert_equal test_time, row["date"].to_i
16
+ assert_equal test_value, row["value"].to_f
14
17
  end
15
18
  end
16
19
 
@@ -151,7 +151,7 @@ class TestDINRelay < Test::Unit::TestCase
151
151
 
152
152
  # Test that the cache times out
153
153
  def test_cache_invalidation
154
- sensors = SAAL::Sensors.new(@test_sensors_dinrelay_file, TEST_DBCONF)
154
+ _sensors = SAAL::Sensors.new(@test_sensors_dinrelay_file, TEST_DBCONF)
155
155
  @og.cache_timeout = 0.1
156
156
  with_webrick(:html=>create_index_html(@vals)) do |feedback|
157
157
  @og.state(1)
data/test/sensors_test.rb CHANGED
@@ -67,11 +67,11 @@ class TestSensors < Test::Unit::TestCase
67
67
  end
68
68
 
69
69
  db_test_query("SELECT * FROM sensor_reads") do |res|
70
- assert_equal 1, res.num_rows
71
- row = res.fetch_row
72
- assert_equal "fake_temp", row[0]
73
- assert_in_delta Time.now.utc.to_i, row[1].to_i, 100
74
- assert_instance_of Float, row[2].to_f
70
+ assert_equal 1, res.count
71
+ row = res.first
72
+ assert_equal "fake_temp", row["sensor"]
73
+ assert_in_delta Time.now.utc.to_i, row["date"].to_i, 100
74
+ assert_instance_of Float, row["value"].to_f
75
75
  end
76
76
  end
77
77
  end
data/test/test_db.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  host: localhost
2
- user: sensor_reads
3
- pass: password
4
- db: sensor_reads_test
2
+ username: sensor_reads
3
+ password: password
4
+ database: sensor_reads_test
data/test/test_helper.rb CHANGED
@@ -29,8 +29,7 @@ class Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  def db_test_query(query)
32
- db = Mysql.new(TEST_DBOPTS['host'],TEST_DBOPTS['user'],
33
- TEST_DBOPTS['pass'],TEST_DBOPTS['db'])
32
+ db = Mysql2::Client.new(TEST_DBOPTS)
34
33
  res = db.query(query)
35
34
  yield res
36
35
  db.close
@@ -1,7 +1,7 @@
1
1
  fake_temp:
2
2
  name: "A fake temperature sensor"
3
3
  onewire:
4
- serial: /10.4AEC29CDBAAB/temperature
4
+ serial: /10.67C6697351FF/temperature
5
5
 
6
6
  non_existant:
7
7
  name: "A non-existant sensor"
metadata CHANGED
@@ -1,63 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.25
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Pedro Côrte-Real
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-01-03 00:00:00.000000000 Z
11
+ date: 2018-06-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: ownet
16
- requirement: &85784820 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 0.2.1
19
+ version: '0.2'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *85784820
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.2'
25
27
  - !ruby/object:Gem::Dependency
26
- name: nokogiri
27
- requirement: &85784520 !ruby/object:Gem::Requirement
28
- none: false
28
+ name: mysql2
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - "~>"
31
32
  - !ruby/object:Gem::Version
32
- version: '0'
33
+ version: '0.5'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *85784520
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
36
41
  - !ruby/object:Gem::Dependency
37
- name: mysql
38
- requirement: &85782840 !ruby/object:Gem::Requirement
39
- none: false
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - "~>"
42
46
  - !ruby/object:Gem::Version
43
- version: '0'
47
+ version: '1.8'
44
48
  type: :runtime
45
49
  prerelease: false
46
- version_requirements: *85782840
47
- description: ! "A daemon and libraries to create an abstraction layer that interfaces
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.8'
55
+ description: "A daemon and libraries to create an abstraction layer that interfaces
48
56
  with \nsensors and actuators, recording their state, responding to requests \nfor
49
57
  current and historical values, and allowing changes of state.\n"
50
58
  email: pedro@pedrocr.net
51
59
  executables:
52
- - saal_chart~
53
60
  - dinrelaystatus
54
- - saal_readall
55
- - saal_dump_database
56
- - saal_daemon
57
- - saal_chart
58
- - saal_daemon~
59
61
  - dinrelayset
60
62
  - saal_import_mysql
63
+ - saal_chart~
64
+ - saal_daemon~
65
+ - saal_dump_database
66
+ - saal_readall
67
+ - saal_chart
68
+ - saal_daemon
61
69
  extensions: []
62
70
  extra_rdoc_files:
63
71
  - README.rdoc
@@ -71,7 +79,9 @@ files:
71
79
  - bin/dinrelayset
72
80
  - bin/dinrelaystatus
73
81
  - bin/saal_chart
82
+ - bin/saal_chart~
74
83
  - bin/saal_daemon
84
+ - bin/saal_daemon~
75
85
  - bin/saal_dump_database
76
86
  - bin/saal_import_mysql
77
87
  - bin/saal_readall
@@ -104,33 +114,31 @@ files:
104
114
  - test/test_helper.rb
105
115
  - test/test_sensor_cleanups.yml
106
116
  - test/test_sensors.yml
107
- - bin/saal_chart~
108
- - bin/saal_daemon~
109
117
  homepage: https://github.com/pedrocr/saal
110
- licenses: []
118
+ licenses:
119
+ - LGPL-2.1
120
+ metadata: {}
111
121
  post_install_message:
112
122
  rdoc_options:
113
- - -S
114
- - -w 2
115
- - -N
116
- - -c utf8
123
+ - "-S"
124
+ - "-w 2"
125
+ - "-N"
126
+ - "-c utf8"
117
127
  require_paths:
118
128
  - lib
119
129
  required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
130
  requirements:
122
- - - ! '>='
131
+ - - ">="
123
132
  - !ruby/object:Gem::Version
124
133
  version: '0'
125
134
  required_rubygems_version: !ruby/object:Gem::Requirement
126
- none: false
127
135
  requirements:
128
- - - ! '>='
136
+ - - ">="
129
137
  - !ruby/object:Gem::Version
130
138
  version: '0'
131
139
  requirements: []
132
140
  rubyforge_project:
133
- rubygems_version: 1.8.11
141
+ rubygems_version: 2.7.6
134
142
  signing_key:
135
143
  specification_version: 2
136
144
  summary: Thin abstraction layer for interfacing and recording sensors (currently onewire)