yabeda-latency 0.1.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yabeda/latency/collector.rb +15 -10
- data/lib/yabeda/latency/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46a9033d5d31b43832cbe2a31fb0c9cb7ecc902ad3491b395bfdcdc5236992f1
|
4
|
+
data.tar.gz: cf505472b9c141f73b2a62f37e212e22574ece21878c9645fdf48a0fdb8ee436
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f7c53fda1382f3e19cd9f9d4680e6686759e399bec66a5135f6434593df6894a5ddd54b4a20b49bff16fa18830e30e31a4a73f3f8efc9ba4daf1529fa34e318
|
7
|
+
data.tar.gz: 92e3d71a789e64944846d9ae217fd1891c7f5c888e0ccc63c13b18d936dc9013eda3f795ae8bca61dcf1d9d4c8bf0c2215ad452cee3b77900d8850b646f73a5c
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Yabeda
|
4
4
|
module Latency
|
5
|
-
LATENCY_BUCKETS = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5
|
5
|
+
LATENCY_BUCKETS = [0.0025, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5].freeze
|
6
6
|
EMPTY_HASH = {}.freeze
|
7
7
|
REQUEST_START_HEADER = 'HTTP_X_REQUEST_START'
|
8
8
|
|
@@ -14,14 +14,17 @@ module Yabeda
|
|
14
14
|
class Collector
|
15
15
|
attr_reader :app, :registry
|
16
16
|
|
17
|
-
def initialize(app, metrics_prefix: :http_server)
|
17
|
+
def initialize(app, metrics_prefix: :http_server, debug: false)
|
18
18
|
@app = app
|
19
19
|
@metrics_prefix = metrics_prefix
|
20
|
+
@debug = debug
|
20
21
|
|
21
22
|
init_request_metrics
|
22
23
|
end
|
23
24
|
|
24
25
|
def call(env) # :nodoc:
|
26
|
+
return @app.call(env) if env['rack.warming_up']
|
27
|
+
|
25
28
|
now = Time.now
|
26
29
|
observe(env, now)
|
27
30
|
@app.call(env)
|
@@ -32,8 +35,8 @@ module Yabeda
|
|
32
35
|
def observe(env, now)
|
33
36
|
latency_seconds = calculate_latency_seconds(env, now)
|
34
37
|
measure(latency_seconds) unless latency_seconds.nil?
|
35
|
-
rescue StandardError
|
36
|
-
#
|
38
|
+
rescue StandardError => e
|
39
|
+
warn "Could not observe latency (#{e.message})" if @debug
|
37
40
|
end
|
38
41
|
|
39
42
|
# rubocop:disable Metrics/MethodLength
|
@@ -43,7 +46,7 @@ module Yabeda
|
|
43
46
|
Yabeda.configure do
|
44
47
|
group prefix do
|
45
48
|
histogram(
|
46
|
-
:
|
49
|
+
:request_latency,
|
47
50
|
comment: 'The time for the HTTP request to reach Rack application',
|
48
51
|
unit: :seconds,
|
49
52
|
per: :field,
|
@@ -56,7 +59,7 @@ module Yabeda
|
|
56
59
|
# rubocop:enable Metrics/MethodLength
|
57
60
|
|
58
61
|
def metric
|
59
|
-
@metric ||= Yabeda.__send__(@metrics_prefix).
|
62
|
+
@metric ||= Yabeda.__send__(@metrics_prefix).request_latency
|
60
63
|
end
|
61
64
|
|
62
65
|
def measure(latency_seconds)
|
@@ -67,11 +70,13 @@ module Yabeda
|
|
67
70
|
|
68
71
|
def calculate_latency_seconds(env, now)
|
69
72
|
raw_header_value = env[REQUEST_START_HEADER]
|
70
|
-
|
73
|
+
request_start_timestamp_s = extract_timestamp_from_header_value(raw_header_value)
|
74
|
+
|
75
|
+
puts "X-Request-Start: #{raw_header_value}, Now: #{now.to_f}" if @debug
|
71
76
|
|
72
|
-
return unless
|
77
|
+
return unless request_start_timestamp_s
|
73
78
|
|
74
|
-
now.to_f -
|
79
|
+
now.to_f - request_start_timestamp_s
|
75
80
|
end
|
76
81
|
|
77
82
|
def extract_timestamp_from_header_value(value)
|
@@ -86,7 +91,7 @@ module Yabeda
|
|
86
91
|
|
87
92
|
return unless str
|
88
93
|
|
89
|
-
str.
|
94
|
+
str.to_f
|
90
95
|
end
|
91
96
|
end
|
92
97
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yabeda-latency
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Ker-Seymer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yabeda
|
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
|
-
rubygems_version: 3.
|
70
|
+
rubygems_version: 3.1.2
|
71
71
|
signing_key:
|
72
72
|
specification_version: 4
|
73
73
|
summary: Collects metrics to monitor latency of HTTP requests
|