rails-tracer 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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