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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed3689618ba8c79a4e68ef71d183808203dbcd54ebb4d98cd4f74f07fe2e9c7f
4
- data.tar.gz: a9b8a058145e28eec5dbaf4522e43f45fc2ef3d0f1d60dd06539b41c13095062
3
+ metadata.gz: 4f67350370703c3ea1b201b22a4c2b15a5c5aaaedd4eab966a1889a0304385be
4
+ data.tar.gz: 6a52911f3d66c1304b12ea7c64431cd0d30130467e037012a03af5969148a923
5
5
  SHA512:
6
- metadata.gz: 0a9ea07390a3f8bd9405d00816374441ae4f18beaf0bd11e722a798c165f14e3b30dedfbf03417ba4fcf4ab68797fdee37131a91408aa0091756da11d807577c
7
- data.tar.gz: f814601902c3ce54a5a9d4b5eeebe0c24ad5569511a61c4e0ea39bd897825584d3a4569149e7aaf429302dec03dd185bba197a1dc75221d33e0992e5919bf276
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)
@@ -3,7 +3,7 @@ require "active_support/inflector"
3
3
  module Callstacking
4
4
  module Rails
5
5
  class Env
6
- DEFAULT_ENVIRONMENT = "development"
6
+ DEFAULT_ENVIRONMENT = 'development'.freeze
7
7
 
8
8
  cattr_accessor :environment
9
9
 
@@ -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)
@@ -20,6 +20,9 @@ module Callstacking
20
20
  end
21
21
 
22
22
  def start
23
+ puts "Login to callstacking.com"
24
+ puts
25
+
23
26
  email = prompt("Enter email:")
24
27
  password = prompt("Enter password:")
25
28
 
@@ -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
- request_id = payload[:request]&.request_id || SecureRandom.uuid
31
- Callstacking::Rails::Trace.current_request_id = request_id
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
- create_message(completed_request_message(payload), spans.increment_order_num, @traces)
54
- send_traces!(trace_id, @traces)
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(payload)
61
- "Completed request: #{payload[:method]} #{payload[:controller]}##{payload[:action]} as #{payload[:format]}"
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(payload)
65
- "Started request: #{payload[:method]} #{payload[:controller]}##{payload[:action]} as #{payload[:format]}"
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.inspect,
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
@@ -1,5 +1,5 @@
1
1
  module Callstacking
2
2
  module Rails
3
- VERSION = "0.1.7"
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.7
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 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