metriks-opentsdb 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f0fcaf84f504d87dd4dc7e02fad84add07d7225
4
- data.tar.gz: f66af80bd062960f3f10d8de994fbffbc0343a20
3
+ metadata.gz: 2d5f830258daa7e1b9e52283f7ed9f0610ace967
4
+ data.tar.gz: a5d6f6f2fe786eed74d365aa0f6ba80590b38415
5
5
  SHA512:
6
- metadata.gz: 3069230f7767bb82941ebf75e9299c67fa78e5cb350d1c12c667315701f089656fdf74e5fc89f7df3e47e81c8d789145e8c47ab57dc7e03eb07fa8d569d60af5
7
- data.tar.gz: a93c71eedba246add2e6277a8c7dae84d9032334187fb517b89eab76356f560fe8020e847e54a6af70321ab5ac722069e114c3d033e64c2c88d2bff58a19f651
6
+ metadata.gz: 7b589f243c7743aefd9e69504829e8e1f60f36aba60b7027843143ea97d36244d0f9eee1a1c28ffb34a807f1851b9f0c5ff4be09913681f8222c95c575e4c11f
7
+ data.tar.gz: a5577b451589159628fbe9605559499ec7551533733d16a8210171b347c59b88abfcddbb5d63880139acf2a00ce737c222d0a2462d1a8115bf0896e47fe1ff70
@@ -1,5 +1,5 @@
1
1
  require 'metriks/opentsdb_reporter'
2
2
 
3
3
  module MetriksOpenTSDB
4
- VERSION = '1.1.3'
4
+ VERSION = '1.2.0'
5
5
  end
@@ -1,9 +1,10 @@
1
1
  require 'metriks/time_tracker'
2
2
  require 'rest-client'
3
+ require 'logger'
3
4
 
4
5
  module Metriks
5
6
  class OpenTSDBReporter
6
- attr_accessor :prefix, :source, :data, :hostname, :tags
7
+ attr_accessor :prefix, :source, :data, :hostname, :tags, :logger
7
8
 
8
9
  def initialize(h, t, options = {})
9
10
  @hostname = h
@@ -29,9 +30,9 @@ module Metriks
29
30
  @running = false
30
31
  end
31
32
 
32
- def info(msg)
33
+ def log(level, msg)
33
34
  if !@logger.nil?
34
- @logger.info(msg)
35
+ @logger.send level, msg
35
36
  end
36
37
  end
37
38
 
@@ -69,14 +70,11 @@ module Metriks
69
70
  def flush
70
71
  begin
71
72
  @mutex.synchronize do
72
- info("Flushing metrics")
73
+ log "debug", "Flushing metrics"
73
74
  submit get_datapoints
74
75
  end
75
76
  rescue Exception => ex
76
- if !@logger.nil?
77
- @logger.error(ex.message)
78
- @logger.error(ex.stacktrace)
79
- end
77
+ log "error",ex.message
80
78
  @on_error[ex] rescue nil
81
79
  end
82
80
  end
@@ -87,25 +85,20 @@ module Metriks
87
85
  index = 0
88
86
  length = @batch_size
89
87
  while index < datapoints.size
90
- info("Starting from #{index}")
91
88
  to_send = nil
92
89
  if datapoints.size < (index + length)
93
90
  length = datapoints.size - index
94
91
  else
95
92
  length = @batch_size
96
93
  end
97
- info("Length is #{length}")
98
- info("Begin post")
99
- info(datapoints[index, length].inspect)
100
- info("To Json")
101
94
  jsonstr = datapoints[index, length].to_json
102
- info("Send to rest")
103
95
  RestClient.post "#{@hostname}/api/put",
104
96
  jsonstr,
105
97
  :content_type => :json, :accept => :json
106
- info("Put done")
98
+ log "debug", "Sent #{length} metrics from #{index}"
107
99
  index += length
108
100
  end
101
+ log "info", "Sent #{datapoints.size} metrics"
109
102
  end
110
103
 
111
104
  def get_datapoints
@@ -115,105 +108,78 @@ module Metriks
115
108
  @registry.each do |name, metric|
116
109
  next if name.nil? || name.empty?
117
110
  name = name.to_s.gsub(/ +/, '_')
111
+ if @prefix
112
+ name = "#{@prefix}.#{name}"
113
+ end
118
114
 
119
115
  case metric
120
116
  when Metriks::Meter
121
- datapoints << {
122
- :metric => "#{name}.count",
123
- :timestamp => time,
124
- :value => metric.count,
125
- :tags => @tags
126
- }
127
- datapoints << {
128
- :metric => "#{name}.mean_rate",
129
- :timestamp => time,
130
- :value => metric.mean_rate,
131
- :tags => @tags
132
- }
133
- datapoints << {
134
- :metric => "#{name}.m1",
135
- :timestamp => time,
136
- :value => metric.one_minute_rate,
137
- :tags => @tags
138
- }
139
- datapoints << {
140
- :metric => "#{name}.m5",
141
- :timestamp => time,
142
- :value => metric.five_minute_rate,
143
- :tags => @tags
144
- }
145
- datapoints << {
146
- :metric => "#{name}.m15",
147
- :timestamp => time,
148
- :value => metric.fifteen_minute_rate,
149
- :tags => @tags
150
- }
117
+ datapoints |= create_datapoints name, metric, time, [
118
+ :count, :one_minute_rate, :five_minute_rate,
119
+ :fifteen_minute_rate, :mean_rate
120
+ ]
151
121
  when Metriks::Counter
152
- datapoints << {
153
- :metric => name,
154
- :timestamp => time,
155
- :value => metric.count,
156
- :tags => @tags
157
- }
122
+ datapoints |= create_datapoints name, metric, time, [
123
+ :count
124
+ ]
158
125
  when Metriks::Gauge
126
+ datapoints |= create_datapoints name, metric, time, [
127
+ :value
128
+ ]
129
+ when Metriks::UtilizationTimer
130
+ datapoints |= create_datapoints name, metric, time, [
131
+ :count, :one_minute_rate, :five_minute_rate,
132
+ :fifteen_minute_rate, :mean_rate,
133
+ :min, :max, :mean, :stddev,
134
+ :one_minute_utilization, :five_minute_utilization,
135
+ :fifteen_minute_utilization, :mean_utilization,
136
+ ], [
137
+ :median, :get_95th_percentile
138
+ ]
139
+
140
+ when Metriks::Timer
141
+ datapoints |= create_datapoints name, metric, time, [
142
+ :count, :one_minute_rate, :five_minute_rate,
143
+ :fifteen_minute_rate, :mean_rate,
144
+ :min, :max, :mean, :stddev
145
+ ], [
146
+ :median, :get_95th_percentile
147
+ ]
148
+ when Metriks::Histogram
149
+ datapoints |= create_datapoints name, metric, time, [
150
+ :count, :min, :max, :mean, :stddev
151
+ ], [
152
+ :median, :get_95th_percentile
153
+ ]
154
+ end
155
+ end
156
+ datapoints
157
+ end
158
+
159
+ def create_datapoints(base_name, metric, time, keys, snapshot_keys = [])
160
+ datapoints = []
161
+ keys.flatten.each do |key|
162
+ name = key.to_s.gsub(/^get_/, '')
163
+ datapoints << {
164
+ :metric => "#{base_name}.#{name}",
165
+ :timestamp => time,
166
+ :value => metric.send(key),
167
+ :tags => @tags
168
+ }
169
+ end
170
+
171
+ unless snapshot_keys.empty?
172
+ snapshot = metric.snapshot
173
+ snapshot_keys.flatten.each do |key|
174
+ name = key.to_s.gsub(/^get_/, '')
159
175
  datapoints << {
160
- :metric => name,
161
- :timestamp => time,
162
- :value => metric.value,
163
- :tags => @tags
164
- }
165
- when Metriks::Histogram, Metriks::Timer, Metriks::UtilizationTimer
166
- datapoints << {
167
- :metric => "#{name}.count",
168
- :timestamp => time,
169
- :value => metric.count,
170
- :tags => @tags
171
- }
172
- if Metriks::UtilizationTimer === metric || Metriks::Timer === metric
173
- datapoints << {
174
- :metric => "#{name}.mean_rate",
175
- :timestamp => time,
176
- :value => metric.mean_rate,
177
- :tags => @tags
178
- }
179
- datapoints << {
180
- :metric => "#{name}.m1",
181
- :timestamp => time,
182
- :value => metric.one_minute_rate,
183
- :tags => @tags
184
- }
185
- datapoints << {
186
- :metric => "#{name}.m5",
187
- :timestamp => time,
188
- :value => metric.five_minute_rate,
189
- :tags => @tags
190
- }
191
- datapoints << {
192
- :metric => "#{name}.m15",
193
- :timestamp => time,
194
- :value => metric.fifteen_minute_rate,
195
- :tags => @tags
196
- }
197
- end
198
- snapshot = metric.snapshot
199
- datapoints << {
200
- :metric => "#{name}.median",
176
+ :metric => "#{base_name}.#{name}",
201
177
  :timestamp => time,
202
- :value => snapshot.median,
178
+ :value => snapshot.send(key),
203
179
  :tags => @tags
204
180
  }
205
-
206
- @percentiles.each do |percentile|
207
- datapoints << {
208
- :metric => "#{name}.p#{(percentile * 100).to_i}",
209
- :timestamp => time,
210
- :value => snapshot.value(percentile),
211
- :tags => @tags
212
- }
213
- end
214
181
  end
215
182
  end
216
- info("Captured #{datapoints.size} metrics")
217
183
  datapoints
218
184
  end
219
185
  end
@@ -13,7 +13,7 @@ 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-opentsdb'
16
- s.version = '1.1.3'
16
+ s.version = '1.2.0'
17
17
  s.date = '2015-08-03'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
@@ -29,23 +29,23 @@ describe "Smoke test" do
29
29
  expect(datapoints[0][:tags]).to include(:env => "test")
30
30
  expect(datapoints[0][:timestamp]).not_to be_nil
31
31
 
32
- expect(datapoints[1][:metric]).to eql("meter.testing.mean_rate")
32
+ expect(datapoints[1][:metric]).to eql("meter.testing.one_minute_rate")
33
33
  expect(datapoints[1][:value]).not_to be_nil
34
34
  expect(datapoints[1][:tags]).to include(:env => "test")
35
35
  expect(datapoints[1][:timestamp]).not_to be_nil
36
36
 
37
- expect(datapoints[2][:metric]).to eql("meter.testing.m1")
37
+ expect(datapoints[2][:metric]).to eql("meter.testing.five_minute_rate")
38
38
  expect(datapoints[2][:value]).to eql(0.0)
39
39
  expect(datapoints[2][:tags]).to include(:env => "test")
40
40
  expect(datapoints[2][:timestamp]).not_to be_nil
41
41
 
42
- expect(datapoints[3][:metric]).to eql("meter.testing.m5")
42
+ expect(datapoints[3][:metric]).to eql("meter.testing.fifteen_minute_rate")
43
43
  expect(datapoints[3][:value]).to eql(0.0)
44
44
  expect(datapoints[3][:tags]).to include(:env => "test")
45
45
  expect(datapoints[3][:timestamp]).not_to be_nil
46
46
 
47
- expect(datapoints[4][:metric]).to eql("meter.testing.m15")
48
- expect(datapoints[4][:value]).to eql(0.0)
47
+ expect(datapoints[4][:metric]).to eql("meter.testing.mean_rate")
48
+ expect(datapoints[4][:value]).not_to be_nil
49
49
  expect(datapoints[4][:tags]).to include(:env => "test")
50
50
  expect(datapoints[4][:timestamp]).not_to be_nil
51
51
  end
@@ -54,7 +54,7 @@ describe "Smoke test" do
54
54
  @registry.counter('counter.testing').increment
55
55
  datapoints = @reporter.get_datapoints
56
56
  expect(datapoints.size).to eql(1)
57
- expect(datapoints[0][:metric]).to eql("counter.testing")
57
+ expect(datapoints[0][:metric]).to eql("counter.testing.count")
58
58
  expect(datapoints[0][:value]).to eql(1)
59
59
  expect(datapoints[0][:tags]).to include(:env => "test")
60
60
  expect(datapoints[0][:timestamp]).not_to be_nil
@@ -63,78 +63,108 @@ describe "Smoke test" do
63
63
  it "timer" do
64
64
  @registry.timer('timer.testing').update(1.5)
65
65
  datapoints = @reporter.get_datapoints
66
- expect(datapoints.size).to eql(8)
66
+ expect(datapoints.size).to eql(11)
67
67
  expect(datapoints[0][:metric]).to eql("timer.testing.count")
68
68
  expect(datapoints[0][:value]).to eql(1)
69
69
  expect(datapoints[0][:tags]).to include(:env => "test")
70
70
  expect(datapoints[0][:timestamp]).not_to be_nil
71
71
 
72
- expect(datapoints[1][:metric]).to eql("timer.testing.mean_rate")
72
+ expect(datapoints[1][:metric]).to eql("timer.testing.one_minute_rate")
73
73
  expect(datapoints[1][:value]).not_to be_nil
74
74
  expect(datapoints[1][:tags]).to include(:env => "test")
75
75
  expect(datapoints[1][:timestamp]).not_to be_nil
76
76
 
77
- expect(datapoints[2][:metric]).to eql("timer.testing.m1")
77
+ expect(datapoints[2][:metric]).to eql("timer.testing.five_minute_rate")
78
78
  expect(datapoints[2][:value]).to eql(0.0)
79
79
  expect(datapoints[2][:tags]).to include(:env => "test")
80
80
  expect(datapoints[2][:timestamp]).not_to be_nil
81
81
 
82
- expect(datapoints[3][:metric]).to eql("timer.testing.m5")
82
+ expect(datapoints[3][:metric]).to eql("timer.testing.fifteen_minute_rate")
83
83
  expect(datapoints[3][:value]).to eql(0.0)
84
84
  expect(datapoints[3][:tags]).to include(:env => "test")
85
85
  expect(datapoints[3][:timestamp]).not_to be_nil
86
86
 
87
- expect(datapoints[4][:metric]).to eql("timer.testing.m15")
88
- expect(datapoints[4][:value]).to eql(0.0)
87
+ expect(datapoints[4][:metric]).to eql("timer.testing.mean_rate")
88
+ expect(datapoints[4][:value]).not_to be_nil
89
89
  expect(datapoints[4][:tags]).to include(:env => "test")
90
90
  expect(datapoints[4][:timestamp]).not_to be_nil
91
91
 
92
- expect(datapoints[5][:metric]).to eql("timer.testing.median")
93
- expect(datapoints[5][:value]).to eql(1.5)
92
+ expect(datapoints[5][:metric]).to eql("timer.testing.min")
93
+ expect(datapoints[5][:value]).not_to be_nil
94
94
  expect(datapoints[5][:tags]).to include(:env => "test")
95
95
  expect(datapoints[5][:timestamp]).not_to be_nil
96
96
 
97
- expect(datapoints[6][:metric]).to eql("timer.testing.p95")
98
- expect(datapoints[6][:value]).to eql(1.5)
97
+ expect(datapoints[6][:metric]).to eql("timer.testing.max")
98
+ expect(datapoints[6][:value]).not_to be_nil
99
99
  expect(datapoints[6][:tags]).to include(:env => "test")
100
100
  expect(datapoints[6][:timestamp]).not_to be_nil
101
101
 
102
- expect(datapoints[7][:metric]).to eql("timer.testing.p99")
103
- expect(datapoints[7][:value]).to eql(1.5)
102
+ expect(datapoints[7][:metric]).to eql("timer.testing.mean")
103
+ expect(datapoints[7][:value]).not_to be_nil
104
104
  expect(datapoints[7][:tags]).to include(:env => "test")
105
105
  expect(datapoints[7][:timestamp]).not_to be_nil
106
+
107
+ expect(datapoints[8][:metric]).to eql("timer.testing.stddev")
108
+ expect(datapoints[8][:value]).not_to be_nil
109
+ expect(datapoints[8][:tags]).to include(:env => "test")
110
+ expect(datapoints[8][:timestamp]).not_to be_nil
111
+
112
+ expect(datapoints[9][:metric]).to eql("timer.testing.median")
113
+ expect(datapoints[9][:value]).not_to be_nil
114
+ expect(datapoints[9][:tags]).to include(:env => "test")
115
+ expect(datapoints[9][:timestamp]).not_to be_nil
116
+
117
+ expect(datapoints[10][:metric]).to eql("timer.testing.95th_percentile")
118
+ expect(datapoints[10][:value]).not_to be_nil
119
+ expect(datapoints[10][:tags]).to include(:env => "test")
120
+ expect(datapoints[10][:timestamp]).not_to be_nil
106
121
  end
107
122
 
108
123
  it "histogram" do
109
124
  @registry.histogram('histogram.testing').update(1.5)
110
125
  datapoints = @reporter.get_datapoints
111
- expect(datapoints.size).to eql(4)
126
+ expect(datapoints.size).to eql(7)
112
127
  expect(datapoints[0][:metric]).to eql("histogram.testing.count")
113
128
  expect(datapoints[0][:value]).to eql(1)
114
129
  expect(datapoints[0][:tags]).to include(:env => "test")
115
130
  expect(datapoints[0][:timestamp]).not_to be_nil
116
131
 
117
- expect(datapoints[1][:metric]).to eql("histogram.testing.median")
118
- expect(datapoints[1][:value]).to eql(1.5)
132
+ expect(datapoints[1][:metric]).to eql("histogram.testing.min")
133
+ expect(datapoints[1][:value]).not_to be_nil
119
134
  expect(datapoints[1][:tags]).to include(:env => "test")
120
135
  expect(datapoints[1][:timestamp]).not_to be_nil
121
136
 
122
- expect(datapoints[2][:metric]).to eql("histogram.testing.p95")
123
- expect(datapoints[2][:value]).to eql(1.5)
137
+ expect(datapoints[2][:metric]).to eql("histogram.testing.max")
138
+ expect(datapoints[2][:value]).not_to be_nil
124
139
  expect(datapoints[2][:tags]).to include(:env => "test")
125
140
  expect(datapoints[2][:timestamp]).not_to be_nil
126
141
 
127
- expect(datapoints[3][:metric]).to eql("histogram.testing.p99")
128
- expect(datapoints[3][:value]).to eql(1.5)
142
+ expect(datapoints[3][:metric]).to eql("histogram.testing.mean")
143
+ expect(datapoints[3][:value]).not_to be_nil
129
144
  expect(datapoints[3][:tags]).to include(:env => "test")
130
145
  expect(datapoints[3][:timestamp]).not_to be_nil
146
+
147
+ expect(datapoints[4][:metric]).to eql("histogram.testing.stddev")
148
+ expect(datapoints[4][:value]).not_to be_nil
149
+ expect(datapoints[4][:tags]).to include(:env => "test")
150
+ expect(datapoints[4][:timestamp]).not_to be_nil
151
+
152
+ expect(datapoints[5][:metric]).to eql("histogram.testing.median")
153
+ expect(datapoints[5][:value]).not_to be_nil
154
+ expect(datapoints[5][:tags]).to include(:env => "test")
155
+ expect(datapoints[5][:timestamp]).not_to be_nil
156
+
157
+ expect(datapoints[6][:metric]).to eql("histogram.testing.95th_percentile")
158
+ expect(datapoints[6][:value]).not_to be_nil
159
+ expect(datapoints[6][:tags]).to include(:env => "test")
160
+ expect(datapoints[6][:timestamp]).not_to be_nil
131
161
  end
132
162
 
133
163
  it "gauge" do
134
164
  @registry.gauge('gauge.testing') { 123 }
135
165
  datapoints = @reporter.get_datapoints
136
166
  expect(datapoints.size).to eql(1)
137
- expect(datapoints[0][:metric]).to eql("gauge.testing")
167
+ expect(datapoints[0][:metric]).to eql("gauge.testing.value")
138
168
  expect(datapoints[0][:value]).to eql(123)
139
169
  expect(datapoints[0][:tags]).to include(:env => "test")
140
170
  expect(datapoints[0][:timestamp]).not_to be_nil
@@ -147,7 +177,7 @@ describe "Rest Client" do
147
177
  @reporter = Metriks::OpenTSDBReporter.new(
148
178
  'http://localhost:4242',
149
179
  {:env => "test"},
150
- { :registry => @registry})
180
+ { :registry => @registry, :batch_size => 3})
151
181
  stub_request(:post, "http://localhost:4242/api/put").
152
182
  with(:body => /^\[.*\]$/).
153
183
  to_return(:status => 200, :body => "", :headers => {})
@@ -183,7 +213,7 @@ describe "Rest Client" do
183
213
  end
184
214
 
185
215
  it "Send a five metric" do
186
- for i in 0..24 do
216
+ for i in 0..4 do
187
217
  @registry.counter("counter.testing.#{i}").increment
188
218
  end
189
219
  @reporter.submit @reporter.get_datapoints
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metriks-opentsdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rajat Venkatesh