rails-tracer 0.3.0 → 0.4.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
  SHA1:
3
- metadata.gz: a34ff90ac921cc85b1949fee9beaa086bd4d90f6
4
- data.tar.gz: f930e3bb94f2d4a902b5adaaf39374b694f82668
3
+ metadata.gz: 0e1e93a75097ddbf88329b765f10c4c935c24140
4
+ data.tar.gz: 1350b1c77006d804fba79b72dac70ede6e36ac5c
5
5
  SHA512:
6
- metadata.gz: 21bd5494160f32eb6acc36eac9fd7894921a453bf8742994f6e5978c41ff1c04384e119b684a15a6ac00be0451182bfa0810841495ecd6c6fa83ebfb91552f04
7
- data.tar.gz: 7bbf9130efddb14404d00b7a11fc010701618d6a9edd43ac337572a81ddd8e255a501e7cbf2f611e6a58c3da529072863b824ce267fb4dec0f5223c9c8165e98
6
+ metadata.gz: 845c819c94d5b260ab82586c0e470e0996aa7224e1b0a13a7794f9f01da7fcdf4d850af0c83c5d236529669f4c3402166ce12699fd143fefd90269884609f9f5
7
+ data.tar.gz: fe067ca4580cacc133e9a1bae10673f3cfc71ea7157c2311baa0de1641f130f87c6ad8672463262e835764ba155a5d5e40169c222428efc7e34db474ce633ad5
@@ -1,5 +1,8 @@
1
- sudo: false
1
+ sudo: true
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.3.4
5
- before_install: gem install bundler -v 1.15.3
5
+ before_install:
6
+ - gem install bundler -v 1.15.3
7
+ services:
8
+ - memcached
@@ -0,0 +1,26 @@
1
+ ## v0.4.0
2
+
3
+ * Start maintaining CHANGELOG.md [#18](https://github.com/iaintshine/ruby-rails-tracer/pull/18)
4
+ * Auto enable tracing-logger when Dalli is auto-instrumented [#17](https://github.com/iaintshine/ruby-rails-tracer/pull/17)
5
+ * Introduce Dalli and ActiveSupport::Cache::DalliStore auto-instrumentation [#9](https://github.com/iaintshine/ruby-rails-tracer/pull/9)
6
+ * Introduce docker-compose with all required external dependencies.
7
+
8
+ ## v0.3.0
9
+
10
+ * Introduce ActiveSupport::Cache auto-instrumentation [#4](https://github.com/iaintshine/ruby-rails-tracer/pull/4)
11
+ * Add ActiveRecord::Tracer tests for active span propagation
12
+
13
+ ## v0.2.0
14
+
15
+ * Introduce ActiveRecord auto-instrumentation [#3](https://github.com/iaintshine/ruby-rails-tracer/pull/3)
16
+ * Add Rails test application to be used in specs
17
+
18
+ ## v0.1.1
19
+
20
+ * Replace RecordingTracer with Test::Tracer [#6](https://github.com/iaintshine/ruby-rails-tracer/pull/6)
21
+ * README typo fix [#2](https://github.com/iaintshine/ruby-rails-tracer/pull/2)
22
+
23
+ ## v0.1.0
24
+
25
+ * Initial release
26
+ * Introduced a rack middleware, to generate more informative operation names based on information supplied by ActionDispatch. [#1](https://github.com/iaintshine/ruby-rails-tracer/pull/1)
data/README.md CHANGED
@@ -92,6 +92,14 @@ ActiveSupport::Cache::Tracer.instrument(tracer: OpenTracing.global_tracer,
92
92
  active_span: -> { OpenTracing.global_tracer.active_span })
93
93
  ```
94
94
 
95
+ If you use [Dalli](https://github.com/petergoldstein/dalli/) and `ActiveSupport::Cache::DalliStore` as your application's cache store, you can get low-level details about Memcached calls by setting `dalli` option to `true`. If you want to get even more details, simply require [tracing-logger](https://github.com/iaintshine/ruby-tracing-logger) and Dalli error logs will be attached to the current active span. The library will wrap current `Dalli.logger` into a `Tracing::CompositeLogger` and append additional `Tracing::Logger` with severity level set to `Logger::ERROR`.
96
+
97
+ ```ruby
98
+ ActiveSupport::Cache::Tracer.instrument(tracer: OpenTracing.global_tracer,
99
+ active_span: -> { OpenTracing.global_tracer.active_span },
100
+ dalli: true)
101
+ ```
102
+
95
103
  If you want to skip the auto-instrumentation, still the library can help you with span creation and setting up proper tags. Instead of auto-instrumenting, as shown above, you can manually call `ActiveSupport::Cache::Tracer.start_span` as shown below.
96
104
 
97
105
  ```ruby
@@ -0,0 +1,4 @@
1
+ memcached:
2
+ image: memcached
3
+ ports:
4
+ - 11211:11211
@@ -0,0 +1,80 @@
1
+ require "method/tracer"
2
+
3
+ module Dalli
4
+ class Tracer
5
+ class << self
6
+ def instrument(tracer: OpenTracing.global_tracer, active_span: nil)
7
+ ::Dalli::Server.class_eval do
8
+ @tracer = tracer
9
+ @active_span = active_span
10
+
11
+ class << self
12
+ attr_reader :tracer, :active_span
13
+ end
14
+
15
+ def tracer
16
+ self.class.tracer
17
+ end
18
+
19
+ def active_span
20
+ self.class.active_span
21
+ end
22
+
23
+ alias_method :request_without_instrumentation, :request
24
+
25
+ def request(op, *args)
26
+ tags = {
27
+ 'component' => 'Dalli::Server',
28
+ 'span.kind' => 'client',
29
+ 'db.statement' => op.to_s,
30
+ 'db.type' => 'memcached',
31
+ 'peer.hostname' => hostname,
32
+ 'peer.port' => port,
33
+ 'peer.weight' => weight
34
+ }
35
+ Method::Tracer.trace("Dalli::Server#request", tracer: tracer, child_of: active_span, tags: tags) do
36
+ request_without_instrumentation(op, *args)
37
+ end
38
+ end
39
+ end
40
+
41
+ ::Dalli::Client.class_eval do
42
+ @tracer = tracer
43
+ @active_span = active_span
44
+
45
+ class << self
46
+ attr_reader :tracer, :active_span
47
+ end
48
+
49
+ def tracer
50
+ self.class.tracer
51
+ end
52
+
53
+ def active_span
54
+ self.class.active_span
55
+ end
56
+
57
+ alias_method :perform_without_instrumentation, :perform
58
+
59
+ def perform(*args)
60
+ Method::Tracer.trace("Dalli::Client#perform", tracer: tracer, child_of: active_span) do
61
+ perform_without_instrumentation(*args)
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ def remove_instrumentation
68
+ ::Dalli::Server.class_eval do
69
+ alias_method :request, :request_without_instrumentation
70
+ remove_method :request_without_instrumentation
71
+ end
72
+
73
+ ::Dalli::Client.class_eval do
74
+ alias_method :perform, :perform_without_instrumentation
75
+ remove_method :perform_without_instrumentation
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -3,7 +3,7 @@ module ActiveSupport
3
3
  module Tracer
4
4
  class << self
5
5
  # TODO: In Rails 4.0+ it's possible to subscribe to start events
6
- def instrument(tracer: OpenTracing.global_tracer, active_span: nil)
6
+ def instrument(tracer: OpenTracing.global_tracer, active_span: nil, dalli: false)
7
7
  events = %w(read write generate delete clear)
8
8
  events.each do |event|
9
9
  ActiveSupport::Notifications.subscribe("cache_#{event}.active_support") do |*args|
@@ -13,6 +13,26 @@ module ActiveSupport
13
13
  args: args)
14
14
  end
15
15
  end
16
+
17
+ instrument_dalli(tracer: tracer, active_span: active_span) if dalli
18
+ end
19
+
20
+ def instrument_dalli(tracer:, active_span:)
21
+ return unless defined?(ActiveSupport::Cache::DalliStore)
22
+ require 'rails/active_support/cache/dalli_tracer'
23
+
24
+ Dalli::Tracer.instrument(tracer: tracer, active_span: active_span)
25
+ instrument_dalli_logger(active_span: active_span)
26
+ end
27
+
28
+ def instrument_dalli_logger(active_span:, level: Logger::ERROR)
29
+ return unless defined?(Tracing::Logger)
30
+ return unless active_span
31
+ return if [Tracing::Logger, Tracing::CompositeLogger].any? { |t| Dalli.logger.is_a?(t) }
32
+
33
+ tracing_logger = Tracing::Logger.new(active_span: active_span, level: level)
34
+ loggers = [tracing_logger, Dalli.logger].compact
35
+ Dalli.logger = Tracing::CompositeLogger.new(*loggers)
16
36
  end
17
37
 
18
38
  def instrument_event(tracer: OpenTracing.global_tracer, active_span: nil, event:, args:)
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "rails-tracer"
7
- spec.version = "0.3.0"
7
+ spec.version = "0.4.0"
8
8
  spec.authors = ["iaintshine"]
9
9
  spec.email = ["bodziomista@gmail.com"]
10
10
 
@@ -21,13 +21,15 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'opentracing', '~> 0.3.1'
23
23
  spec.add_dependency "rack-tracer", "~> 0.3.0"
24
+ spec.add_dependency "method-tracer", "~> 1.1"
24
25
 
25
26
  spec.add_development_dependency "rails", "~> 5.1.3"
26
27
  spec.add_development_dependency "sqlite3"
27
28
  spec.add_development_dependency "puma", "~> 3.7"
28
29
  spec.add_development_dependency "rspec-rails", "~> 3.6"
29
30
  spec.add_development_dependency "database_cleaner", "~> 1.6"
30
-
31
+ spec.add_development_dependency "dalli", "~> 2.7.6"
32
+ spec.add_development_dependency "tracing-logger", "~> 1.0"
31
33
  spec.add_development_dependency "test-tracer", "~> 1.1"
32
34
  spec.add_development_dependency "bundler", "~> 1.15"
33
35
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iaintshine
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-16 00:00:00.000000000 Z
11
+ date: 2017-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentracing
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: method-tracer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rails
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,34 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '1.6'
125
+ - !ruby/object:Gem::Dependency
126
+ name: dalli
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.7.6
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.7.6
139
+ - !ruby/object:Gem::Dependency
140
+ name: tracing-logger
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: test-tracer
113
155
  requirement: !ruby/object:Gem::Requirement
@@ -217,13 +259,16 @@ files:
217
259
  - ".rspec"
218
260
  - ".ruby-verison"
219
261
  - ".travis.yml"
262
+ - CHANGELOG.md
220
263
  - Gemfile
221
264
  - LICENSE
222
265
  - README.md
223
266
  - Rakefile
224
267
  - bin/console
225
268
  - bin/setup
269
+ - docker-compose.yml
226
270
  - lib/rails/active_record/tracer.rb
271
+ - lib/rails/active_support/cache/dalli_tracer.rb
227
272
  - lib/rails/active_support/cache/tracer.rb
228
273
  - lib/rails/rack/tracer.rb
229
274
  - lib/rails/tracer.rb