skylight 1.4.4 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/skylight/compat.rb +29 -0
- data/lib/skylight/core.rb +6 -6
- data/lib/skylight/middleware.rb +2 -4
- data/lib/skylight/normalizers.rb +7 -0
- data/lib/skylight/normalizers/coach/handler_finish.rb +36 -0
- data/lib/skylight/normalizers/coach/middleware_finish.rb +23 -0
- data/lib/skylight/normalizers/faraday/request.rb +2 -0
- data/lib/skylight/railtie.rb +5 -1
- data/lib/skylight/trace.rb +15 -1
- data/lib/skylight/util/logging.rb +1 -1
- data/lib/skylight/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a675aa7e9f2f19c9cc336569def0ffcf820876b
|
4
|
+
data.tar.gz: 6f9c5b843ef8ffc5a31fa936692468afde1a22c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31694926e3ab83229d89d13d5ef7605011c7590def3eb31b0f1be0a1830069a95b3bc3e58371b537287c14fa95840426cf6b2624f2082e0ca07dc6d2a00de257
|
7
|
+
data.tar.gz: db16281e6cf0ef307e5bf500bcbe58bf0f5e66bf7ebac3d743a81fc6239f291d1740793673e2426a9fe100b2e3aaff3d24c6c4dbaf9d9bfebd1bc80a7f39f748
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.5.0 (December 6, 2017)
|
2
|
+
|
3
|
+
* [FEATURE] [Coach](https://github.com/gocardless/coach) instrumentation. Enabled automatically via ActiveSupport::Notifications.
|
4
|
+
* [FEATURE] Option to enable or disable agent by setting SKYLIGHT_ENABLE via ENV.
|
5
|
+
* [IMPROVEMENT] Better logging for certain error cases.
|
6
|
+
* [BUGFIX] Backport a SPEC compliance fix for older Rack::ETag to resolve case where the Middleware probe could cause empty traces.
|
7
|
+
* [BUGFIX] Fix a case where using the non-block form of `Skylight.instrument` with `Skylight.done` could cause lost trace data.
|
8
|
+
|
1
9
|
## 1.4.4 (November 7, 2017)
|
2
10
|
|
3
11
|
* [BUGFIX] The minimum glibc requirement was errorneously bumped to 2.15. We have returned it to 2.5.
|
data/lib/skylight/compat.rb
CHANGED
@@ -45,3 +45,32 @@ if defined?(ActiveSupport::Notifications::Fanout::Subscribers::Evented)
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
49
|
+
require 'rack'
|
50
|
+
require 'rack/etag'
|
51
|
+
if Rack.release.to_f < 1.6
|
52
|
+
# Backport `close` compliance:
|
53
|
+
# https://github.com/rack/rack/commit/4d9e1b228dacbcf1552c68e2ab2f21274fdcecb4
|
54
|
+
Rack::ETag.class_eval do
|
55
|
+
def call(env)
|
56
|
+
status, headers, body = @app.call(env)
|
57
|
+
|
58
|
+
if etag_status?(status) && etag_body?(body) && !skip_caching?(headers)
|
59
|
+
original_body = body
|
60
|
+
digest, body = digest_body(body)
|
61
|
+
original_body.close if original_body.respond_to?(:close)
|
62
|
+
headers['ETag'] = %("#{digest}") if digest
|
63
|
+
end
|
64
|
+
|
65
|
+
unless headers['Cache-Control']
|
66
|
+
if digest
|
67
|
+
headers['Cache-Control'] = @cache_control if @cache_control
|
68
|
+
else
|
69
|
+
headers['Cache-Control'] = @no_cache_control if @no_cache_control
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
[status, headers, body]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/skylight/core.rb
CHANGED
@@ -89,12 +89,6 @@ module Skylight
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
# End a trace
|
93
|
-
def self.done(span)
|
94
|
-
return unless inst = Instrumenter.instance
|
95
|
-
inst.done(span)
|
96
|
-
end
|
97
|
-
|
98
92
|
# Instrument
|
99
93
|
def self.instrument(opts = DEFAULT_OPTIONS, &block)
|
100
94
|
unless inst = Instrumenter.instance
|
@@ -118,6 +112,12 @@ module Skylight
|
|
118
112
|
inst.instrument(category, title, desc, &block)
|
119
113
|
end
|
120
114
|
|
115
|
+
# End a span
|
116
|
+
def self.done(span)
|
117
|
+
return unless inst = Instrumenter.instance
|
118
|
+
inst.done(span)
|
119
|
+
end
|
120
|
+
|
121
121
|
# Temporarily disable
|
122
122
|
def self.disable
|
123
123
|
unless inst = Instrumenter.instance
|
data/lib/skylight/middleware.rb
CHANGED
@@ -26,7 +26,8 @@ module Skylight
|
|
26
26
|
@closed
|
27
27
|
end
|
28
28
|
|
29
|
-
# N.B. This method is a special case to address the bug described by
|
29
|
+
# N.B. This method is a special case to address the bug described by
|
30
|
+
# https://github.com/rack/rack/issues/434.
|
30
31
|
# We are applying this special case for #each only. Future bugs of this
|
31
32
|
# class will be handled by requesting users to patch their ruby
|
32
33
|
# implementation, to save adding too many methods in this class.
|
@@ -86,9 +87,6 @@ module Skylight
|
|
86
87
|
t { "middleware exception: #{trace}"}
|
87
88
|
trace.submit if trace
|
88
89
|
raise
|
89
|
-
ensure
|
90
|
-
t { "middleware release: #{trace}"}
|
91
|
-
trace.release if trace
|
92
90
|
end
|
93
91
|
end
|
94
92
|
end
|
data/lib/skylight/normalizers.rb
CHANGED
@@ -160,6 +160,13 @@ module Skylight
|
|
160
160
|
require "skylight/normalizers/#{file}"
|
161
161
|
end
|
162
162
|
|
163
|
+
# Coach instrumentation is only available in Ruby 2+
|
164
|
+
if RUBY_VERSION.split.first.to_i > 1
|
165
|
+
%w(coach/handler_finish coach/middleware_finish).each do |file|
|
166
|
+
require "skylight/normalizers/#{file}"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
163
170
|
# The following are not required by default as they are of dubious usefulness:
|
164
171
|
# - active_job/enqueue_at
|
165
172
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Normalizers
|
3
|
+
module Coach
|
4
|
+
class HandlerFinish < Normalizer
|
5
|
+
register "coach.handler.finish"
|
6
|
+
|
7
|
+
CAT = "app.coach.handler".freeze
|
8
|
+
|
9
|
+
# See information on the events Coach emits here:
|
10
|
+
# https://github.com/gocardless/coach#instrumentation
|
11
|
+
|
12
|
+
# Run when the handler first starts, we need to set the trace endpoint to be the
|
13
|
+
# handler name.
|
14
|
+
#
|
15
|
+
# We can expect the payload to have the :middleware key.
|
16
|
+
def normalize(trace, name, payload)
|
17
|
+
trace.endpoint = payload[:middleware]
|
18
|
+
[ CAT, payload[:middleware], nil ]
|
19
|
+
end
|
20
|
+
|
21
|
+
def normalize_after(trace, span, name, payload)
|
22
|
+
return unless config.enable_segments?
|
23
|
+
|
24
|
+
segments = []
|
25
|
+
|
26
|
+
response_status = payload.fetch(:response, {}).fetch(:status, '').to_s
|
27
|
+
segments << "error" if response_status.start_with?('4', '5')
|
28
|
+
|
29
|
+
if segments.any?
|
30
|
+
trace.endpoint += "<sk-segment>#{segments.join("+")}</sk-segment>"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Normalizers
|
3
|
+
module Coach
|
4
|
+
class MiddlewareFinish < Normalizer
|
5
|
+
register "coach.middleware.finish"
|
6
|
+
|
7
|
+
CAT = "app.coach.middleware".freeze
|
8
|
+
|
9
|
+
# See information on the events Coach emits here:
|
10
|
+
# https://github.com/gocardless/coach#instrumentation
|
11
|
+
|
12
|
+
# Called whenever a new middleware is executed. We can expect this to happen
|
13
|
+
# within a Coach::Handler.
|
14
|
+
#
|
15
|
+
# We can expect the payload to have the :middleware key.
|
16
|
+
def normalize(trace, name, payload)
|
17
|
+
trace.endpoint = payload[:middleware]
|
18
|
+
[ CAT, payload[:middleware], nil ]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -28,6 +28,8 @@ module Skylight
|
|
28
28
|
uri.host, uri.port, uri.path, uri.query)
|
29
29
|
description = opts[:title]
|
30
30
|
|
31
|
+
# We use "Faraday" as the title to differentiate it in the UI in
|
32
|
+
# case it's wrapping or is wrapped by another HTTP backend
|
31
33
|
[opts[:category], "Faraday", description]
|
32
34
|
end
|
33
35
|
end
|
data/lib/skylight/railtie.rb
CHANGED
@@ -117,7 +117,11 @@ module Skylight
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def activate?
|
120
|
-
|
120
|
+
if ENV.key?("SKYLIGHT_ENABLED")
|
121
|
+
ENV["SKYLIGHT_ENABLED"] !~ /^false$/i
|
122
|
+
else
|
123
|
+
environments.include?(Rails.env.to_s)
|
124
|
+
end
|
121
125
|
end
|
122
126
|
|
123
127
|
def load_probes
|
data/lib/skylight/trace.rb
CHANGED
@@ -29,6 +29,8 @@ module Skylight
|
|
29
29
|
|
30
30
|
@notifications = []
|
31
31
|
|
32
|
+
@spans = []
|
33
|
+
|
32
34
|
# create the root node
|
33
35
|
@root = start(native_get_started_at, cat, title, desc, normalize: false)
|
34
36
|
|
@@ -132,7 +134,7 @@ module Skylight
|
|
132
134
|
|
133
135
|
@instrumenter.process(self)
|
134
136
|
rescue Exception => e
|
135
|
-
error e
|
137
|
+
error e.message
|
136
138
|
t { e.backtrace.join("\n") }
|
137
139
|
end
|
138
140
|
|
@@ -144,10 +146,22 @@ module Skylight
|
|
144
146
|
sp = native_start_span(time, cat.to_s)
|
145
147
|
native_span_set_title(sp, title.to_s) if title
|
146
148
|
native_span_set_description(sp, desc.to_s) if desc
|
149
|
+
|
150
|
+
@spans << sp
|
151
|
+
t { "started span: #{sp} - #{cat}, #{title}" }
|
152
|
+
|
147
153
|
sp
|
148
154
|
end
|
149
155
|
|
150
156
|
def stop(span, time)
|
157
|
+
t { "stopping span: #{span}" }
|
158
|
+
|
159
|
+
expected = @spans.pop
|
160
|
+
unless span == expected
|
161
|
+
error "invalid span nesting"
|
162
|
+
t { "expected=#{expected}, actual=#{span}" }
|
163
|
+
end
|
164
|
+
|
151
165
|
time = self.class.normalize_time(time)
|
152
166
|
native_stop_span(span, time)
|
153
167
|
nil
|
@@ -78,8 +78,8 @@ module Skylight
|
|
78
78
|
# @param msg (see #log)
|
79
79
|
# @param args (see #log)
|
80
80
|
def error(msg, *args)
|
81
|
-
raise sprintf(msg, *args) if ENV['SKYLIGHT_RAISE_ON_ERROR']
|
82
81
|
log :error, msg, *args
|
82
|
+
raise sprintf(msg, *args) if ENV['SKYLIGHT_RAISE_ON_ERROR']
|
83
83
|
end
|
84
84
|
|
85
85
|
alias log_trace trace
|
data/lib/skylight/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skylight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -80,6 +80,8 @@ files:
|
|
80
80
|
- lib/skylight/normalizers/active_support/cache_read.rb
|
81
81
|
- lib/skylight/normalizers/active_support/cache_read_multi.rb
|
82
82
|
- lib/skylight/normalizers/active_support/cache_write.rb
|
83
|
+
- lib/skylight/normalizers/coach/handler_finish.rb
|
84
|
+
- lib/skylight/normalizers/coach/middleware_finish.rb
|
83
85
|
- lib/skylight/normalizers/couch_potato/query.rb
|
84
86
|
- lib/skylight/normalizers/default.rb
|
85
87
|
- lib/skylight/normalizers/elasticsearch/request.rb
|