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.
- data.tar.gz.sig +2 -0
- data/CHANGELOG.md +15 -0
- data/README.md +11 -6
- data/Rakefile +1 -1
- data/lib/librato/rack/configuration.rb +19 -0
- data/lib/librato/rack/tracker.rb +19 -6
- data/lib/librato/rack/version.rb +1 -1
- data/lib/librato/rack/worker.rb +43 -13
- data/test/integration/custom_test.rb +1 -1
- data/test/integration/deprecated_test.rb +1 -1
- data/test/integration/no_stats_test.rb +1 -1
- data/test/integration/request_test.rb +1 -1
- data/test/remote/tracker_test.rb +1 -1
- data/test/test_helper.rb +0 -14
- data/test/unit/collector/aggregator_test.rb +1 -1
- data/test/unit/collector/counter_cache_test.rb +1 -1
- data/test/unit/collector/group_test.rb +1 -1
- data/test/unit/collector_test.rb +1 -1
- data/test/unit/rack/configuration_test.rb +25 -1
- data/test/unit/rack/logger_test.rb +1 -1
- data/test/unit/rack/tracker_test.rb +1 -1
- data/test/unit/rack/worker_test.rb +13 -1
- metadata +37 -8
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
data/CHANGELOG.md
ADDED
@@ -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
|
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
|
149
|
+
Symbols can be used interchangeably with strings for metric names.
|
145
150
|
|
146
151
|
## Cross-Process Aggregation
|
147
152
|
|
data/Rakefile
CHANGED
@@ -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?
|
data/lib/librato/rack/tracker.rb
CHANGED
@@ -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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
data/lib/librato/rack/version.rb
CHANGED
data/lib/librato/rack/worker.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
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
|
data/test/remote/tracker_test.rb
CHANGED
@@ -4,7 +4,7 @@ require 'rack/test'
|
|
4
4
|
|
5
5
|
# Tests for universal tracking for all request paths
|
6
6
|
#
|
7
|
-
class TrackerRemoteTest <
|
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.
|
data/test/test_helper.rb
CHANGED
@@ -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 }
|
data/test/unit/collector_test.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Librato
|
4
4
|
class Rack
|
5
|
-
class ConfigurationTest <
|
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 WorkerTest <
|
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.
|
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
|
-
|
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
|
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
|
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:
|
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:
|
140
|
+
hash: 3140236237791435311
|
112
141
|
requirements: []
|
113
142
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.8.
|
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
|
metadata.gz.sig
ADDED
Binary file
|