metriks-opentsdb 1.1.3 → 1.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 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