callstacking-rails 0.1.7 → 0.1.9
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/callstacking/rails/client/trace.rb +5 -1
- data/lib/callstacking/rails/env.rb +1 -1
- data/lib/callstacking/rails/instrument.rb +2 -1
- data/lib/callstacking/rails/setup.rb +3 -0
- data/lib/callstacking/rails/trace.rb +45 -20
- data/lib/callstacking/rails/version.rb +1 -1
- metadata +6 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f67350370703c3ea1b201b22a4c2b15a5c5aaaedd4eab966a1889a0304385be
|
4
|
+
data.tar.gz: 6a52911f3d66c1304b12ea7c64431cd0d30130467e037012a03af5969148a923
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad22901a06353e8e2ec5bbb9640dca50b64b0f6076836f2adac28a72b12ab7c94d972d02d1b88a503d8e9b258ffa70c5df6566f8ecdc4e81631f34160432095
|
7
|
+
data.tar.gz: bf99ed23d5f2bed6228c7f39bc80db8201f5abb2990ef3f1b0c32774a25c072ef1b3a9baaa32406d771afcb6888b0bb15d778af4be4cee0ae279419452c31322
|
@@ -21,7 +21,11 @@ module Callstacking
|
|
21
21
|
p: params.to_h,
|
22
22
|
})
|
23
23
|
|
24
|
-
|
24
|
+
if resp.status == 200
|
25
|
+
return resp.body["trace_id"], resp.body["pulse_interval"], resp.body["max_trace_entries"]
|
26
|
+
end
|
27
|
+
|
28
|
+
nil
|
25
29
|
end
|
26
30
|
|
27
31
|
def upsert(trace_id, traces)
|
@@ -48,7 +48,8 @@ module Callstacking
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def find_or_initialize_module
|
51
|
-
|
51
|
+
name = klass&.name rescue nil
|
52
|
+
return if name.nil?
|
52
53
|
|
53
54
|
module_name = "#{klass.name.gsub('::', '')}Span"
|
54
55
|
module_index = klass.ancestors.map(&:to_s).index(module_name)
|
@@ -25,20 +25,12 @@ module Callstacking
|
|
25
25
|
read_settings
|
26
26
|
|
27
27
|
trace_id = nil
|
28
|
+
max_trace_entries = nil
|
28
29
|
|
29
30
|
ActiveSupport::Notifications.subscribe("start_processing.action_controller") do |name, start, finish, id, payload|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
trace_id, _interval = client.create(payload[:method], payload[:controller],
|
34
|
-
payload[:action], payload[:format],
|
35
|
-
::Rails.root, payload[:request]&.original_url,
|
36
|
-
request_id, payload[:headers],
|
37
|
-
payload[:params])
|
38
|
-
|
39
|
-
puts "#{settings[:url] || Callstacking::Rails::Settings::PRODUCTION_URL}/traces/#{trace_id}"
|
40
|
-
|
41
|
-
create_message(start_request_message(payload), spans.increment_order_num, @traces)
|
31
|
+
trace_id, max_trace_entries = start_request(payload[:request]&.request_id, payload[:method], payload[:controller],
|
32
|
+
payload[:action], payload[:format], ::Rails.root,
|
33
|
+
payload[:original_url], payload[:headers], payload[:params])
|
42
34
|
end
|
43
35
|
|
44
36
|
@spans.on_call_entry do |nesting_level, order_num, klass, method_name, arguments, path, line_no|
|
@@ -50,19 +42,20 @@ module Callstacking
|
|
50
42
|
end
|
51
43
|
|
52
44
|
ActiveSupport::Notifications.subscribe("process_action.action_controller") do |name, start, finish, id, payload|
|
53
|
-
|
54
|
-
|
45
|
+
complete_request(payload[:method], payload[:controller],
|
46
|
+
payload[:action], payload[:format],
|
47
|
+
trace_id, max_trace_entries)
|
55
48
|
end
|
56
49
|
end
|
57
50
|
|
58
51
|
private
|
59
52
|
|
60
|
-
def completed_request_message(
|
61
|
-
"Completed request: #{
|
53
|
+
def completed_request_message(method, controller, action, format)
|
54
|
+
"Completed request: #{method} #{controller}##{action} as #{format}"
|
62
55
|
end
|
63
56
|
|
64
|
-
def start_request_message(
|
65
|
-
"Started request: #{
|
57
|
+
def start_request_message(method, controller, action, format)
|
58
|
+
"Started request: #{method} #{controller}##{action} as #{format}"
|
66
59
|
end
|
67
60
|
|
68
61
|
def create_call_return(coupled_callee, nesting_level, order_num, klass, method_name, path, line_no, return_val, traces)
|
@@ -76,7 +69,7 @@ module Callstacking
|
|
76
69
|
line_number: line_no,
|
77
70
|
path: path,
|
78
71
|
method_name: method_name,
|
79
|
-
return_value: return_val
|
72
|
+
return_value: return_value(return_val),
|
80
73
|
coupled_callee: coupled_callee,
|
81
74
|
} } }
|
82
75
|
end
|
@@ -116,8 +109,40 @@ module Callstacking
|
|
116
109
|
traces.clear
|
117
110
|
end
|
118
111
|
end
|
112
|
+
def start_request(request_id, method, controller, action, format, path, original_url, headers, params)
|
113
|
+
request_id = request_id || SecureRandom.uuid
|
114
|
+
Callstacking::Rails::Trace.current_request_id = request_id
|
115
|
+
|
116
|
+
trace_id, _interval, max_trace_entries = client.create(method, controller, action, format,
|
117
|
+
path, original_url, request_id, headers,
|
118
|
+
params)
|
119
|
+
|
120
|
+
puts "#{settings[:url] || Callstacking::Rails::Settings::PRODUCTION_URL}/traces/#{trace_id}"
|
121
|
+
|
122
|
+
create_message(start_request_message(method, controller, action, format),
|
123
|
+
spans.increment_order_num, @traces)
|
124
|
+
|
125
|
+
return trace_id, max_trace_entries
|
126
|
+
end
|
127
|
+
|
128
|
+
def complete_request(method, controller, action, format, trace_id, max_trace_entries)
|
129
|
+
create_message(completed_request_message(method, controller, action, format),
|
130
|
+
spans.increment_order_num, @traces)
|
131
|
+
send_traces!(trace_id, @traces[0..max_trace_entries])
|
132
|
+
end
|
133
|
+
|
134
|
+
def return_value(return_val)
|
135
|
+
return_val.inspect
|
136
|
+
rescue ThreadError
|
137
|
+
# deadlock; recursive locking (ThreadError)
|
138
|
+
# Discourse overrides ActiveSupport::Inflector methods via lib/freedom_patches/inflector_backport.rb
|
139
|
+
# when return_value.inspect is called, it triggers a subsequent call
|
140
|
+
# to the instrumented inflector method, causing another call to mutex#synchronize
|
141
|
+
# from the block of the first synchronize call
|
142
|
+
|
143
|
+
return_val.to_s rescue "****" # Can't evaluate
|
144
|
+
end
|
119
145
|
|
120
|
-
private
|
121
146
|
def klass_name(klass)
|
122
147
|
(klass.is_a?(Class) ? klass.name : klass.class.name)
|
123
148
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: callstacking-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -28,22 +28,16 @@ dependencies:
|
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.0
|
34
|
-
- - "<"
|
31
|
+
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
33
|
+
version: '1.10'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- - "
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 1.0.0
|
44
|
-
- - "<"
|
38
|
+
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
version: '1.10'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: faraday-follow_redirects
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|