promenade 0.12.16 → 0.12.18

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
  SHA256:
3
- metadata.gz: 87287b915d3e36771dab61be77a886365aed764ccdc59cf9284cf68151949878
4
- data.tar.gz: b3c9fb42a27dba864fb22df20f09f5b46fe464fac39c9c45be59b8d94dff9131
3
+ metadata.gz: fb19b2faa9d9feb142950fd6993cf4f5029c7350ea0b7eff7999cc6abe8a3b6f
4
+ data.tar.gz: fc43cb15080915fb2a220c84d702f72977ce54e74c2122a9b8448bc0c8672ae8
5
5
  SHA512:
6
- metadata.gz: e91a1d858ebf5edf65d110872d3b7ddea7d45aea642da783d99d2f05a7fa6813054b7e1274d6c53ab914cd369fe7c2326b5e1d1f86c98916086d4e66d3caa422
7
- data.tar.gz: e8b74e8ed11e4fdf6b2586dfb69f8c1fb31bb3f168d559ce5bd3302a8a0e49a0abf0485f67c834eb0ee5a3a7ba873091fefdbf710b87cf0277c1bb85f2038b87
6
+ metadata.gz: 17d70f9a1e536b7785e253b0384dc9e0568f13d153a9e0183d58c7e35e9760b391dad9d364638a73298e6b24b567683830a694f2d72d9b61add77a0a0992f865
7
+ data.tar.gz: 334906934de06f85123301f8e6add30f9580186ae5d41440f70913af0de9a9ea38d5355dd74984aa37595ecd83975837f297e6796d91577696e63ff9bdbbb2af
@@ -14,35 +14,24 @@ module Promenade
14
14
  def initialize(app,
15
15
  registry: ::Prometheus::Client.registry,
16
16
  label_builder: RequestLabeler)
17
- @queue_time_buckets = Promenade.configuration.queue_time_buckets
18
-
19
17
  super
20
18
  end
21
19
 
22
20
  private
23
21
 
24
- attr_reader :queue_time_buckets
25
-
26
22
  def trace(env)
27
- start_timestamp = Time.now.utc
28
- response = yield
29
- record_request_queue_time(labels: labels(env, response),
30
- env: env,
31
- request_received_time: start_timestamp)
32
- response
23
+ record_request_queue_time(env:)
24
+ yield
33
25
  end
34
26
 
35
- def record_request_queue_time(labels:, env:, request_received_time:)
36
- request_queue_duration = QueueTimeDuration.new(env:,
37
- request_received_time:)
38
- return unless request_queue_duration.valid_header_present?
39
-
40
- queue_time_histogram.observe(labels, request_queue_duration.queue_time_seconds)
27
+ def record_request_queue_time(env:)
28
+ queue_time_seconds = QueueTimeDuration.new(env:).queue_time_seconds
29
+ queue_time_seconds && queue_time_histogram.observe(label_builder.call(env), queue_time_seconds)
41
30
  end
42
31
 
43
32
  def register_metrics!
44
33
  registry.histogram(REQUEST_QUEUE_TIME_HISTOGRAM_NAME,
45
- "A histogram of request queue time", {}, queue_time_buckets)
34
+ "A histogram of request queue time", {}, Promenade.configuration.queue_time_buckets)
46
35
  end
47
36
 
48
37
  def queue_time_histogram
@@ -3,40 +3,36 @@ module Promenade
3
3
  module Rack
4
4
  class QueueTimeDuration
5
5
  REQUEST_START_HEADER = "HTTP_X_REQUEST_START".freeze
6
-
7
6
  QUEUE_START_HEADER = "HTTP_X_QUEUE_START".freeze
8
7
 
9
8
  HEADER_VALUE_MATCHER = /^(?:t=)(?<timestamp>\d{10}(?:\.\d+))$/
10
9
 
11
- def initialize(env:, request_received_time:)
12
- @env = env
13
- @request_queued_time_ms = extract_request_queued_time_from_env(env)
14
- @valid_header_present = @request_queued_time_ms.is_a?(Float)
15
- @request_received_time_ms = request_received_time.utc.to_f
16
-
10
+ def initialize(env:, request_received_time: Time.now.utc)
11
+ @request_enqueued_time = request_enqueued_time_from(env)
12
+ @request_received_time = request_received_time.utc.to_f
17
13
  freeze
18
14
  end
19
15
 
20
- def valid_header_present?
21
- @valid_header_present
22
- end
23
-
24
16
  def queue_time_seconds
25
- return unless valid_header_present?
17
+ # Enqueued time could not be parsed from headers
18
+ return unless request_enqueued_time
19
+
20
+ # A negative queue time is not valid
21
+ return if queue_time < 0
26
22
 
27
23
  queue_time.round(3)
28
24
  end
29
25
 
30
26
  private
31
27
 
32
- attr_reader :env, :request_queued_time_ms, :request_received_time_ms
28
+ attr_reader :request_enqueued_time, :request_received_time
33
29
 
34
30
  def queue_time
35
- request_received_time_ms - request_queued_time_ms
31
+ request_received_time - request_enqueued_time
36
32
  end
37
33
 
38
- def extract_request_queued_time_from_env(env_hash)
39
- header_value = env_hash[REQUEST_START_HEADER] || env_hash[QUEUE_START_HEADER]
34
+ def request_enqueued_time_from(env)
35
+ header_value = env.values_at(REQUEST_START_HEADER, QUEUE_START_HEADER).compact.first
40
36
  return if header_value.nil?
41
37
 
42
38
  header_time_match = header_value.to_s.match(HEADER_VALUE_MATCHER)
@@ -15,11 +15,14 @@ module Promenade
15
15
 
16
16
  SEPARATOR = "#".freeze
17
17
 
18
- private_constant :PARAMS_KEY, :CONTROLLER, :ACTION, :UNKNOWN, :SEPARATOR
18
+ REQUEST_METHOD = "REQUEST_METHOD".freeze
19
+
20
+ private_constant :PARAMS_KEY, :CONTROLLER, :ACTION, :UNKNOWN, :SEPARATOR, :REQUEST_METHOD
19
21
 
20
22
  def call(env)
21
23
  super.merge({
22
24
  controller_action: controller_action_from_env(env),
25
+ method: env[REQUEST_METHOD].to_s.downcase,
23
26
  })
24
27
  end
25
28
 
@@ -5,15 +5,12 @@ module Promenade
5
5
  require_relative "singleton_caller"
6
6
  extend SingletonCaller
7
7
 
8
- REQUEST_METHOD = "REQUEST_METHOD".freeze
9
-
10
8
  HTTP_HOST = "HTTP_HOST".freeze
11
9
 
12
- private_constant :REQUEST_METHOD, :HTTP_HOST
10
+ private_constant :HTTP_HOST
13
11
 
14
12
  def call(env)
15
13
  {
16
- method: env[REQUEST_METHOD].to_s.downcase,
17
14
  host: env[HTTP_HOST].to_s,
18
15
  }
19
16
  end
@@ -14,11 +14,6 @@ module Promenade
14
14
  Rails.application.config.middleware.insert 0,
15
15
  Promenade::Client::Rack::HTTPRequestQueueTimeCollector
16
16
 
17
- if defined?(::Raindrops) && (defined?(::Pitchfork) || defined?(::Unicorn))
18
- require "promenade/raindrops/middleware"
19
- Rails.application.config.middleware.use Promenade::Raindrops::Middleware
20
- end
21
-
22
17
  if defined?(::Pitchfork)
23
18
  require "promenade/pitchfork/middleware"
24
19
  Rails.application.config.middleware.use Promenade::Pitchfork::Middleware
@@ -1,3 +1,3 @@
1
1
  module Promenade
2
- VERSION = "0.12.16".freeze
2
+ VERSION = "0.12.18".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promenade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.16
4
+ version: 0.12.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ed Robinson
@@ -311,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
311
  - !ruby/object:Gem::Version
312
312
  version: '0'
313
313
  requirements: []
314
- rubygems_version: 4.0.3
314
+ rubygems_version: 4.0.6
315
315
  specification_version: 4
316
316
  summary: Promenade makes it simple to instrument Ruby apps for prometheus scraping
317
317
  test_files: []