skylight-core 4.2.1 → 4.3.2
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.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: []
|