skylight-core 4.0.0.beta2 → 4.0.0.beta3
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/lib/skylight/core/normalizers/action_controller/process_action.rb +22 -10
- data/lib/skylight/core/normalizers/action_dispatch/process_middleware.rb +22 -0
- data/lib/skylight/core/normalizers/active_model_serializers/render.rb +4 -2
- data/lib/skylight/core/normalizers/faraday/request.rb +2 -0
- data/lib/skylight/core/normalizers.rb +1 -0
- data/lib/skylight/core/probes/action_controller.rb +3 -3
- data/lib/skylight/core/probes/action_view.rb +2 -2
- data/lib/skylight/core/probes/middleware.rb +3 -1
- data/lib/skylight/core/railtie.rb +7 -9
- data/lib/skylight/core/subscriber.rb +27 -24
- data/lib/skylight/core/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7f814841fc2a99900fe3822a5d94a09712ce2d1cdd3c42435386f82715acad6
|
4
|
+
data.tar.gz: 681c34b79a73d5f5eb53a04944046ef8d133db0ab349c204619359e65678e325
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a90106d989fce292267c2be2166045cb175a3bde412ca9cff73c8a1a5321c3c131440d2c0802a313278db987ca5cc07085ff1415385b416492aa501a604b3b4
|
7
|
+
data.tar.gz: 7bc49449984efa83ceef8ea6ee020027ea98730c4ccf45aeb3b27fc8d1d5a252bb3d757854a958f3783298a5cb5c244160a7d927e558dc1cacb3e97d6a2d8665
|
@@ -25,16 +25,7 @@ module Skylight::Core
|
|
25
25
|
def normalize_after(trace, _span, _name, payload)
|
26
26
|
return unless config.enable_segments?
|
27
27
|
|
28
|
-
|
29
|
-
if payload[:exception] || payload[:exception_object] || payload[:status].to_s =~ /^[45]/
|
30
|
-
segment = "error"
|
31
|
-
# We won't have a sk_rendered_format if it's a `head` outside of a `respond_to` block.
|
32
|
-
elsif payload[:sk_rendered_format]
|
33
|
-
# We only show the variant if we actually have a format
|
34
|
-
segment = [payload[:sk_rendered_format], payload[:sk_variant]].compact.flatten.join("+")
|
35
|
-
end
|
36
|
-
|
37
|
-
if segment
|
28
|
+
if (segment = segment_from_payload(payload))
|
38
29
|
trace.segment = segment
|
39
30
|
end
|
40
31
|
end
|
@@ -44,6 +35,27 @@ module Skylight::Core
|
|
44
35
|
def controller_action(payload)
|
45
36
|
"#{payload[:controller]}##{payload[:action]}"
|
46
37
|
end
|
38
|
+
|
39
|
+
def segment_from_payload(payload)
|
40
|
+
# Show 'error' if there's an unhandled exception or if the status is 4xx or 5xx
|
41
|
+
return "error" if payload[:exception] || payload[:exception_object]
|
42
|
+
segment_from_status(payload[:status]) || if payload[:sk_rendered_format]
|
43
|
+
# We only show the variant if we actually have a format
|
44
|
+
# We won't have a sk_rendered_format if it's a `head` outside of a `respond_to` block.
|
45
|
+
[payload[:sk_rendered_format], payload[:sk_variant]].compact.flatten.join("+")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def segment_from_status(status)
|
50
|
+
case status
|
51
|
+
when 304
|
52
|
+
"not modified"
|
53
|
+
when (300..399)
|
54
|
+
"redirect"
|
55
|
+
when (400..599)
|
56
|
+
"error"
|
57
|
+
end
|
58
|
+
end
|
47
59
|
end
|
48
60
|
end
|
49
61
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Skylight::Core
|
4
|
+
module Normalizers
|
5
|
+
module ActionDispatch
|
6
|
+
class ProcessMiddleware < Normalizer
|
7
|
+
register "process_middleware.action_dispatch"
|
8
|
+
|
9
|
+
CAT = "rack.middleware"
|
10
|
+
ANONYMOUS_MIDDLEWARE = "Anonymous Middleware"
|
11
|
+
ANONYMOUS = /\A#<(Class|Module|Proc):/
|
12
|
+
|
13
|
+
def normalize(trace, _name, payload)
|
14
|
+
name = payload[:middleware].to_s
|
15
|
+
name = ANONYMOUS_MIDDLEWARE if name[ANONYMOUS]
|
16
|
+
trace.endpoint = name
|
17
|
+
[CAT, name, nil]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -5,14 +5,16 @@ module Skylight::Core
|
|
5
5
|
register "render.active_model_serializers"
|
6
6
|
|
7
7
|
CAT = "view.render.active_model_serializers".freeze
|
8
|
+
ANONYMOUS = "<Anonymous Serializer>".freeze
|
8
9
|
|
9
10
|
def normalize(_trace, _name, payload)
|
10
11
|
serializer_class = payload[:serializer]
|
11
12
|
|
12
|
-
title = serializer_class.name
|
13
|
+
title = serializer_class.name || ANONYMOUS
|
14
|
+
title = title.sub(/^ActiveModel::(Serializer::)?/, "")
|
13
15
|
|
14
16
|
if (adapter_instance = payload[:adapter])
|
15
|
-
adapter_name = adapter_instance.class.name.
|
17
|
+
adapter_name = adapter_instance.class.name.to_s.
|
16
18
|
sub(/^ActiveModel::Serializer::Adapter::/, "").
|
17
19
|
sub(/^ActiveModelSerializers::Adapter::/, "")
|
18
20
|
desc = "Adapter: #{adapter_name}"
|
@@ -10,13 +10,13 @@ module Skylight::Core
|
|
10
10
|
append_info_to_payload_without_sk(payload)
|
11
11
|
|
12
12
|
rendered_mime = begin
|
13
|
-
if
|
14
|
-
rendered_format
|
15
|
-
elsif content_type.is_a?(Mime::Type)
|
13
|
+
if content_type.is_a?(Mime::Type)
|
16
14
|
content_type
|
17
15
|
elsif content_type.respond_to?(:to_s)
|
18
16
|
type_str = content_type.to_s.split(';').first
|
19
17
|
Mime::Type.lookup(type_str) unless type_str.blank?
|
18
|
+
elsif respond_to?(:rendered_format) && rendered_format
|
19
|
+
rendered_format
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -11,8 +11,8 @@ module Skylight::Core
|
|
11
11
|
when 2
|
12
12
|
args
|
13
13
|
when 4
|
14
|
-
# Rails
|
15
|
-
[args[
|
14
|
+
# Rails > 6.0.0.beta3 arguments are (view, template, path, locals)
|
15
|
+
[args[2], args[3]]
|
16
16
|
end
|
17
17
|
|
18
18
|
layout = nil
|
@@ -28,7 +28,7 @@ module Skylight::Core
|
|
28
28
|
begin
|
29
29
|
name = self.class.name || "#{default_name}"
|
30
30
|
|
31
|
-
traces.each{|t| t.endpoint = name }
|
31
|
+
traces.each{ |t| t.endpoint = name }
|
32
32
|
|
33
33
|
spans = Skylight::Core::Fanout.instrument(title: name, category: "#{category}")
|
34
34
|
resp = call_without_sk(*args, &block)
|
@@ -54,6 +54,8 @@ module Skylight::Core
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def install
|
57
|
+
return if defined?(::ActionDispatch::MiddlewareStack::InstrumentationProxy)
|
58
|
+
|
57
59
|
::ActionDispatch::MiddlewareStack::Middleware.class_eval do
|
58
60
|
alias_method :build_without_sk, :build
|
59
61
|
def build(*args)
|
@@ -36,15 +36,11 @@ module Skylight::Core
|
|
36
36
|
|
37
37
|
if activate?(config)
|
38
38
|
if config
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
Rails.logger.info "#{log_prefix} Unable to start, see the #{self.class.gem_name} logs for more details"
|
45
|
-
end
|
46
|
-
rescue ConfigError => e
|
47
|
-
Rails.logger.error "#{log_prefix} #{e.message}; disabling #{self.class.gem_name} agent"
|
39
|
+
if self.class.namespace.start!(config)
|
40
|
+
set_middleware_position(app, config)
|
41
|
+
Rails.logger.info "#{log_prefix} #{self.class.gem_name} agent enabled"
|
42
|
+
else
|
43
|
+
Rails.logger.info "#{log_prefix} Unable to start, see the #{self.class.gem_name} logs for more details"
|
48
44
|
end
|
49
45
|
end
|
50
46
|
elsif Rails.env.development?
|
@@ -57,6 +53,8 @@ module Skylight::Core
|
|
57
53
|
log_warning config, "#{log_prefix} You are running in the #{Rails.env} environment but haven't added it to config.#{self.class.root_key}.environments, so no data will be sent to #{config.class.service_name} servers."
|
58
54
|
end
|
59
55
|
end
|
56
|
+
rescue ConfigError => e
|
57
|
+
Rails.logger.error "#{log_prefix} #{e.message}; disabling #{self.class.gem_name} agent"
|
60
58
|
end
|
61
59
|
|
62
60
|
def log_warning(config, msg)
|
@@ -3,7 +3,7 @@ module Skylight::Core
|
|
3
3
|
class Subscriber
|
4
4
|
include Util::Logging
|
5
5
|
|
6
|
-
attr_reader :config
|
6
|
+
attr_reader :config, :normalizers
|
7
7
|
|
8
8
|
def initialize(config, instrumenter)
|
9
9
|
@config = config
|
@@ -41,29 +41,7 @@ module Skylight::Core
|
|
41
41
|
def start(name, _id, payload)
|
42
42
|
return if @instrumenter.disabled?
|
43
43
|
return unless (trace = @instrumenter.current_trace)
|
44
|
-
|
45
|
-
result = normalize(trace, name, payload)
|
46
|
-
|
47
|
-
unless result == :skip
|
48
|
-
case result.size
|
49
|
-
when 3, 4
|
50
|
-
cat, title, desc, meta = result
|
51
|
-
else
|
52
|
-
raise "Invalid normalizer result: #{result.inspect}"
|
53
|
-
end
|
54
|
-
|
55
|
-
span = trace.instrument(cat, title, desc, meta)
|
56
|
-
end
|
57
|
-
|
58
|
-
trace.notifications << Notification.new(name, span)
|
59
|
-
rescue Exception => e
|
60
|
-
error "Subscriber#start error; msg=%s", e.message
|
61
|
-
debug "trace=%s", trace.inspect
|
62
|
-
debug "in: name=%s", name.inspect
|
63
|
-
debug "in: payload=%s", payload.inspect
|
64
|
-
debug "out: cat=%s, title=%s, desc=%s", cat.inspect, name.inspect, desc.inspect
|
65
|
-
t { e.backtrace.join("\n") }
|
66
|
-
nil
|
44
|
+
_start(trace, name, payload)
|
67
45
|
end
|
68
46
|
|
69
47
|
def finish(name, _id, payload)
|
@@ -104,5 +82,30 @@ module Skylight::Core
|
|
104
82
|
def normalize_after(*args)
|
105
83
|
@normalizers.normalize_after(*args)
|
106
84
|
end
|
85
|
+
|
86
|
+
def _start(trace, name, payload)
|
87
|
+
result = normalize(trace, name, payload)
|
88
|
+
|
89
|
+
unless result == :skip
|
90
|
+
case result.size
|
91
|
+
when 3, 4
|
92
|
+
cat, title, desc, meta = result
|
93
|
+
else
|
94
|
+
raise "Invalid normalizer result: #{result.inspect}"
|
95
|
+
end
|
96
|
+
|
97
|
+
span = trace.instrument(cat, title, desc, meta)
|
98
|
+
end
|
99
|
+
rescue Exception => e
|
100
|
+
error "Subscriber#start error; msg=%s", e.message
|
101
|
+
debug "trace=%s", trace.inspect
|
102
|
+
debug "in: name=%s", name.inspect
|
103
|
+
debug "in: payload=%s", payload.inspect
|
104
|
+
debug "out: cat=%s, title=%s, desc=%s", cat.inspect, name.inspect, desc.inspect
|
105
|
+
t { e.backtrace.join("\n") }
|
106
|
+
nil
|
107
|
+
ensure
|
108
|
+
trace.notifications << Notification.new(name, span)
|
109
|
+
end
|
107
110
|
end
|
108
111
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skylight-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- lib/skylight/core/normalizers.rb
|
171
171
|
- lib/skylight/core/normalizers/action_controller/process_action.rb
|
172
172
|
- lib/skylight/core/normalizers/action_controller/send_file.rb
|
173
|
+
- lib/skylight/core/normalizers/action_dispatch/process_middleware.rb
|
173
174
|
- lib/skylight/core/normalizers/action_view/render_collection.rb
|
174
175
|
- lib/skylight/core/normalizers/action_view/render_partial.rb
|
175
176
|
- lib/skylight/core/normalizers/action_view/render_template.rb
|
@@ -265,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
266
|
- !ruby/object:Gem::Version
|
266
267
|
version: 1.3.1
|
267
268
|
requirements: []
|
268
|
-
rubygems_version: 3.0.
|
269
|
+
rubygems_version: 3.0.3
|
269
270
|
signing_key:
|
270
271
|
specification_version: 4
|
271
272
|
summary: The core methods of the Skylight profiler.
|