bc-lightstep-ruby 2.1.0 → 2.3.0

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: 5a8c27ea5cc9408b41c8786c4dbc2c7f637fb7de271ff54f9b51bc95b2efef5a
4
- data.tar.gz: 34439ce990947965dfeb07a573e9865bf5e6dc31eb2318d04ae651be85ab8bc3
3
+ metadata.gz: '08b3dfd38b99345cdd590559e482f4d4d311a64a4538f613ae747ef8b2f19163'
4
+ data.tar.gz: 6e6d9d623759b64a507b25e99836b73219ed77ac3fa3fe296d76bda44b5d4f9c
5
5
  SHA512:
6
- metadata.gz: 0dc933fa3929ab32e05eaf12f97c30c7fd48043c8e9e8ea1bf1391138860f93e33d3574b476992e7994e61cee6eb3d0d0bb0b26cf840bee6a6ecf35c12060164
7
- data.tar.gz: 1956ad38a1f0cfa14195271eca7977cb7628a09ba832eae94a8a854a5a531e540a2775bce737005668b197c07190a3d32715974d284654623811fd86a92e4f83
6
+ metadata.gz: 6bfde25f2c8fd028f94b81bb0c96913da02db77d8b59fa2c14b550dcafebc2df83242d3f50983d4b532500c0736a952c5bd504f923aaee4f20a64c2659127b00
7
+ data.tar.gz: a8a27fb95a8f18c1f9f88bc2aaa6e548b2338d8825ce6fbc0a24515ebe37e91d153046c78ab49f8fdd4976e8152f9ecee5d877291f6b72aabb889b3b62833d0b
data/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@ Changelog for the bc-lightstep-ruby gem.
2
2
 
3
3
  ### Pending Release
4
4
 
5
+ ### 2.3.0
6
+
7
+ - Add support for Ruby 3
8
+
9
+ ### 2.2.2
10
+
11
+ - Fix issue where parent span determination can be nil if lightstep is not initialized
12
+ - Add tests for Ruby 2.7
13
+
14
+ ### 2.2.1
15
+
16
+ - Only set error tag in exceptions if not already set
17
+ - Update to Rubocop 1.0
18
+
19
+ ### 2.1.1
20
+
21
+ - Bump lightstep gem to 0.16.0
22
+ - Bump faraday gem to <= 0.17.3
23
+
5
24
  ### 2.1.0
6
25
 
7
26
  - Add support for automatically-generated mysql spans in tracing
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # bc-lightstep-ruby - LightStep distributed tracing
2
2
 
3
- [![CircleCI](https://circleci.com/gh/bigcommerce/bc-lightstep-ruby/tree/master.svg?style=svg)](https://circleci.com/gh/bigcommerce/bc-lightstep-ruby/tree/master) [![Gem Version](https://badge.fury.io/rb/bc-lightstep-ruby.svg)](https://badge.fury.io/rb/bc-lightstep-ruby) [![Inline docs](http://inch-ci.org/github/bigcommerce/bc-lightstep-ruby.svg?branch=master)](http://inch-ci.org/github/bigcommerce/bc-lightstep-ruby)
3
+ [![CircleCI](https://circleci.com/gh/bigcommerce/bc-lightstep-ruby/tree/main.svg?style=svg)](https://circleci.com/gh/bigcommerce/bc-lightstep-ruby/tree/main) [![Gem Version](https://badge.fury.io/rb/bc-lightstep-ruby.svg)](https://badge.fury.io/rb/bc-lightstep-ruby) [![Inline docs](http://inch-ci.org/github/bigcommerce/bc-lightstep-ruby.svg?branch=main)](http://inch-ci.org/github/bigcommerce/bc-lightstep-ruby)
4
4
 
5
5
  Adds [LightStep](https://lightstep.com) tracing support for Ruby. This is an extension of the
6
6
  [LightStep ruby gem](https://github.com/lightstep/lightstep-tracer-ruby) and adds extra functionality and resiliency.
@@ -15,7 +15,7 @@
15
15
  # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
16
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
17
  #
18
- $:.push File.expand_path('../lib', __FILE__)
18
+ $:.push File.expand_path('lib', __dir__)
19
19
  require 'bigcommerce/lightstep/version'
20
20
 
21
21
  Gem::Specification.new do |spec|
@@ -34,12 +34,11 @@ Gem::Specification.new do |spec|
34
34
  spec.required_ruby_version = '>= 2.6'
35
35
 
36
36
  spec.add_development_dependency 'activerecord', '> 4'
37
- spec.add_development_dependency 'bundler', '~> 1.11'
38
37
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
39
38
  spec.add_development_dependency 'rake', '>= 12.0'
40
39
  spec.add_development_dependency 'rspec', '~> 3.8'
41
40
  spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
42
- spec.add_development_dependency 'rubocop', '~> 0.79'
41
+ spec.add_development_dependency 'rubocop', '~> 1.0'
43
42
  spec.add_development_dependency 'simplecov', '~> 0.15'
44
43
  spec.add_development_dependency 'pry', '>= 0.12'
45
44
 
@@ -47,6 +46,6 @@ Gem::Specification.new do |spec|
47
46
  spec.add_development_dependency 'redis', '~> 4'
48
47
 
49
48
  spec.add_runtime_dependency 'activesupport', '>= 4'
50
- spec.add_runtime_dependency 'lightstep', '~> 0.13.0'
51
- spec.add_runtime_dependency 'faraday', ['>= 0.8', '<= 0.15.4']
49
+ spec.add_runtime_dependency 'lightstep', '~> 0.17.0'
50
+ spec.add_runtime_dependency 'faraday', ['>= 0.8', '<= 0.17.3']
52
51
  end
@@ -42,6 +42,12 @@ module Bigcommerce
42
42
  module Lightstep
43
43
  extend Configuration
44
44
 
45
+ ##
46
+ # Start the global tracer and configure LightStep
47
+ #
48
+ # @param [String] component_name
49
+ # @param [::Bigcommerce::Lightstep::TransportFactory] transport_factory
50
+ #
45
51
  def self.start(component_name: nil, transport_factory: nil)
46
52
  component_name ||= ::Bigcommerce::Lightstep.component_name
47
53
  transport_factory ||= ::Bigcommerce::Lightstep::TransportFactory.new
@@ -32,7 +32,7 @@ module Bigcommerce
32
32
  @tracer = tracer || ::Bigcommerce::Lightstep::Tracer.instance
33
33
  @span_prefix = span_prefix || ::Bigcommerce::Lightstep.active_record_span_prefix
34
34
  @span_name = span_name || 'mysql'
35
- @allow_root_spans = !allow_root_spans.nil? ? allow_root_spans : ::Bigcommerce::Lightstep.active_record_allow_root_spans
35
+ @allow_root_spans = allow_root_spans.nil? ? ::Bigcommerce::Lightstep.active_record_allow_root_spans : allow_root_spans
36
36
  end
37
37
 
38
38
  ##
@@ -68,7 +68,7 @@ module Bigcommerce
68
68
  # @return [String]
69
69
  #
70
70
  def key
71
- !@span_prefix.to_s.empty? ? "#{@span_prefix}.mysql" : 'mysql'
71
+ @span_prefix.to_s.empty? ? 'mysql' : "#{@span_prefix}.mysql"
72
72
  end
73
73
 
74
74
  ##
@@ -98,7 +98,7 @@ module Bigcommerce
98
98
  send("#{k}=".to_sym, v)
99
99
  end
100
100
 
101
- default_logger = ::Logger.new(STDOUT)
101
+ default_logger = ::Logger.new($stdout)
102
102
  default_logger.level = ::Logger::INFO
103
103
  self.logger = defined?(Rails) ? Rails.logger : default_logger
104
104
 
@@ -19,6 +19,7 @@ module Bigcommerce
19
19
  module Lightstep
20
20
  module Errors
21
21
  class Error < StandardError; end
22
+
22
23
  class InvalidAccessToken < Error; end
23
24
  end
24
25
  end
@@ -34,7 +34,7 @@ module Bigcommerce
34
34
  }.freeze
35
35
 
36
36
  PRESET_HOSTNAME = {
37
- 'hostname': 'HOSTNAME'
37
+ hostname: 'HOSTNAME'
38
38
  }.freeze
39
39
 
40
40
  ##
@@ -43,6 +43,7 @@ module Bigcommerce
43
43
  # @param [Array<Symbol>] presets Specify presets that automatically setup keys
44
44
  #
45
45
  def initialize(keys: nil, env: nil, presets: [])
46
+ super()
46
47
  @keys = keys || {}
47
48
  @presets = presets || []
48
49
  @env = env || ENV
@@ -30,7 +30,7 @@ module Bigcommerce
30
30
  OT_TAG_SAMPLED = 'ot-tracer-sampled'
31
31
 
32
32
  def initialize(app, service_name = nil)
33
- @app = app
33
+ super(app)
34
34
  @service_name = (service_name || 'external').to_s
35
35
  end
36
36
 
@@ -52,7 +52,7 @@ module Bigcommerce
52
52
  return yield unless @tracer
53
53
 
54
54
  # only take the command, not any arguments
55
- command = statement.to_s.split(' ').first
55
+ command = statement.to_s.split.first
56
56
 
57
57
  # skip excluded commands
58
58
  return yield if excluded?(command.to_s)
@@ -66,7 +66,7 @@ module Bigcommerce
66
66
  result = yield inner_span
67
67
  end
68
68
  rescue StandardError
69
- span.set_tag('error', true)
69
+ span.set_tag('error', true) unless span.tags.key?('error')
70
70
  raise
71
71
  ensure
72
72
  # finish this span if the reporter is initialized
@@ -128,7 +128,7 @@ module Bigcommerce
128
128
  def determine_parent(context:)
129
129
  # first attempt to find parent from args, if not, use carrier (headers) to lookup parent
130
130
  # 1 = FORMAT_TEXT_MAP (this constant is removed in future lightstep versions)
131
- current_parent = context.is_a?(::LightStep::SpanContext) ? context : tracer.extract(1, context || {})
131
+ current_parent = extract_parent_from_context(context)
132
132
  # if no passed in parent, use the active thread parent
133
133
  current_parent = active_span if current_parent.nil?
134
134
  current_parent
@@ -155,6 +155,22 @@ module Bigcommerce
155
155
  def mark_root_span(span)
156
156
  span.instance_variable_set(:@root_span, true)
157
157
  end
158
+
159
+ ##
160
+ # @param [Hash|::LightStep::SpanContext] context
161
+ # @return [::LightStep::SpanContext]
162
+ # @return [NilClass]
163
+ #
164
+ def extract_parent_from_context(context)
165
+ return context if context.is_a?(::LightStep::SpanContext)
166
+
167
+ tracer.extract(1, context || {})
168
+ rescue StandardError => _e
169
+ # sometimes LightStep, when `start` is not run first, will error here. This protects this until the upstream
170
+ # library can be fixed. We essentially just want to silently no-op here, as this failing simply means there's
171
+ # no context to extract.
172
+ nil
173
+ end
158
174
  end
159
175
  end
160
176
  end
@@ -34,6 +34,22 @@ module Bigcommerce
34
34
  LIGHTSTEP_PORT = 443
35
35
  REPORTS_API_ENDPOINT = '/api/v0/reports'
36
36
 
37
+ DEFAULT_OPEN_TIMEOUT = 20
38
+ DEFAULT_READ_TIMEOUT = 20
39
+ DEFAULT_KEEPALIVE_TIMEOUT = 2
40
+ DEFAULT_SSL_PORT = 443
41
+
42
+ ##
43
+ # Verbosity levels for the transport
44
+ #
45
+ class Verbosity
46
+ FATAL = 0
47
+ ERROR = 1
48
+ WARN = 2
49
+ INFO = 3
50
+ DEBUG = 4
51
+ end
52
+
37
53
  # Initialize the transport
38
54
  # @param host [String] host of the domain to the endpoind to push data
39
55
  # @param port [Numeric] port on which to connect
@@ -44,31 +60,34 @@ module Bigcommerce
44
60
  # @return [Transport]
45
61
  def initialize(
46
62
  access_token:,
47
- host: LIGHTSTEP_HOST,
48
- port: LIGHTSTEP_PORT,
49
- verbose: 0,
50
- encryption: ENCRYPTION_TLS,
63
+ host: nil,
64
+ port: nil,
65
+ verbose: nil,
66
+ encryption: nil,
51
67
  ssl_verify_peer: true,
52
- open_timeout: 2,
53
- read_timeout: 2,
68
+ ssl_port: nil,
69
+ open_timeout: nil,
70
+ read_timeout: nil,
54
71
  continue_timeout: nil,
55
- keep_alive_timeout: 2,
72
+ keep_alive_timeout: nil,
56
73
  logger: nil
57
74
  )
58
- @host = host
59
- @port = port
60
- @verbose = verbose
61
- @encryption = encryption
75
+ @host = host || LIGHTSTEP_HOST
76
+ @port = port || LIGHTSTEP_PORT
77
+ @verbose = verbose || Verbosity::FATAL
78
+ @encryption = encryption || ENCRYPTION_TLS
62
79
  @ssl_verify_peer = ssl_verify_peer
63
- @open_timeout = open_timeout.to_i
64
- @read_timeout = read_timeout.to_i
80
+ @ssl_port = (ssl_port || DEFAULT_SSL_PORT).to_i
81
+ @open_timeout = (open_timeout || DEFAULT_OPEN_TIMEOUT).to_i
82
+ @read_timeout = (read_timeout || DEFAULT_READ_TIMEOUT).to_i
65
83
  @continue_timeout = continue_timeout
66
- @keep_alive_timeout = keep_alive_timeout.to_i
84
+ @keep_alive_timeout = (keep_alive_timeout || DEFAULT_KEEPALIVE_TIMEOUT).to_i
67
85
  @access_token = access_token.to_s
68
86
 
69
- default_logger = ::Logger.new(STDOUT)
87
+ default_logger = ::Logger.new($stdout)
70
88
  default_logger.level = ::Logger::INFO
71
89
  @logger = logger || default_logger
90
+ super()
72
91
  end
73
92
 
74
93
  ##
@@ -78,12 +97,12 @@ module Bigcommerce
78
97
  # @return [NilClass]
79
98
  #
80
99
  def report(report)
81
- @logger.info report if @verbose >= 3
100
+ @logger.info report if @verbose >= Verbosity::INFO
82
101
 
83
102
  req = build_request(report)
84
103
  res = connection.request(req)
85
104
 
86
- @logger.info res.to_s if @verbose >= 3
105
+ @logger.info res.to_s if @verbose >= Verbosity::INFO
87
106
 
88
107
  nil
89
108
  end
@@ -109,7 +128,7 @@ module Bigcommerce
109
128
  def connection
110
129
  unless @connection
111
130
  @connection = ::Net::HTTP.new(@host, @port)
112
- if @port == 443
131
+ if @port == @ssl_port
113
132
  @connection.use_ssl = @encryption == ENCRYPTION_TLS
114
133
  @connection.verify_mode = ::OpenSSL::SSL::VERIFY_NONE unless @ssl_verify_peer
115
134
  end
@@ -17,6 +17,6 @@
17
17
  #
18
18
  module Bigcommerce
19
19
  module Lightstep
20
- VERSION = '2.1.0'
20
+ VERSION = '2.3.0'
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bc-lightstep-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun McCormick
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-22 00:00:00.000000000 Z
11
+ date: 2021-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.11'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.11'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler-audit
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +86,14 @@ dependencies:
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0.79'
89
+ version: '1.0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0.79'
96
+ version: '1.0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: simplecov
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +170,14 @@ dependencies:
184
170
  requirements:
185
171
  - - "~>"
186
172
  - !ruby/object:Gem::Version
187
- version: 0.13.0
173
+ version: 0.17.0
188
174
  type: :runtime
189
175
  prerelease: false
190
176
  version_requirements: !ruby/object:Gem::Requirement
191
177
  requirements:
192
178
  - - "~>"
193
179
  - !ruby/object:Gem::Version
194
- version: 0.13.0
180
+ version: 0.17.0
195
181
  - !ruby/object:Gem::Dependency
196
182
  name: faraday
197
183
  requirement: !ruby/object:Gem::Requirement
@@ -201,7 +187,7 @@ dependencies:
201
187
  version: '0.8'
202
188
  - - "<="
203
189
  - !ruby/object:Gem::Version
204
- version: 0.15.4
190
+ version: 0.17.3
205
191
  type: :runtime
206
192
  prerelease: false
207
193
  version_requirements: !ruby/object:Gem::Requirement
@@ -211,7 +197,7 @@ dependencies:
211
197
  version: '0.8'
212
198
  - - "<="
213
199
  - !ruby/object:Gem::Version
214
- version: 0.15.4
200
+ version: 0.17.3
215
201
  description: Gem for lightstep distributed tracing
216
202
  email:
217
203
  - shaun.mccormick@bigcommerce.com
@@ -245,7 +231,7 @@ homepage: https://github.com/bigcommerce/bc-lightstep-ruby
245
231
  licenses:
246
232
  - MIT
247
233
  metadata: {}
248
- post_install_message:
234
+ post_install_message:
249
235
  rdoc_options: []
250
236
  require_paths:
251
237
  - lib
@@ -260,8 +246,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
246
  - !ruby/object:Gem::Version
261
247
  version: '0'
262
248
  requirements: []
263
- rubygems_version: 3.0.6
264
- signing_key:
249
+ rubygems_version: 3.0.9
250
+ signing_key:
265
251
  specification_version: 4
266
252
  summary: Gem for lightstep distributed tracing
267
253
  test_files: []