pliny-librato 0.5.2 → 0.6.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: f64355e55742cd9a4eade6f2620a6fb64ad2e0eb
4
- data.tar.gz: b1bb8a0c6a7809bb88c62750f108553c87548056
3
+ metadata.gz: d432f6b4a5b01f98e0ead542ae5e43c15823852d
4
+ data.tar.gz: d73cfb2d9a49fe63e6c71baa56385419a51d9464
5
5
  SHA512:
6
- metadata.gz: d9f1e300b6f5defdd99af9b4ba57ad5a1773543d18f018ca639b68533efe68cec2e2d0d2d78f2e7a70c8e3a5ea184e6a4fb6ce2128e687b1cac727c41536674f
7
- data.tar.gz: aa4c903d27c9da3ee019096e1a5f0c65114babf6785835164bc1413b9d9a47ab5ccf1e5bc9b7e8f1913039f48629af6080404fb20e5c40c755f577a1f1a3e728
6
+ metadata.gz: fafc04571c053f2eb05cbfe0baba3e38ef698ecc6eacf0c516c6f7ec4d2adfc483e3243e1a76e55c7d147078fe6296cf50c0310c6c1daff18f1e7e4cc3cf6ebb
7
+ data.tar.gz: da313c6aa6c543af1921714b3c54839f12125741caabbb57b6826eb4e6a7e54a58c447615801d3e5071c01431beb6dbede6b8f5ab91d995122af35b3b31715e3
data/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.6.0
10
+
11
+ ### Added
12
+
13
+ - `Aggregator` and `CounterCache` from `librato-rack` are now leveraged
14
+ to reduce the number of metrics submitted for a given flush. This will
15
+ reduce the total number of measurements submitted, and have a much lower
16
+ impact on Librato's rate limiting.
17
+
18
+ ### Removed
19
+
20
+ - `count` is no longer supported as an initialization option. The queue is
21
+ only flushed based on the provided `interval`, or by calling `#stop`.
22
+
9
23
  ## 0.5.2
10
24
 
11
25
  ### Fixed
data/README.md CHANGED
@@ -24,13 +24,18 @@ Or install it yourself as:
24
24
 
25
25
  ## Usage
26
26
 
27
- Add a new initializer `config/initializers/librato.rb`:
27
+ Update (or add) your metrics initializer `config/initializers/metrics.rb` with:
28
28
 
29
29
  ```ruby
30
- Librato::Metrics.authenticate(Config.librato_email, Config.librato_key)
31
- librato_backend = Pliny::Librato::Metrics::Backend.new(source: "myapp.production")
32
- librato_backend.start
33
- Pliny::Metrics.backends << librato_backend
30
+ if Config.librato_email && Config.librato_key
31
+ Librato::Metrics.authenticate(Config.librato_email, Config.librato_key)
32
+ Pliny::Metrics.backends = [Pliny::Librato::Metrics::Backend.new(
33
+ source: "#{Config.app_name}.#{Config.app_env}",
34
+ interval: 30
35
+ ).tap(&:start)]
36
+ else
37
+ Pliny::Metrics.backends = [Pliny::Metrics::Backends::Logger]
38
+ end
34
39
  ```
35
40
 
36
41
  Now `Pliny::Metrics` methods will build a queue and automatically send metrics
@@ -43,8 +48,7 @@ Pliny::Metrics.measure(:bar) do
43
48
  end
44
49
  ```
45
50
 
46
- By default, it will send queued metrics every minute, and anytime the
47
- queue reaches 500 metrics. These settings can be configured on initialization.
51
+ By default, it will send queued metrics every minute, but can be configured on initialization.
48
52
 
49
53
  ## Shutdown
50
54
  By default, any unsubmitted metrics on the queue will not be sent at shutdown.
@@ -1,5 +1,6 @@
1
1
  require 'librato/metrics'
2
2
  require 'pliny/error_reporters'
3
+ require 'librato/collector'
3
4
 
4
5
  module Pliny
5
6
  module Librato
@@ -7,43 +8,45 @@ module Pliny
7
8
  # Implements the Pliny::Metrics.backends API. Puts any metrics sent
8
9
  # from Pliny::Metrics onto a queue that gets submitted in batches.
9
10
  class Backend
10
- POISON_PILL = :'❨╯°□°❩╯︵┻━┻'
11
-
12
- def initialize(source: nil, interval: 60, count: 500)
11
+ def initialize(source: nil, interval: 60)
13
12
  @interval = interval
14
13
  @mutex = Mutex.new
15
- @metrics_queue = Queue.new
14
+ @counter_cache = ::Librato::Collector::CounterCache.new(default_tags: nil)
15
+ @aggregator = ::Librato::Metrics::Aggregator.new
16
16
  @librato_queue = ::Librato::Metrics::Queue.new(
17
- source: source,
18
- autosubmit_count: count
17
+ source: source,
18
+ skip_measurement_times: true
19
19
  )
20
20
  end
21
21
 
22
22
  def report_counts(counts)
23
- metrics_queue.push(counts)
23
+ sync do
24
+ counts.each do |name, val|
25
+ counter_cache.increment(name, val)
26
+ end
27
+ end
24
28
  end
25
29
 
26
30
  def report_measures(measures)
27
- metrics_queue.push(measures)
31
+ sync do
32
+ aggregator.add(measures)
33
+ end
28
34
  end
29
35
 
30
36
  def start
31
- start_counter
32
37
  start_timer
33
38
  self
34
39
  end
35
40
 
36
41
  def stop
37
- metrics_queue.push(POISON_PILL)
38
42
  # Ensure timer is not running when we terminate it
39
43
  sync { timer.terminate }
40
- counter.join
41
44
  flush_librato
42
45
  end
43
46
 
44
47
  private
45
48
 
46
- attr_reader :interval, :timer, :counter, :metrics_queue, :librato_queue
49
+ attr_reader :interval, :timer, :counter_cache, :aggregator, :librato_queue
47
50
 
48
51
  def start_timer
49
52
  @timer = Thread.new do
@@ -54,21 +57,13 @@ module Pliny
54
57
  end
55
58
  end
56
59
 
57
- def start_counter
58
- @counter = Thread.new do
59
- loop do
60
- msg = metrics_queue.pop
61
- msg == POISON_PILL ? break : enqueue_librato(msg)
62
- end
63
- end
64
- end
65
-
66
- def enqueue_librato(msg)
67
- sync { librato_queue.add(msg) }
68
- end
69
-
70
60
  def flush_librato
71
- sync { librato_queue.submit }
61
+ sync do
62
+ counter_cache.flush_to(librato_queue)
63
+ librato_queue.merge!(aggregator)
64
+ aggregator.clear
65
+ end
66
+ librato_queue.submit
72
67
  end
73
68
 
74
69
  def sync(&block)
@@ -1,5 +1,5 @@
1
1
  module Pliny
2
2
  module Librato
3
- VERSION = '0.5.2'.freeze
3
+ VERSION = '0.6.0'.freeze
4
4
  end
5
5
  end
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'librato-metrics', '~> 2.0'
24
24
  spec.add_dependency 'pliny', '>= 0.20.0'
25
+ spec.add_dependency 'librato-rack', '~> 2.0'
25
26
 
26
27
  spec.add_development_dependency 'bundler', '~> 1.13'
27
28
  spec.add_development_dependency 'pry', '~> 0.10'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pliny-librato
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Appleton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-01-13 00:00:00.000000000 Z
12
+ date: 2017-03-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: librato-metrics
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.20.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: librato-rack
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: bundler
44
58
  requirement: !ruby/object:Gem::Requirement