determinator 2.4.0 → 2.4.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 +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
|