skylight-core 4.2.1 → 4.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/skylight/core/normalizers.rb +1 -0
- data/lib/skylight/core/normalizers/action_view/render_layout.rb +25 -0
- data/lib/skylight/core/normalizers/grape/endpoint.rb +2 -1
- data/lib/skylight/core/normalizers/graphql/base.rb +53 -15
- data/lib/skylight/core/probes/action_controller.rb +7 -0
- data/lib/skylight/core/probes/action_view.rb +4 -0
- data/lib/skylight/core/probes/graphql.rb +26 -25
- data/lib/skylight/core/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2030258255754028163967778c9b3ca8ab63a2971e7037c29d99d1cc34ae4b36
|
4
|
+
data.tar.gz: 746fd493621405f7f443a40150722a1b018b0a6ace05421bff3c9ce5069d9bad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4acc9a1b9d9f299fd609a75f2f0f51608e4f26d7aa30ef5748db41c04177aa5c399ea384085218781ceb85f023542a05617009e2c70c0de7fb2a2106163f2299
|
7
|
+
data.tar.gz: c9ac1d3ac95a970827bd1a3e9a4264ef78be0bb39af9754e380de82ac7e8839e9ec4cecc2bcbc0e3d06397e9c09c6d1567caa51bfb5612f53ae2195e5434044e
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Skylight
|
4
|
+
module Core
|
5
|
+
module Normalizers
|
6
|
+
module ActionView
|
7
|
+
# Normalizer for Rails layout rendering
|
8
|
+
class RenderLayout < RenderNormalizer
|
9
|
+
register "render_layout.action_view"
|
10
|
+
|
11
|
+
CAT = "view.render.layout"
|
12
|
+
|
13
|
+
# @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
|
14
|
+
# @param name [String] ignored, only present to match API
|
15
|
+
# @param payload (see RenderNormalizer#normalize_render)
|
16
|
+
# @option payload (see RenderNormalizer#normalize_render)
|
17
|
+
# @return (see RenderNormalizer#normalize_render)
|
18
|
+
def normalize(_trace, _name, payload)
|
19
|
+
normalize_render(CAT, payload)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -25,7 +25,8 @@ module Skylight::Core
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def get_namespace(endpoint)
|
28
|
-
|
28
|
+
# slice off preceding slash for data continuity
|
29
|
+
::Grape::Namespace.joined_space_path(endpoint.namespace_stackable(:namespace)).to_s[1..-1]
|
29
30
|
end
|
30
31
|
end
|
31
32
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/inflector"
|
4
|
+
|
3
5
|
module Skylight::Core::Normalizers::GraphQL
|
4
6
|
# Some AS::N events in GraphQL are not super useful.
|
5
7
|
# We are purposefully ignoring the following keys (and you probably shouldn't add them):
|
@@ -11,25 +13,61 @@ module Skylight::Core::Normalizers::GraphQL
|
|
11
13
|
ANONYMOUS = "[anonymous]".freeze
|
12
14
|
CAT = "app.graphql".freeze
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
if defined?(::GraphQL::VERSION) && Gem::Version.new(::GraphQL::VERSION) >= Gem::Version.new("1.10")
|
17
|
+
def self.register_graphql
|
18
|
+
register("#{key}.graphql")
|
19
|
+
end
|
20
|
+
else
|
21
|
+
def self.register_graphql
|
22
|
+
register("graphql.#{key}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.inherited(klass)
|
27
|
+
klass.const_set(
|
28
|
+
:KEY,
|
29
|
+
ActiveSupport::Inflector.underscore(
|
30
|
+
ActiveSupport::Inflector.demodulize(klass.name)
|
31
|
+
).freeze
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.key
|
36
|
+
self::KEY
|
16
37
|
end
|
38
|
+
|
39
|
+
def normalize(_trace, _name, _payload)
|
40
|
+
[CAT, "graphql.#{key}", nil]
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def key
|
46
|
+
self.class.key
|
47
|
+
end
|
48
|
+
|
49
|
+
def extract_query_name(query)
|
50
|
+
query&.context&.[](:skylight_endpoint) ||
|
51
|
+
query&.operation_name ||
|
52
|
+
ANONYMOUS
|
53
|
+
end
|
17
54
|
end
|
18
55
|
|
19
56
|
class Lex < Base
|
20
|
-
|
57
|
+
register_graphql
|
21
58
|
end
|
22
59
|
|
23
60
|
class Parse < Base
|
24
|
-
|
61
|
+
register_graphql
|
25
62
|
end
|
26
63
|
|
27
64
|
class Validate < Base
|
28
|
-
|
65
|
+
register_graphql
|
29
66
|
end
|
30
67
|
|
31
68
|
class ExecuteMultiplex < Base
|
32
|
-
|
69
|
+
register_graphql
|
70
|
+
|
33
71
|
def normalize_after(trace, _span, _name, payload)
|
34
72
|
# This is in normalize_after because the queries may not have
|
35
73
|
# an assigned operation name before they are executed.
|
@@ -44,7 +82,7 @@ module Skylight::Core::Normalizers::GraphQL
|
|
44
82
|
# has not been done yet at the point where execute_multiplex starts.
|
45
83
|
# [1] https://graphql.org/learn/serving-over-http/#post-request
|
46
84
|
queries, has_errors = payload[:multiplex].queries.each_with_object([Set.new, Set.new]) do |query, (names, errors)|
|
47
|
-
names << (query
|
85
|
+
names << extract_query_name(query)
|
48
86
|
errors << query.static_errors.any?
|
49
87
|
end
|
50
88
|
|
@@ -58,14 +96,14 @@ module Skylight::Core::Normalizers::GraphQL
|
|
58
96
|
end
|
59
97
|
|
60
98
|
class AnalyzeQuery < Base
|
61
|
-
|
99
|
+
register_graphql
|
62
100
|
end
|
63
101
|
|
64
102
|
class ExecuteQuery < Base
|
65
|
-
|
103
|
+
register_graphql
|
66
104
|
|
67
|
-
def normalize(trace,
|
68
|
-
query_name = payload[:query]
|
105
|
+
def normalize(trace, _name, payload)
|
106
|
+
query_name = extract_query_name(payload[:query])
|
69
107
|
|
70
108
|
if query_name == ANONYMOUS
|
71
109
|
meta = { mute_children: true }
|
@@ -75,18 +113,18 @@ module Skylight::Core::Normalizers::GraphQL
|
|
75
113
|
# but in the case of a single query, it will be the same value anyway.
|
76
114
|
trace.endpoint = "graphql:#{query_name}"
|
77
115
|
|
78
|
-
[CAT, "
|
116
|
+
[CAT, "graphql.#{key}: #{query_name}", nil, meta]
|
79
117
|
end
|
80
118
|
end
|
81
119
|
|
82
120
|
class ExecuteQueryLazy < ExecuteQuery
|
83
|
-
|
121
|
+
register_graphql
|
84
122
|
|
85
|
-
def normalize(trace,
|
123
|
+
def normalize(trace, _name, payload)
|
86
124
|
if payload[:query]
|
87
125
|
super
|
88
126
|
elsif payload[:multiplex]
|
89
|
-
[CAT, "
|
127
|
+
[CAT, "graphql.#{key}.multiplex", nil]
|
90
128
|
end
|
91
129
|
end
|
92
130
|
end
|
@@ -27,6 +27,13 @@ module Skylight::Core
|
|
27
27
|
elsif respond_to?(:rendered_format) && rendered_format
|
28
28
|
rendered_format
|
29
29
|
end
|
30
|
+
rescue
|
31
|
+
# There are cases in which actionpack can return
|
32
|
+
# a stringified representation of a Mime::NullType instance,
|
33
|
+
# which is invalid for a number of reasons. This string raises
|
34
|
+
# errors when piped through Mime::Type.lookup, so it's probably
|
35
|
+
# best to just return nil in those cases.
|
36
|
+
nil
|
30
37
|
end
|
31
38
|
end
|
32
39
|
end
|
@@ -1,8 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Skylight::Core
|
2
4
|
module Probes
|
3
5
|
module ActionView
|
4
6
|
class Probe
|
5
7
|
def install
|
8
|
+
return if ::ActionView.gem_version >= Gem::Version.new("6.1.0.alpha")
|
9
|
+
|
6
10
|
::ActionView::TemplateRenderer.class_eval do
|
7
11
|
alias_method :render_with_layout_without_sk, :render_with_layout
|
8
12
|
|
@@ -3,35 +3,36 @@
|
|
3
3
|
module Skylight::Core
|
4
4
|
module Probes
|
5
5
|
module GraphQL
|
6
|
+
module Instrumentation
|
7
|
+
def initialize(*, **)
|
8
|
+
super
|
9
|
+
|
10
|
+
return unless defined?(@tracers)
|
11
|
+
|
12
|
+
unless @tracers.include?(::GraphQL::Tracing::ActiveSupportNotificationsTracing)
|
13
|
+
@tracers << ::GraphQL::Tracing::ActiveSupportNotificationsTracing
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
6
18
|
class Probe
|
7
19
|
def install
|
8
|
-
::GraphQL::
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
def sk_add_tracer
|
19
|
-
Skylight::Core::Config::MUTEX.synchronize do
|
20
|
-
graphql_tracer = ::GraphQL::Tracing::ActiveSupportNotificationsTracing
|
21
|
-
unless tracers.include?(graphql_tracer)
|
22
|
-
$stdout.puts "[SKYLIGHT::CORE] Adding tracer 'GraphQL::Tracing::ActiveSupportNotificationsTracing' to schema"
|
23
|
-
tracers << graphql_tracer
|
24
|
-
end
|
25
|
-
|
26
|
-
class << self
|
27
|
-
# Remove the probe and reset multiplex/execute to original version
|
28
|
-
# after the tracer has been added
|
29
|
-
alias_method :multiplex, :multiplex_without_sk
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
20
|
+
tracing_klass_name = "::GraphQL::Tracing::ActiveSupportNotificationsTracing"
|
21
|
+
klasses_to_probe = %w(
|
22
|
+
::GraphQL::Execution::Multiplex
|
23
|
+
::GraphQL::Query
|
24
|
+
)
|
25
|
+
|
26
|
+
return unless ([tracing_klass_name] + klasses_to_probe).all?(&method(:safe_constantize))
|
27
|
+
|
28
|
+
klasses_to_probe.each do |klass_name|
|
29
|
+
safe_constantize(klass_name).prepend(Instrumentation)
|
33
30
|
end
|
34
31
|
end
|
32
|
+
|
33
|
+
def safe_constantize(klass_name)
|
34
|
+
Skylight::Core::Util::Inflector.safe_constantize(klass_name)
|
35
|
+
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
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.2
|
4
|
+
version: 4.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -150,7 +150,7 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
-
description:
|
153
|
+
description:
|
154
154
|
email:
|
155
155
|
- engineering@tilde.io
|
156
156
|
executables: []
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- lib/skylight/core/normalizers/action_controller/send_file.rb
|
173
173
|
- lib/skylight/core/normalizers/action_dispatch/process_middleware.rb
|
174
174
|
- lib/skylight/core/normalizers/action_view/render_collection.rb
|
175
|
+
- lib/skylight/core/normalizers/action_view/render_layout.rb
|
175
176
|
- lib/skylight/core/normalizers/action_view/render_partial.rb
|
176
177
|
- lib/skylight/core/normalizers/action_view/render_template.rb
|
177
178
|
- lib/skylight/core/normalizers/active_job/perform.rb
|
@@ -254,7 +255,7 @@ homepage: https://www.skylight.io
|
|
254
255
|
licenses:
|
255
256
|
- Nonstandard
|
256
257
|
metadata: {}
|
257
|
-
post_install_message:
|
258
|
+
post_install_message:
|
258
259
|
rdoc_options: []
|
259
260
|
require_paths:
|
260
261
|
- lib
|
@@ -269,8 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
270
|
- !ruby/object:Gem::Version
|
270
271
|
version: '0'
|
271
272
|
requirements: []
|
272
|
-
rubygems_version: 3.
|
273
|
-
signing_key:
|
273
|
+
rubygems_version: 3.1.4
|
274
|
+
signing_key:
|
274
275
|
specification_version: 4
|
275
276
|
summary: The core methods of the Skylight profiler.
|
276
277
|
test_files: []
|