librato-metrics 0.4.3 → 0.5.0.pre1
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/CHANGELOG.md +7 -0
- data/README.md +29 -0
- data/lib/librato/metrics/client.rb +180 -0
- data/lib/librato/metrics/{collect.rb → collection.rb} +8 -6
- data/lib/librato/metrics/connection.rb +91 -0
- data/lib/librato/metrics/errors.rb +1 -0
- data/lib/librato/metrics/middleware/expects_status.rb +22 -0
- data/lib/librato/metrics/middleware/retry.rb +28 -0
- data/lib/librato/metrics/persistence/direct.rb +3 -4
- data/lib/librato/metrics/persistence/test.rb +1 -1
- data/lib/librato/metrics/queue.rb +14 -3
- data/lib/librato/metrics/version.rb +1 -1
- data/lib/librato/metrics.rb +55 -72
- data/librato-metrics.gemspec +4 -3
- data/spec/integration/metrics/connection_spec.rb +14 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/unit/metrics/client_spec.rb +110 -0
- data/spec/unit/metrics/connection_spec.rb +55 -0
- data/spec/unit/metrics/queue_spec.rb +18 -2
- data/spec/unit/metrics_spec.rb +3 -3
- metadata +42 -24
- data/lib/librato/metrics/simple.rb +0 -148
- data/spec/unit/metrics/simple_spec.rb +0 -126
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
|
3
|
+
require 'pry'
|
3
4
|
require 'rspec'
|
4
5
|
require 'rspec/mocks/standalone'
|
5
6
|
|
@@ -19,10 +20,11 @@ RSpec.configure do |config|
|
|
19
20
|
|
20
21
|
# purge all metrics from test account
|
21
22
|
def delete_all_metrics
|
22
|
-
connection = Librato::Metrics.connection
|
23
|
+
connection = Librato::Metrics.client.connection
|
23
24
|
Librato::Metrics.list.each do |metric|
|
24
25
|
#puts "deleting #{metric['name']}..."
|
25
|
-
|
26
|
+
# expects 204
|
27
|
+
connection.delete("metrics/#{metric['name']}")
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Librato
|
4
|
+
module Metrics
|
5
|
+
|
6
|
+
describe Client do
|
7
|
+
|
8
|
+
describe "#agent_identifier" do
|
9
|
+
context "when given a single string argument" do
|
10
|
+
it "should set agent_identifier" do
|
11
|
+
subject.agent_identifier 'mycollector/0.1 (dev_id:foo)'
|
12
|
+
subject.agent_identifier.should == 'mycollector/0.1 (dev_id:foo)'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when given three arguments" do
|
17
|
+
it "should compose an agent string" do
|
18
|
+
subject.agent_identifier('test_app', '0.5', 'foobar')
|
19
|
+
subject.agent_identifier.should == 'test_app/0.5 (dev_id:foobar)'
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when given an empty string" do
|
23
|
+
it "should set to empty" do
|
24
|
+
subject.agent_identifier ''
|
25
|
+
subject.agent_identifier.should == ''
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when given two arguments" do
|
31
|
+
it "should raise error" do
|
32
|
+
lambda { subject.agent_identifier('test_app', '0.5') }.should raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#api_endpoint" do
|
38
|
+
it "should default to metrics" do
|
39
|
+
subject.api_endpoint.should == 'https://metrics-api.librato.com'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#api_endpoint=" do
|
44
|
+
it "should set api_endpoint" do
|
45
|
+
subject.api_endpoint = 'http://test.com/'
|
46
|
+
subject.api_endpoint.should == 'http://test.com/'
|
47
|
+
end
|
48
|
+
|
49
|
+
# TODO:
|
50
|
+
# it "should ensure trailing slash"
|
51
|
+
# it "should ensure real URI"
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#authenticate" do
|
55
|
+
context "when given two arguments" do
|
56
|
+
it "should store them as email and api_key" do
|
57
|
+
subject.authenticate 'test@librato.com', 'api_key'
|
58
|
+
subject.email.should == 'test@librato.com'
|
59
|
+
subject.api_key.should == 'api_key'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#connection" do
|
65
|
+
it "should raise exception without authentication" do
|
66
|
+
subject.flush_authentication
|
67
|
+
lambda{ subject.connection }.should raise_error(Librato::Metrics::CredentialsMissing)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#new_queue" do
|
72
|
+
it "should return a new queue with client set" do
|
73
|
+
queue = subject.new_queue
|
74
|
+
queue.client.should be subject
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#persistence" do
|
79
|
+
it "should default to direct" do
|
80
|
+
subject.send(:flush_persistence)
|
81
|
+
subject.persistence.should == :direct
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should allow configuration of persistence method" do
|
85
|
+
subject.persistence = :fake
|
86
|
+
subject.persistence.should == :fake
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#submit" do
|
91
|
+
it "should persist metrics immediately" do
|
92
|
+
subject.authenticate 'me@librato.com', 'foo'
|
93
|
+
subject.persistence = :test
|
94
|
+
subject.submit(:foo => 123).should eql true
|
95
|
+
subject.persister.persisted.should eql({:gauges => [{:name => 'foo', :value => 123}]})
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should tolerate muliple metrics" do
|
99
|
+
subject.authenticate 'me@librato.com', 'foo'
|
100
|
+
subject.persistence = :test
|
101
|
+
lambda{ subject.submit :foo => 123, :bar => 456 }.should_not raise_error
|
102
|
+
expected = {:gauges => [{:name => 'foo', :value => 123}, {:name => 'bar', :value => 456}]}
|
103
|
+
subject.persister.persisted.should eql expected
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Librato
|
4
|
+
module Metrics
|
5
|
+
|
6
|
+
describe Connection do
|
7
|
+
|
8
|
+
describe "network operations" do
|
9
|
+
context "when missing client" do
|
10
|
+
it "should raise exception" do
|
11
|
+
lambda { subject.get 'metrics' }#.should raise(NoClientProvided)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#api_endpoint" do
|
17
|
+
context "when not provided" do
|
18
|
+
it "should be default" do
|
19
|
+
subject.api_endpoint.should == 'https://metrics-api.librato.com'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when provided" do
|
24
|
+
it "should be respected" do
|
25
|
+
connection = Connection.new(:api_endpoint => 'http://test.com/')
|
26
|
+
connection.api_endpoint.should == 'http://test.com/'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#user_agent" do
|
32
|
+
context "without an agent_identifier" do
|
33
|
+
it "should render standard string" do
|
34
|
+
connection = Connection.new(:client => Client.new)
|
35
|
+
connection.user_agent.should start_with('librato-metrics')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with an agent_identifier" do
|
40
|
+
it "should render agent_identifier first" do
|
41
|
+
client = Client.new
|
42
|
+
client.agent_identifier('foo', '0.5', 'bar')
|
43
|
+
connection = Connection.new(:client => client)
|
44
|
+
connection.user_agent.should start_with('foo/0.5')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# TODO: verify user agent is being sent with rackup test
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -7,7 +7,24 @@ module Librato
|
|
7
7
|
|
8
8
|
before(:all) do
|
9
9
|
@time = Time.now.to_i
|
10
|
-
|
10
|
+
Queue.stub(:epoch_time).and_return(@time)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "initialization" do
|
14
|
+
context "with specified client" do
|
15
|
+
it "should set to client" do
|
16
|
+
barney = Client
|
17
|
+
queue = Queue.new(:client => barney)
|
18
|
+
queue.client.should be barney
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "without specified client" do
|
23
|
+
it "should use Librato::Metrics client" do
|
24
|
+
queue = Queue.new
|
25
|
+
queue.client.should be Librato::Metrics.client
|
26
|
+
end
|
27
|
+
end
|
11
28
|
end
|
12
29
|
|
13
30
|
describe "#add" do
|
@@ -115,7 +132,6 @@ module Librato
|
|
115
132
|
Librato::Metrics.authenticate 'me@librato.com', 'foo'
|
116
133
|
Librato::Metrics.persistence = :test
|
117
134
|
end
|
118
|
-
after(:all) { Librato::Metrics::Simple.flush_authentication }
|
119
135
|
|
120
136
|
context "when successful" do
|
121
137
|
it "should flush queued metrics and return true" do
|
data/spec/unit/metrics_spec.rb
CHANGED
@@ -9,8 +9,8 @@ module Librato
|
|
9
9
|
context "when given two arguments" do
|
10
10
|
it "should store them on simple" do
|
11
11
|
Metrics.authenticate 'tester@librato.com', 'api_key'
|
12
|
-
Metrics
|
13
|
-
Metrics
|
12
|
+
Metrics.client.email.should == 'tester@librato.com'
|
13
|
+
Metrics.client.api_key.should == 'api_key'
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -30,7 +30,7 @@ module Librato
|
|
30
30
|
Librato::Metrics.persistence = :test
|
31
31
|
Librato::Metrics.authenticate 'me@librato.com', 'foo'
|
32
32
|
end
|
33
|
-
after(:all) { Librato::Metrics
|
33
|
+
after(:all) { Librato::Metrics.client.flush_authentication }
|
34
34
|
|
35
35
|
it "should persist metrics immediately" do
|
36
36
|
Metrics.persistence = :test
|
metadata
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: librato-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0.pre1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matt Sanders
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: faraday
|
16
|
+
requirement: &70341863470180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.7.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70341863470180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70341863469760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70341863469760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70341863469300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70341863469300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70341863468800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,21 @@ dependencies:
|
|
54
54
|
version: 2.6.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70341863468800
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: pry
|
60
|
+
requirement: &70341863468380 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70341863468380
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: yard
|
60
|
-
requirement: &
|
71
|
+
requirement: &70341863467920 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70341863467920
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rdiscount
|
71
|
-
requirement: &
|
82
|
+
requirement: &70341863467500 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,7 +87,7 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70341863467500
|
80
91
|
description: An easy to use ruby wrapper for Librato's Metrics API
|
81
92
|
email: matt@librato.com
|
82
93
|
executables: []
|
@@ -92,19 +103,24 @@ files:
|
|
92
103
|
- README.md
|
93
104
|
- Rakefile
|
94
105
|
- lib/librato/metrics.rb
|
95
|
-
- lib/librato/metrics/
|
106
|
+
- lib/librato/metrics/client.rb
|
107
|
+
- lib/librato/metrics/collection.rb
|
108
|
+
- lib/librato/metrics/connection.rb
|
96
109
|
- lib/librato/metrics/errors.rb
|
110
|
+
- lib/librato/metrics/middleware/expects_status.rb
|
111
|
+
- lib/librato/metrics/middleware/retry.rb
|
97
112
|
- lib/librato/metrics/persistence.rb
|
98
113
|
- lib/librato/metrics/persistence/direct.rb
|
99
114
|
- lib/librato/metrics/persistence/test.rb
|
100
115
|
- lib/librato/metrics/queue.rb
|
101
|
-
- lib/librato/metrics/simple.rb
|
102
116
|
- lib/librato/metrics/version.rb
|
103
117
|
- librato-metrics.gemspec
|
118
|
+
- spec/integration/metrics/connection_spec.rb
|
104
119
|
- spec/integration/metrics_spec.rb
|
105
120
|
- spec/spec_helper.rb
|
121
|
+
- spec/unit/metrics/client_spec.rb
|
122
|
+
- spec/unit/metrics/connection_spec.rb
|
106
123
|
- spec/unit/metrics/queue_spec.rb
|
107
|
-
- spec/unit/metrics/simple_spec.rb
|
108
124
|
- spec/unit/metrics_spec.rb
|
109
125
|
homepage: https://github.com/librato/librato-metrics
|
110
126
|
licenses: []
|
@@ -122,19 +138,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
139
|
none: false
|
124
140
|
requirements:
|
125
|
-
- - ! '
|
141
|
+
- - ! '>'
|
126
142
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
143
|
+
version: 1.3.1
|
128
144
|
requirements: []
|
129
145
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.8.
|
146
|
+
rubygems_version: 1.8.16
|
131
147
|
signing_key:
|
132
148
|
specification_version: 2
|
133
149
|
summary: Ruby wrapper for Librato's Metrics API
|
134
150
|
test_files:
|
151
|
+
- spec/integration/metrics/connection_spec.rb
|
135
152
|
- spec/integration/metrics_spec.rb
|
136
153
|
- spec/spec_helper.rb
|
154
|
+
- spec/unit/metrics/client_spec.rb
|
155
|
+
- spec/unit/metrics/connection_spec.rb
|
137
156
|
- spec/unit/metrics/queue_spec.rb
|
138
|
-
- spec/unit/metrics/simple_spec.rb
|
139
157
|
- spec/unit/metrics_spec.rb
|
140
158
|
has_rdoc:
|
@@ -1,148 +0,0 @@
|
|
1
|
-
module Librato
|
2
|
-
module Metrics
|
3
|
-
|
4
|
-
# Class-level methods for quick one-off submission of metrics.
|
5
|
-
#
|
6
|
-
# @example Send a quick metric
|
7
|
-
# Librato::Metrics::Simple.authenticate 'fred@foo.com', 'myapikey'
|
8
|
-
# Librato::Metrics::Simple.save :total_vists => {:type => counter, :value => 2311}
|
9
|
-
#
|
10
|
-
# For more than quick one-off use, take a look at {Queue}. For
|
11
|
-
# convenience, most of Simple's methods can be accessed directly from
|
12
|
-
# the {Metrics} module.
|
13
|
-
#
|
14
|
-
class Simple
|
15
|
-
|
16
|
-
class << self
|
17
|
-
# class instance vars
|
18
|
-
attr_accessor :email, :api_key
|
19
|
-
|
20
|
-
# Provide agent identifier for the developer program. See:
|
21
|
-
# http://support.metrics.librato.com/knowledgebase/articles/53548-developer-program
|
22
|
-
#
|
23
|
-
# @example Have the gem build your identifier string
|
24
|
-
# Librato::Metrics.agent_identifier 'flintstone', '0.5', 'fred'
|
25
|
-
#
|
26
|
-
# @example Provide your own identifier string
|
27
|
-
# Librato::Metrics.agent_identifier 'flintstone/0.5 (dev_id:fred)'
|
28
|
-
#
|
29
|
-
# @example Remove identifier string
|
30
|
-
# Librato::Metrics.agent_identifier ''
|
31
|
-
def agent_identifier(*args)
|
32
|
-
if args.length == 1
|
33
|
-
@agent_identifier = args.first
|
34
|
-
elsif args.length == 3
|
35
|
-
@agent_identifier = "#{args[0]}/#{args[1]} (dev_id:#{args[2]})"
|
36
|
-
elsif ![0,1,3].include?(args.length)
|
37
|
-
raise ArgumentError, 'invalid arguments, see method documentation'
|
38
|
-
end
|
39
|
-
@agent_identifier ||= ''
|
40
|
-
end
|
41
|
-
|
42
|
-
# API endpoint to use for queries and direct
|
43
|
-
# persistence.
|
44
|
-
#
|
45
|
-
# @return [String] api_endpoint
|
46
|
-
def api_endpoint
|
47
|
-
@api_endpoint ||= 'https://metrics-api.librato.com/v1/'
|
48
|
-
end
|
49
|
-
|
50
|
-
# Set API endpoint for use with queries and direct
|
51
|
-
# persistence. Generally you should not need to set this
|
52
|
-
# as it will default to the current Librato Metrics
|
53
|
-
# endpoint.
|
54
|
-
#
|
55
|
-
def api_endpoint=(endpoint)
|
56
|
-
@api_endpoint = endpoint
|
57
|
-
end
|
58
|
-
|
59
|
-
# Authenticate for direct persistence
|
60
|
-
#
|
61
|
-
# @param [String] email
|
62
|
-
# @param [String] api_key
|
63
|
-
def authenticate(email, api_key)
|
64
|
-
flush_authentication
|
65
|
-
self.email, self.api_key = email, api_key
|
66
|
-
end
|
67
|
-
|
68
|
-
def connection
|
69
|
-
# TODO: upate when excon connection recovery is improved.
|
70
|
-
# @connection ||= Excon.new(self.api_endpoint, :headers => common_headers)
|
71
|
-
Excon.defaults[:ssl_verify_peer] = false if RUBY_PLATFORM == "java"
|
72
|
-
Excon.new(self.api_endpoint, :headers => common_headers)
|
73
|
-
end
|
74
|
-
|
75
|
-
# Purge current credentials and connection
|
76
|
-
#
|
77
|
-
def flush_authentication
|
78
|
-
self.email = nil
|
79
|
-
self.api_key = nil
|
80
|
-
@connection = nil
|
81
|
-
end
|
82
|
-
|
83
|
-
# Persistence type to use when saving metrics.
|
84
|
-
# Default is :direct.
|
85
|
-
#
|
86
|
-
def persistence
|
87
|
-
@persistence ||= :direct
|
88
|
-
end
|
89
|
-
|
90
|
-
# Set persistence type to use when saving metrics.
|
91
|
-
#
|
92
|
-
# @param [Symbol] persistence_type
|
93
|
-
def persistence=(persist_method)
|
94
|
-
@persistence = persist_method
|
95
|
-
end
|
96
|
-
|
97
|
-
# Current persister object.
|
98
|
-
def persister
|
99
|
-
@queue ? @queue.persister : nil
|
100
|
-
end
|
101
|
-
|
102
|
-
# Submit all queued metrics.
|
103
|
-
#
|
104
|
-
def submit(args)
|
105
|
-
@queue ||= Queue.new(:skip_measurement_times => true)
|
106
|
-
@queue.add args
|
107
|
-
@queue.submit
|
108
|
-
end
|
109
|
-
|
110
|
-
# User-agent used when making requests.
|
111
|
-
#
|
112
|
-
def user_agent
|
113
|
-
ua_chunks = []
|
114
|
-
if agent_identifier && !agent_identifier.empty?
|
115
|
-
ua_chunks << agent_identifier
|
116
|
-
end
|
117
|
-
ua_chunks << "librato-metrics/#{Metrics::VERSION}"
|
118
|
-
ua_chunks << "(#{ruby_engine}; #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}; #{RUBY_PLATFORM})"
|
119
|
-
ua_chunks << "direct-excon/#{Excon::VERSION}"
|
120
|
-
ua_chunks.join(' ')
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
def auth_header
|
126
|
-
raise CredentialsMissing unless (self.email and self.api_key)
|
127
|
-
encoded = Base64.encode64("#{email}:#{api_key}").gsub("\n", '')
|
128
|
-
"Basic #{encoded}"
|
129
|
-
end
|
130
|
-
|
131
|
-
def common_headers
|
132
|
-
{'Authorization' => auth_header, 'User-Agent' => user_agent}
|
133
|
-
end
|
134
|
-
|
135
|
-
def flush_persistence
|
136
|
-
@persistence = nil
|
137
|
-
end
|
138
|
-
|
139
|
-
def ruby_engine
|
140
|
-
return RUBY_ENGINE if Object.constants.include?(:RUBY_ENGINE)
|
141
|
-
RUBY_DESCRIPTION.split[0]
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Librato
|
4
|
-
module Metrics
|
5
|
-
|
6
|
-
describe Simple do
|
7
|
-
|
8
|
-
describe "#agent_identifier" do
|
9
|
-
context "when given a single string argument" do
|
10
|
-
it "should set agent_identifier" do
|
11
|
-
Simple.agent_identifier 'mycollector/0.1 (dev_id:foo)'
|
12
|
-
Simple.agent_identifier.should == 'mycollector/0.1 (dev_id:foo)'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "when given three arguments" do
|
17
|
-
it "should compose an agent string" do
|
18
|
-
Simple.agent_identifier('test_app', '0.5', 'foobar')
|
19
|
-
Simple.agent_identifier.should == 'test_app/0.5 (dev_id:foobar)'
|
20
|
-
end
|
21
|
-
|
22
|
-
context "when given an empty string" do
|
23
|
-
it "should set to empty" do
|
24
|
-
Simple.agent_identifier ''
|
25
|
-
Simple.agent_identifier.should == ''
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "when given two arguments" do
|
31
|
-
it "should raise error" do
|
32
|
-
lambda { Simple.agent_identifier('test_app', '0.5') }.should raise_error(ArgumentError)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#api_endpoint" do
|
38
|
-
it "should default to metrics" do
|
39
|
-
Simple.api_endpoint.should == 'https://metrics-api.librato.com/v1/'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "#api_endpoint=" do
|
44
|
-
it "should set api_endpoint" do
|
45
|
-
@prior = Simple.api_endpoint
|
46
|
-
Simple.api_endpoint = 'http://test.com/'
|
47
|
-
Simple.api_endpoint.should == 'http://test.com/'
|
48
|
-
Simple.api_endpoint = @prior
|
49
|
-
end
|
50
|
-
|
51
|
-
# TODO:
|
52
|
-
# it "should ensure trailing slash"
|
53
|
-
# it "should ensure real URI"
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "#authenticate" do
|
57
|
-
context "when given two arguments" do
|
58
|
-
it "should store them as email and api_key" do
|
59
|
-
Simple.authenticate 'test@librato.com', 'api_key'
|
60
|
-
Simple.email.should == 'test@librato.com'
|
61
|
-
Simple.api_key.should == 'api_key'
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "#connection" do
|
67
|
-
it "should raise exception without authentication" do
|
68
|
-
Simple.flush_authentication
|
69
|
-
lambda{ Simple.connection }.should raise_error(Librato::Metrics::CredentialsMissing)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "#persistence" do
|
74
|
-
it "should default to direct" do
|
75
|
-
Simple.send(:flush_persistence)
|
76
|
-
Simple.persistence.should == :direct
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should allow configuration of persistence method" do
|
80
|
-
current = Simple.persistence
|
81
|
-
Simple.persistence = :fake
|
82
|
-
Simple.persistence.should == :fake
|
83
|
-
Simple.persistence = current
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "#submit" do
|
88
|
-
before(:all) do
|
89
|
-
Simple.persistence = :test
|
90
|
-
Simple.authenticate 'me@librato.com', 'foo'
|
91
|
-
end
|
92
|
-
after(:all) { Simple.flush_authentication }
|
93
|
-
|
94
|
-
it "should persist metrics immediately" do
|
95
|
-
Simple.persistence = :test
|
96
|
-
Simple.submit(:foo => 123).should eql true
|
97
|
-
Simple.persister.persisted.should eql({:gauges => [{:name => 'foo', :value => 123}]})
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should tolerate muliple metrics" do
|
101
|
-
lambda{ Simple.submit :foo => 123, :bar => 456 }.should_not raise_error
|
102
|
-
expected = {:gauges => [{:name => 'foo', :value => 123}, {:name => 'bar', :value => 456}]}
|
103
|
-
Simple.persister.persisted.should eql expected
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "#user_agent" do
|
108
|
-
context "without an agent_identifier" do
|
109
|
-
it "should render standard string" do
|
110
|
-
Simple.agent_identifier('')
|
111
|
-
Simple.user_agent.should start_with('librato-metrics')
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context "with an agent_identifier" do
|
116
|
-
it "should render agent_identifier first" do
|
117
|
-
Simple.agent_identifier('foo', '0.5', 'bar')
|
118
|
-
Simple.user_agent.should start_with('foo/0.5')
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|