signalfx-tracing 0.1.7 → 0.1.8

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: cba6686f3650fe7e78107b4361557d19f6c113027130637e6a0fa951ab9572d6
4
- data.tar.gz: 0016fde2502c3f243c5c8041763883ec1563ee50de05f273f5084916d0b8257f
3
+ metadata.gz: 8cb7c6cd9186c6b200d8f49f568c408ad95ac990b178b463ee5eda7631d17cd3
4
+ data.tar.gz: d3356e20ea75c5914fa09a2da0d0f45890bd37be0dc2c2f43ed8bccfdd5673e8
5
5
  SHA512:
6
- metadata.gz: fe820cfaebb70a14236557a2c0b3d56da086845b5bf32ad8fc423535d6abb3925b0777135ffffba44fc13d069c2540f8f0f42e2ad6c8c2b17d07b129bb4b22fa
7
- data.tar.gz: d63db2fd564d7bda03cc6ac0a16b9dea32c75561d9a5c1facdbbeff99c246805dac1c77f65b82d440dd104584632038174d6976733e8ab5030b6af82cb1fb85e
6
+ metadata.gz: 9efc8169781a8a48507606d8af68cf04f138863b3ebe26690bcead5dd2b26b4936a83e23890d8c0826f4a63351e52e136163ea9edcb731a9059c858985307d22
7
+ data.tar.gz: 3028ae140b2ed3e2b0aae422c2385c7f83d3ef7befc25adf497dbe9c9e8521a20cabc17ea1fcd7109cd0bb6aee1fbb3e2762cc70e23c82c06f02acd99c7a003a
data/README.md CHANGED
@@ -90,19 +90,21 @@ When interfacing with these web servers as a Rack application, please configure
90
90
 
91
91
  ### Libraries/Frameworks
92
92
 
93
- | Library | Versions Supported |
94
- | ------------- | ------------------ |
95
- | ActiveRecord | > 3.2 |
96
- | Elasticsearch | >= 5.x |
97
- | Faraday | > 0.9.2 |
98
- | Mongo | >= 2.1 |
99
- | Mysql2 | >= 0.5.0 |
100
- | Net::HTTP | Ruby > 2.0 |
101
- | Rack | >= 2.0 |
102
- | Rails | >= 4.2.0 |
103
- | Redis | >= 4.0.1 |
104
- | REST Client | >= 2.0.0 |
105
- | Sinatra | >= 1.1.4 |
93
+ | Library | Versions Supported |
94
+ | ----------------------------------- | ------------------ |
95
+ | [ActiveRecord](#active-record) | > 3.2 |
96
+ | [Elasticsearch](#elasticsearch) | >= 5.x |
97
+ | [Faraday](#faraday) | > 0.9.2 |
98
+ | [Grape](#grape) | > 1.0.0 |
99
+ | [Mongo](#mongo) | >= 2.1 |
100
+ | [Mysql2](#mysql2) | >= 0.5.0 |
101
+ | [Net::HTTP](#nethttp) | Ruby > 2.0 |
102
+ | [Rack](#rack) | >= 2.0 |
103
+ | [Rails](#rails) | >= 4.2.0 |
104
+ | [Redis](#redis) | >= 4.0.1 |
105
+ | [RestClient](#restclient) | >= 2.0.0 |
106
+ | [Sequel](#sequel) | >= 3.48.0 |
107
+ | [Sinatra](#sinatra) | >= 1.1.4 |
106
108
 
107
109
  ## Active Record
108
110
 
@@ -177,6 +179,41 @@ end
177
179
 
178
180
  For more detailed usage, please check the instrumentation's page.
179
181
 
182
+ ## Grape
183
+
184
+ This instrumentation subscribes to ActiveSupport notifications emitted by the
185
+ Grape API. It patches `Grape::API` to automatically insert the `Rack::Tracer`
186
+ middleware and trace requests.
187
+
188
+ The source for this instrumentation is located [here](https://github.com/signalfx/ruby-grape-instrumentation)
189
+
190
+ ### Usage
191
+
192
+ ```ruby
193
+ SignalFx::Tracing::Instrumenter.configure do |p|
194
+ p.instrument(:Grape)
195
+ end
196
+ ```
197
+
198
+ `instrument` takes these optional arguments:
199
+ - `tracer`: custom tracer to use. Defaults to `OpenTracing.global_tracer`
200
+ - `parent_span`: parent span to group spans or block that returns a span. Default: `nil`
201
+ - `disable_patching`: disable patching if managing the middleware stack manually. Default: `false`
202
+
203
+ If patching is disabled, but spans nested by request are still desired, then the
204
+ Rack middleware must be manually added to the API class.
205
+
206
+ ```ruby
207
+ require 'rack/tracer'
208
+
209
+ class MyAPI << Grape::API
210
+ insert 0, Rack::Tracer
211
+ ...
212
+ end
213
+ ```
214
+
215
+ Please see the instrumentation's page for more details.
216
+
180
217
  ## Mongo
181
218
 
182
219
  Mongo driver instrumentation traces queries performed through the Ruby Mongodb driver.
@@ -242,10 +279,9 @@ use Rack::Tracer
242
279
  ## Rails
243
280
 
244
281
  Rails applications can be traced using the notifications provided by ActiveSupport.
245
- It can use `rack-tracer` to trace by requests, or it'll try to group spans by
246
- request ID.
282
+ It will use `rack-tracer` to trace by requests.
247
283
 
248
- The forked source for this instrumentation is located [here](https://github.com/signalfx/ruby-rails-tracer).
284
+ The forked source for this instrumentation is located [here](https://github.com/signalfx/ruby-rails-instrumentation).
249
285
 
250
286
  ### Usage
251
287
 
@@ -259,10 +295,14 @@ Optionally, to disable Rack instrumentation, set the `rack_tracer` field to fals
259
295
 
260
296
  ```ruby
261
297
  SignalFx::Tracing::Instrumenter.configure do |p|
262
- p.instrument(:Rails, rack_tracer: false)
298
+ p.instrument(:Rails, rack_tracer: false, exclude_events: [])
263
299
  end
264
300
  ```
265
301
 
302
+ By default, all Rails ActiveSupport notifications are traced. However, if this
303
+ is too noisy, events to ignore can be passed as an array as `exclude_events`.
304
+ A full list of events can be seen on the instrumentation's Readme.
305
+
266
306
  Note that if `rack_tracer` is set to `false`, requests propagated to the Rails
267
307
  app will not be extracted. For example, if a traced service makes a request to
268
308
  an endpoint served by the Rails app, it will not be automatically nested.
@@ -306,6 +346,24 @@ Arguments:
306
346
  - `propagate`: Propagate spans to the request endpoint.
307
347
  - Default: `false`
308
348
 
349
+ ## Sequel
350
+
351
+ Sequel instrumentation adds extensions to the Database and Dataset to trace queries.
352
+
353
+ The source for this instrumentation is located [here](https://github.com/signalfx/ruby-sequel-instrumentation).
354
+
355
+ ### Usage
356
+
357
+ ```ruby
358
+ SignalFx::Tracing::Instrumenter.configure do |p|
359
+ p.instrument(:Sequel)
360
+ end
361
+ ```
362
+
363
+ Arguments:
364
+ - `tracer`: Optional custom tracer for this instrumentation
365
+ - Default: `OpenTracing.global_tracer`
366
+
309
367
  ## Sinatra
310
368
 
311
369
  Sinatra instrumentation traces requests and template rendering. The instrumenter
@@ -0,0 +1,57 @@
1
+ require 'opentracing'
2
+
3
+ module SignalFx
4
+ module Tracing
5
+ module Instrumenter
6
+ module Grape
7
+
8
+ Register.add_lib :Grape, self
9
+
10
+ class << self
11
+
12
+ def instrument(opts = {})
13
+ return if @instrumented
14
+
15
+ begin
16
+ require 'grape'
17
+ rescue LoadError => error
18
+ return
19
+ end
20
+
21
+ require 'grape/instrumentation'
22
+
23
+ tracer = opts.fetch(:tracer, OpenTracing.global_tracer)
24
+ parent_span = opts.fetch(:parent_span, nil)
25
+
26
+ ::Grape::Instrumentation.instrument(tracer: tracer, parent_span: parent_span)
27
+ patch_middleware if !opts.fetch(:disable_patching, false)
28
+
29
+ @instrumented = true
30
+ end
31
+
32
+ def patch_middleware
33
+ require 'rack/tracer'
34
+
35
+ ::Grape::API.class_eval do
36
+ if Gem::Version.new(::Grape::VERSION) >= Gem::Version.new('1.2.0')
37
+ singleton_class.send(:alias_method, :initial_setup_original, :initial_setup)
38
+
39
+ def self.initial_setup(base_instance_parent)
40
+ initial_setup_original(base_instance_parent)
41
+ base_instance_parent.insert(0, ::Rack::Tracer) if !base_instance_parent.middleware.any? { |m| m[2].to_s == 'Rack::Tracer'}
42
+ end
43
+ else
44
+ singleton_class.send(:alias_method, :inherited_original, :initial_setup)
45
+
46
+ def self.inherited(api)
47
+ inherited_original(api)
48
+ api.use(::Rack::Tracer) if !api.middleware.any? { |m| m[1].to_s == 'Rack::Tracer' }
49
+ end
50
+ end
51
+ end # class_eval
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -10,19 +10,26 @@ module SignalFx
10
10
  def instrument(opts = {})
11
11
  return if @instrumented
12
12
 
13
- # instrument supported versions
14
- return if !defined?(::Rails) or Gem::Version.new(::Rails::VERSION::STRING) < Gem::Version.new('3.2')
13
+ # check for required gems
14
+ begin
15
+ require 'active_support'
16
+ require 'rails'
17
+ rescue LoadError
18
+ return
19
+ end
15
20
 
16
- require 'rails/tracer'
21
+ require 'rails/instrumentation'
17
22
  require 'rack/tracer'
18
23
 
19
- if opts.fetch(:rack_tracer, false)
24
+ if opts.fetch(:rack_tracer, true)
20
25
  # add rack middlewares
21
- ::Rails.configuration.middleware.use(::Rack::Tracer)
22
- ::Rails.configuration.middleware.insert_after(::Rack::Tracer, ::Rails::Rack::Tracer)
26
+ ::Rails.configuration.middleware.insert(0, ::Rack::Tracer)
23
27
  end
24
28
 
25
- ::Rails::Tracer.instrument(full_trace: true)
29
+ exclude_events = opts.fetch(:exclude_events, [])
30
+ tracer = opts.fetch(:tracer, OpenTracing.global_tracer)
31
+
32
+ ::Rails::Instrumentation.instrument(tracer: tracer, exclude_events: exclude_events)
26
33
 
27
34
  @instrumented = true
28
35
  end
@@ -0,0 +1,28 @@
1
+ module SignalFx
2
+ module Tracing
3
+ module Instrumenter
4
+ module Sequel
5
+
6
+ Register.add_lib :Sequel, self
7
+
8
+ class << self
9
+
10
+ def instrument(opts = {})
11
+ begin
12
+ require 'sequel'
13
+ rescue LoadError
14
+ return
15
+ end
16
+
17
+ require 'sequel/instrumentation'
18
+
19
+ tracer = opts.fetch(:tracer, OpenTracing.global_tracer)
20
+
21
+ ::Sequel::Instrumentation.instrument(tracer: tracer) if !@instrumented
22
+ @instrumented = true
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -40,3 +40,5 @@ require 'signalfx/tracing/instrumentation/mongodb'
40
40
  require 'signalfx/tracing/instrumentation/elasticsearch'
41
41
  require 'signalfx/tracing/instrumentation/mysql2'
42
42
  require 'signalfx/tracing/instrumentation/redis'
43
+ require 'signalfx/tracing/instrumentation/sequel'
44
+ require 'signalfx/tracing/instrumentation/grape'
@@ -1,5 +1,5 @@
1
1
  module Signalfx
2
2
  module Tracing
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -44,9 +44,11 @@ Gem::Specification.new do |spec|
44
44
  spec.add_dependency "mongodb-instrumentation", "~> 0.1.1"
45
45
  spec.add_dependency "mysql2-instrumentation", "~> 0.1.0"
46
46
  spec.add_dependency "redis-instrumentation", "~> 0.1.0"
47
+ spec.add_dependency "sequel-instrumentation", "~> 0.1.0"
48
+ spec.add_dependency "grape-instrumentation", "~> 0.1.0"
49
+ spec.add_dependency "rails-instrumentation", "~> 0.1.0"
47
50
 
48
51
  # forks
49
- spec.add_dependency "signalfx-rails-instrumentation", "~> 0.1.4"
50
52
  spec.add_dependency "signalfx-elasticsearch-instrumentation", "~> 0.1.0"
51
53
  spec.add_dependency "signalfx-faraday-instrumentation", "~> 0.1.1"
52
54
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signalfx-tracing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ashwin Chandrasekar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-24 00:00:00.000000000 Z
11
+ date: 2019-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -151,19 +151,47 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.1.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: signalfx-rails-instrumentation
154
+ name: sequel-instrumentation
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.1.4
159
+ version: 0.1.0
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.1.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: grape-instrumentation
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.1.0
160
174
  type: :runtime
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
- version: 0.1.4
180
+ version: 0.1.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: rails-instrumentation
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.1.0
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.1.0
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: signalfx-elasticsearch-instrumentation
169
197
  requirement: !ruby/object:Gem::Requirement
@@ -240,6 +268,7 @@ files:
240
268
  - lib/signalfx/tracing/instrumentation/active_record.rb
241
269
  - lib/signalfx/tracing/instrumentation/elasticsearch.rb
242
270
  - lib/signalfx/tracing/instrumentation/faraday.rb
271
+ - lib/signalfx/tracing/instrumentation/grape.rb
243
272
  - lib/signalfx/tracing/instrumentation/mongodb.rb
244
273
  - lib/signalfx/tracing/instrumentation/mysql2.rb
245
274
  - lib/signalfx/tracing/instrumentation/net_http.rb
@@ -248,6 +277,7 @@ files:
248
277
  - lib/signalfx/tracing/instrumentation/rails.rb
249
278
  - lib/signalfx/tracing/instrumentation/redis.rb
250
279
  - lib/signalfx/tracing/instrumentation/restclient.rb
280
+ - lib/signalfx/tracing/instrumentation/sequel.rb
251
281
  - lib/signalfx/tracing/instrumentation/sinatra.rb
252
282
  - lib/signalfx/tracing/register.rb
253
283
  - lib/signalfx/tracing/reporter/auto_reviving_async_reporter.rb
@@ -273,8 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
303
  - !ruby/object:Gem::Version
274
304
  version: '0'
275
305
  requirements: []
276
- rubyforge_project:
277
- rubygems_version: 2.7.3
306
+ rubygems_version: 3.0.2
278
307
  signing_key:
279
308
  specification_version: 4
280
309
  summary: Auto-instrumentation framework for Ruby