graphql 2.4.7 → 2.4.8
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.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/graphql/execution/interpreter.rb +3 -1
- data/lib/graphql/schema/subscription.rb +50 -4
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
- data/lib/graphql/subscriptions/event.rb +12 -1
- data/lib/graphql/tracing/active_support_notifications_trace.rb +1 -1
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
- data/lib/graphql/tracing/appoptics_trace.rb +2 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +2 -0
- data/lib/graphql/tracing/appsignal_trace.rb +2 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
- data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
- data/lib/graphql/tracing/data_dog_trace.rb +2 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
- data/lib/graphql/tracing/legacy_hooks_trace.rb +1 -0
- data/lib/graphql/tracing/legacy_trace.rb +4 -61
- data/lib/graphql/tracing/new_relic_trace.rb +2 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
- data/lib/graphql/tracing/notifications_tracing.rb +2 -0
- data/lib/graphql/tracing/null_trace.rb +9 -0
- data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +2 -0
- data/lib/graphql/tracing/prometheus_trace.rb +5 -0
- data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
- data/lib/graphql/tracing/scout_trace.rb +2 -0
- data/lib/graphql/tracing/scout_tracing.rb +2 -0
- data/lib/graphql/tracing/sentry_trace.rb +2 -0
- data/lib/graphql/tracing/statsd_trace.rb +2 -0
- data/lib/graphql/tracing/statsd_tracing.rb +2 -0
- data/lib/graphql/tracing/trace.rb +3 -0
- data/lib/graphql/tracing.rb +28 -30
- data/lib/graphql/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 386222d0dc13d35729460ee8f3cd9fa30f90db9cb7dc2b2392489c9e0bc8939b
|
4
|
+
data.tar.gz: 5229e7ee84d4c4e0a0c8afd10ef2b0185b0eedfc611a8db38047171d9c04a6e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cb91383b995e8714915d2c99d8c2d4fa15eaad91f0069766d7e8d379cae15c2aae6eb7a3961e440d62a961837a044aed604802960f199e8670ecf973c991fb2
|
7
|
+
data.tar.gz: 8cd21fd942892100a0647bf9897e6e7d8651d184aee76a2988633fa3e9dc505163f330bb1f0ca3f4819cbb3248cd88e9ac252f516449ae169c1a3f47a982e11c
|
@@ -53,7 +53,9 @@ module GraphQL
|
|
53
53
|
results = []
|
54
54
|
queries.each_with_index do |query, idx|
|
55
55
|
if query.subscription? && !query.subscription_update?
|
56
|
-
query.context.namespace(:subscriptions)
|
56
|
+
subs_namespace = query.context.namespace(:subscriptions)
|
57
|
+
subs_namespace[:events] = []
|
58
|
+
subs_namespace[:subscriptions] = {}
|
57
59
|
end
|
58
60
|
multiplex.dataloader.append_job {
|
59
61
|
operation = query.selected_operation
|
@@ -19,13 +19,22 @@ module GraphQL
|
|
19
19
|
# propagate null.
|
20
20
|
null false
|
21
21
|
|
22
|
+
# @api private
|
22
23
|
def initialize(object:, context:, field:)
|
23
24
|
super
|
24
25
|
# Figure out whether this is an update or an initial subscription
|
25
26
|
@mode = context.query.subscription_update? ? :update : :subscribe
|
27
|
+
@subscription_written = false
|
28
|
+
@original_arguments = nil
|
29
|
+
if (subs_ns = context.namespace(:subscriptions)) &&
|
30
|
+
(sub_insts = subs_ns[:subscriptions])
|
31
|
+
sub_insts[context.current_path] = self
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
35
|
+
# @api private
|
28
36
|
def resolve_with_support(**args)
|
37
|
+
@original_arguments = args # before `loads:` have been run
|
29
38
|
result = nil
|
30
39
|
unsubscribed = true
|
31
40
|
unsubscribed_result = catch :graphql_subscription_unsubscribed do
|
@@ -46,7 +55,9 @@ module GraphQL
|
|
46
55
|
end
|
47
56
|
end
|
48
57
|
|
49
|
-
# Implement the {Resolve} API
|
58
|
+
# Implement the {Resolve} API.
|
59
|
+
# You can implement this if you want code to run for _both_ the initial subscription
|
60
|
+
# and for later updates. Or, implement {#subscribe} and {#update}
|
50
61
|
def resolve(**args)
|
51
62
|
# Dispatch based on `@mode`, which will raise a `NoMethodError` if we ever
|
52
63
|
# have an unexpected `@mode`
|
@@ -54,6 +65,7 @@ module GraphQL
|
|
54
65
|
end
|
55
66
|
|
56
67
|
# Wrap the user-defined `#subscribe` hook
|
68
|
+
# @api private
|
57
69
|
def resolve_subscribe(**args)
|
58
70
|
ret_val = !args.empty? ? subscribe(**args) : subscribe
|
59
71
|
if ret_val == :no_response
|
@@ -71,6 +83,7 @@ module GraphQL
|
|
71
83
|
end
|
72
84
|
|
73
85
|
# Wrap the user-provided `#update` hook
|
86
|
+
# @api private
|
74
87
|
def resolve_update(**args)
|
75
88
|
ret_val = !args.empty? ? update(**args) : update
|
76
89
|
if ret_val == NO_UPDATE
|
@@ -106,14 +119,13 @@ module GraphQL
|
|
106
119
|
throw :graphql_subscription_unsubscribed, update_value
|
107
120
|
end
|
108
121
|
|
109
|
-
READING_SCOPE = ::Object.new
|
110
122
|
# Call this method to provide a new subscription_scope; OR
|
111
123
|
# call it without an argument to get the subscription_scope
|
112
124
|
# @param new_scope [Symbol]
|
113
125
|
# @param optional [Boolean] If true, then don't require `scope:` to be provided to updates to this subscription.
|
114
126
|
# @return [Symbol]
|
115
|
-
def self.subscription_scope(new_scope =
|
116
|
-
if new_scope !=
|
127
|
+
def self.subscription_scope(new_scope = NOT_CONFIGURED, optional: false)
|
128
|
+
if new_scope != NOT_CONFIGURED
|
117
129
|
@subscription_scope = new_scope
|
118
130
|
@subscription_scope_optional = optional
|
119
131
|
elsif defined?(@subscription_scope)
|
@@ -150,6 +162,40 @@ module GraphQL
|
|
150
162
|
def self.topic_for(arguments:, field:, scope:)
|
151
163
|
Subscriptions::Serialize.dump_recursive([scope, field.graphql_name, arguments])
|
152
164
|
end
|
165
|
+
|
166
|
+
# Calls through to `schema.subscriptions` to register this subscription with the backend.
|
167
|
+
# This is automatically called by GraphQL-Ruby after a query finishes successfully,
|
168
|
+
# but if you need to commit the subscription during `#subscribe`, you can call it there.
|
169
|
+
# (This method also sets a flag showing that this subscription was already written.)
|
170
|
+
#
|
171
|
+
# If you call this method yourself, you may also need to {#unsubscribe}
|
172
|
+
# or call `subscriptions.delete_subscription` to clean up the database if the query crashes with an error
|
173
|
+
# later in execution.
|
174
|
+
# @return [void]
|
175
|
+
def write_subscription
|
176
|
+
if subscription_written?
|
177
|
+
raise GraphQL::Error, "`write_subscription` was called but `#{self.class}#subscription_written?` is already true. Remove a call to `write subscription`."
|
178
|
+
else
|
179
|
+
@subscription_written = true
|
180
|
+
context.schema.subscriptions.write_subscription(context.query, [event])
|
181
|
+
end
|
182
|
+
nil
|
183
|
+
end
|
184
|
+
|
185
|
+
# @return [Boolean] `true` if {#write_subscription} was called already
|
186
|
+
def subscription_written?
|
187
|
+
@subscription_written
|
188
|
+
end
|
189
|
+
|
190
|
+
# @return [Subscriptions::Event] This object is used as a representation of this subscription for the backend
|
191
|
+
def event
|
192
|
+
@event ||= Subscriptions::Event.new(
|
193
|
+
name: field.name,
|
194
|
+
arguments: @original_arguments,
|
195
|
+
context: context,
|
196
|
+
field: field,
|
197
|
+
)
|
198
|
+
end
|
153
199
|
end
|
154
200
|
end
|
155
201
|
end
|
@@ -20,12 +20,22 @@ module GraphQL
|
|
20
20
|
def after_resolve(value:, context:, object:, arguments:, **rest)
|
21
21
|
if value.is_a?(GraphQL::ExecutionError)
|
22
22
|
value
|
23
|
+
elsif @field.resolver&.method_defined?(:subscription_written?) &&
|
24
|
+
(subscription_namespace = context.namespace(:subscriptions)) &&
|
25
|
+
(subscriptions_by_path = subscription_namespace[:subscriptions])
|
26
|
+
(subscription_instance = subscriptions_by_path[context.current_path])
|
27
|
+
# If it was already written, don't append this event to be written later
|
28
|
+
if !subscription_instance.subscription_written?
|
29
|
+
events = context.namespace(:subscriptions)[:events]
|
30
|
+
events << subscription_instance.event
|
31
|
+
end
|
32
|
+
value
|
23
33
|
elsif (events = context.namespace(:subscriptions)[:events])
|
24
34
|
# This is the first execution, so gather an Event
|
25
35
|
# for the backend to register:
|
26
36
|
event = Subscriptions::Event.new(
|
27
37
|
name: field.name,
|
28
|
-
arguments:
|
38
|
+
arguments: arguments,
|
29
39
|
context: context,
|
30
40
|
field: field,
|
31
41
|
)
|
@@ -33,7 +43,7 @@ module GraphQL
|
|
33
43
|
value
|
34
44
|
elsif context.query.subscription_topic == Subscriptions::Event.serialize(
|
35
45
|
field.name,
|
36
|
-
|
46
|
+
arguments,
|
37
47
|
field,
|
38
48
|
scope: (field.subscription_scope ? context[field.subscription_scope] : nil),
|
39
49
|
)
|
@@ -45,14 +55,6 @@ module GraphQL
|
|
45
55
|
context.skip
|
46
56
|
end
|
47
57
|
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def arguments_without_field_extras(arguments:)
|
52
|
-
arguments.dup.tap do |event_args|
|
53
|
-
field.extras.each { |k| event_args.delete(k) }
|
54
|
-
end
|
55
|
-
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
@@ -20,7 +20,7 @@ module GraphQL
|
|
20
20
|
|
21
21
|
def initialize(name:, arguments:, field: nil, context: nil, scope: nil)
|
22
22
|
@name = name
|
23
|
-
@arguments = arguments
|
23
|
+
@arguments = self.class.arguments_without_field_extras(arguments: arguments, field: field)
|
24
24
|
@context = context
|
25
25
|
field ||= context.field
|
26
26
|
scope_key = field.subscription_scope
|
@@ -39,6 +39,7 @@ module GraphQL
|
|
39
39
|
# @return [String] an identifier for this unit of subscription
|
40
40
|
def self.serialize(_name, arguments, field, scope:, context: GraphQL::Query::NullContext.instance)
|
41
41
|
subscription = field.resolver || GraphQL::Schema::Subscription
|
42
|
+
arguments = arguments_without_field_extras(field: field, arguments: arguments)
|
42
43
|
normalized_args = stringify_args(field, arguments.to_h, context)
|
43
44
|
subscription.topic_for(arguments: normalized_args, field: field, scope: scope)
|
44
45
|
end
|
@@ -60,6 +61,16 @@ module GraphQL
|
|
60
61
|
end
|
61
62
|
|
62
63
|
class << self
|
64
|
+
def arguments_without_field_extras(arguments:, field:)
|
65
|
+
if !field.extras.empty?
|
66
|
+
arguments = arguments.dup
|
67
|
+
field.extras.each do |extra_key|
|
68
|
+
arguments.delete(extra_key)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
arguments
|
72
|
+
end
|
73
|
+
|
63
74
|
private
|
64
75
|
|
65
76
|
# This method does not support cyclic references in the Hash,
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GraphQL
|
4
|
+
module Tracing
|
5
|
+
# This trace class calls legacy-style tracer with payload hashes.
|
6
|
+
# New-style `trace_with` modules significantly reduce the overhead of tracing,
|
7
|
+
# but that advantage is lost when legacy-style tracers are also used (since the payload hashes are still constructed).
|
8
|
+
module CallLegacyTracers
|
9
|
+
def lex(query_string:)
|
10
|
+
(@multiplex || @query).trace("lex", { query_string: query_string }) { super }
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse(query_string:)
|
14
|
+
(@multiplex || @query).trace("parse", { query_string: query_string }) { super }
|
15
|
+
end
|
16
|
+
|
17
|
+
def validate(query:, validate:)
|
18
|
+
query.trace("validate", { validate: validate, query: query }) { super }
|
19
|
+
end
|
20
|
+
|
21
|
+
def analyze_multiplex(multiplex:)
|
22
|
+
multiplex.trace("analyze_multiplex", { multiplex: multiplex }) { super }
|
23
|
+
end
|
24
|
+
|
25
|
+
def analyze_query(query:)
|
26
|
+
query.trace("analyze_query", { query: query }) { super }
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute_multiplex(multiplex:)
|
30
|
+
multiplex.trace("execute_multiplex", { multiplex: multiplex }) { super }
|
31
|
+
end
|
32
|
+
|
33
|
+
def execute_query(query:)
|
34
|
+
query.trace("execute_query", { query: query }) { super }
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute_query_lazy(query:, multiplex:)
|
38
|
+
multiplex.trace("execute_query_lazy", { multiplex: multiplex, query: query }) { super }
|
39
|
+
end
|
40
|
+
|
41
|
+
def execute_field(field:, query:, ast_node:, arguments:, object:)
|
42
|
+
query.trace("execute_field", { field: field, query: query, ast_node: ast_node, arguments: arguments, object: object, owner: field.owner, path: query.context[:current_path] }) { super }
|
43
|
+
end
|
44
|
+
|
45
|
+
def execute_field_lazy(field:, query:, ast_node:, arguments:, object:)
|
46
|
+
query.trace("execute_field_lazy", { field: field, query: query, ast_node: ast_node, arguments: arguments, object: object, owner: field.owner, path: query.context[:current_path] }) { super }
|
47
|
+
end
|
48
|
+
|
49
|
+
def authorized(query:, type:, object:)
|
50
|
+
query.trace("authorized", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
51
|
+
end
|
52
|
+
|
53
|
+
def authorized_lazy(query:, type:, object:)
|
54
|
+
query.trace("authorized_lazy", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
55
|
+
end
|
56
|
+
|
57
|
+
def resolve_type(query:, type:, object:)
|
58
|
+
query.trace("resolve_type", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
59
|
+
end
|
60
|
+
|
61
|
+
def resolve_type_lazy(query:, type:, object:)
|
62
|
+
query.trace("resolve_type_lazy", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,67 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Tracing
|
4
|
-
# This trace class calls legacy-style tracer with payload hashes.
|
5
|
-
# New-style `trace_with` modules significantly reduce the overhead of tracing,
|
6
|
-
# but that advantage is lost when legacy-style tracers are also used (since the payload hashes are still constructed).
|
7
|
-
module CallLegacyTracers
|
8
|
-
def lex(query_string:)
|
9
|
-
(@multiplex || @query).trace("lex", { query_string: query_string }) { super }
|
10
|
-
end
|
11
|
-
|
12
|
-
def parse(query_string:)
|
13
|
-
(@multiplex || @query).trace("parse", { query_string: query_string }) { super }
|
14
|
-
end
|
15
|
-
|
16
|
-
def validate(query:, validate:)
|
17
|
-
query.trace("validate", { validate: validate, query: query }) { super }
|
18
|
-
end
|
19
|
-
|
20
|
-
def analyze_multiplex(multiplex:)
|
21
|
-
multiplex.trace("analyze_multiplex", { multiplex: multiplex }) { super }
|
22
|
-
end
|
23
|
-
|
24
|
-
def analyze_query(query:)
|
25
|
-
query.trace("analyze_query", { query: query }) { super }
|
26
|
-
end
|
27
|
-
|
28
|
-
def execute_multiplex(multiplex:)
|
29
|
-
multiplex.trace("execute_multiplex", { multiplex: multiplex }) { super }
|
30
|
-
end
|
31
|
-
|
32
|
-
def execute_query(query:)
|
33
|
-
query.trace("execute_query", { query: query }) { super }
|
34
|
-
end
|
35
|
-
|
36
|
-
def execute_query_lazy(query:, multiplex:)
|
37
|
-
multiplex.trace("execute_query_lazy", { multiplex: multiplex, query: query }) { super }
|
38
|
-
end
|
39
2
|
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def execute_field_lazy(field:, query:, ast_node:, arguments:, object:)
|
45
|
-
query.trace("execute_field_lazy", { field: field, query: query, ast_node: ast_node, arguments: arguments, object: object, owner: field.owner, path: query.context[:current_path] }) { super }
|
46
|
-
end
|
47
|
-
|
48
|
-
def authorized(query:, type:, object:)
|
49
|
-
query.trace("authorized", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
50
|
-
end
|
51
|
-
|
52
|
-
def authorized_lazy(query:, type:, object:)
|
53
|
-
query.trace("authorized_lazy", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
54
|
-
end
|
55
|
-
|
56
|
-
def resolve_type(query:, type:, object:)
|
57
|
-
query.trace("resolve_type", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
58
|
-
end
|
59
|
-
|
60
|
-
def resolve_type_lazy(query:, type:, object:)
|
61
|
-
query.trace("resolve_type_lazy", { context: query.context, type: type, object: object, path: query.context[:current_path] }) { super }
|
62
|
-
end
|
63
|
-
end
|
3
|
+
require "graphql/tracing/trace"
|
4
|
+
require "graphql/tracing/call_legacy_tracers"
|
64
5
|
|
6
|
+
module GraphQL
|
7
|
+
module Tracing
|
65
8
|
class LegacyTrace < Trace
|
66
9
|
include CallLegacyTracers
|
67
10
|
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "graphql/tracing/platform_trace"
|
4
|
+
|
3
5
|
module GraphQL
|
4
6
|
module Tracing
|
5
7
|
module PrometheusTrace
|
8
|
+
if defined?(PrometheusExporter::Server)
|
9
|
+
autoload :GraphQLCollector, "graphql/tracing/prometheus_trace/graphql_collector"
|
10
|
+
end
|
6
11
|
include PlatformTrace
|
7
12
|
|
8
13
|
def initialize(client: PrometheusExporter::Client.default, keys_whitelist: ["execute_field", "execute_field_lazy"], collector_type: "graphql", **rest)
|
data/lib/graphql/tracing.rb
CHANGED
@@ -1,38 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "graphql/tracing/trace"
|
3
|
-
require "graphql/tracing/legacy_trace"
|
4
|
-
require "graphql/tracing/legacy_hooks_trace"
|
5
2
|
|
6
|
-
# Legacy tracing:
|
7
|
-
require "graphql/tracing/active_support_notifications_tracing"
|
8
|
-
require "graphql/tracing/platform_tracing"
|
9
|
-
require "graphql/tracing/appoptics_tracing"
|
10
|
-
require "graphql/tracing/appsignal_tracing"
|
11
|
-
require "graphql/tracing/data_dog_tracing"
|
12
|
-
require "graphql/tracing/new_relic_tracing"
|
13
|
-
require "graphql/tracing/scout_tracing"
|
14
|
-
require "graphql/tracing/statsd_tracing"
|
15
|
-
require "graphql/tracing/prometheus_tracing"
|
16
|
-
|
17
|
-
# New Tracing:
|
18
|
-
require "graphql/tracing/active_support_notifications_trace"
|
19
|
-
require "graphql/tracing/platform_trace"
|
20
|
-
require "graphql/tracing/appoptics_trace"
|
21
|
-
require "graphql/tracing/appsignal_trace"
|
22
|
-
require "graphql/tracing/data_dog_trace"
|
23
|
-
require "graphql/tracing/new_relic_trace"
|
24
|
-
require "graphql/tracing/notifications_trace"
|
25
|
-
require "graphql/tracing/sentry_trace"
|
26
|
-
require "graphql/tracing/scout_trace"
|
27
|
-
require "graphql/tracing/statsd_trace"
|
28
|
-
require "graphql/tracing/prometheus_trace"
|
29
|
-
if defined?(PrometheusExporter::Server)
|
30
|
-
require "graphql/tracing/prometheus_trace/graphql_collector"
|
31
|
-
end
|
32
3
|
|
33
4
|
module GraphQL
|
34
5
|
module Tracing
|
35
|
-
|
6
|
+
autoload :Trace, "graphql/tracing/trace"
|
7
|
+
autoload :CallLegacyTracers, "graphql/tracing/call_legacy_tracers"
|
8
|
+
autoload :LegacyTrace, "graphql/tracing/legacy_trace"
|
9
|
+
autoload :LegacyHooksTrace, "graphql/tracing/legacy_hooks_trace"
|
10
|
+
autoload :NullTrace, "graphql/tracing/null_trace"
|
11
|
+
|
12
|
+
autoload :ActiveSupportNotificationsTracing, "graphql/tracing/active_support_notifications_tracing"
|
13
|
+
autoload :PlatformTracing, "graphql/tracing/platform_tracing"
|
14
|
+
autoload :AppOpticsTracing, "graphql/tracing/appoptics_tracing"
|
15
|
+
autoload :AppsignalTracing, "graphql/tracing/appsignal_tracing"
|
16
|
+
autoload :DataDogTracing, "graphql/tracing/data_dog_tracing"
|
17
|
+
autoload :NewRelicTracing, "graphql/tracing/new_relic_tracing"
|
18
|
+
autoload :NotificationsTracing, "graphql/tracing/notifications_tracing"
|
19
|
+
autoload :ScoutTracing, "graphql/tracing/scout_tracing"
|
20
|
+
autoload :StatsdTracing, "graphql/tracing/statsd_tracing"
|
21
|
+
autoload :PrometheusTracing, "graphql/tracing/prometheus_tracing"
|
22
|
+
|
23
|
+
autoload :ActiveSupportNotificationsTrace, "graphql/tracing/active_support_notifications_trace"
|
24
|
+
autoload :PlatformTrace, "graphql/tracing/platform_trace"
|
25
|
+
autoload :AppOpticsTrace, "graphql/tracing/appoptics_trace"
|
26
|
+
autoload :AppsignalTrace, "graphql/tracing/appsignal_trace"
|
27
|
+
autoload :DataDogTrace, "graphql/tracing/data_dog_trace"
|
28
|
+
autoload :NewRelicTrace, "graphql/tracing/new_relic_trace"
|
29
|
+
autoload :NotificationsTrace, "graphql/tracing/notifications_trace"
|
30
|
+
autoload :SentryTrace, "graphql/tracing/sentry_trace"
|
31
|
+
autoload :ScoutTrace, "graphql/tracing/scout_trace"
|
32
|
+
autoload :StatsdTrace, "graphql/tracing/statsd_trace"
|
33
|
+
autoload :PrometheusTrace, "graphql/tracing/prometheus_trace"
|
36
34
|
|
37
35
|
# Objects may include traceable to gain a `.trace(...)` method.
|
38
36
|
# The object must have a `@tracers` ivar of type `Array<<#trace(k, d, &b)>>`.
|
data/lib/graphql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: base64
|
@@ -594,6 +594,7 @@ files:
|
|
594
594
|
- lib/graphql/tracing/appoptics_tracing.rb
|
595
595
|
- lib/graphql/tracing/appsignal_trace.rb
|
596
596
|
- lib/graphql/tracing/appsignal_tracing.rb
|
597
|
+
- lib/graphql/tracing/call_legacy_tracers.rb
|
597
598
|
- lib/graphql/tracing/data_dog_trace.rb
|
598
599
|
- lib/graphql/tracing/data_dog_tracing.rb
|
599
600
|
- lib/graphql/tracing/legacy_hooks_trace.rb
|
@@ -602,6 +603,7 @@ files:
|
|
602
603
|
- lib/graphql/tracing/new_relic_tracing.rb
|
603
604
|
- lib/graphql/tracing/notifications_trace.rb
|
604
605
|
- lib/graphql/tracing/notifications_tracing.rb
|
606
|
+
- lib/graphql/tracing/null_trace.rb
|
605
607
|
- lib/graphql/tracing/platform_trace.rb
|
606
608
|
- lib/graphql/tracing/platform_tracing.rb
|
607
609
|
- lib/graphql/tracing/prometheus_trace.rb
|