determinator 2.4.0 → 2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +7 -4
- data/lib/determinator/retrieve/in_memory_retriever.rb +1 -1
- data/lib/determinator/retrieve/null_retriever.rb +1 -0
- data/lib/determinator/tracking.rb +14 -2
- data/lib/determinator/tracking/rack/middleware.rb +18 -1
- data/lib/determinator/tracking/request.rb +4 -2
- data/lib/determinator/tracking/sidekiq/middleware.rb +5 -1
- data/lib/determinator/tracking/tracker.rb +6 -3
- data/lib/determinator/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: 02425b2fa13369e05f3f9013a7b42c24f50b4a0b21e96368dd28624b7172486d
|
4
|
+
data.tar.gz: b1076e122637aa6f0cdf02d06b0ecc61d5783cd383ae39312c514b0826f23391
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 737f32c5b7d5d1fa849d6433d90e8abaf9bef29b9774fcc174835dcd2f265d7668c6d53c9a2ac90f20cc166c95affba58cd95cc8df591d32e07321ca624e509e
|
7
|
+
data.tar.gz: 5f285ca73316e74fb13649bcef594e39f94a68579b38417a1be55f7aaa4e5e0770e8a2ed243b1e306d88f4d3b5a4f40e425af294f4c4bc3c8938af8917b9f668
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 2.4.2
|
2
|
+
|
3
|
+
Feature:
|
4
|
+
- Add endpoint information to tracking request
|
5
|
+
|
6
|
+
Bug fix:
|
7
|
+
- Make tracking request "start" attribute an actual time
|
8
|
+
|
9
|
+
# 2.4.1
|
10
|
+
|
11
|
+
Bug fix:
|
12
|
+
- Update "fake" retrievers to match behaviour introduced in `v2.3.1` when a feature is missing
|
13
|
+
|
1
14
|
# 2.4.0
|
2
15
|
|
3
16
|
Feature:
|
data/README.md
CHANGED
@@ -289,12 +289,17 @@ end
|
|
289
289
|
require 'determinator/tracking'
|
290
290
|
|
291
291
|
Determinator::Tracking.on_request do |r|
|
292
|
-
Rails.logger.info("tag=determinator_request type=#{r.type} request_time=#{r.time} error=#{r.error?} response_status=#{r.attributes[:status]} sidekiq_queue=#{r.attributes[:queue]}")
|
292
|
+
Rails.logger.info("tag=determinator_request endpoint=#{r.endpoint} type=#{r.type} request_time=#{r.time} error=#{r.error?} response_status=#{r.attributes[:status]} sidekiq_queue=#{r.attributes[:queue]}")
|
293
293
|
r.determinations.each do |d|
|
294
294
|
Rails.logger.info("tag=determination id=#{d.id} guid=#{d.guid} flag=#{d.feature_id} result=#{d.determination}")
|
295
295
|
end
|
296
296
|
end
|
297
297
|
|
298
|
+
# The library sets the "endpoint" with information about the request or sidekiq job. If you
|
299
|
+
# have environment variables that further identify the service, e.g. ENV['APP_NAME'],
|
300
|
+
# you can configure the tracker to prepend it to the endpoint:
|
301
|
+
Determinator::Tracking.endpoint_env_vars = ['APP_NAME']
|
302
|
+
|
298
303
|
# If using an APM, you can provide trace information on the request by providing a get_context hook: e.g.
|
299
304
|
|
300
305
|
Determinator::Tracking.get_context do
|
@@ -310,9 +315,7 @@ Determinator::Tracking.get_context do
|
|
310
315
|
end
|
311
316
|
```
|
312
317
|
|
313
|
-
NOTE:
|
314
|
-
|
315
|
-
If your application is spinning out worker threads, you should make the determinations in the main thread if possible; or collect them from your worker threads and track them in the main thread with
|
318
|
+
NOTE: determinations will only be recorded on the threads where Determinator::Tracking is initialised via the middleware. If offloading work away from these thread (for example, by spinning up new threads within a Rack request or a Sidekiq worker), make the determinations before, and pass them through to the new threads; or, if it's not possible, collect them manually and track them in the request's thread with
|
316
319
|
```
|
317
320
|
Determinator::Tracking.track(id, guid, feature, determination)
|
318
321
|
```
|
@@ -10,7 +10,7 @@ module Determinator
|
|
10
10
|
|
11
11
|
# @param name [string,symbol] The name of the feature to retrieve
|
12
12
|
def retrieve(name)
|
13
|
-
@features
|
13
|
+
@features.fetch(name.to_s, MissingResponse.new)
|
14
14
|
end
|
15
15
|
|
16
16
|
# @param feature [Determinator::Feature] The feature to store
|
@@ -4,6 +4,8 @@ require 'determinator/tracking/context'
|
|
4
4
|
module Determinator
|
5
5
|
module Tracking
|
6
6
|
class << self
|
7
|
+
attr_reader :endpoint_env_vars
|
8
|
+
|
7
9
|
def instance
|
8
10
|
Thread.current[:determinator_tracker]
|
9
11
|
end
|
@@ -12,9 +14,9 @@ module Determinator
|
|
12
14
|
Thread.current[:determinator_tracker] = Tracker.new(type)
|
13
15
|
end
|
14
16
|
|
15
|
-
def finish!(error:, **attributes)
|
17
|
+
def finish!(endpoint:, error:, **attributes)
|
16
18
|
return false unless started?
|
17
|
-
request = instance.finish!(error: error, **attributes)
|
19
|
+
request = instance.finish!(endpoint: endpoint, error: error, **attributes)
|
18
20
|
clear!
|
19
21
|
report(request)
|
20
22
|
request
|
@@ -57,6 +59,16 @@ module Determinator
|
|
57
59
|
@on_request = nil
|
58
60
|
@get_context = nil
|
59
61
|
end
|
62
|
+
|
63
|
+
def endpoint_env_vars=(vars)
|
64
|
+
@endpoint_env_vars = Array(vars)
|
65
|
+
end
|
66
|
+
|
67
|
+
def collect_endpoint_info(parts)
|
68
|
+
endpoint = Array(Determinator::Tracking.endpoint_env_vars).map{ |v| ENV[v] }
|
69
|
+
endpoint += Array(parts)
|
70
|
+
endpoint.reject{ |p| p.nil? || p == ''}.join(' ')
|
71
|
+
end
|
60
72
|
end
|
61
73
|
end
|
62
74
|
end
|
@@ -16,7 +16,24 @@ module Determinator
|
|
16
16
|
error = true
|
17
17
|
raise
|
18
18
|
ensure
|
19
|
-
Determinator::Tracking.finish!(
|
19
|
+
Determinator::Tracking.finish!(
|
20
|
+
status: status,
|
21
|
+
error: !!error,
|
22
|
+
endpoint: extract_endpoint(env)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def extract_endpoint(env)
|
29
|
+
parts = if params = env['action_dispatch.request.path_parameters']
|
30
|
+
[[params[:controller], params[:action]].join('#')]
|
31
|
+
else
|
32
|
+
[env['REQUEST_METHOD'], env['PATH_INFO'] || env['REQUEST_URI']]
|
33
|
+
end
|
34
|
+
Determinator::Tracking.collect_endpoint_info(parts)
|
35
|
+
rescue
|
36
|
+
env['PATH_INFO']
|
20
37
|
end
|
21
38
|
end
|
22
39
|
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
module Determinator
|
2
2
|
module Tracking
|
3
3
|
class Request
|
4
|
-
attr_reader :type, :time, :error, :attributes, :determinations, :context
|
4
|
+
attr_reader :start, :type, :endpoint, :time, :error, :attributes, :determinations, :context
|
5
5
|
|
6
|
-
def initialize(type:, time:, error:, attributes:, determinations:, context: nil)
|
6
|
+
def initialize(start:, type:, endpoint:, time:, error:, attributes:, determinations:, context: nil)
|
7
|
+
@start = start
|
7
8
|
@type = type
|
8
9
|
@time = time
|
9
10
|
@error = error
|
10
11
|
@attributes = attributes
|
11
12
|
@determinations = determinations
|
13
|
+
@endpoint = endpoint
|
12
14
|
@context = context
|
13
15
|
end
|
14
16
|
|
@@ -18,7 +18,11 @@ module Determinator
|
|
18
18
|
error = true
|
19
19
|
raise
|
20
20
|
ensure
|
21
|
-
Determinator::Tracking.finish!(
|
21
|
+
Determinator::Tracking.finish!(
|
22
|
+
endpoint: Determinator::Tracking.collect_endpoint_info(worker.class.name),
|
23
|
+
queue: queue,
|
24
|
+
error: !!error
|
25
|
+
)
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
@@ -9,7 +9,8 @@ module Determinator
|
|
9
9
|
def initialize(type)
|
10
10
|
@determinations = []
|
11
11
|
@type = type
|
12
|
-
@
|
12
|
+
@monotonic_start = now
|
13
|
+
@start = Time.now
|
13
14
|
end
|
14
15
|
|
15
16
|
def track(id, guid, feature, determination)
|
@@ -21,11 +22,13 @@ module Determinator
|
|
21
22
|
)
|
22
23
|
end
|
23
24
|
|
24
|
-
def finish!(error:, **attributes)
|
25
|
-
request_time = now - @
|
25
|
+
def finish!(endpoint:, error:, **attributes)
|
26
|
+
request_time = now - @monotonic_start
|
26
27
|
Determinator::Tracking::Request.new(
|
28
|
+
start: @start,
|
27
29
|
type: type,
|
28
30
|
time: request_time,
|
31
|
+
endpoint: endpoint,
|
29
32
|
error: error,
|
30
33
|
attributes: attributes,
|
31
34
|
determinations: determinations,
|
data/lib/determinator/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: determinator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JP Hastings-Spital
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|