metriks-addons 3.0.2 → 3.1.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/lib/metriks-addons.rb +4 -4
- data/lib/metriks-addons/cloudwatch_reporter.rb +1 -1
- data/lib/metriks-addons/opentsdb_reporter.rb +1 -1
- data/lib/metriks-addons/signalfx_reporter.rb +10 -23
- data/metriks-addons.gemspec +2 -2
- data/spec/cloudwatch_spec.rb +1 -1
- data/spec/signalfx_spec.rb +44 -52
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcbc0e57a8758b175915828c5c5007b1f067d69f
|
4
|
+
data.tar.gz: 523a7eb2da554eaa945db81589cdb6e5f98fae78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d33693fccd7cb36b04921bc8db7d42c61f16474f8146f94be831ee9d4c9a7aaf01377c7567ce20660cff6b67a1349559639f91edf347b947cb4a0a3426982e90
|
7
|
+
data.tar.gz: 1cd610978a3f47c8210b322c24b0531a099f354713cbd13b66fff70af6cfd9d42bd98d34a2210f35894c520f7fa3221bcdaad027e80d6066667b3926fd937b90
|
data/lib/metriks-addons.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require_relative 'metriks-addons/opentsdb_reporter'
|
2
|
+
require_relative 'metriks-addons/signalfx_reporter'
|
3
|
+
require_relative 'metriks-addons/cloudwatch_reporter'
|
4
4
|
|
5
5
|
module MetriksAddons
|
6
|
-
VERSION = '3.0
|
6
|
+
VERSION = '3.1.0'
|
7
7
|
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
require 'metriks/time_tracker'
|
2
|
-
require 'rest-client'
|
3
2
|
require 'logger'
|
4
|
-
require '
|
3
|
+
require 'signalfx'
|
4
|
+
require_relative 'base_reporter'
|
5
5
|
|
6
6
|
module MetriksAddons
|
7
7
|
class SignalFxReporter < BaseReporter
|
8
|
-
attr_accessor :prefix, :source, :data, :
|
8
|
+
attr_accessor :client, :prefix, :source, :data, :tags, :logger
|
9
9
|
|
10
|
-
def initialize(
|
10
|
+
def initialize(token, tags, options = {})
|
11
11
|
super(options)
|
12
|
-
@hostname = h
|
13
12
|
@x_sf_token = token
|
14
|
-
@orgid = id
|
15
13
|
@tags = tags
|
16
14
|
|
17
15
|
@prefix = options[:prefix]
|
@@ -19,24 +17,14 @@ module MetriksAddons
|
|
19
17
|
|
20
18
|
@batch_size = options[:batch_size] || 50
|
21
19
|
|
22
|
-
|
23
|
-
RestClient.log =
|
24
|
-
Object.new.tap do |proxy|
|
25
|
-
def proxy.<<(message)
|
26
|
-
Rails.logger.debug message
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
20
|
+
@client = SignalFx.new @x_sf_token, batch_size: @batch_size
|
30
21
|
end
|
31
22
|
|
32
23
|
def submit(datapoints)
|
33
24
|
return if datapoints.empty?
|
34
25
|
|
35
|
-
|
36
|
-
|
37
|
-
response = RestClient.post "#{@hostname}?orgid=#{@orgid}",
|
38
|
-
jsonstr,
|
39
|
-
:content_type => :json, :accept => :json, :'X-SF-TOKEN' => @x_sf_token
|
26
|
+
log "debug", "Datapoints for SignalFx: #{datapoints.inspect}"
|
27
|
+
response = @client.send(counters: datapoints[:counters], gauges: datapoints[:gauges])
|
40
28
|
log "debug", "Sent #{datapoints.size} metrics to SignalFX"
|
41
29
|
log "debug", "Response is: #{response}"
|
42
30
|
end
|
@@ -58,7 +46,7 @@ module MetriksAddons
|
|
58
46
|
case metric
|
59
47
|
when Metriks::Meter
|
60
48
|
counter |= create_datapoints name, metric, time, [
|
61
|
-
:count
|
49
|
+
:count
|
62
50
|
]
|
63
51
|
when Metriks::Counter
|
64
52
|
counter |= create_datapoints name, metric, time, [
|
@@ -78,9 +66,8 @@ module MetriksAddons
|
|
78
66
|
end
|
79
67
|
end
|
80
68
|
|
81
|
-
datapoints[:
|
82
|
-
datapoints[:
|
83
|
-
|
69
|
+
datapoints[:counters] = counter if counter.any?
|
70
|
+
datapoints[:gauges] = gauge if gauge.any?
|
84
71
|
datapoints
|
85
72
|
end
|
86
73
|
|
data/metriks-addons.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'metriks-addons'
|
16
|
-
s.version = '3.0
|
17
|
-
s.date = '2015-11-
|
16
|
+
s.version = '3.1.0'
|
17
|
+
s.date = '2015-11-23'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
20
20
|
## as you like.
|
data/spec/cloudwatch_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require 'metriks-addons/cloudwatch_reporter'
|
|
4
4
|
|
5
5
|
describe "Smoke test" do
|
6
6
|
before(:each) do
|
7
|
-
AWS::CloudWatch.
|
7
|
+
allow_any_instance_of(AWS::CloudWatch).to receive(:put_metric_data)
|
8
8
|
@registry = Metriks::Registry.new
|
9
9
|
@reporter = MetriksAddons::CloudWatchReporter.new(
|
10
10
|
'DummyDummyDummyDummy',
|
data/spec/signalfx_spec.rb
CHANGED
@@ -10,10 +10,8 @@ describe "Smoke test" do
|
|
10
10
|
before(:each) do
|
11
11
|
@registry = Metriks::Registry.new
|
12
12
|
@reporter = MetriksAddons::SignalFxReporter.new(
|
13
|
-
'http://localhost:4242',
|
14
13
|
"123456789",
|
15
|
-
"
|
16
|
-
{:env => "test"},
|
14
|
+
[{:env => "test"}],
|
17
15
|
{ :registry => @registry, :batch_size => 3})
|
18
16
|
end
|
19
17
|
|
@@ -25,62 +23,57 @@ describe "Smoke test" do
|
|
25
23
|
it "meter" do
|
26
24
|
@registry.meter('meter.testing').mark
|
27
25
|
datapoints = @reporter.get_datapoints
|
28
|
-
expect(datapoints[:
|
29
|
-
expect(datapoints[:
|
30
|
-
expect(datapoints[:
|
31
|
-
expect(datapoints[:
|
32
|
-
expect(datapoints[:
|
33
|
-
|
34
|
-
expect(datapoints[:counter][1][:metric]).to eql("meter.testing.mean_rate")
|
35
|
-
expect(datapoints[:counter][1][:value]).not_to be_nil
|
36
|
-
expect(datapoints[:counter][1][:dimensions]).to include(:env => "test")
|
37
|
-
expect(datapoints[:counter][1][:timestamp]).not_to be_nil
|
26
|
+
expect(datapoints[:counters].size).to eql(1)
|
27
|
+
expect(datapoints[:counters][0][:metric]).to eql("meter.testing.count")
|
28
|
+
expect(datapoints[:counters][0][:value]).to eql(1)
|
29
|
+
expect(datapoints[:counters][0][:dimensions]).to include(:env => "test")
|
30
|
+
expect(datapoints[:counters][0][:timestamp]).not_to be_nil
|
38
31
|
end
|
39
32
|
|
40
|
-
it "
|
33
|
+
it "counters" do
|
41
34
|
@registry.counter('counter.testing').increment
|
42
35
|
datapoints = @reporter.get_datapoints
|
43
|
-
expect(datapoints[:
|
44
|
-
expect(datapoints[:
|
45
|
-
expect(datapoints[:
|
46
|
-
expect(datapoints[:
|
47
|
-
expect(datapoints[:
|
36
|
+
expect(datapoints[:counters].size).to eql(1)
|
37
|
+
expect(datapoints[:counters][0][:metric]).to eql("counter.testing.count")
|
38
|
+
expect(datapoints[:counters][0][:value]).to eql(1)
|
39
|
+
expect(datapoints[:counters][0][:dimensions]).to include(:env => "test")
|
40
|
+
expect(datapoints[:counters][0][:timestamp]).not_to be_nil
|
48
41
|
end
|
49
42
|
|
50
43
|
it "timer" do
|
51
44
|
@registry.timer('timer.testing').update(1.5)
|
52
45
|
datapoints = @reporter.get_datapoints
|
53
|
-
expect(datapoints[:
|
54
|
-
expect(datapoints[:
|
55
|
-
expect(datapoints[:
|
56
|
-
expect(datapoints[:
|
57
|
-
expect(datapoints[:
|
58
|
-
expect(datapoints[:
|
46
|
+
expect(datapoints[:counters].size).to eql(1)
|
47
|
+
expect(datapoints[:gauges].size).to eql(3)
|
48
|
+
expect(datapoints[:counters][0][:metric]).to eql("timer.testing.count")
|
49
|
+
expect(datapoints[:counters][0][:value]).to eql(1)
|
50
|
+
expect(datapoints[:counters][0][:dimensions]).to include(:env => "test")
|
51
|
+
expect(datapoints[:counters][0][:timestamp]).not_to be_nil
|
59
52
|
|
60
|
-
expect(datapoints[:
|
61
|
-
expect(datapoints[:
|
62
|
-
expect(datapoints[:
|
63
|
-
expect(datapoints[:
|
53
|
+
expect(datapoints[:gauges][0][:metric]).to eql("timer.testing.min")
|
54
|
+
expect(datapoints[:gauges][0][:value]).not_to be_nil
|
55
|
+
expect(datapoints[:gauges][0][:dimensions]).to include(:env => "test")
|
56
|
+
expect(datapoints[:gauges][0][:timestamp]).not_to be_nil
|
64
57
|
|
65
|
-
expect(datapoints[:
|
66
|
-
expect(datapoints[:
|
67
|
-
expect(datapoints[:
|
68
|
-
expect(datapoints[:
|
58
|
+
expect(datapoints[:gauges][1][:metric]).to eql("timer.testing.max")
|
59
|
+
expect(datapoints[:gauges][1][:value]).not_to be_nil
|
60
|
+
expect(datapoints[:gauges][1][:dimensions]).to include(:env => "test")
|
61
|
+
expect(datapoints[:gauges][1][:timestamp]).not_to be_nil
|
69
62
|
|
70
|
-
expect(datapoints[:
|
71
|
-
expect(datapoints[:
|
72
|
-
expect(datapoints[:
|
73
|
-
expect(datapoints[:
|
63
|
+
expect(datapoints[:gauges][2][:metric]).to eql("timer.testing.mean")
|
64
|
+
expect(datapoints[:gauges][2][:value]).not_to be_nil
|
65
|
+
expect(datapoints[:gauges][2][:dimensions]).to include(:env => "test")
|
66
|
+
expect(datapoints[:gauges][2][:timestamp]).not_to be_nil
|
74
67
|
end
|
75
68
|
|
76
|
-
it "
|
69
|
+
it "gauges" do
|
77
70
|
@registry.gauge('gauge.testing') { 123 }
|
78
71
|
datapoints = @reporter.get_datapoints
|
79
|
-
expect(datapoints[:
|
80
|
-
expect(datapoints[:
|
81
|
-
expect(datapoints[:
|
82
|
-
expect(datapoints[:
|
83
|
-
expect(datapoints[:
|
72
|
+
expect(datapoints[:gauges].size).to eql(1)
|
73
|
+
expect(datapoints[:gauges][0][:metric]).to eql("gauge.testing.value")
|
74
|
+
expect(datapoints[:gauges][0][:value]).to eql(123)
|
75
|
+
expect(datapoints[:gauges][0][:dimensions]).to include(:env => "test")
|
76
|
+
expect(datapoints[:gauges][0][:timestamp]).not_to be_nil
|
84
77
|
end
|
85
78
|
end
|
86
79
|
|
@@ -88,22 +81,21 @@ describe "Rest Client" do
|
|
88
81
|
before(:each) do
|
89
82
|
@registry = Metriks::Registry.new
|
90
83
|
@reporter = MetriksAddons::SignalFxReporter.new(
|
91
|
-
'http://localhost:4242/api/datapoint',
|
92
84
|
"123456789",
|
93
|
-
"
|
94
|
-
{:env => "test"},
|
85
|
+
[{:key => "env", :value => "test"}],
|
95
86
|
{ :registry => @registry, :batch_size => 3})
|
96
|
-
|
97
|
-
|
98
|
-
|
87
|
+
stub_request(:post, "https://ingest.signalfx.com/v2/datapoint").
|
88
|
+
with(:body => "\n0\x12\x14gauges.testing.value\x18\xE0\xA8\xBF\xA4\x93*\"\x02\x18{(\x002\v\n\x03env\x12\x04test\n4\x12\x18counters.testing.0.count\x18\xE0\xA8\xBF\xA4\x93*\"\x02\x18\x01(\x012\v\n\x03env\x12\x04test\n4\x12\x18counters.testing.1.count\x18\xE0\xA8\xBF\xA4\x93*\"\x02\x18\x01(\x012\v\n\x03env\x12\x04test\n4\x12\x18counters.testing.2.count\x18\xE0\xA8\xBF\xA4\x93*\"\x02\x18\x01(\x012\v\n\x03env\x12\x04test",
|
89
|
+
:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'212', 'Content-Type'=>'application/x-protobuf', 'User-Agent'=>'signalfx-ruby-client/0.1.0', 'X-Sf-Token'=>'123456789'}).
|
90
|
+
to_return(:status => 200, :body => "", :headers => {})
|
99
91
|
end
|
100
92
|
|
101
93
|
it "Send metricwise" do
|
102
94
|
for i in 0..2 do
|
103
|
-
@registry.counter("
|
95
|
+
@registry.counter("counters.testing.#{i}").increment
|
104
96
|
end
|
105
|
-
@registry.gauge("
|
97
|
+
@registry.gauge("gauges.testing") { 123 }
|
106
98
|
@reporter.submit @reporter.get_datapoints
|
107
|
-
expect(a_request(:post, "
|
99
|
+
expect(a_request(:post, "https://ingest.signalfx.com/v2/datapoint")).to have_been_made
|
108
100
|
end
|
109
101
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metriks-addons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rajat Venkatesh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metriks
|