librato-rack 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ *�2V�bGD��C����e:�?�TS���PQo�DžѬy�1Ww���G^(m�8Ĝ�̶��ar|Em%Z�~��m�`5�H�X�ŘKhC�-|,Ӑ_���<
2
+ QU�1(��h̜{�ּb=?gְ���� v5"��͊"ҳv����!�l6�B���h�Yް��Ț,�s���j~]|���_*N�$Z�� P\��n=j�
@@ -0,0 +1,15 @@
1
+ ### Version 0.3.0
2
+ * Add experimental support for EventMachine and EMSynchrony (Balwant K)
3
+ * Start testing suite against jruby/rbx
4
+ * Gem is now signed
5
+
6
+ ### Version 0.2.1
7
+ * Fix exception if logging metrics before middleware init (Eric Holmes)
8
+
9
+ ### Version 0.2.0
10
+ * Add disable_rack_metrics config option
11
+ * Remove metrics based on deprecated heroku HTTP headers
12
+ * Ensure compatibility with ruby 2.0
13
+
14
+ ### Version 0.1.0
15
+ * Initial version
data/README.md CHANGED
@@ -1,9 +1,7 @@
1
1
  librato-rack
2
2
  =======
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/librato/librato-rack.png?branch=master)](http://travis-ci.org/librato/librato-rack) [![Code Climate](https://codeclimate.com/github/librato/librato-rack.png)](https://codeclimate.com/github/librato/librato-rack)
5
-
6
- *Note: librato-rack is currently in beta and is currently recommended primarily for early-adopter use*
4
+ [![Gem Version](https://badge.fury.io/rb/librato-rack.png)](http://badge.fury.io/rb/librato-rack) [![Build Status](https://secure.travis-ci.org/librato/librato-rack.png?branch=master)](http://travis-ci.org/librato/librato-rack) [![Code Climate](https://codeclimate.com/github/librato/librato-rack.png)](https://codeclimate.com/github/librato/librato-rack)
7
5
 
8
6
  `librato-rack` provides rack middleware which will report key statistics for your rack applications to [Librato Metrics](https://metrics.librato.com/). It will also allow you to easily track your own custom metrics. Metrics are delivered asynchronously behind the scenes so they won't affect performance of your requests.
9
7
 
@@ -50,8 +48,9 @@ If you don't have a Metrics account already, [sign up](https://metrics.librato.c
50
48
  By default you can use `LIBRATO_USER` and `LIBRATO_TOKEN` to pass your account data to the middleware. While these are the only required variables, there are a few more optional environment variables you may find useful.
51
49
 
52
50
  * `LIBRATO_SOURCE` - the default source to use for submitted metrics. If this is not set, hostname of the executing machine will be the default source
53
- * `LIBRATO_PREFIX` - a prefix which will be appended to all metric names
51
+ * `LIBRATO_PREFIX` - a prefix which will be prepended to all metric names
54
52
  * `LIBRATO_LOG_LEVEL` - see logging section for more
53
+ * `LIBRATO_EVENT_MODE` - use with evented apps, see "Use with EventMachine" below
55
54
 
56
55
  ##### Use a configuration object
57
56
 
@@ -68,7 +67,7 @@ See the configuration class for all available options.
68
67
 
69
68
  ##### Running on Heroku
70
69
 
71
- If you are using the Librato Metrics Heroku addon, your `LIBRATO_USER` and `LIBRATO_TOKEN` environment variables will already be set in your Heroku environment. If you are running without the addon you will need to provide them yourself.
70
+ If you are using the [Librato Metrics Heroku addon](https://addons.heroku.com/librato), your `LIBRATO_USER` and `LIBRATO_TOKEN` environment variables will already be set in your Heroku environment. If you are running without the addon you will need to provide them yourself.
72
71
 
73
72
  You must also specify a custom source for your app to track properly. If an explicit source is not set, `librato-rack` will not start. You can set the source in your environment:
74
73
 
@@ -76,6 +75,12 @@ You must also specify a custom source for your app to track properly. If an expl
76
75
 
77
76
  NOTE: if Heroku idles your application no measurements will be sent until it receives another request and is restarted. If you see intermittent gaps in your measurements during periods of low traffic this is the most likely cause.
78
77
 
78
+ ##### Use with EventMachine and EM Synchrony
79
+
80
+ `librato-rack` has experimental support for EventMachine and EM Synchrony apps.
81
+
82
+ When using in an evented context set LIBRATO_EVENT_MODE to `'eventmachine'` if using [EventMachine](https://github.com/eventmachine/eventmachine) or `'synchrony'` if using [EM Synchrony](https://github.com/igrigorik/em-synchrony) and/or [Rack::FiberPool](https://github.com/alebsack/rack-fiber_pool). We're interested in maturing this support, so please let us know if you have any issues.
83
+
79
84
  ## Custom Measurements
80
85
 
81
86
  Tracking anything that interests you is easy with Metrics. There are four primary helpers available:
@@ -141,7 +146,7 @@ Can also be written as:
141
146
  g.measure 'hits', 18
142
147
  end
143
148
 
144
- Symbols can be used interchangably with strings for metric names.
149
+ Symbols can be used interchangeably with strings for metric names.
145
150
 
146
151
  ## Cross-Process Aggregation
147
152
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ end
8
8
  # console
9
9
  desc "Open an console session preloaded with this library"
10
10
  task :console do
11
- sh "pry -rubygems -r ./lib/librato-rack.rb"
11
+ sh "pry -r ./lib/librato-rack.rb"
12
12
  end
13
13
 
14
14
  Bundler::GemHelper.install_tasks
@@ -10,6 +10,8 @@ module Librato
10
10
  # config.token = 'mytoken'
11
11
  #
12
12
  class Configuration
13
+ EVENT_MODES = [:eventmachine, :synchrony]
14
+
13
15
  attr_accessor :user, :token, :api_endpoint, :tracker, :source_pids,
14
16
  :log_level, :flush_interval, :log_target,
15
17
  :disable_rack_metrics
@@ -29,6 +31,23 @@ module Librato
29
31
  self.prefix = ENV['LIBRATO_PREFIX'] || ENV['LIBRATO_METRICS_PREFIX']
30
32
  self.source = ENV['LIBRATO_SOURCE'] || ENV['LIBRATO_METRICS_SOURCE']
31
33
  self.log_level = ENV['LIBRATO_LOG_LEVEL'] || :info
34
+ self.event_mode = ENV['LIBRATO_EVENT_MODE']
35
+ end
36
+
37
+ def event_mode
38
+ @event_mode
39
+ end
40
+
41
+ # set event_mode, valid options are EVENT_MODES or
42
+ # nil (the default) if not running in an evented context
43
+ def event_mode=(mode)
44
+ mode = mode.to_sym if mode
45
+ # reject unless acceptable mode, allow for turning event_mode off
46
+ if [*EVENT_MODES, nil].include?(mode)
47
+ @event_mode = mode
48
+ else
49
+ # TODO log warning
50
+ end
32
51
  end
33
52
 
34
53
  def explicit_source?
@@ -29,11 +29,10 @@ module Librato
29
29
  log(:debug) { "config: #{config.dump}" }
30
30
  @pid = $$
31
31
  log(:debug) { ">> starting up worker for pid #{@pid}..." }
32
- @worker = Thread.new do
33
- worker = Worker.new
34
- worker.run_periodically(config.flush_interval) do
35
- flush
36
- end
32
+
33
+ @worker = Worker.new(:timer => config.event_mode)
34
+ @worker.run_periodically(config.flush_interval) do
35
+ flush
37
36
  end
38
37
  end
39
38
 
@@ -66,6 +65,18 @@ module Librato
66
65
  @client ||= prepare_client
67
66
  end
68
67
 
68
+ # use custom faraday adapter if running in evented context
69
+ def custom_adapter
70
+ case config.event_mode
71
+ when :eventmachine
72
+ :em_http
73
+ when :synchrony
74
+ :em_synchrony
75
+ else
76
+ nil
77
+ end
78
+ end
79
+
69
80
  def build_flush_queue(collector)
70
81
  queue = ValidatingQueue.new( :client => client, :source => qualified_source,
71
82
  :prefix => config.prefix, :skip_measurement_times => true )
@@ -95,6 +106,9 @@ module Librato
95
106
  client.authenticate config.user, config.token
96
107
  client.api_endpoint = config.api_endpoint
97
108
  client.custom_user_agent = user_agent
109
+ if custom_adapter
110
+ client.faraday_adapter = custom_adapter
111
+ end
98
112
  client
99
113
  end
100
114
 
@@ -131,7 +145,6 @@ module Librato
131
145
  ua_chunks << "(#{ruby_engine}; #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}; #{RUBY_PLATFORM})"
132
146
  ua_chunks.join(' ')
133
147
  end
134
-
135
148
  end
136
149
  end
137
150
  end
@@ -1,5 +1,5 @@
1
1
  module Librato
2
2
  class Rack
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -5,31 +5,32 @@ module Librato
5
5
  # of how long execution takes.
6
6
  #
7
7
  class Worker
8
+ attr_reader :timer
8
9
 
9
- def initialize
10
+ # available options:
11
+ # * timer - type of timer to use, valid options are
12
+ # :sleep (default), :eventmachine, or :synchrony
13
+ def initialize(options={})
10
14
  @interrupt = false
15
+ @timer = (options[:timer] || :sleep).to_sym
11
16
  end
12
17
 
13
18
  # run the given block every <period> seconds, looping
14
19
  # infinitely unless @interrupt becomes true.
15
20
  #
16
21
  def run_periodically(period, &block)
17
- next_run = start_time(period)
18
- until @interrupt do
19
- now = Time.now
20
- if now >= next_run
21
- block.call
22
- while next_run <= now
23
- next_run += period
24
- end
25
- else
26
- sleep(next_run - now)
27
- end
22
+ @proc = block # store
23
+
24
+ if [:eventmachine, :synchrony].include?(timer)
25
+ compensated_repeat(period) # threading is already handled
26
+ else
27
+ @thread = Thread.new { compensated_repeat(period) }
28
28
  end
29
29
  end
30
30
 
31
31
  # Give some structure to worker start times so when possible
32
32
  # they will be in sync.
33
+ #
33
34
  def start_time(period)
34
35
  earliest = Time.now + period
35
36
  # already on a whole minute
@@ -43,7 +44,36 @@ module Librato
43
44
  end
44
45
  end
45
46
 
46
- end
47
+ private
47
48
 
49
+ # run continuous loop executing every <period>, will start
50
+ # at <first_run> if set otherwise will auto-determine
51
+ # appropriate time for first run
52
+ def compensated_repeat(period, first_run = nil)
53
+ next_run = first_run || start_time(period)
54
+ until @interrupt do
55
+ now = Time.now
56
+ if now >= next_run
57
+ @proc.call
58
+
59
+ while next_run <= now
60
+ next_run += period # schedule future run
61
+ end
62
+ end
63
+
64
+ interval = next_run - now
65
+ case timer
66
+ when :eventmachine
67
+ EM.add_timer(interval) { compensated_repeat(period, next_run) }
68
+ break
69
+ when :synchrony
70
+ EM::Synchrony.sleep(interval)
71
+ else
72
+ sleep(next_run - now)
73
+ end
74
+ end
75
+ end
76
+
77
+ end
48
78
  end
49
79
  end
@@ -3,7 +3,7 @@ require 'rack/test'
3
3
 
4
4
  # Tests for universal tracking for all request paths
5
5
  #
6
- class CustomTest < MiniTest::Unit::TestCase
6
+ class CustomTest < Minitest::Test
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -3,7 +3,7 @@ require 'rack/test'
3
3
 
4
4
  # Tests for deprecated functionality
5
5
  #
6
- class DeprecatedTest < MiniTest::Unit::TestCase
6
+ class DeprecatedTest < Minitest::Test
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -3,7 +3,7 @@ require 'rack/test'
3
3
 
4
4
  # Tests for universal tracking for all request paths
5
5
  #
6
- class NoStatsTest < MiniTest::Unit::TestCase
6
+ class NoStatsTest < Minitest::Test
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -3,7 +3,7 @@ require 'rack/test'
3
3
 
4
4
  # Tests for universal tracking for all request paths
5
5
  #
6
- class RequestTest < MiniTest::Unit::TestCase
6
+ class RequestTest < Minitest::Test
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -4,7 +4,7 @@ require 'rack/test'
4
4
 
5
5
  # Tests for universal tracking for all request paths
6
6
  #
7
- class TrackerRemoteTest < MiniTest::Unit::TestCase
7
+ class TrackerRemoteTest < Minitest::Test
8
8
 
9
9
  # These tests connect to the Metrics server with an account and verify remote
10
10
  # functions. They will only run if the below environment variables are set.
@@ -3,20 +3,6 @@ Bundler.setup
3
3
 
4
4
  require 'pry'
5
5
  require 'minitest/autorun'
6
- # require 'mocha/setup'
7
-
8
- # Configure Rails Environment
9
- ENV["RAILS_ENV"] = "test"
10
6
 
11
7
  require 'librato/rack'
12
8
 
13
- # require File.expand_path("../dummy/config/environment.rb", __FILE__)
14
- # require "rails/test_help"
15
-
16
- # Configure capybara
17
- # require 'capybara/rails'
18
- # Capybara.default_driver = :rack_test
19
- # Capybara.default_selector = :css
20
-
21
- # Load support files
22
- #Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  module Librato
4
4
  class Collector
5
- class AggregatorTest < MiniTest::Unit::TestCase
5
+ class AggregatorTest < Minitest::Test
6
6
 
7
7
  def setup
8
8
  @agg = Aggregator.new
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  module Librato
4
4
  class Collector
5
- class CounterCacheTest < MiniTest::Unit::TestCase
5
+ class CounterCacheTest < Minitest::Test
6
6
 
7
7
  def test_basic_operations
8
8
  cc = CounterCache.new
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  module Librato
4
4
  class Collector
5
- class GroupTest < MiniTest::Unit::TestCase
5
+ class GroupTest < Minitest::Test
6
6
 
7
7
  def test_increment
8
8
  collector = Collector.new
@@ -1,7 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
3
  module Librato
4
- class CollectorTest < MiniTest::Unit::TestCase
4
+ class CollectorTest < Minitest::Test
5
5
 
6
6
  def test_proxy_object_access
7
7
  collector = Collector.new
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  module Librato
4
4
  class Rack
5
- class ConfigurationTest < MiniTest::Unit::TestCase
5
+ class ConfigurationTest < Minitest::Test
6
6
 
7
7
  def setup
8
8
  clear_env_vars
@@ -57,13 +57,37 @@ module Librato
57
57
  assert_equal 'newfoo', listener.prefix
58
58
  end
59
59
 
60
+ def test_event_mode
61
+ config = Configuration.new
62
+ assert_equal nil, config.event_mode
63
+
64
+ config.event_mode = :synchrony
65
+ assert_equal :synchrony, config.event_mode
66
+
67
+ # handle string config
68
+ config.event_mode = 'eventmachine'
69
+ assert_equal :eventmachine, config.event_mode
70
+
71
+ # handle invalid
72
+ config2 = Configuration.new
73
+ config2.event_mode = 'fooballoo'
74
+ assert_equal nil, config2.event_mode
75
+
76
+ # env detection
77
+ ENV['LIBRATO_EVENT_MODE'] = 'eventmachine'
78
+ config3 = Configuration.new
79
+ assert_equal :eventmachine, config3.event_mode
80
+ end
81
+
60
82
  private
61
83
 
62
84
  def clear_env_vars
63
85
  ENV.delete('LIBRATO_USER')
64
86
  ENV.delete('LIBRATO_TOKEN')
65
87
  ENV.delete('LIBRATO_SOURCE')
88
+ ENV.delete('LIBRATO_PREFIX')
66
89
  ENV.delete('LIBRATO_LOG_LEVEL')
90
+ ENV.delete('LIBRATO_EVENT_MODE')
67
91
  # legacy
68
92
  ENV.delete('LIBRATO_METRICS_USER')
69
93
  ENV.delete('LIBRATO_METRICS_TOKEN')
@@ -3,7 +3,7 @@ require 'stringio'
3
3
 
4
4
  module Librato
5
5
  class Rack
6
- class LoggerTest < MiniTest::Unit::TestCase
6
+ class LoggerTest < Minitest::Test
7
7
 
8
8
  def setup
9
9
  @buffer = StringIO.new
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  module Librato
4
4
  class Rack
5
- class TrackerTest < MiniTest::Unit::TestCase
5
+ class TrackerTest < Minitest::Test
6
6
 
7
7
  def test_sets_prefix
8
8
  config = Configuration.new
@@ -3,7 +3,7 @@ require 'stringio'
3
3
 
4
4
  module Librato
5
5
  class Rack
6
- class WorkerTest < MiniTest::Unit::TestCase
6
+ class WorkerTest < Minitest::Test
7
7
 
8
8
  def test_basic_use
9
9
  worker = Worker.new
@@ -31,6 +31,18 @@ module Librato
31
31
  assert_equal 0, start.sec%10, 'should be evenly divisible with whole minutes'
32
32
  end
33
33
 
34
+ def test_timer_type
35
+ worker = Worker.new
36
+ assert_equal :sleep, worker.timer
37
+
38
+ em_worker = Worker.new(:timer => 'eventmachine')
39
+ assert_equal :eventmachine, em_worker.timer
40
+
41
+ # tolerate explicit nils
42
+ worker = Worker.new(:timer => nil)
43
+ assert_equal :sleep, worker.timer
44
+ end
45
+
34
46
  end
35
47
  end
36
48
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: librato-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matt Sanders
9
9
  autorequire:
10
10
  bindir: bin
11
- cert_chain: []
12
- date: 2013-04-04 00:00:00.000000000 Z
11
+ cert_chain:
12
+ - !binary |-
13
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROakNDQWg2Z0F3SUJB
14
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJCTVJFd0R3WURWUVFEREFoeWRX
15
+ SjUKWjJWdGN6RVhNQlVHQ2dtU0pvbVQ4aXhrQVJrV0IyeHBZbkpoZEc4eEV6
16
+ QVJCZ29Ka2lhSmsvSXNaQUVaRmdOagpiMjB3SGhjTk1UTXdPREE0TWpJeE9U
17
+ UTJXaGNOTVRRd09EQTRNakl4T1RRMldqQkJNUkV3RHdZRFZRUUREQWh5CmRX
18
+ SjVaMlZ0Y3pFWE1CVUdDZ21TSm9tVDhpeGtBUmtXQjJ4cFluSmhkRzh4RXpB
19
+ UkJnb0praWFKay9Jc1pBRVoKRmdOamIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFF
20
+ QkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDL1g3a2RLd1ovb2kvQQpCanMvY2F4
21
+ a3lESVpnTFMva2dtdWxvVGhmUEJCUjZNdU40R1hlL2hzZHpTSDhYaHRCWW9Z
22
+ cEsvRjJyUkJzclMrCmpMclpiS0pBR1VJcnFIaVNmZEx6eDJrMnNHVVlsS3pm
23
+ NmE0eFdpNTg3bmRDOEJ2aDVsZGM4NVcxbGxIRGVBU1MKUjVXanBlcjRLVTFO
24
+ V0cxRkFWdlFDWGhTS2Rta2krd1g3Sm5kN0NRK296N2trS1lQTThHL1pUZGIr
25
+ cW43d1JMVgpLYVIrenpHRG13VFEyV3pNaXRTWG1mL2t1NE1VbVJ6c3llcERY
26
+ WEVSTHluU3A4SVRrNjdnMkhNQ3l2T1BzZjhLCmNZdmwvd2JiOEJ5L3I2SE9q
27
+ eTdTTTdZbzM1NHVJZmhuaXU4QUt5bUlLeHNiNElnNzFTMGNVN0htMytXQlRp
28
+ MjgKQUlnOFRVYVhBZ01CQUFHak9UQTNNQWtHQTFVZEV3UUNNQUF3SFFZRFZS
29
+ ME9CQllFRkRieVFRcU80eEptYUtCRQpuZVE0eStSV0N2T1hNQXNHQTFVZER3
30
+ UUVBd0lFc0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQUtBelhiQTQ3CjlV
31
+ NTlTc0VmcVIrRExkdjFWQWNkbXhhd3FDK1ptRzRGcHhaaHVIaGFvVXVpMzVB
32
+ b1FqelNpSEVVTkRUSXUzdTcKVGNzWXdYTVB6dXl6WkpKS1h2QkttU2I5bVdK
33
+ OTlET0g4MW9VbU96WDdqQ2xRWFpIcm5GdEhkQVJjTFFzUG1nYQo0RGgrZldY
34
+ V3hQSjZma3ZnODI2dko0cERtbDdPbzlzQ1hUcEMya2kvNVZla1RYa3BGclVz
35
+ UVJYamxYUGttVDMvCnhhODU4QkdSanZVNTlXUEUxM1FHaWJhN1lJZUh0UkV2
36
+ Tng0MkpJZm9KTVY3NG9mcktJdVR3OUNNdG8yZ3o5WHgKS3gxbmNuMDdBK2JK
37
+ bktaNmhlblFBRjFDSDk2WmNxY0pIMTc5UzJ0SWlLRE04a2VlUklVT1BDM1dU
38
+ MGZhb2svMgpnQTJvemRyODUxYy9uQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
39
+ LS0tLS0K
40
+ date: 2013-08-13 00:00:00.000000000 Z
13
41
  dependencies:
14
42
  - !ruby/object:Gem::Dependency
15
43
  name: librato-metrics
@@ -18,7 +46,7 @@ dependencies:
18
46
  requirements:
19
47
  - - ~>
20
48
  - !ruby/object:Gem::Version
21
- version: 1.0.2
49
+ version: 1.1.0
22
50
  type: :runtime
23
51
  prerelease: false
24
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +54,7 @@ dependencies:
26
54
  requirements:
27
55
  - - ~>
28
56
  - !ruby/object:Gem::Version
29
- version: 1.0.2
57
+ version: 1.1.0
30
58
  - !ruby/object:Gem::Dependency
31
59
  name: minitest
32
60
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +95,7 @@ files:
67
95
  - LICENSE
68
96
  - Rakefile
69
97
  - README.md
98
+ - CHANGELOG.md
70
99
  - test/apps/basic.ru
71
100
  - test/apps/custom.ru
72
101
  - test/apps/deprecated.ru
@@ -99,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
128
  version: '0'
100
129
  segments:
101
130
  - 0
102
- hash: 1088974981839516179
131
+ hash: 3140236237791435311
103
132
  required_rubygems_version: !ruby/object:Gem::Requirement
104
133
  none: false
105
134
  requirements:
@@ -108,10 +137,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
137
  version: '0'
109
138
  segments:
110
139
  - 0
111
- hash: 1088974981839516179
140
+ hash: 3140236237791435311
112
141
  requirements: []
113
142
  rubyforge_project:
114
- rubygems_version: 1.8.25
143
+ rubygems_version: 1.8.23
115
144
  signing_key:
116
145
  specification_version: 3
117
146
  summary: Use Librato Metrics with your rack application
Binary file