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 +4 -4
- data/lib/promenade/client/rack/http_request_queue_time_collector.rb +6 -17
- data/lib/promenade/client/rack/queue_time_duration.rb +12 -16
- data/lib/promenade/client/rack/request_controller_action_labeler.rb +4 -1
- data/lib/promenade/client/rack/request_labeler.rb +1 -4
- data/lib/promenade/railtie.rb +0 -5
- data/lib/promenade/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fb19b2faa9d9feb142950fd6993cf4f5029c7350ea0b7eff7999cc6abe8a3b6f
|
|
4
|
+
data.tar.gz: fc43cb15080915fb2a220c84d702f72977ce54e74c2122a9b8448bc0c8672ae8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
28
|
-
|
|
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(
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
@
|
|
13
|
-
@
|
|
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
|
-
|
|
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 :
|
|
28
|
+
attr_reader :request_enqueued_time, :request_received_time
|
|
33
29
|
|
|
34
30
|
def queue_time
|
|
35
|
-
|
|
31
|
+
request_received_time - request_enqueued_time
|
|
36
32
|
end
|
|
37
33
|
|
|
38
|
-
def
|
|
39
|
-
header_value =
|
|
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
|
-
|
|
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 :
|
|
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
|
data/lib/promenade/railtie.rb
CHANGED
|
@@ -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
|
data/lib/promenade/version.rb
CHANGED
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.
|
|
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.
|
|
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: []
|