influxer 0.1.2 → 0.2.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 +4 -4
- data/.hound.yml +2 -0
- data/influxer.gemspec +1 -1
- data/lib/influxer.rb +0 -1
- data/lib/influxer/metrics/metrics.rb +8 -1
- data/lib/influxer/metrics/relation.rb +2 -0
- data/lib/influxer/metrics/relation/calculations.rb +21 -0
- data/lib/influxer/version.rb +1 -1
- data/spec/metrics/relation_spec.rb +46 -22
- data/spec/support/dummy_metrics.rb +2 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9483ba238ca5ac211fc174ae7dd81c49fd5aa08
|
4
|
+
data.tar.gz: 1915d412dc2bd255e4460e7448d8e007ec9dadf2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba9f6fc956de4fbf97e30a4f7dcf2ed248082ef4f1260ae18080b6cfd4d606239a3bc82346cfe815b77d355fe739ca2fecfb61ee8ed0ff5f037f7f900283ebea
|
7
|
+
data.tar.gz: 89bf51a352e1c83bf5a02d793aa7d43c820dbbc3275ef0447f6195d7c15fe5d94242989e2f75f728b575a3de8c58d71702163776887964ddfd2f547c9ec68d24
|
data/.hound.yml
ADDED
data/influxer.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.add_runtime_dependency "rails", '~> 4.0'
|
19
19
|
s.add_dependency "influxdb", "~> 0.1.0", ">= 0.1.8"
|
20
|
-
s.add_dependency "anyway_config", "~> 0.
|
20
|
+
s.add_dependency "anyway_config", "~> 0.4"
|
21
21
|
|
22
22
|
s.add_development_dependency "timecop"
|
23
23
|
s.add_development_dependency "simplecov", ">= 0.3.8"
|
data/lib/influxer.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'influxer/metrics/relation'
|
1
2
|
require 'influxer/metrics/scoping'
|
2
3
|
require 'influxer/metrics/fanout'
|
3
4
|
|
@@ -17,7 +18,13 @@ module Influxer
|
|
17
18
|
|
18
19
|
class << self
|
19
20
|
# delegate query functions to all
|
20
|
-
delegate
|
21
|
+
delegate *(
|
22
|
+
[
|
23
|
+
:write, :select, :where, :group,
|
24
|
+
:merge, :time, :past, :since, :limit,
|
25
|
+
:fill, :delete_all
|
26
|
+
]+Influxer::Calculations::CALCULATION_METHODS),
|
27
|
+
to: :all
|
21
28
|
|
22
29
|
def attributes(*attrs)
|
23
30
|
attrs.each do |name|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'influxer/metrics/relation/time_query'
|
2
2
|
require 'influxer/metrics/relation/fanout_query'
|
3
|
+
require 'influxer/metrics/relation/calculations'
|
3
4
|
|
4
5
|
module Influxer
|
5
6
|
class Relation
|
@@ -7,6 +8,7 @@ module Influxer
|
|
7
8
|
|
8
9
|
include Influxer::TimeQuery
|
9
10
|
include Influxer::FanoutQuery
|
11
|
+
include Influxer::Calculations
|
10
12
|
|
11
13
|
MULTI_VALUE_METHODS = [:select, :where, :group]
|
12
14
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Influxer
|
2
|
+
module Calculations
|
3
|
+
CALCULATION_METHODS =
|
4
|
+
[
|
5
|
+
:count, :min, :max, :mean,
|
6
|
+
:mode, :median, :distinct, :derivative,
|
7
|
+
:stddev, :sum, :first, :last, :difference,
|
8
|
+
:percentile, :histogram, :top, :bottom
|
9
|
+
]
|
10
|
+
|
11
|
+
CALCULATION_METHODS.each do |name|
|
12
|
+
class_eval <<-CODE, __FILE__, __LINE__ + 1
|
13
|
+
def #{name}(val, option=nil) # def count(val)
|
14
|
+
@values[:has_calculations] = true # @values[:has_calculations] = true
|
15
|
+
select_values << "#{name}(\#\{val\}\#\{option ? ','+option.to_s : ''\})" # select_values << "count(\#\{val\})"
|
16
|
+
self # self
|
17
|
+
end # end
|
18
|
+
CODE
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/influxer/version.rb
CHANGED
@@ -25,7 +25,7 @@ describe Influxer::Relation do
|
|
25
25
|
specify { expect(rel).to respond_to :to_sql }
|
26
26
|
|
27
27
|
|
28
|
-
describe "merge
|
28
|
+
describe "#merge!" do
|
29
29
|
it "should merge multi values" do
|
30
30
|
r1 = rel.where(id: [1,2], dummy: 'qwe').time(:hour)
|
31
31
|
r2 = Influxer::Relation.new(DummyMetrics).where.not(user_id: 0).group(:user_id)
|
@@ -49,7 +49,7 @@ describe Influxer::Relation do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
describe "select" do
|
52
|
+
describe "#select" do
|
53
53
|
it "should select array of symbols" do
|
54
54
|
expect(rel.select(:user_id, :dummy_id).to_sql).to eq "select user_id,dummy_id from \"dummy\""
|
55
55
|
end
|
@@ -59,7 +59,7 @@ describe Influxer::Relation do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
describe "where" do
|
62
|
+
describe "#where" do
|
63
63
|
it "should generate valid conditions from hash" do
|
64
64
|
Timecop.freeze(Time.now) do
|
65
65
|
expect(rel.where(user_id: 1, dummy: 'q', timer: Time.now).to_sql).to eq "select * from \"dummy\" where (user_id=1) and (dummy='q') and (timer=#{Time.now.to_i}s)"
|
@@ -83,7 +83,7 @@ describe Influxer::Relation do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
describe "not" do
|
86
|
+
describe "#not" do
|
87
87
|
it "should negate simple values" do
|
88
88
|
expect(rel.where.not(user_id: 1, dummy: :a).to_sql).to eq "select * from \"dummy\" where (user_id<>1) and (dummy<>'a')"
|
89
89
|
end
|
@@ -101,7 +101,7 @@ describe Influxer::Relation do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
describe "merge" do
|
104
|
+
describe "#merge" do
|
105
105
|
it "should merge with one series" do
|
106
106
|
expect(rel.merge("dubby").to_sql).to eq "select * from \"dummy\" merge \"dubby\""
|
107
107
|
end
|
@@ -111,7 +111,7 @@ describe Influxer::Relation do
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
describe "past" do
|
114
|
+
describe "#past" do
|
115
115
|
it "should work with predefined symbols" do
|
116
116
|
expect(rel.past(:hour).to_sql).to eq "select * from \"dummy\" where (time > now() - 1h)"
|
117
117
|
end
|
@@ -129,18 +129,18 @@ describe Influxer::Relation do
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
-
describe "since" do
|
132
|
+
describe "#since" do
|
133
133
|
it "should work with datetime" do
|
134
134
|
expect(rel.since(Time.utc(2014,12,31)).to_sql).to eq "select * from \"dummy\" where (time > 1419984000s)"
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
describe "group" do
|
138
|
+
describe "#group" do
|
139
139
|
it "should generate valid groups" do
|
140
140
|
expect(rel.group(:user_id, "time(1m) fill(0)").to_sql).to eq "select * from \"dummy\" group by user_id,time(1m) fill(0)"
|
141
141
|
end
|
142
142
|
|
143
|
-
|
143
|
+
context "group by time predefined values" do
|
144
144
|
it "should group by hour" do
|
145
145
|
expect(rel.time(:hour).to_sql).to eq "select * from \"dummy\" group by time(1h)"
|
146
146
|
end
|
@@ -187,29 +187,53 @@ describe Influxer::Relation do
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
-
describe "limit" do
|
190
|
+
describe "#limit" do
|
191
191
|
it "should generate valid limi" do
|
192
192
|
expect(rel.limit(100).to_sql).to eq "select * from \"dummy\" limit 100"
|
193
193
|
end
|
194
194
|
end
|
195
195
|
|
196
|
-
describe "
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
196
|
+
describe "calculations" do
|
197
|
+
context "one arg calculation methods" do
|
198
|
+
[
|
199
|
+
:count, :min, :max, :mean,
|
200
|
+
:mode, :median, :distinct, :derivative,
|
201
|
+
:stddev, :sum, :first, :last, :difference, :histogram
|
202
|
+
].each do |method|
|
203
|
+
describe "##{method}" do
|
204
|
+
it { expect(rel.where(user_id: 1).calc(method, :column_name).to_sql).to eq "select #{method}(column_name) from \"dummy\" where (user_id=1)"}
|
205
|
+
end
|
206
|
+
end
|
202
207
|
end
|
203
208
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
209
|
+
context "two args calculation methods" do
|
210
|
+
[
|
211
|
+
:percentile, :histogram, :top, :bottom
|
212
|
+
].each do |method|
|
213
|
+
describe "##{method}" do
|
214
|
+
it { expect(rel.where(user_id: 1).calc(method, :column_name, 10).to_sql).to eq "select #{method}(column_name,10) from \"dummy\" where (user_id=1)"}
|
215
|
+
end
|
216
|
+
end
|
208
217
|
end
|
209
218
|
end
|
210
219
|
end
|
211
220
|
|
212
|
-
describe "
|
221
|
+
describe "#empty?" do
|
222
|
+
after(:each) { Influxer.reset }
|
223
|
+
it "should return false if has points" do
|
224
|
+
Influxer.client.stub(:query) { {points: [{time: 1, id: 2}]} }
|
225
|
+
expect(rel.empty?).to be_falsey
|
226
|
+
expect(rel.present?).to be_truthy
|
227
|
+
end
|
228
|
+
|
229
|
+
it "should return true if no points" do
|
230
|
+
Influxer.client.stub(:query) { {} }
|
231
|
+
expect(rel.empty?).to be_truthy
|
232
|
+
expect(rel.present?).to be_falsey
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
describe "#delete_all" do
|
213
237
|
it do
|
214
238
|
Timecop.freeze(Time.now) do
|
215
239
|
expect(rel.where(user_id: 1, dummy: 'q', timer: Time.now).delete_all).to eq "delete from \"dummy\" where (user_id=1) and (dummy='q') and (timer=#{Time.now.to_i}s)"
|
@@ -217,7 +241,7 @@ describe Influxer::Relation do
|
|
217
241
|
end
|
218
242
|
end
|
219
243
|
|
220
|
-
describe "inspect" do
|
244
|
+
describe "#inspect" do
|
221
245
|
|
222
246
|
after(:each) do
|
223
247
|
Influxer.reset
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vlad Dem
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
53
|
+
version: '0.4'
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '0.
|
60
|
+
version: '0.4'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: timecop
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,7 @@ extensions: []
|
|
164
164
|
extra_rdoc_files: []
|
165
165
|
files:
|
166
166
|
- ".gitignore"
|
167
|
+
- ".hound.yml"
|
167
168
|
- ".travis.yml"
|
168
169
|
- Changelog.md
|
169
170
|
- Gemfile
|
@@ -181,6 +182,7 @@ files:
|
|
181
182
|
- lib/influxer/metrics/fanout.rb
|
182
183
|
- lib/influxer/metrics/metrics.rb
|
183
184
|
- lib/influxer/metrics/relation.rb
|
185
|
+
- lib/influxer/metrics/relation/calculations.rb
|
184
186
|
- lib/influxer/metrics/relation/fanout_query.rb
|
185
187
|
- lib/influxer/metrics/relation/time_query.rb
|
186
188
|
- lib/influxer/metrics/scoping.rb
|