multimeter 1.1.8-java → 2.0.0-java
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/multimeter.rb +83 -520
- data/lib/multimeter/version.rb +1 -1
- data/lib/multimeter_metrics.jar +0 -0
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6705c90a356382fa03d5b9a49d564a0229f62f07
|
4
|
+
data.tar.gz: e8ad55447af09f9347653b75b9d205ce6c2473b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2af9a88eebd3bd5736d4223e8f7513c263896b6e0d3e7eece848aab69e53bef83cb6c1ec0453ab604c8c5bdfb3127d0306171dda0e8c12f09e142e6eefeeef3a
|
7
|
+
data.tar.gz: 35e00dcba6a7eb0c6294f568bca506e5af7258e16610671418f6cd3fd394e1e3029ee3f2e7fa007ed49b365c6d1d4530d2b1b9711ddab80346727cf99a7398cb
|
data/lib/multimeter.rb
CHANGED
@@ -1,340 +1,119 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'metrics-core-jars'
|
4
|
+
require 'multimeter_metrics'
|
4
5
|
require 'json'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
module Metrics
|
9
|
-
java_import 'com.yammer.metrics.core.MetricsRegistry'
|
10
|
-
java_import 'com.yammer.metrics.core.MetricName'
|
11
|
-
java_import 'com.yammer.metrics.core.Meter'
|
12
|
-
java_import 'com.yammer.metrics.core.Counter'
|
13
|
-
java_import 'com.yammer.metrics.core.Histogram'
|
14
|
-
java_import 'com.yammer.metrics.core.Gauge'
|
15
|
-
java_import 'com.yammer.metrics.core.Timer'
|
16
|
-
java_import 'com.yammer.metrics.stats.Snapshot'
|
17
|
-
java_import 'com.yammer.metrics.reporting.JmxReporter'
|
18
|
-
|
19
|
-
class Meter
|
20
|
-
def type
|
21
|
-
:meter
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_h
|
25
|
-
{
|
26
|
-
:type => :meter,
|
27
|
-
:event_type => event_type,
|
28
|
-
:count => count,
|
29
|
-
:mean_rate => mean_rate,
|
30
|
-
:one_minute_rate => one_minute_rate,
|
31
|
-
:five_minute_rate => five_minute_rate,
|
32
|
-
:fifteen_minute_rate => fifteen_minute_rate
|
33
|
-
}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class Counter
|
38
|
-
def type
|
39
|
-
:counter
|
40
|
-
end
|
41
|
-
|
42
|
-
def to_h
|
43
|
-
{
|
44
|
-
:type => :counter,
|
45
|
-
:count => count
|
46
|
-
}
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class Histogram
|
51
|
-
def type
|
52
|
-
:histogram
|
53
|
-
end
|
54
|
-
|
55
|
-
def to_h
|
56
|
-
{
|
57
|
-
:type => :histogram,
|
58
|
-
:count => count,
|
59
|
-
:max => max,
|
60
|
-
:min => min,
|
61
|
-
:mean => mean,
|
62
|
-
:std_dev => std_dev,
|
63
|
-
:sum => sum
|
64
|
-
}.merge(snapshot.to_h)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
class Gauge
|
69
|
-
def type
|
70
|
-
:gauge
|
71
|
-
end
|
72
|
-
|
73
|
-
def to_h
|
74
|
-
{
|
75
|
-
:type => :gauge,
|
76
|
-
:value => value
|
77
|
-
}
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
class Timer
|
82
|
-
def type
|
83
|
-
:timer
|
84
|
-
end
|
85
|
-
|
86
|
-
def to_h
|
87
|
-
{
|
88
|
-
:type => :timer,
|
89
|
-
:event_type => event_type,
|
90
|
-
:count => count,
|
91
|
-
:mean_rate => mean_rate,
|
92
|
-
:one_minute_rate => one_minute_rate,
|
93
|
-
:five_minute_rate => five_minute_rate,
|
94
|
-
:fifteen_minute_rate => fifteen_minute_rate,
|
95
|
-
:max => max,
|
96
|
-
:min => min,
|
97
|
-
:mean => mean,
|
98
|
-
:std_dev => std_dev,
|
99
|
-
:sum => sum
|
100
|
-
}.merge(snapshot.to_h)
|
101
|
-
end
|
102
|
-
|
103
|
-
def measure
|
104
|
-
ctx = self.time
|
105
|
-
begin
|
106
|
-
yield
|
107
|
-
ensure
|
108
|
-
ctx.stop
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class Snapshot
|
114
|
-
def to_h
|
115
|
-
{
|
116
|
-
:median => median,
|
117
|
-
:percentiles => {
|
118
|
-
'75' => get75thPercentile,
|
119
|
-
'95' => get95thPercentile,
|
120
|
-
'98' => get98thPercentile,
|
121
|
-
'99' => get99thPercentile,
|
122
|
-
'99.9' => get999thPercentile
|
123
|
-
}
|
124
|
-
}
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
module JavaConcurrency
|
131
|
-
java_import 'java.util.concurrent.TimeUnit'
|
132
|
-
java_import 'java.util.concurrent.ConcurrentHashMap'
|
133
|
-
java_import 'java.util.concurrent.atomic.AtomicReference'
|
134
|
-
java_import 'java.lang.Thread'
|
7
|
+
module Metrics
|
8
|
+
include_package 'com.codahale.metrics'
|
135
9
|
end
|
136
10
|
|
137
11
|
module Multimeter
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
def self.metrics(group, scope, &block)
|
147
|
-
Class.new do
|
148
|
-
include(Metrics)
|
149
|
-
group(group)
|
150
|
-
scope(scope)
|
151
|
-
instance_eval(&block)
|
152
|
-
end.new
|
12
|
+
class MetricRegistry
|
13
|
+
def to_h
|
14
|
+
h = {}
|
15
|
+
metrics.each do |metric_name, metric|
|
16
|
+
h[metric_name] = metric.to_h
|
17
|
+
end
|
18
|
+
h
|
19
|
+
end
|
153
20
|
end
|
154
21
|
|
155
|
-
|
156
|
-
def
|
157
|
-
|
22
|
+
class Meter
|
23
|
+
def to_h
|
24
|
+
{
|
25
|
+
:type => :meter,
|
26
|
+
:count => count,
|
27
|
+
:mean_rate => mean_rate,
|
28
|
+
:one_minute_rate => one_minute_rate,
|
29
|
+
:five_minute_rate => five_minute_rate,
|
30
|
+
:fifteen_minute_rate => fifteen_minute_rate
|
31
|
+
}
|
158
32
|
end
|
33
|
+
end
|
159
34
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
self.class.instance_metrics.each do |type, name, options|
|
167
|
-
multimeter_registry.send(type, name, options)
|
168
|
-
end
|
35
|
+
class Counter
|
36
|
+
def to_h
|
37
|
+
{
|
38
|
+
:type => :counter,
|
39
|
+
:count => count
|
40
|
+
}
|
169
41
|
end
|
42
|
+
end
|
170
43
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
group = self.class.send(:group) || package
|
178
|
-
scope = self.class.send(:scope) || class_name
|
179
|
-
if (iid_proc = self.class.send(:instance_id))
|
180
|
-
instance_id = instance_exec(&iid_proc)
|
181
|
-
else
|
182
|
-
instance_id = self.object_id
|
183
|
-
end
|
184
|
-
if registry_mode == :linked_instance
|
185
|
-
::Multimeter.global_registry.sub_registry(scope, instance_id)
|
186
|
-
else
|
187
|
-
::Multimeter.registry(group, scope, instance_id)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
when :global
|
191
|
-
::Multimeter.global_registry
|
192
|
-
else
|
193
|
-
self.class.multimeter_registry
|
194
|
-
end
|
44
|
+
class Histogram
|
45
|
+
def to_h
|
46
|
+
{
|
47
|
+
:type => :histogram,
|
48
|
+
:count => count,
|
49
|
+
}.merge(snapshot.to_h)
|
195
50
|
end
|
51
|
+
end
|
196
52
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
::Multimeter.global_registry
|
208
|
-
else
|
209
|
-
::Multimeter.registry(g, s)
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
def instance_gauges
|
215
|
-
@instance_gauges || []
|
216
|
-
end
|
217
|
-
|
218
|
-
def instance_metrics
|
219
|
-
@instance_metrics || []
|
220
|
-
end
|
221
|
-
|
222
|
-
private
|
223
|
-
|
224
|
-
def group(g=nil)
|
225
|
-
@multimeter_registry_group = g.to_s if g
|
226
|
-
@multimeter_registry_group
|
227
|
-
end
|
228
|
-
|
229
|
-
def scope(t=nil)
|
230
|
-
@multimeter_registry_scope = t.to_s if t
|
231
|
-
@multimeter_registry_scope
|
232
|
-
end
|
233
|
-
|
234
|
-
def instance_id(pr=nil, &block_pr)
|
235
|
-
pr ||= block_pr
|
236
|
-
@multimeter_registry_iid = pr if pr
|
237
|
-
@multimeter_registry_iid
|
238
|
-
end
|
239
|
-
|
240
|
-
def registry_mode(m=nil)
|
241
|
-
@multimeter_registry_mode = m if m
|
242
|
-
@multimeter_registry_mode
|
243
|
-
end
|
244
|
-
|
245
|
-
def add_instance_gauge(name, block)
|
246
|
-
@instance_gauges ||= []
|
247
|
-
@instance_gauges << [name, block]
|
248
|
-
end
|
249
|
-
|
250
|
-
def add_instance_metric(type, name, options)
|
251
|
-
@instance_metrics ||= []
|
252
|
-
@instance_metrics << [type, name, options]
|
253
|
-
end
|
254
|
-
|
255
|
-
%w[counter meter histogram timer].each do |t|
|
256
|
-
type = t.to_sym
|
257
|
-
define_method(type) do |name, options={}|
|
258
|
-
case registry_mode
|
259
|
-
when :instance, :linked_instance
|
260
|
-
add_instance_metric(type, name, options)
|
261
|
-
else
|
262
|
-
multimeter_registry.send(type, name, options)
|
263
|
-
end
|
264
|
-
define_method(name) do
|
265
|
-
multimeter_registry.get(name)
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
def gauge(name, &block)
|
271
|
-
case registry_mode
|
272
|
-
when :instance, :linked_instance
|
273
|
-
add_instance_gauge(name, block)
|
274
|
-
else
|
275
|
-
multimeter_registry.gauge(name, &block)
|
276
|
-
end
|
277
|
-
define_method(name) do
|
278
|
-
multimeter_registry.gauge(name)
|
279
|
-
end
|
280
|
-
end
|
53
|
+
class Timer
|
54
|
+
def to_h
|
55
|
+
{
|
56
|
+
:type => :timer,
|
57
|
+
:count => count,
|
58
|
+
:mean_rate => mean_rate,
|
59
|
+
:one_minute_rate => one_minute_rate,
|
60
|
+
:five_minute_rate => five_minute_rate,
|
61
|
+
:fifteen_minute_rate => fifteen_minute_rate,
|
62
|
+
}.merge(snapshot.to_h(NANO_TO_MILLI_SCALE))
|
281
63
|
end
|
282
64
|
end
|
283
65
|
|
284
|
-
|
285
|
-
def
|
286
|
-
|
287
|
-
|
66
|
+
class Snapshot
|
67
|
+
def to_h(scale=1)
|
68
|
+
{
|
69
|
+
:max => max * scale,
|
70
|
+
:min => min * scale,
|
71
|
+
:mean => mean * scale,
|
72
|
+
:std_dev => std_dev * scale,
|
73
|
+
:median => median * scale,
|
74
|
+
:percentiles => {
|
75
|
+
'75' => p75 * scale,
|
76
|
+
'95' => p95 * scale,
|
77
|
+
'98' => p98 * scale,
|
78
|
+
'99' => p99 * scale,
|
79
|
+
'99.9' => p999 * scale,
|
80
|
+
}
|
81
|
+
}
|
288
82
|
end
|
289
83
|
end
|
290
84
|
|
291
|
-
|
292
|
-
def
|
293
|
-
|
294
|
-
|
85
|
+
class Gauge
|
86
|
+
def to_h
|
87
|
+
{
|
88
|
+
:type => :gauge,
|
89
|
+
:value => value,
|
90
|
+
}
|
295
91
|
end
|
296
92
|
end
|
297
93
|
|
298
|
-
|
299
|
-
|
300
|
-
m.send(:include, Metrics)
|
301
|
-
m.send(:registry_mode, :linked)
|
302
|
-
end
|
94
|
+
def self.create_registry
|
95
|
+
MetricRegistry.new
|
303
96
|
end
|
304
97
|
|
305
|
-
|
306
|
-
|
307
|
-
m.send(:include, Metrics)
|
308
|
-
m.send(:registry_mode, :linked_instance)
|
309
|
-
end
|
98
|
+
def self.jmx(registry, options = {})
|
99
|
+
Metrics::JmxReporter.forRegistry(registry.to_java).inDomain(options[:domain] || 'multimeter').build.tap(&:start)
|
310
100
|
end
|
311
101
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
@jmx_reporter = ::Yammer::Metrics::JmxReporter.new(@registry)
|
316
|
-
@jmx_reporter.start
|
317
|
-
if options[:recursive]
|
318
|
-
sub_registries.each do |registry|
|
319
|
-
registry.jmx!
|
320
|
-
end
|
321
|
-
end
|
102
|
+
def self.http(registry, rack_handler, options={})
|
103
|
+
server_thread = Java::JavaLang::Thread.new do
|
104
|
+
rack_handler.run(Http.create_app(registry), options)
|
322
105
|
end
|
106
|
+
server_thread.daemon = true
|
107
|
+
server_thread.name = 'multimeter-http-server'
|
108
|
+
server_thread.start
|
109
|
+
server_thread
|
323
110
|
end
|
324
111
|
|
325
|
-
|
326
|
-
def http!(rack_handler, options={})
|
327
|
-
return if @server_thread
|
328
|
-
@server_thread = JavaConcurrency::Thread.new do
|
329
|
-
rack_handler.run(create_app(self), options)
|
330
|
-
end
|
331
|
-
@server_thread.daemon = true
|
332
|
-
@server_thread.name = 'multimeter-http-server'
|
333
|
-
@server_thread.start
|
334
|
-
end
|
112
|
+
private
|
335
113
|
|
336
|
-
|
114
|
+
NANO_TO_MILLI_SCALE = 1.0/1_000_000
|
337
115
|
|
116
|
+
module Http
|
338
117
|
class BadRequest < StandardError; end
|
339
118
|
|
340
119
|
COMMON_HEADERS = {'Connection' => 'close'}.freeze
|
@@ -342,7 +121,7 @@ module Multimeter
|
|
342
121
|
JSONP_HEADERS = COMMON_HEADERS.merge('Content-Type' => 'application/javascript').freeze
|
343
122
|
ERROR_HEADERS = COMMON_HEADERS.merge('Content-Type' => 'text/plain').freeze
|
344
123
|
|
345
|
-
def create_app(registry)
|
124
|
+
def self.create_app(registry)
|
346
125
|
proc do |env|
|
347
126
|
begin
|
348
127
|
body = registry.to_h.to_json
|
@@ -366,220 +145,4 @@ module Multimeter
|
|
366
145
|
end
|
367
146
|
end
|
368
147
|
end
|
369
|
-
|
370
|
-
class Registry
|
371
|
-
include Enumerable
|
372
|
-
include Jmx
|
373
|
-
include Http
|
374
|
-
|
375
|
-
attr_reader :group, :scope, :instance_id
|
376
|
-
|
377
|
-
def initialize(*args)
|
378
|
-
@group, @scope, @instance_id = args
|
379
|
-
@registry = ::Yammer::Metrics::MetricsRegistry.new
|
380
|
-
@sub_registries = JavaConcurrency::ConcurrentHashMap.new
|
381
|
-
end
|
382
|
-
|
383
|
-
def instance_registry?
|
384
|
-
!!@instance_id
|
385
|
-
end
|
386
|
-
|
387
|
-
def sub_registry(scope, instance_id=nil)
|
388
|
-
full_id = scope.dup
|
389
|
-
full_id << "/#{instance_id}" if instance_id
|
390
|
-
r = @sub_registries.get(full_id)
|
391
|
-
unless r
|
392
|
-
r = self.class.new(@group, scope, instance_id)
|
393
|
-
@sub_registries.put_if_absent(full_id, r)
|
394
|
-
r = @sub_registries.get(full_id)
|
395
|
-
end
|
396
|
-
r
|
397
|
-
end
|
398
|
-
|
399
|
-
def sub_registries
|
400
|
-
@sub_registries.values.to_a
|
401
|
-
end
|
402
|
-
|
403
|
-
def each_metric
|
404
|
-
return self unless block_given?
|
405
|
-
@registry.all_metrics.each do |metric_name, metric|
|
406
|
-
yield metric_name.name, metric
|
407
|
-
end
|
408
|
-
end
|
409
|
-
alias_method :each, :each_metric
|
410
|
-
|
411
|
-
def get(name)
|
412
|
-
@registry.all_metrics[create_name(name)]
|
413
|
-
end
|
414
|
-
|
415
|
-
def find_metric(name)
|
416
|
-
m = get(name)
|
417
|
-
unless m
|
418
|
-
sub_registries.each do |registry|
|
419
|
-
m = registry.find_metric(name)
|
420
|
-
break if m
|
421
|
-
end
|
422
|
-
end
|
423
|
-
m
|
424
|
-
end
|
425
|
-
|
426
|
-
def gauge(name, options={}, &block)
|
427
|
-
existing_gauge = get(name)
|
428
|
-
if block_given? && existing_gauge.respond_to?(:same?) && existing_gauge.same?(block)
|
429
|
-
return
|
430
|
-
elsif existing_gauge && block_given?
|
431
|
-
raise ArgumentError, %(Cannot redeclare gauge #{name})
|
432
|
-
else
|
433
|
-
@registry.new_gauge(create_name(name), ProcGauge.new(block))
|
434
|
-
end
|
435
|
-
end
|
436
|
-
|
437
|
-
def counter(name, options={})
|
438
|
-
error_translation do
|
439
|
-
@registry.new_counter(create_name(name))
|
440
|
-
end
|
441
|
-
end
|
442
|
-
|
443
|
-
def meter(name, options={})
|
444
|
-
error_translation do
|
445
|
-
event_type = (options[:event_type] || '').to_s
|
446
|
-
time_unit = TIME_UNITS[options[:time_unit] || :seconds]
|
447
|
-
@registry.new_meter(create_name(name), event_type, time_unit)
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
def histogram(name, options={})
|
452
|
-
error_translation do
|
453
|
-
@registry.new_histogram(create_name(name), !!options[:biased])
|
454
|
-
end
|
455
|
-
end
|
456
|
-
|
457
|
-
def timer(name, options={})
|
458
|
-
error_translation do
|
459
|
-
duration_unit = TIME_UNITS[options[:duration_unit] || :milliseconds]
|
460
|
-
rate_unit = TIME_UNITS[options[:rate_unit] || :seconds]
|
461
|
-
@registry.new_timer(create_name(name), duration_unit, rate_unit)
|
462
|
-
end
|
463
|
-
end
|
464
|
-
|
465
|
-
def to_h
|
466
|
-
h = {@scope => {}}
|
467
|
-
each_metric do |metric_name, metric|
|
468
|
-
h[@scope][metric_name.to_sym] = metric.to_h
|
469
|
-
end
|
470
|
-
registries_by_scope = sub_registries.group_by { |r| r.scope }
|
471
|
-
registries_by_scope.each do |scope, registries|
|
472
|
-
if registries.size == 1
|
473
|
-
h.merge!(registries.first.to_h)
|
474
|
-
else
|
475
|
-
h[scope] = {}
|
476
|
-
registries_by_metric = Hash.new { |h, k| h[k] = [] }
|
477
|
-
registries.each do |registry|
|
478
|
-
registry.each_metric do |metric_name, _|
|
479
|
-
registries_by_metric[metric_name] << registry
|
480
|
-
end
|
481
|
-
end
|
482
|
-
registries_by_metric.each do |metric_name, registries|
|
483
|
-
if registries.size == 1
|
484
|
-
h[scope][metric_name.to_sym] = registries.first.get(metric_name).to_h
|
485
|
-
else
|
486
|
-
metrics_by_instance_id = Hash[registries.map { |r| [r.instance_id, r.get(metric_name)] }]
|
487
|
-
h[scope][metric_name.to_sym] = Aggregate.new(metrics_by_instance_id).to_h
|
488
|
-
end
|
489
|
-
end
|
490
|
-
end
|
491
|
-
h
|
492
|
-
end
|
493
|
-
h.delete_if { |k, v| v.empty? }
|
494
|
-
h
|
495
|
-
end
|
496
|
-
|
497
|
-
private
|
498
|
-
|
499
|
-
TIME_UNITS = {
|
500
|
-
:seconds => JavaConcurrency::TimeUnit::SECONDS,
|
501
|
-
:milliseconds => JavaConcurrency::TimeUnit::MILLISECONDS
|
502
|
-
}.freeze
|
503
|
-
|
504
|
-
def create_name(name)
|
505
|
-
::Yammer::Metrics::MetricName.new(@group, @scope, name.to_s)
|
506
|
-
end
|
507
|
-
|
508
|
-
def error_translation
|
509
|
-
begin
|
510
|
-
yield
|
511
|
-
rescue java.lang.ClassCastException => cce
|
512
|
-
raise ArgumentError, %(Cannot redeclare a metric as another type)
|
513
|
-
end
|
514
|
-
end
|
515
|
-
end
|
516
|
-
|
517
|
-
class Aggregate
|
518
|
-
def initialize(metrics)
|
519
|
-
@metrics = metrics
|
520
|
-
@type = check_type!
|
521
|
-
end
|
522
|
-
|
523
|
-
def to_h
|
524
|
-
{
|
525
|
-
:type => :aggregate,
|
526
|
-
:total => compute_total,
|
527
|
-
:parts => Hash[@metrics.map { |k, v| [k.to_s, v.to_h] }]
|
528
|
-
}
|
529
|
-
end
|
530
|
-
|
531
|
-
private
|
532
|
-
|
533
|
-
def check_type!
|
534
|
-
types = @metrics.values.map(&:type).uniq
|
535
|
-
unless types.size == 1
|
536
|
-
raise ArgumentError, %[All metrics of an aggregate must be of the same type (they were: #{types.join(', ')})]
|
537
|
-
end
|
538
|
-
types.first
|
539
|
-
end
|
540
|
-
|
541
|
-
def compute_total
|
542
|
-
h = {}
|
543
|
-
metric_hs = @metrics.values.map(&:to_h)
|
544
|
-
metric_hs.first.keys.each do |property|
|
545
|
-
values = metric_hs.map { |h| h[property] }
|
546
|
-
aggregate_value = begin
|
547
|
-
case property
|
548
|
-
when :type, :event_type then values.first
|
549
|
-
when :percentiles then nil
|
550
|
-
else
|
551
|
-
if values.all? { |v| v.nil? || v.is_a?(Numeric) }
|
552
|
-
min, max = values.compact.minmax
|
553
|
-
sum = values.compact.reduce(:+)
|
554
|
-
{
|
555
|
-
:max => max,
|
556
|
-
:min => min,
|
557
|
-
:sum => sum,
|
558
|
-
:avg => sum ? sum.fdiv(values.size) : nil,
|
559
|
-
}
|
560
|
-
end
|
561
|
-
end
|
562
|
-
end
|
563
|
-
h[property] = aggregate_value if aggregate_value
|
564
|
-
end
|
565
|
-
h
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
class ProcGauge < ::Yammer::Metrics::Gauge
|
570
|
-
def initialize(proc)
|
571
|
-
super()
|
572
|
-
@proc = proc
|
573
|
-
end
|
574
|
-
|
575
|
-
def value
|
576
|
-
@proc.call
|
577
|
-
end
|
578
|
-
|
579
|
-
def same?(other_proc)
|
580
|
-
other_proc.source_location == @proc.source_location
|
581
|
-
end
|
582
|
-
end
|
583
|
-
|
584
|
-
GLOBAL_REGISTRY = registry('multimeter', 'global')
|
585
148
|
end
|
data/lib/multimeter/version.rb
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multimeter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Theo Hultberg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ~>
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: '3.1'
|
19
19
|
- - <
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 4.0.0
|
22
22
|
name: metrics-core-jars
|
23
23
|
prerelease: false
|
24
24
|
type: :runtime
|
@@ -26,11 +26,11 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: '3.1'
|
30
30
|
- - <
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
description: Multimeter provides a
|
32
|
+
version: 4.0.0
|
33
|
+
description: Multimeter provides a thin wrapper around Dropwizard's (a.k.a. Coda Hale's) Metrics library under the hood.
|
34
34
|
email:
|
35
35
|
- theo@iconara.net
|
36
36
|
executables: []
|
@@ -39,8 +39,10 @@ extra_rdoc_files: []
|
|
39
39
|
files:
|
40
40
|
- lib/multimeter.rb
|
41
41
|
- lib/multimeter/version.rb
|
42
|
+
- lib/multimeter_metrics.jar
|
42
43
|
homepage: http://github.com/iconara/multimeter
|
43
|
-
licenses:
|
44
|
+
licenses:
|
45
|
+
- Apache-2.0
|
44
46
|
metadata: {}
|
45
47
|
post_install_message:
|
46
48
|
rdoc_options: []
|
@@ -58,8 +60,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
60
|
version: '0'
|
59
61
|
requirements: []
|
60
62
|
rubyforge_project: multimeter
|
61
|
-
rubygems_version: 2.
|
63
|
+
rubygems_version: 2.6.6
|
62
64
|
signing_key:
|
63
65
|
specification_version: 4
|
64
|
-
summary: JRuby application metric instrumentation using
|
66
|
+
summary: JRuby application metric instrumentation using Dropwizard's Metrics
|
65
67
|
test_files: []
|