rails-tracer 0.2.0 → 0.3.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/README.md +36 -1
- data/lib/rails/active_support/cache/tracer.rb +50 -0
- data/lib/rails/tracer.rb +3 -2
- data/rails-tracer.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a34ff90ac921cc85b1949fee9beaa086bd4d90f6
|
4
|
+
data.tar.gz: f930e3bb94f2d4a902b5adaaf39374b694f82668
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21bd5494160f32eb6acc36eac9fd7894921a453bf8742994f6e5978c41ff1c04384e119b684a15a6ac00be0451182bfa0810841495ecd6c6fa83ebfb91552f04
|
7
|
+
data.tar.gz: 7bbf9130efddb14404d00b7a11fc010701618d6a9edd43ac337572a81ddd8e255a501e7cbf2f611e6a58c3da529072863b824ce267fb4dec0f5223c9c8165e98
|
data/README.md
CHANGED
@@ -6,6 +6,7 @@ The following instrumentation is supported:
|
|
6
6
|
|
7
7
|
* ActionDispatch - The library introduces a rack middleware, which is intended to be used together with `rack-tracer`, to generate more informative operation names based on information supplied by ActionDispatch.
|
8
8
|
* ActiveRecord - The library hooks up into Rails, and instruments all ActiveRecord query.
|
9
|
+
* ActionSupport::Cache - The library hooks up into Rails, and instruments cache events.
|
9
10
|
|
10
11
|
## Installation
|
11
12
|
|
@@ -51,7 +52,8 @@ Auto-instrumentation example.
|
|
51
52
|
```ruby
|
52
53
|
require 'rails/tracer'
|
53
54
|
|
54
|
-
ActiveRecord::Tracer.instrument(tracer: OpenTracing.global_tracer,
|
55
|
+
ActiveRecord::Tracer.instrument(tracer: OpenTracing.global_tracer,
|
56
|
+
active_span: -> { OpenTracing.global_tracer.active_span })
|
55
57
|
```
|
56
58
|
|
57
59
|
There are times when you might want to skip ActiveRecord's magic, and use connection directly. Still the library
|
@@ -75,6 +77,39 @@ end
|
|
75
77
|
q("FirstUser", "SELECT * FROM users LIMIT 1")
|
76
78
|
```
|
77
79
|
|
80
|
+
## ActiveSupport::Cache
|
81
|
+
|
82
|
+
The library hooks up into Rails using `ActiveSupport::Notifications`, and instruments all `ActiveSupport::Cache` events.
|
83
|
+
|
84
|
+
### Usage
|
85
|
+
|
86
|
+
Auto-instrumentation example.
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
require 'rails/tracer'
|
90
|
+
|
91
|
+
ActiveSupport::Cache::Tracer.instrument(tracer: OpenTracing.global_tracer,
|
92
|
+
active_span: -> { OpenTracing.global_tracer.active_span })
|
93
|
+
```
|
94
|
+
|
95
|
+
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
|
+
|
97
|
+
```ruby
|
98
|
+
def read(key)
|
99
|
+
span = ActiveSupport::Cache::Tracer.start_span("InMemoryCache#read",
|
100
|
+
tracer: OpenTracing.global_tracer,
|
101
|
+
active_span: -> { OpenTracing.global_tracer.active_span },
|
102
|
+
key: key)
|
103
|
+
result = in_memory_cache[key]
|
104
|
+
span.set_tag('cache.hit', !!result)
|
105
|
+
result
|
106
|
+
ensure
|
107
|
+
span&.finish
|
108
|
+
end
|
109
|
+
|
110
|
+
read("user-1")
|
111
|
+
```
|
112
|
+
|
78
113
|
## Development
|
79
114
|
|
80
115
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ActiveSupport
|
2
|
+
module Cache
|
3
|
+
module Tracer
|
4
|
+
class << self
|
5
|
+
# TODO: In Rails 4.0+ it's possible to subscribe to start events
|
6
|
+
def instrument(tracer: OpenTracing.global_tracer, active_span: nil)
|
7
|
+
events = %w(read write generate delete clear)
|
8
|
+
events.each do |event|
|
9
|
+
ActiveSupport::Notifications.subscribe("cache_#{event}.active_support") do |*args|
|
10
|
+
ActiveSupport::Cache::Tracer.instrument_event(tracer: tracer,
|
11
|
+
active_span: active_span,
|
12
|
+
event: event,
|
13
|
+
args: args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def instrument_event(tracer: OpenTracing.global_tracer, active_span: nil, event:, args:)
|
19
|
+
_, start, finish, _, payload = *args
|
20
|
+
|
21
|
+
span = start_span("cache.#{event}",
|
22
|
+
event: event,
|
23
|
+
tracer: tracer,
|
24
|
+
active_span: active_span,
|
25
|
+
start_time: start,
|
26
|
+
**payload)
|
27
|
+
|
28
|
+
span.finish(end_time: finish)
|
29
|
+
end
|
30
|
+
|
31
|
+
def start_span(operation_name, tracer: OpenTracing.global_tracer, active_span: nil, start_time: Time.now, event:, **fields)
|
32
|
+
span = tracer.start_span(operation_name,
|
33
|
+
child_of: active_span.respond_to?(:call) ? active_span.call : active_span,
|
34
|
+
start_time: start_time,
|
35
|
+
tags: {
|
36
|
+
'component' => 'ActiveSupport::Cache',
|
37
|
+
'span.kind' => 'client',
|
38
|
+
'cache.key' => fields.fetch(:key, 'unknown')
|
39
|
+
})
|
40
|
+
|
41
|
+
if event == 'read'
|
42
|
+
span.set_tag('cache.hit', fields.fetch(:hit, false))
|
43
|
+
end
|
44
|
+
|
45
|
+
span
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/rails/tracer.rb
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require "rails/rack/tracer"
|
2
|
+
require "rails/active_record/tracer"
|
3
|
+
require "rails/active_support/cache/tracer"
|
data/rails-tracer.gemspec
CHANGED
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.3.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-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentracing
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- bin/console
|
225
225
|
- bin/setup
|
226
226
|
- lib/rails/active_record/tracer.rb
|
227
|
+
- lib/rails/active_support/cache/tracer.rb
|
227
228
|
- lib/rails/rack/tracer.rb
|
228
229
|
- lib/rails/tracer.rb
|
229
230
|
- rails-tracer.gemspec
|