callstacking-rails 0.1.8 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba4839162aee95292d54812c4c9f86be937f9ff13a5765197c34a371c21940a7
4
- data.tar.gz: 56518b971c4fac333b0c2c5e645bdc92c580ff426fb62f4f72460bc2e3a95cd7
3
+ metadata.gz: 4f67350370703c3ea1b201b22a4c2b15a5c5aaaedd4eab966a1889a0304385be
4
+ data.tar.gz: 6a52911f3d66c1304b12ea7c64431cd0d30130467e037012a03af5969148a923
5
5
  SHA512:
6
- metadata.gz: 276072fc8c408926760d2cae1949ec24ce0ebcd0b4afda094a0132761db1b127dfae00900e9c50de1a0a1af697068effe1b84b922336a2de9f25a15db5753785
7
- data.tar.gz: 53ab41b4aae0ce86466561a3381746b8853697f7927398e938604e95e4e17297ebbce6958e3e7f4be965a79c9ad488a89c7f18e21482511d2350d399a0394a9a
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
- return resp.body["trace_id"], resp.body["pulse_interval"]
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
- return if klass&.name == nil
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,11 +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
- trace_id = start_request(payload[:request]&.request_id, payload[:method], payload[:controller],
31
- payload[:action], payload[:format], ::Rails.root,
32
- payload[:original_url], payload[:headers], payload[:params])
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])
33
34
  end
34
35
 
35
36
  @spans.on_call_entry do |nesting_level, order_num, klass, method_name, arguments, path, line_no|
@@ -41,7 +42,9 @@ module Callstacking
41
42
  end
42
43
 
43
44
  ActiveSupport::Notifications.subscribe("process_action.action_controller") do |name, start, finish, id, payload|
44
- complete_request(payload[:method], payload[:controller], payload[:action], payload[:format], trace_id)
45
+ complete_request(payload[:method], payload[:controller],
46
+ payload[:action], payload[:format],
47
+ trace_id, max_trace_entries)
45
48
  end
46
49
  end
47
50
 
@@ -66,11 +69,12 @@ module Callstacking
66
69
  line_number: line_no,
67
70
  path: path,
68
71
  method_name: method_name,
69
- return_value: return_val.inspect,
72
+ return_value: return_value(return_val),
70
73
  coupled_callee: coupled_callee,
71
74
  } } }
72
75
  end
73
76
  end
77
+
74
78
  def create_call_entry(nesting_level, order_num, klass, method_name, arguments, path, line_no, traces)
75
79
  lock.synchronize do
76
80
  traces << { trace_entry: { trace_entryable_type: 'TraceCallEntry',
@@ -109,22 +113,34 @@ module Callstacking
109
113
  request_id = request_id || SecureRandom.uuid
110
114
  Callstacking::Rails::Trace.current_request_id = request_id
111
115
 
112
- trace_id, _interval = client.create(method, controller, action, format,
113
- path, original_url, request_id, headers,
114
- params)
116
+ trace_id, _interval, max_trace_entries = client.create(method, controller, action, format,
117
+ path, original_url, request_id, headers,
118
+ params)
115
119
 
116
120
  puts "#{settings[:url] || Callstacking::Rails::Settings::PRODUCTION_URL}/traces/#{trace_id}"
117
121
 
118
122
  create_message(start_request_message(method, controller, action, format),
119
123
  spans.increment_order_num, @traces)
120
124
 
121
- trace_id
125
+ return trace_id, max_trace_entries
122
126
  end
123
127
 
124
- def complete_request(method, controller, action, format, trace_id)
128
+ def complete_request(method, controller, action, format, trace_id, max_trace_entries)
125
129
  create_message(completed_request_message(method, controller, action, format),
126
130
  spans.increment_order_num, @traces)
127
- send_traces!(trace_id, @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
128
144
  end
129
145
 
130
146
  def klass_name(klass)
@@ -1,5 +1,5 @@
1
1
  module Callstacking
2
2
  module Rails
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
  end
5
5
  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.8
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-17 00:00:00.000000000 Z
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: 2.0.0
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: 2.0.0
40
+ version: '1.10'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: faraday-follow_redirects
49
43
  requirement: !ruby/object:Gem::Requirement