bc-lightstep-ruby 1.6.3 → 2.2.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 +4 -4
- data/CHANGELOG.md +53 -30
- data/README.md +21 -2
- data/bc-lightstep-ruby.gemspec +15 -5
- data/lib/bigcommerce/lightstep.rb +13 -1
- data/lib/bigcommerce/lightstep/active_record/adapter.rb +117 -0
- data/lib/bigcommerce/lightstep/active_record/tracer.rb +83 -0
- data/lib/bigcommerce/lightstep/configuration.rb +24 -29
- data/lib/bigcommerce/lightstep/interceptors/env.rb +3 -0
- data/lib/bigcommerce/lightstep/middleware/faraday.rb +1 -1
- data/lib/bigcommerce/lightstep/transport.rb +40 -18
- data/lib/bigcommerce/lightstep/transport_factory.rb +4 -0
- data/lib/bigcommerce/lightstep/version.rb +1 -1
- metadata +131 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f8438758949aeee5ef6d8908fdb428a466d768b9548c50ec11d91ebfe6d4a51d
|
|
4
|
+
data.tar.gz: 1afbe2aca9eed46303b8a3a40802ead2fad62ed937638213e74f257149a3c3b2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ddfe877c18f72a78694074fa5d71ca8cf405638fcb4dc171417f5371fb8ea3a0d3048933e7ecf1bee1b1b785cd93e965485cf16df31ab224dea8b261797f0496
|
|
7
|
+
data.tar.gz: 60a2238aa127269ba871c21d0a4a6749ba3bcbc1752bc658fec9f1b055cc77e6b6bc3125eadd997a4b436788a90d0b909a959927b1a83718348cfa33ce7981c0
|
data/CHANGELOG.md
CHANGED
|
@@ -1,133 +1,156 @@
|
|
|
1
1
|
Changelog for the bc-lightstep-ruby gem.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
### Pending Release
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
### 2.2.0
|
|
6
|
+
|
|
7
|
+
- Only set error tag in exceptions if not already set
|
|
8
|
+
- Update to Rubocop 1.0
|
|
9
|
+
|
|
10
|
+
### 2.1.1
|
|
11
|
+
|
|
12
|
+
- Bump lightstep gem to 0.16.0
|
|
13
|
+
- Bump faraday gem to <= 0.17.3
|
|
14
|
+
|
|
15
|
+
### 2.1.0
|
|
16
|
+
|
|
17
|
+
- Add support for automatically-generated mysql spans in tracing
|
|
18
|
+
|
|
19
|
+
### 2.0.0
|
|
20
|
+
|
|
21
|
+
- Drop support for Ruby < 2.6
|
|
22
|
+
- Set default log level to INFO when no logger is provided
|
|
23
|
+
|
|
24
|
+
### 1.6.4
|
|
25
|
+
|
|
26
|
+
- Add `nomad.node.id` and `nomad.node.name` span tags via ENV mappings
|
|
27
|
+
|
|
28
|
+
### 1.6.3
|
|
6
29
|
|
|
7
30
|
- Add service.version to tags
|
|
8
31
|
|
|
9
|
-
|
|
32
|
+
### 1.6.2
|
|
10
33
|
|
|
11
34
|
- Add span.kind tags to boundary spans
|
|
12
35
|
|
|
13
|
-
|
|
36
|
+
### 1.6.1
|
|
14
37
|
|
|
15
38
|
- Add interception context for thread-safe interception per trace
|
|
16
39
|
- Fix issue when there are no interceptors configured
|
|
17
40
|
- Fix issue where there is more than one interceptor configured
|
|
18
41
|
- Only pass env tags if root span for service
|
|
19
42
|
|
|
20
|
-
|
|
43
|
+
### 1.6.0
|
|
21
44
|
|
|
22
45
|
- Allow for instantiation of interceptors at initialization time
|
|
23
46
|
- Pre-build tag values for ENV interceptor at initialization to reduce CPU usage per-span
|
|
24
47
|
|
|
25
|
-
|
|
48
|
+
### 1.5.2
|
|
26
49
|
|
|
27
50
|
- Add rspec helper for testing custom lightstep spans
|
|
28
51
|
|
|
29
|
-
|
|
52
|
+
### 1.5.1
|
|
30
53
|
|
|
31
54
|
- Add `hostname` preset for env var injection into spans
|
|
32
55
|
|
|
33
|
-
|
|
56
|
+
### 1.5.0
|
|
34
57
|
|
|
35
58
|
- Add interceptors that allow for global injection of tags into spans
|
|
36
59
|
|
|
37
|
-
|
|
60
|
+
### 1.4.0
|
|
38
61
|
|
|
39
62
|
- Add `frozen_string_literal: true` to all files
|
|
40
63
|
- Deprecate ruby 2.2 support
|
|
41
64
|
|
|
42
|
-
|
|
65
|
+
### 1.3.3
|
|
43
66
|
|
|
44
67
|
- Updates gemspec to allow for newer Faraday versions
|
|
45
68
|
|
|
46
|
-
|
|
69
|
+
### 1.3.2
|
|
47
70
|
|
|
48
71
|
- Fix compatibility issues with resque-scheduler and redis instrumentation
|
|
49
72
|
|
|
50
|
-
|
|
73
|
+
### 1.3.1
|
|
51
74
|
|
|
52
75
|
- Add various options to suppress redis trace spam
|
|
53
76
|
- Fix issue with pipeline commands in redis instrumentation
|
|
54
77
|
|
|
55
|
-
|
|
78
|
+
### 1.3.0
|
|
56
79
|
|
|
57
80
|
- Adds automatic Redis instrumentation support
|
|
58
81
|
|
|
59
|
-
|
|
82
|
+
### 1.2.2
|
|
60
83
|
|
|
61
84
|
- Allow for usage of blank access tokens, which can be used with disabled token checking + project-specific satellites
|
|
62
85
|
|
|
63
|
-
|
|
86
|
+
### 1.2.1
|
|
64
87
|
|
|
65
88
|
- Fix issue where in Rails controllers before the action occurs that an uninitialized reporter would cause a
|
|
66
89
|
NoMethodError to occur (this most commonly occurs in test suites)
|
|
67
90
|
|
|
68
|
-
|
|
91
|
+
### 1.2.0
|
|
69
92
|
|
|
70
93
|
- Bump lightstep gem to 0.13
|
|
71
94
|
- Add LIGHTSTEP_MAX_BUFFERED_SPANS config ENV + setting for maximum number of spans to buffer
|
|
72
95
|
- Add LIGHTSTEP_MAX_LOG_RECORDS config ENV + setting for maximum number of log records that can be on a span
|
|
73
96
|
- Add LIGHTSTEP_MAX_REPORTING_INTERVAL_SECONDS config ENV + setting for max reporting flush interval to collector
|
|
74
97
|
|
|
75
|
-
|
|
98
|
+
### 1.1.8
|
|
76
99
|
|
|
77
100
|
- Handle issue that occurs if lightstep is disabled but the start_span method is still called
|
|
78
101
|
- Remove FORMAT_TEXT_MAP reference as this is no longer present in later lightstep gem versions
|
|
79
102
|
|
|
80
|
-
|
|
103
|
+
### 1.1.7
|
|
81
104
|
|
|
82
105
|
- Better handling of exceptions and tagged errors
|
|
83
106
|
- Lower timeouts for collector connections to reduce impact if collector is down/unreachable
|
|
84
107
|
- Always ensure spans are reported even in the case of exceptional failure
|
|
85
108
|
|
|
86
|
-
|
|
109
|
+
### 1.1.6
|
|
87
110
|
|
|
88
111
|
- First OSS release
|
|
89
112
|
|
|
90
|
-
|
|
113
|
+
### 1.1.5
|
|
91
114
|
|
|
92
115
|
- Pin lightstep gem to 0.11.x due to backwards-incompatible change in 0.12.x
|
|
93
116
|
|
|
94
|
-
|
|
117
|
+
### 1.1.4
|
|
95
118
|
|
|
96
119
|
- Add enabled setting to explicitly disable lightstep at runtime. Can be toggled with LIGHTSTEP_ENABLED ENV var.
|
|
97
120
|
|
|
98
|
-
|
|
121
|
+
### 1.1.3
|
|
99
122
|
|
|
100
123
|
- Have http1 errors only flag as error if they are 500+ status codes
|
|
101
124
|
|
|
102
|
-
|
|
125
|
+
### 1.1.2
|
|
103
126
|
|
|
104
127
|
- Prevent span from starting if the reporter is not yet configured, as LightStep gem does not guard this case
|
|
105
128
|
|
|
106
|
-
|
|
129
|
+
### 1.1.1
|
|
107
130
|
|
|
108
131
|
- Fix issues where Rack/Rails is prepending HTTP_ to headers, ensure right key format into carrier
|
|
109
132
|
|
|
110
|
-
|
|
133
|
+
### 1.1.0
|
|
111
134
|
|
|
112
135
|
- Add Faraday middleware for automatic tracing of outbound service calls
|
|
113
136
|
|
|
114
|
-
|
|
137
|
+
### 1.0.5
|
|
115
138
|
|
|
116
139
|
- Do not send GET params in rails controller instrumentation for http.url tag
|
|
117
140
|
|
|
118
|
-
|
|
141
|
+
### 1.0.4
|
|
119
142
|
|
|
120
143
|
- Rename span tags to fit the BigCommerce standardized tags
|
|
121
144
|
- Handle 500 errors in H1 requests properly
|
|
122
145
|
|
|
123
|
-
|
|
146
|
+
### 1.0.3
|
|
124
147
|
|
|
125
148
|
- Fix bug where active parent span was persisting between requests in rails controller requests
|
|
126
149
|
|
|
127
|
-
|
|
150
|
+
### 1.0.2
|
|
128
151
|
|
|
129
152
|
- Add Bigcommerce::Lightstep::Rails::ControllerInstrumentation module for tracing H1 controllers in Rails
|
|
130
153
|
|
|
131
|
-
|
|
154
|
+
### 1.0.0
|
|
132
155
|
|
|
133
156
|
- Initial public release
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# bc-lightstep-ruby - LightStep distributed tracing
|
|
2
2
|
|
|
3
|
-
[](https://circleci.com/gh/bigcommerce/bc-lightstep-ruby/tree/main) [](https://badge.fury.io/rb/bc-lightstep-ruby) [](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.
|
|
@@ -45,10 +45,18 @@ bc-lightstep-ruby can be automatically configured from these ENV vars, if you'd
|
|
|
45
45
|
| LIGHTSTEP_ACCESS_TOKEN | The access token to use to connect to the collector. Optional. | '' |
|
|
46
46
|
| LIGHTSTEP_HOST | Host of the collector. | `lightstep-collector.linkerd` |
|
|
47
47
|
| LIGHTSTEP_PORT | Port of the collector. | `4140` |
|
|
48
|
+
| LIGHTSTEP_HTTP1_ERROR_CODE | The HTTP error code to report in spans for internal errors | 500 |
|
|
49
|
+
| LIGHTSTEP_HTTP1_ERROR_CODE_MINIMUM | The minimum HTTP error code value to be considered an error for span tag purposes. | 500 |
|
|
50
|
+
| LIGHTSTEP_CONTROLLER_PREFIX | The prefix for Rails controllers to use | `controllers.` |
|
|
48
51
|
| LIGHTSTEP_SSL_VERIFY_PEER | If using 443 as the port, toggle SSL verification. | true |
|
|
49
52
|
| LIGHTSTEP_MAX_BUFFERED_SPANS | The maximum number of spans to buffer before dropping. | `1_000` |
|
|
50
53
|
| LIGHTSTEP_MAX_LOG_RECORDS | Maximum number of log records on a span to accept. | `1_000` |
|
|
51
54
|
| LIGHTSTEP_MAX_REPORTING_INTERVAL_SECONDS | The maximum number of seconds to wait before flushing the report to the collector. | 3.0 |
|
|
55
|
+
| LIGHTSTEP_ACTIVE_RECORD_ENABLED | Whether or not to add ActiveRecord mysql spans. Only works with mysql2 gem. | 1 |
|
|
56
|
+
| LIGHTSTEP_ACTIVE_RECORD_ALLOW_AS_ROOT_SPAN | Allow ActiveRecord mysql spans to be the root span? | 0 |
|
|
57
|
+
| LIGHTSTEP_ACTIVE_RECORD_SPAN_PREFIX | What to prefix the ActiveRecord mysql span with | '' |
|
|
58
|
+
| LIGHTSTEP_REDIS_ALLOW_AS_ROOT_SPAN | Allow redis to be the root span? | 0 |
|
|
59
|
+
| LIGHTSTEP_REDIS_EXCLUDED_COMMANDS | Redis commands to exclude from spans. Comma-separated list. | ping |
|
|
52
60
|
| LIGHTSTEP_VERBOSITY | The verbosity level of lightstep logs. | 1 |
|
|
53
61
|
|
|
54
62
|
Most systems will only need to customize the component name.
|
|
@@ -77,7 +85,7 @@ or systems outside of your instrumenting control.
|
|
|
77
85
|
|
|
78
86
|
### Redis
|
|
79
87
|
|
|
80
|
-
This gem will automatically detect and
|
|
88
|
+
This gem will automatically detect and instrument Redis calls when they are made using the `Redis::Client` class.
|
|
81
89
|
It will set as tags on the span the host, port, db instance, and the command (but no arguments).
|
|
82
90
|
|
|
83
91
|
Note that this will not record redis timings if they are a root span. This is to prevent trace spamming. You can
|
|
@@ -86,6 +94,17 @@ re-enable this by setting the `redis_allow_root_spans` configuration option to `
|
|
|
86
94
|
It also excludes `ping` commands, and you can provide a custom list by setting the `redis_excluded_commands`
|
|
87
95
|
configuration option to an array of commands to exclude.
|
|
88
96
|
|
|
97
|
+
### ActiveRecord and MySQL
|
|
98
|
+
|
|
99
|
+
This gem will automatically instrument MySQL queries with spans when made with the `mysql2` gem and ActiveRecord.
|
|
100
|
+
It will set as tags on the span the host, database type, database name, and a sanitized version of the SQL query made.
|
|
101
|
+
The query will have no values - replaced with `?` - to ensure secure logging and no leaking of PII data.
|
|
102
|
+
|
|
103
|
+
Note that this will not record mysql timings if they are a root span. This is to prevent trace spamming. You can
|
|
104
|
+
configure this gem to allow it via ENV, but it is not recommended.
|
|
105
|
+
|
|
106
|
+
By default, it will also exclude `COMMIT`, `SCHEMA`, and `SHOW FULL FIELDS` queries.
|
|
107
|
+
|
|
89
108
|
## RSpec
|
|
90
109
|
|
|
91
110
|
This library comes with a built-in matcher for testing span blocks. In your rspec config:
|
data/bc-lightstep-ruby.gemspec
CHANGED
|
@@ -31,12 +31,22 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
|
|
32
32
|
spec.files = Dir['README.md', 'CHANGELOG.md', 'CODE_OF_CONDUCT.md', 'lib/**/*', 'bc-lightstep-ruby.gemspec']
|
|
33
33
|
spec.require_paths = ['lib']
|
|
34
|
+
spec.required_ruby_version = '>= 2.6'
|
|
34
35
|
|
|
36
|
+
spec.add_development_dependency 'activerecord', '> 4'
|
|
35
37
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
|
36
|
-
spec.add_development_dependency '
|
|
37
|
-
spec.add_development_dependency '
|
|
38
|
-
spec.add_development_dependency '
|
|
38
|
+
spec.add_development_dependency 'bundler-audit', '~> 0.6'
|
|
39
|
+
spec.add_development_dependency 'rake', '>= 12.0'
|
|
40
|
+
spec.add_development_dependency 'rspec', '~> 3.8'
|
|
41
|
+
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
|
|
42
|
+
spec.add_development_dependency 'rubocop', '~> 1.0'
|
|
43
|
+
spec.add_development_dependency 'simplecov', '~> 0.15'
|
|
44
|
+
spec.add_development_dependency 'pry', '>= 0.12'
|
|
39
45
|
|
|
40
|
-
spec.
|
|
41
|
-
spec.
|
|
46
|
+
spec.add_development_dependency 'null-logger', '~> 0.1'
|
|
47
|
+
spec.add_development_dependency 'redis', '~> 4'
|
|
48
|
+
|
|
49
|
+
spec.add_runtime_dependency 'activesupport', '>= 4'
|
|
50
|
+
spec.add_runtime_dependency 'lightstep', '~> 0.16.0'
|
|
51
|
+
spec.add_runtime_dependency 'faraday', ['>= 0.8', '<= 0.17.3']
|
|
42
52
|
end
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#
|
|
18
18
|
require 'lightstep'
|
|
19
19
|
require 'faraday'
|
|
20
|
+
require 'active_support/concern'
|
|
20
21
|
require_relative 'lightstep/version'
|
|
21
22
|
require_relative 'lightstep/errors'
|
|
22
23
|
require_relative 'lightstep/interceptors/registry'
|
|
@@ -27,6 +28,8 @@ require_relative 'lightstep/transport_factory'
|
|
|
27
28
|
require_relative 'lightstep/transport'
|
|
28
29
|
require_relative 'lightstep/rails_controller_instrumentation'
|
|
29
30
|
require_relative 'lightstep/middleware/faraday'
|
|
31
|
+
require_relative 'lightstep/active_record/tracer'
|
|
32
|
+
require_relative 'lightstep/active_record/adapter'
|
|
30
33
|
require_relative 'lightstep/redis/tracer'
|
|
31
34
|
|
|
32
35
|
##
|
|
@@ -39,6 +42,12 @@ module Bigcommerce
|
|
|
39
42
|
module Lightstep
|
|
40
43
|
extend Configuration
|
|
41
44
|
|
|
45
|
+
##
|
|
46
|
+
# Start the global tracer and configure LightStep
|
|
47
|
+
#
|
|
48
|
+
# @param [String] component_name
|
|
49
|
+
# @param [::Bigcommerce::Lightstep::TransportFactory] transport_factory
|
|
50
|
+
#
|
|
42
51
|
def self.start(component_name: nil, transport_factory: nil)
|
|
43
52
|
component_name ||= ::Bigcommerce::Lightstep.component_name
|
|
44
53
|
transport_factory ||= ::Bigcommerce::Lightstep::TransportFactory.new
|
|
@@ -54,7 +63,10 @@ module Bigcommerce
|
|
|
54
63
|
::LightStep.instance.max_log_records = ::Bigcommerce::Lightstep.max_log_records
|
|
55
64
|
::LightStep.instance.report_period_seconds = ::Bigcommerce::Lightstep.max_reporting_interval_seconds
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
return unless ::Bigcommerce::Lightstep.enabled
|
|
67
|
+
|
|
68
|
+
::Bigcommerce::Lightstep::Redis::Wrapper.patch
|
|
69
|
+
::Bigcommerce::Lightstep::ActiveRecord::Adapter.patch
|
|
58
70
|
end
|
|
59
71
|
end
|
|
60
72
|
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2020-present, BigCommerce Pty. Ltd. All rights reserved
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
6
|
+
# documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
7
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
8
|
+
# persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
11
|
+
# Software.
|
|
12
|
+
#
|
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
14
|
+
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
16
|
+
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
17
|
+
#
|
|
18
|
+
module Bigcommerce
|
|
19
|
+
module Lightstep
|
|
20
|
+
module ActiveRecord
|
|
21
|
+
##
|
|
22
|
+
# Patches mysql and ActiveRecord to allow for mysql span tracing
|
|
23
|
+
#
|
|
24
|
+
module Adapter
|
|
25
|
+
extend ::ActiveSupport::Concern
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Patch ActiveRecord to enable mysql span traces
|
|
29
|
+
#
|
|
30
|
+
def self.patch
|
|
31
|
+
return unless enabled?
|
|
32
|
+
|
|
33
|
+
# rubocop:disable Lint/SendWithMixinArgument
|
|
34
|
+
::ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:include, ::Bigcommerce::Lightstep::ActiveRecord::Adapter)
|
|
35
|
+
# rubocop:enable Lint/SendWithMixinArgument
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Note: we only support patching mysql2 gem at this point
|
|
40
|
+
#
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
#
|
|
43
|
+
def self.enabled?
|
|
44
|
+
defined?(::ActiveRecord) && ::Bigcommerce::Lightstep.active_record && ::ActiveRecord::Base.connection_config[:adapter].to_s.downcase == 'mysql2'
|
|
45
|
+
rescue StandardError => e
|
|
46
|
+
::Bigcommerce::Lightstep.logger&.warn "Failed to determine ActiveRecord database adapter in bc-lightstep-ruby initializer: #{e.message}"
|
|
47
|
+
false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
##
|
|
51
|
+
# @param [String] sql The raw sql query
|
|
52
|
+
# @param [String] name The type of sql query
|
|
53
|
+
#
|
|
54
|
+
def execute_with_inst(sql, name = 'SQL')
|
|
55
|
+
# bail out early if not enabled. This should not get here, but is provided as a failsafe.
|
|
56
|
+
return execute_without_inst(sql, name) unless ::Bigcommerce::Lightstep.active_record
|
|
57
|
+
|
|
58
|
+
sanitized_sql = lightstep_sanitize_sql(sql)
|
|
59
|
+
name = name.to_s.strip.empty? ? 'QUERY' : name
|
|
60
|
+
|
|
61
|
+
# we dont need to track all sql
|
|
62
|
+
return execute_without_inst(sql, name) if lightstep_skip_tracing?(name, sanitized_sql)
|
|
63
|
+
|
|
64
|
+
lightstep_tracer.db_trace(
|
|
65
|
+
statement: sanitized_sql,
|
|
66
|
+
host: @config[:host],
|
|
67
|
+
adapter: @config[:adapter],
|
|
68
|
+
database: @config[:database]
|
|
69
|
+
) do
|
|
70
|
+
execute_without_inst(sql, name)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# Sanitize the sql for safe logging
|
|
76
|
+
#
|
|
77
|
+
# @param [String]
|
|
78
|
+
# @return [String]
|
|
79
|
+
#
|
|
80
|
+
def lightstep_sanitize_sql(sql)
|
|
81
|
+
sql.to_s.gsub(lightstep_sanitization_regexp, '?').tr("\n", ' ').to_s
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# @return [Regexp]
|
|
86
|
+
#
|
|
87
|
+
def lightstep_sanitization_regexp
|
|
88
|
+
@lightstep_sanitization_regexp ||= ::Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', ::Regexp::IGNORECASE)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# Filter out sql queries from tracing we don't care about
|
|
93
|
+
#
|
|
94
|
+
# @param [String] name
|
|
95
|
+
# @param [String] sql
|
|
96
|
+
# @return [Boolean]
|
|
97
|
+
def lightstep_skip_tracing?(name, sql)
|
|
98
|
+
name.empty? || sql.empty? || sql.include?('COMMIT') || sql.include?('SCHEMA') || sql.include?('SHOW FULL FIELDS')
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
##
|
|
102
|
+
# @return [::Bigcommerce::Lightstep::ActiveRecord::Tracer]
|
|
103
|
+
#
|
|
104
|
+
def lightstep_tracer
|
|
105
|
+
@lightstep_tracer ||= ::Bigcommerce::Lightstep::ActiveRecord::Tracer.new
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
included do
|
|
109
|
+
if defined?(::ActiveRecord) && ::ActiveRecord::VERSION::MAJOR > 3
|
|
110
|
+
alias_method :execute_without_inst, :execute
|
|
111
|
+
alias_method :execute, :execute_with_inst
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2020-present, BigCommerce Pty. Ltd. All rights reserved
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
6
|
+
# documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
7
|
+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
8
|
+
# persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
#
|
|
10
|
+
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
11
|
+
# Software.
|
|
12
|
+
#
|
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
14
|
+
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
16
|
+
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
17
|
+
#
|
|
18
|
+
module Bigcommerce
|
|
19
|
+
module Lightstep
|
|
20
|
+
module ActiveRecord
|
|
21
|
+
##
|
|
22
|
+
# Tracer adapter for ActiveRecord
|
|
23
|
+
#
|
|
24
|
+
class Tracer
|
|
25
|
+
##
|
|
26
|
+
# @param [Bigcommerce::Lightstep::Tracer] tracer
|
|
27
|
+
# @param [String] span_prefix
|
|
28
|
+
# @param [Boolean] allow_root_spans
|
|
29
|
+
# @param [String] span_name
|
|
30
|
+
#
|
|
31
|
+
def initialize(tracer: nil, span_prefix: nil, span_name: nil, allow_root_spans: nil)
|
|
32
|
+
@tracer = tracer || ::Bigcommerce::Lightstep::Tracer.instance
|
|
33
|
+
@span_prefix = span_prefix || ::Bigcommerce::Lightstep.active_record_span_prefix
|
|
34
|
+
@span_name = span_name || 'mysql'
|
|
35
|
+
@allow_root_spans = !allow_root_spans.nil? ? allow_root_spans : ::Bigcommerce::Lightstep.active_record_allow_root_spans
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Trace a DB call
|
|
40
|
+
#
|
|
41
|
+
# @param [String] statement
|
|
42
|
+
# @param [String] host
|
|
43
|
+
# @param [String] adapter
|
|
44
|
+
# @param [String] database
|
|
45
|
+
#
|
|
46
|
+
def db_trace(statement:, host:, adapter:, database:)
|
|
47
|
+
return yield unless @tracer
|
|
48
|
+
|
|
49
|
+
# skip if not allowing root spans and there is no active span
|
|
50
|
+
return yield if !@allow_root_spans && !active_span?
|
|
51
|
+
|
|
52
|
+
@tracer.start_span(key) do |span|
|
|
53
|
+
span.set_tag('db.host', host.to_s)
|
|
54
|
+
span.set_tag('db.type', adapter.to_s)
|
|
55
|
+
span.set_tag('db.name', database.to_s)
|
|
56
|
+
span.set_tag('db.statement', statement.to_s)
|
|
57
|
+
span.set_tag('span.kind', 'client')
|
|
58
|
+
begin
|
|
59
|
+
yield
|
|
60
|
+
rescue StandardError => _e
|
|
61
|
+
span.set_tag('error', true)
|
|
62
|
+
raise # re-raise the error
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
##
|
|
68
|
+
# @return [String]
|
|
69
|
+
#
|
|
70
|
+
def key
|
|
71
|
+
!@span_prefix.to_s.empty? ? "#{@span_prefix}.mysql" : 'mysql'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# @return [Boolean]
|
|
76
|
+
#
|
|
77
|
+
def active_span?
|
|
78
|
+
@tracer.respond_to?(:active_span) && @tracer.active_span
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -23,27 +23,30 @@ module Bigcommerce
|
|
|
23
23
|
#
|
|
24
24
|
module Configuration
|
|
25
25
|
VALID_CONFIG_KEYS = {
|
|
26
|
-
component_name: '',
|
|
27
|
-
controller_trace_prefix: 'controllers.',
|
|
28
|
-
access_token: '',
|
|
29
|
-
host: 'lightstep-collector.linkerd',
|
|
26
|
+
component_name: ENV.fetch('LIGHTSTEP_COMPONENT_NAME', ''),
|
|
27
|
+
controller_trace_prefix: ENV.fetch('LIGHTSTEP_CONTROLLER_PREFIX', 'controllers.'),
|
|
28
|
+
access_token: ENV.fetch('LIGHTSTEP_ACCESS_TOKEN', ''),
|
|
29
|
+
host: ENV.fetch('LIGHTSTEP_HOST', 'lightstep-collector.linkerd'),
|
|
30
30
|
interceptors: nil,
|
|
31
|
-
port:
|
|
32
|
-
ssl_verify_peer:
|
|
33
|
-
open_timeout:
|
|
34
|
-
read_timeout:
|
|
31
|
+
port: ENV.fetch('LIGHTSTEP_PORT', 4_140).to_i,
|
|
32
|
+
ssl_verify_peer: ENV.fetch('LIGHTSTEP_SSL_VERIFY_PEER', 1).to_i.positive?,
|
|
33
|
+
open_timeout: ENV.fetch('LIGHTSTEP_OPEN_TIMEOUT', 2).to_i,
|
|
34
|
+
read_timeout: ENV.fetch('LIGHTSTEP_READ_TIMEOUT', 2).to_i,
|
|
35
35
|
continue_timeout: nil,
|
|
36
|
-
keep_alive_timeout: 2,
|
|
36
|
+
keep_alive_timeout: ENV.fetch('LIGHTSTEP_KEEP_ALIVE_TIMEOUT', 2).to_i,
|
|
37
37
|
logger: nil,
|
|
38
|
-
verbosity: 1,
|
|
39
|
-
http1_error_code: 500,
|
|
40
|
-
http1_error_code_minimum: 500,
|
|
41
|
-
max_buffered_spans: 1_000,
|
|
42
|
-
max_log_records: 1_000,
|
|
43
|
-
max_reporting_interval_seconds: 3.0,
|
|
44
|
-
redis_excluded_commands:
|
|
45
|
-
redis_allow_root_spans:
|
|
46
|
-
|
|
38
|
+
verbosity: ENV.fetch('LIGHTSTEP_VERBOSITY', 1).to_i,
|
|
39
|
+
http1_error_code: ENV.fetch('LIGHTSTEP_HTTP1_ERROR_CODE', 500).to_i,
|
|
40
|
+
http1_error_code_minimum: ENV.fetch('LIGHTSTEP_HTTP1_ERROR_CODE_MINIMUM', 500).to_i,
|
|
41
|
+
max_buffered_spans: ENV.fetch('LIGHTSTEP_MAX_BUFFERED_SPANS', 1_000).to_i,
|
|
42
|
+
max_log_records: ENV.fetch('LIGHTSTEP_MAX_LOG_RECORDS', 1_000).to_i,
|
|
43
|
+
max_reporting_interval_seconds: ENV.fetch('LIGHTSTEP_MAX_REPORTING_INTERVAL_SECONDS', 3.0).to_f,
|
|
44
|
+
redis_excluded_commands: ENV.fetch('LIGHTSTEP_REDIS_EXCLUDED_COMMANDS', 'ping').to_s.split(','),
|
|
45
|
+
redis_allow_root_spans: ENV.fetch('LIGHTSTEP_REDIS_ALLOW_AS_ROOT_SPAN', 0).to_i.positive?,
|
|
46
|
+
active_record: ENV.fetch('LIGHTSTEP_ACTIVE_RECORD_ENABLED', 1).to_i.positive?,
|
|
47
|
+
active_record_allow_root_spans: ENV.fetch('LIGHTSTEP_ACTIVE_RECORD_ALLOW_AS_ROOT_SPAN', 0).to_i.positive?,
|
|
48
|
+
active_record_span_prefix: ENV.fetch('LIGHTSTEP_ACTIVE_RECORD_SPAN_PREFIX', ''),
|
|
49
|
+
enabled: ENV.fetch('LIGHTSTEP_ENABLED', 1).to_i.positive?
|
|
47
50
|
}.freeze
|
|
48
51
|
|
|
49
52
|
attr_accessor *VALID_CONFIG_KEYS.keys
|
|
@@ -94,19 +97,11 @@ module Bigcommerce
|
|
|
94
97
|
VALID_CONFIG_KEYS.each do |k, v|
|
|
95
98
|
send("#{k}=".to_sym, v)
|
|
96
99
|
end
|
|
97
|
-
self.component_name = ENV.fetch('LIGHTSTEP_COMPONENT_NAME', '')
|
|
98
|
-
self.access_token = ENV.fetch('LIGHTSTEP_ACCESS_TOKEN', '')
|
|
99
|
-
self.host = ENV.fetch('LIGHTSTEP_HOST', 'lightstep-collector.linkerd')
|
|
100
|
-
self.port = ENV.fetch('LIGHTSTEP_PORT', 4140).to_i
|
|
101
|
-
self.ssl_verify_peer = ENV.fetch('LIGHTSTEP_SSL_VERIFY_PEER', true)
|
|
102
100
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
self.
|
|
101
|
+
default_logger = ::Logger.new($stdout)
|
|
102
|
+
default_logger.level = ::Logger::INFO
|
|
103
|
+
self.logger = defined?(Rails) ? Rails.logger : default_logger
|
|
106
104
|
|
|
107
|
-
self.verbosity = ENV.fetch('LIGHTSTEP_VERBOSITY', 1).to_i
|
|
108
|
-
self.logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
|
|
109
|
-
self.enabled = ENV.fetch('LIGHTSTEP_ENABLED', 1).to_i.positive?
|
|
110
105
|
self.interceptors = ::Bigcommerce::Lightstep::Interceptors::Registry.new
|
|
111
106
|
end
|
|
112
107
|
|
|
@@ -26,6 +26,8 @@ module Bigcommerce
|
|
|
26
26
|
'container.cpu': 'NOMAD_CPU_LIMIT',
|
|
27
27
|
'container.mem': 'NOMAD_MEMORY_LIMIT',
|
|
28
28
|
'git.sha': 'NOMAD_META_SHA',
|
|
29
|
+
'nomad.node.id': 'NOMAD_NODE_ID',
|
|
30
|
+
'nomad.node.name': 'NOMAD_NODE_NAME',
|
|
29
31
|
'nomad.task_name': 'NOMAD_TASK_NAME',
|
|
30
32
|
'provider.region': 'NOMAD_REGION',
|
|
31
33
|
'provider.datacenter': 'NOMAD_DC'
|
|
@@ -41,6 +43,7 @@ module Bigcommerce
|
|
|
41
43
|
# @param [Array<Symbol>] presets Specify presets that automatically setup keys
|
|
42
44
|
#
|
|
43
45
|
def initialize(keys: nil, env: nil, presets: [])
|
|
46
|
+
super()
|
|
44
47
|
@keys = keys || {}
|
|
45
48
|
@presets = presets || []
|
|
46
49
|
@env = env || ENV
|
|
@@ -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,28 +60,34 @@ module Bigcommerce
|
|
|
44
60
|
# @return [Transport]
|
|
45
61
|
def initialize(
|
|
46
62
|
access_token:,
|
|
47
|
-
host:
|
|
48
|
-
port:
|
|
49
|
-
verbose:
|
|
50
|
-
encryption:
|
|
63
|
+
host: nil,
|
|
64
|
+
port: nil,
|
|
65
|
+
verbose: nil,
|
|
66
|
+
encryption: nil,
|
|
51
67
|
ssl_verify_peer: true,
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
ssl_port: nil,
|
|
69
|
+
open_timeout: nil,
|
|
70
|
+
read_timeout: nil,
|
|
54
71
|
continue_timeout: nil,
|
|
55
|
-
keep_alive_timeout:
|
|
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
|
-
@
|
|
64
|
-
@
|
|
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
|
+
|
|
87
|
+
default_logger = ::Logger.new($stdout)
|
|
88
|
+
default_logger.level = ::Logger::INFO
|
|
89
|
+
@logger = logger || default_logger
|
|
90
|
+
super()
|
|
69
91
|
end
|
|
70
92
|
|
|
71
93
|
##
|
|
@@ -75,12 +97,12 @@ module Bigcommerce
|
|
|
75
97
|
# @return [NilClass]
|
|
76
98
|
#
|
|
77
99
|
def report(report)
|
|
78
|
-
@logger.info report if @verbose >=
|
|
100
|
+
@logger.info report if @verbose >= Verbosity::INFO
|
|
79
101
|
|
|
80
102
|
req = build_request(report)
|
|
81
103
|
res = connection.request(req)
|
|
82
104
|
|
|
83
|
-
@logger.info res.to_s if @verbose >=
|
|
105
|
+
@logger.info res.to_s if @verbose >= Verbosity::INFO
|
|
84
106
|
|
|
85
107
|
nil
|
|
86
108
|
end
|
|
@@ -106,7 +128,7 @@ module Bigcommerce
|
|
|
106
128
|
def connection
|
|
107
129
|
unless @connection
|
|
108
130
|
@connection = ::Net::HTTP.new(@host, @port)
|
|
109
|
-
if @port ==
|
|
131
|
+
if @port == @ssl_port
|
|
110
132
|
@connection.use_ssl = @encryption == ENCRYPTION_TLS
|
|
111
133
|
@connection.verify_mode = ::OpenSSL::SSL::VERIFY_NONE unless @ssl_verify_peer
|
|
112
134
|
end
|
|
@@ -32,6 +32,10 @@ module Bigcommerce
|
|
|
32
32
|
encryption: ::Bigcommerce::Lightstep.port.to_i == 443 ? ::Bigcommerce::Lightstep::Transport::ENCRYPTION_TLS : ::Bigcommerce::Lightstep::Transport::ENCRYPTION_NONE,
|
|
33
33
|
ssl_verify_peer: ::Bigcommerce::Lightstep.ssl_verify_peer,
|
|
34
34
|
access_token: ::Bigcommerce::Lightstep.access_token,
|
|
35
|
+
open_timeout: ::Bigcommerce::Lightstep.open_timeout,
|
|
36
|
+
read_timeout: ::Bigcommerce::Lightstep.read_timeout,
|
|
37
|
+
continue_timeout: ::Bigcommerce::Lightstep.continue_timeout,
|
|
38
|
+
keep_alive_timeout: ::Bigcommerce::Lightstep.keep_alive_timeout,
|
|
35
39
|
logger: ::Bigcommerce::Lightstep.logger
|
|
36
40
|
)
|
|
37
41
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bc-lightstep-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.2.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:
|
|
11
|
+
date: 2020-10-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activerecord
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '4'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '4'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: bundler
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -25,61 +39,159 @@ dependencies:
|
|
|
25
39
|
- !ruby/object:Gem::Version
|
|
26
40
|
version: '1.11'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
42
|
+
name: bundler-audit
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
30
44
|
requirements:
|
|
31
45
|
- - "~>"
|
|
32
46
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
47
|
+
version: '0.6'
|
|
34
48
|
type: :development
|
|
35
49
|
prerelease: false
|
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
51
|
requirements:
|
|
38
52
|
- - "~>"
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
54
|
+
version: '0.6'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rake
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '12.0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '12.0'
|
|
41
69
|
- !ruby/object:Gem::Dependency
|
|
42
70
|
name: rspec
|
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
|
44
72
|
requirements:
|
|
45
73
|
- - "~>"
|
|
46
74
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '3.
|
|
75
|
+
version: '3.8'
|
|
48
76
|
type: :development
|
|
49
77
|
prerelease: false
|
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
79
|
requirements:
|
|
52
80
|
- - "~>"
|
|
53
81
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '3.
|
|
82
|
+
version: '3.8'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec_junit_formatter
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0.4'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0.4'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rubocop
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '1.0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '1.0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: simplecov
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0.15'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0.15'
|
|
55
125
|
- !ruby/object:Gem::Dependency
|
|
56
126
|
name: pry
|
|
57
127
|
requirement: !ruby/object:Gem::Requirement
|
|
58
128
|
requirements:
|
|
59
129
|
- - ">="
|
|
60
130
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
131
|
+
version: '0.12'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0.12'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: null-logger
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '0.1'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0.1'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: redis
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '4'
|
|
62
160
|
type: :development
|
|
63
161
|
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '4'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: activesupport
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '4'
|
|
174
|
+
type: :runtime
|
|
175
|
+
prerelease: false
|
|
64
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
177
|
requirements:
|
|
66
178
|
- - ">="
|
|
67
179
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
180
|
+
version: '4'
|
|
69
181
|
- !ruby/object:Gem::Dependency
|
|
70
182
|
name: lightstep
|
|
71
183
|
requirement: !ruby/object:Gem::Requirement
|
|
72
184
|
requirements:
|
|
73
185
|
- - "~>"
|
|
74
186
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 0.
|
|
187
|
+
version: 0.16.0
|
|
76
188
|
type: :runtime
|
|
77
189
|
prerelease: false
|
|
78
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
191
|
requirements:
|
|
80
192
|
- - "~>"
|
|
81
193
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.
|
|
194
|
+
version: 0.16.0
|
|
83
195
|
- !ruby/object:Gem::Dependency
|
|
84
196
|
name: faraday
|
|
85
197
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -89,7 +201,7 @@ dependencies:
|
|
|
89
201
|
version: '0.8'
|
|
90
202
|
- - "<="
|
|
91
203
|
- !ruby/object:Gem::Version
|
|
92
|
-
version: 0.
|
|
204
|
+
version: 0.17.3
|
|
93
205
|
type: :runtime
|
|
94
206
|
prerelease: false
|
|
95
207
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -99,7 +211,7 @@ dependencies:
|
|
|
99
211
|
version: '0.8'
|
|
100
212
|
- - "<="
|
|
101
213
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: 0.
|
|
214
|
+
version: 0.17.3
|
|
103
215
|
description: Gem for lightstep distributed tracing
|
|
104
216
|
email:
|
|
105
217
|
- shaun.mccormick@bigcommerce.com
|
|
@@ -112,6 +224,8 @@ files:
|
|
|
112
224
|
- README.md
|
|
113
225
|
- bc-lightstep-ruby.gemspec
|
|
114
226
|
- lib/bigcommerce/lightstep.rb
|
|
227
|
+
- lib/bigcommerce/lightstep/active_record/adapter.rb
|
|
228
|
+
- lib/bigcommerce/lightstep/active_record/tracer.rb
|
|
115
229
|
- lib/bigcommerce/lightstep/configuration.rb
|
|
116
230
|
- lib/bigcommerce/lightstep/errors.rb
|
|
117
231
|
- lib/bigcommerce/lightstep/interceptors/base.rb
|
|
@@ -131,7 +245,7 @@ homepage: https://github.com/bigcommerce/bc-lightstep-ruby
|
|
|
131
245
|
licenses:
|
|
132
246
|
- MIT
|
|
133
247
|
metadata: {}
|
|
134
|
-
post_install_message:
|
|
248
|
+
post_install_message:
|
|
135
249
|
rdoc_options: []
|
|
136
250
|
require_paths:
|
|
137
251
|
- lib
|
|
@@ -139,7 +253,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
139
253
|
requirements:
|
|
140
254
|
- - ">="
|
|
141
255
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: '
|
|
256
|
+
version: '2.6'
|
|
143
257
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
258
|
requirements:
|
|
145
259
|
- - ">="
|
|
@@ -147,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
147
261
|
version: '0'
|
|
148
262
|
requirements: []
|
|
149
263
|
rubygems_version: 3.0.6
|
|
150
|
-
signing_key:
|
|
264
|
+
signing_key:
|
|
151
265
|
specification_version: 4
|
|
152
266
|
summary: Gem for lightstep distributed tracing
|
|
153
267
|
test_files: []
|