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 +4 -4
- data/.travis.yml +5 -2
- data/CHANGELOG.md +26 -0
- data/README.md +8 -0
- data/docker-compose.yml +4 -0
- data/lib/rails/active_support/cache/dalli_tracer.rb +80 -0
- data/lib/rails/active_support/cache/tracer.rb +21 -1
- data/rails-tracer.gemspec +4 -2
- metadata +47 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e1e93a75097ddbf88329b765f10c4c935c24140
|
4
|
+
data.tar.gz: 1350b1c77006d804fba79b72dac70ede6e36ac5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 845c819c94d5b260ab82586c0e470e0996aa7224e1b0a13a7794f9f01da7fcdf4d850af0c83c5d236529669f4c3402166ce12699fd143fefd90269884609f9f5
|
7
|
+
data.tar.gz: fe067ca4580cacc133e9a1bae10673f3cfc71ea7157c2311baa0de1641f130f87c6ad8672463262e835764ba155a5d5e40169c222428efc7e34db474ce633ad5
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -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
|
data/docker-compose.yml
ADDED
@@ -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:)
|
data/rails-tracer.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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
|