pliny 0.20.1 → 0.20.2

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: 1424dc0c288ffda2c41014a5be8021194146f328
4
- data.tar.gz: 238fb1ae442b1392ebd61ffeea5c966501613c13
3
+ metadata.gz: 11d6e6303689db3c75d06599309d8044f8e24058
4
+ data.tar.gz: ad4702309f3488e7bf99654a732c1e03f4685989
5
5
  SHA512:
6
- metadata.gz: 66625177b344dbf1074856e7ef2a220df87ace5142608e83898641b6831ae8f6c57f0b9e456317483a2b971331ce349c20e092cec2cafd94170dbe0edf1a9b48
7
- data.tar.gz: 56eb5cd7378f88adc4750dea565ccb373ea4f9594cd25eac2eb9a3035c4538efdb3b1974239c864ac17049c71bce468a82c1764a68c8b7689e34167d6805ab1a
6
+ metadata.gz: f5f26f1cdb8f55a373917e750fcae6866e4dbaf091fcd98f3876cfb6f7249359bde685aa523ca1df156ec0b57b78686d7ce6de053b8116e7209d889ddddf4cb6
7
+ data.tar.gz: d6e5c047b08ff89ed6c1f6e3fe1246877886ddd2ea491a3effc24e157ee23ca011d83f9eaea67d53e94711c8a7e21ab331bc182f032f1650ae5997e79dcd431d
data/lib/pliny.rb CHANGED
@@ -16,6 +16,7 @@ require_relative "pliny/router"
16
16
  require_relative "pliny/utils"
17
17
  require_relative "pliny/middleware/cors"
18
18
  require_relative "pliny/middleware/instruments"
19
+ require_relative "pliny/middleware/metrics"
19
20
  require_relative "pliny/middleware/request_id"
20
21
  require_relative "pliny/middleware/request_store/clear"
21
22
  require_relative "pliny/middleware/request_store/seed"
@@ -0,0 +1,28 @@
1
+ module Pliny::Middleware
2
+ class Metrics
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ start = Time.now
9
+
10
+ Pliny::Metrics.count("requests")
11
+
12
+ begin
13
+ status, headers, body = @app.call(env)
14
+ rescue
15
+ status = 500
16
+ raise
17
+ ensure
18
+ elapsed = (Time.now - start).to_f
19
+ Pliny::Metrics.measure("requests.latency", value: elapsed)
20
+
21
+ status_level = "#{status/100}xx"
22
+ Pliny::Metrics.count("requests.status.#{status_level}")
23
+ end
24
+
25
+ [status, headers, body]
26
+ end
27
+ end
28
+ end
data/lib/pliny/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pliny
2
- VERSION = "0.20.1"
2
+ VERSION = "0.20.2"
3
3
  end
@@ -3,6 +3,7 @@ Routes = Rack::Builder.new do
3
3
  use Pliny::Middleware::CORS
4
4
  use Pliny::Middleware::RequestID
5
5
  use Pliny::Middleware::RequestStore::Seed, store: Pliny::RequestStore
6
+ use Pliny::Middleware::Metrics
6
7
  use Pliny::Middleware::Instruments
7
8
  use Pliny::Middleware::RescueErrors, raise: Config.raise_errors?
8
9
  use Rack::Timeout,
data/spec/metrics_spec.rb CHANGED
@@ -52,6 +52,10 @@ describe Pliny::Metrics do
52
52
  Pliny::Metrics.backends = [test_backend]
53
53
  end
54
54
 
55
+ after do
56
+ Timecop.return
57
+ end
58
+
55
59
  it "measures a block's execution time with a single key" do
56
60
  metrics.measure(:foo) { }
57
61
  expect(test_backend).to have_received(:report_measures).once.with(
@@ -0,0 +1,65 @@
1
+ require "spec_helper"
2
+
3
+ describe Pliny::Middleware::Instruments do
4
+ def app
5
+ Rack::Builder.new do
6
+ run Sinatra.new {
7
+ use Pliny::Middleware::Metrics
8
+
9
+ get "/hello" do
10
+ Timecop.travel(5)
11
+ status 200
12
+ "hi"
13
+ end
14
+
15
+ get "/error" do
16
+ status 503
17
+ "boom"
18
+ end
19
+ }
20
+ end
21
+ end
22
+
23
+ before do
24
+ Timecop.freeze(Time.now)
25
+ allow(Pliny::Metrics).to receive(:count)
26
+ allow(Pliny::Metrics).to receive(:measure)
27
+ end
28
+
29
+ after do
30
+ Timecop.return
31
+ end
32
+
33
+ it "counts total requests" do
34
+ expect(Pliny::Metrics).to receive(:count).with("requests").once
35
+
36
+ get "/hello"
37
+ end
38
+
39
+ it "counts 2xx statuses" do
40
+ expect(Pliny::Metrics).to receive(:count).with("requests.status.2xx").once
41
+
42
+ get "/hello"
43
+ end
44
+
45
+ it "counts 4xx statuses" do
46
+ expect(Pliny::Metrics).to receive(:count).with("requests.status.4xx").once
47
+
48
+ get "/not-found"
49
+ end
50
+
51
+ it "counts 5xx statuses" do
52
+ expect(Pliny::Metrics).to receive(:count).with("requests.status.5xx").once
53
+
54
+ get "/error"
55
+ end
56
+
57
+ it "measures the request latency" do
58
+ expect(Pliny::Metrics).to receive(:measure) do |key, opts|
59
+ assert_equal(key, "requests.latency")
60
+ assert(4 < opts[:value] && opts[:value] < 6)
61
+ end
62
+
63
+ get "/hello"
64
+ end
65
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pliny
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.1
4
+ version: 0.20.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandur Leach
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-12-08 00:00:00.000000000 Z
12
+ date: 2016-12-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -365,6 +365,7 @@ files:
365
365
  - lib/pliny/metrics/backends/logger.rb
366
366
  - lib/pliny/middleware/cors.rb
367
367
  - lib/pliny/middleware/instruments.rb
368
+ - lib/pliny/middleware/metrics.rb
368
369
  - lib/pliny/middleware/request_id.rb
369
370
  - lib/pliny/middleware/request_store/clear.rb
370
371
  - lib/pliny/middleware/request_store/seed.rb
@@ -454,6 +455,7 @@ files:
454
455
  - spec/metrics_spec.rb
455
456
  - spec/middleware/cors_spec.rb
456
457
  - spec/middleware/instruments_spec.rb
458
+ - spec/middleware/metrics_spec.rb
457
459
  - spec/middleware/request_id_spec.rb
458
460
  - spec/middleware/request_store/clear_spec.rb
459
461
  - spec/middleware/request_store/seed_spec.rb