cube-evaluator 0.0.1.alpha → 0.0.1.beta
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.
- data/README.md +10 -5
- data/cube-evaluator.gemspec +1 -0
- data/lib/cube-evaluator/version.rb +2 -2
- data/lib/cube-evaluator.rb +11 -4
- data/spec/cube-evaluator_spec.rb +62 -1
- data/spec/spec_helper.rb +5 -1
- metadata +17 -1
data/README.md
CHANGED
@@ -7,12 +7,12 @@ Obtain data from cube evaluators in a nice format
|
|
7
7
|
Add this to your Gemfile
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem cube-evaluator
|
10
|
+
gem 'cube-evaluator'
|
11
11
|
```
|
12
12
|
|
13
13
|
and then run
|
14
14
|
|
15
|
-
|
15
|
+
$ bundle
|
16
16
|
|
17
17
|
## Usage
|
18
18
|
|
@@ -29,7 +29,13 @@ $cube_evaluator = Cube::Evaluator.new 'cube.example.com', 2280
|
|
29
29
|
Ask for some metrics
|
30
30
|
|
31
31
|
```ruby
|
32
|
-
$cube_evaluator.metric(
|
32
|
+
$cube_evaluator.metric(
|
33
|
+
:expression => 'sum(request)',
|
34
|
+
:start => Time.now - 2592000,
|
35
|
+
:stop => Time.now,
|
36
|
+
:limit => 10,
|
37
|
+
:step => '1minute'
|
38
|
+
)
|
33
39
|
```
|
34
40
|
|
35
41
|
The result will be a json encoded Hash with an array of 'times' and the corresponding 'values'
|
@@ -48,5 +54,4 @@ https://github.com/square/cube/wiki/Evaluator
|
|
48
54
|
|
49
55
|
# TODO
|
50
56
|
|
51
|
-
* Add support for evaluator events and types
|
52
|
-
* Add tests
|
57
|
+
* Add support for evaluator events and types
|
data/cube-evaluator.gemspec
CHANGED
data/lib/cube-evaluator.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
require "cube-evaluator/version"
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module Cube
|
4
5
|
class Evaluator
|
5
|
-
def initialize(
|
6
|
-
@url = "http://#{
|
6
|
+
def initialize(host = 'localhost', port = 1081)
|
7
|
+
@url = "http://#{host}:#{port}/"
|
8
|
+
end
|
9
|
+
|
10
|
+
def url
|
11
|
+
@url || ""
|
7
12
|
end
|
8
13
|
|
9
14
|
def metric(options = {})
|
10
|
-
uri = URI(@url)
|
15
|
+
uri = URI(@url) + "1.0/metric/get"
|
11
16
|
|
12
17
|
params = options.merge(options) do |k,v|
|
13
|
-
if
|
18
|
+
if [DateTime, Date, Time].any?{ |klass| v.is_a?(klass) }
|
14
19
|
v.to_time.utc.iso8601
|
15
20
|
elsif k == :step
|
16
21
|
to_step(v)
|
@@ -42,6 +47,8 @@ module Cube
|
|
42
47
|
result
|
43
48
|
end
|
44
49
|
|
50
|
+
private
|
51
|
+
|
45
52
|
def to_step(step)
|
46
53
|
case step
|
47
54
|
when '10seconds'
|
data/spec/cube-evaluator_spec.rb
CHANGED
@@ -1,5 +1,66 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Cube::Evaluator do
|
4
|
-
|
4
|
+
before(:all) do
|
5
|
+
@cube = Cube::Evaluator.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#initialize" do
|
9
|
+
it "should set the url" do
|
10
|
+
@cube = Cube::Evaluator.new "cube.example.org", 1185
|
11
|
+
@cube.url.should == "http://cube.example.org:1185/"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should default the host and port to localhost:1081" do
|
15
|
+
@cube.url.should == "http://localhost:1081/"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#metric" do
|
20
|
+
before(:all) do
|
21
|
+
@fake_response = [
|
22
|
+
{"time" => "2012-07-16T11:40:00.000Z", "value" => 1},
|
23
|
+
{"time" => "2012-07-16T11:41:00.000Z", "value" => 2},
|
24
|
+
{"time" => "2012-07-16T11:42:00.000Z", "value" => 3},
|
25
|
+
{"time" => "2012-07-16T11:43:00.000Z", "value" => 4},
|
26
|
+
{"time" => "2012-07-16T11:44:00.000Z", "value" => 5},
|
27
|
+
{"time" => "2012-07-16T11:45:00.000Z", "value" => 6},
|
28
|
+
{"time" => "2012-07-16T11:46:00.000Z", "value" => 7}
|
29
|
+
]
|
30
|
+
|
31
|
+
stub_request(:get, "http://localhost:1081/1.0/metric/get?expression=sum(cube_requests)&limit=10&start=2012-04-16T16:00:00Z&step=6e4&stop=2012-04-16T17:00:00Z").
|
32
|
+
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
|
33
|
+
to_return(:status => 200, :body => @fake_response.to_json, :headers => {})
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return the response with the times and values hash" do
|
37
|
+
@metric = {
|
38
|
+
:times => [],
|
39
|
+
:values => []
|
40
|
+
}
|
41
|
+
|
42
|
+
@fake_response.each do |metric|
|
43
|
+
@metric[:times] << Time.parse(metric['time'])
|
44
|
+
@metric[:values] << metric['value']
|
45
|
+
end
|
46
|
+
|
47
|
+
@cube.metric(
|
48
|
+
:expression => 'sum(cube_requests)',
|
49
|
+
:start => Time.parse('2012-04-16T16:00Z'),
|
50
|
+
:stop => Time.parse('2012-04-16T17:00Z'),
|
51
|
+
:step => '1minute',
|
52
|
+
:limit => '10'
|
53
|
+
).should == @metric
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#to_step" do
|
58
|
+
it "should return the supported step" do
|
59
|
+
@cube.send(:to_step, "10seconds").should == '1e4'
|
60
|
+
@cube.send(:to_step, "1minute").should == '6e4'
|
61
|
+
@cube.send(:to_step, "5minutes").should == '3e5'
|
62
|
+
@cube.send(:to_step, "1hour").should == '36e5'
|
63
|
+
@cube.send(:to_step, "1day").should == '864e5'
|
64
|
+
end
|
65
|
+
end
|
5
66
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cube-evaluator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.beta
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: webmock
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description: Square Cube evaluator gem
|
31
47
|
email:
|
32
48
|
- matteodepalo@gmail.com
|