graphql-metrics 3.0.0 → 4.0.1
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/.rubocop-http---shopify-github-io-ruby-style-guide-rubocop-yml +1 -8
- data/CHANGELOG.md +24 -0
- data/Gemfile.lock +5 -6
- data/README.md +3 -2
- data/graphql_metrics.gemspec +1 -3
- data/lib/graphql/metrics/analyzer.rb +23 -18
- data/lib/graphql/metrics/instrumentation.rb +3 -1
- data/lib/graphql/metrics/version.rb +1 -1
- metadata +10 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45de407a0b5642ad74d27cdb4ab00635590a38d8b719fc448a3e94d6244d7daf
|
4
|
+
data.tar.gz: cae841292ce06f25031974127696594b426b41f469e4f7f74f37f1f3a8c8f521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 861b2728422d3f8c314024084497ef761c4ca83491f3967ccffa2d540ced0de524d318a380f7966b6555a539fd30ffdfaec83cafee42f020813875148434f734
|
7
|
+
data.tar.gz: 83bde1129c7492cd92ffc097e3072275f179262530a5fccbe6e61b5c485a08bb231a3af8e29ddf88a6f0f3cdfdf5bd7101f0266e042afe37d19232a07195d922
|
@@ -76,13 +76,6 @@ Style/BlockDelimiters:
|
|
76
76
|
- proc
|
77
77
|
- it
|
78
78
|
|
79
|
-
Style/BracesAroundHashParameters:
|
80
|
-
EnforcedStyle: no_braces
|
81
|
-
SupportedStyles:
|
82
|
-
- braces
|
83
|
-
- no_braces
|
84
|
-
- context_dependent
|
85
|
-
|
86
79
|
Layout/CaseIndentation:
|
87
80
|
EnforcedStyle: end
|
88
81
|
SupportedStyles:
|
@@ -509,7 +502,7 @@ Style/WhileUntilModifier:
|
|
509
502
|
Metrics/BlockNesting:
|
510
503
|
Max: 3
|
511
504
|
|
512
|
-
|
505
|
+
Layout/LineLength:
|
513
506
|
Max: 120
|
514
507
|
AllowHeredoc: true
|
515
508
|
AllowURI: true
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
4.0.1
|
2
|
+
-----
|
3
|
+
- [24](https://github.com/Shopify/graphql-metrics/pull/24) Safely call `arguments_for` to handle arguments which may
|
4
|
+
raise `ExecutionError`s in their `prepare` methods.
|
5
|
+
|
6
|
+
4.0.0
|
7
|
+
-----
|
8
|
+
- [23](https://github.com/Shopify/graphql-metrics/pull/23) graphql-ruby 1.10.8+ compatibility
|
9
|
+
|
10
|
+
3.0.3
|
11
|
+
-----
|
12
|
+
|
13
|
+
- [#22](https://github.com/Shopify/graphql-metrics/pull/22) Optimization: use hash assignment over merge
|
14
|
+
|
15
|
+
3.0.2
|
16
|
+
-----
|
17
|
+
|
18
|
+
- [#21](https://github.com/Shopify/graphql-metrics/pull/21) Optimize empty document check
|
19
|
+
|
20
|
+
3.0.1
|
21
|
+
-----
|
22
|
+
|
23
|
+
Expand the range of graphql-ruby versions this gem is compatible with.
|
24
|
+
|
1
25
|
3.0.0
|
2
26
|
-----
|
3
27
|
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
graphql-metrics (
|
4
|
+
graphql-metrics (4.0.1)
|
5
5
|
concurrent-ruby (~> 1.1.0)
|
6
|
-
graphql (
|
6
|
+
graphql (>= 1.10.8)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -19,8 +19,8 @@ GEM
|
|
19
19
|
diffy (3.3.0)
|
20
20
|
fakeredis (0.7.0)
|
21
21
|
redis (>= 3.2, < 5.0)
|
22
|
-
graphql (1.
|
23
|
-
graphql-batch (0.4.
|
22
|
+
graphql (1.10.8)
|
23
|
+
graphql-batch (0.4.2)
|
24
24
|
graphql (>= 1.3, < 2)
|
25
25
|
promise.rb (~> 0.7.2)
|
26
26
|
hashdiff (1.0.0)
|
@@ -51,7 +51,6 @@ PLATFORMS
|
|
51
51
|
|
52
52
|
DEPENDENCIES
|
53
53
|
activesupport (~> 5.1.5)
|
54
|
-
bundler (~> 2.0.2)
|
55
54
|
diffy
|
56
55
|
fakeredis
|
57
56
|
graphql-batch
|
@@ -65,4 +64,4 @@ DEPENDENCIES
|
|
65
64
|
rake
|
66
65
|
|
67
66
|
BUNDLED WITH
|
68
|
-
2.
|
67
|
+
2.1.4
|
data/README.md
CHANGED
@@ -172,9 +172,10 @@ class Schema < GraphQL::Schema
|
|
172
172
|
use GraphQL::Execution::Interpreter # Required.
|
173
173
|
use GraphQL::Analysis::AST # Required.
|
174
174
|
|
175
|
-
instrument :query, GraphQL::Metrics::Instrumentation.new
|
176
175
|
query_analyzer SimpleAnalyzer
|
177
|
-
|
176
|
+
|
177
|
+
instrument :query, GraphQL::Metrics::Instrumentation.new # Both of these are required if either is used.
|
178
|
+
tracer GraphQL::Metrics::Tracer.new # <-- Note!
|
178
179
|
|
179
180
|
use GraphQL::Batch # Optional, but highly recommended. See https://github.com/Shopify/graphql-batch/.
|
180
181
|
end
|
data/graphql_metrics.gemspec
CHANGED
@@ -30,10 +30,8 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
+
spec.add_runtime_dependency "graphql", ">= 1.10.8"
|
33
34
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.1.0"
|
34
|
-
spec.add_runtime_dependency "graphql", "~> 1.9.15"
|
35
|
-
|
36
|
-
spec.add_development_dependency "bundler", "~> 2.0.2"
|
37
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
38
36
|
spec.add_development_dependency "minitest", "~> 5.0"
|
39
37
|
spec.add_development_dependency 'graphql-batch'
|
@@ -35,14 +35,21 @@ module GraphQL
|
|
35
35
|
return if visitor.field_definition.introspection?
|
36
36
|
return if query.context[SKIP_FIELD_AND_ARGUMENT_METRICS]
|
37
37
|
|
38
|
-
#
|
39
|
-
|
40
|
-
|
38
|
+
# Arguments can raise execution errors within their `prepare` methods
|
39
|
+
# which aren't properly handled during analysis so we have to handle
|
40
|
+
# them ourselves safely and return `nil`.
|
41
|
+
argument_values = begin
|
42
|
+
query.arguments_for(node, visitor.field_definition)
|
43
|
+
rescue ::GraphQL::ExecutionError
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
|
47
|
+
extract_arguments(argument_values, visitor.field_definition) if argument_values
|
41
48
|
|
42
49
|
static_metrics = {
|
43
50
|
field_name: node.name,
|
44
|
-
return_type_name: visitor.type_definition.
|
45
|
-
parent_type_name: visitor.parent_type_definition.
|
51
|
+
return_type_name: visitor.type_definition.graphql_name,
|
52
|
+
parent_type_name: visitor.parent_type_definition.graphql_name,
|
46
53
|
deprecated: visitor.field_definition.deprecation_reason.present?,
|
47
54
|
path: visitor.response_path,
|
48
55
|
}
|
@@ -61,14 +68,12 @@ module GraphQL
|
|
61
68
|
|
62
69
|
@static_field_metrics.each do |static_metrics|
|
63
70
|
resolver_timings = ns[GraphQL::Metrics::INLINE_FIELD_TIMINGS][static_metrics[:path]]
|
64
|
-
|
71
|
+
lazy_resolver_timings = ns[GraphQL::Metrics::LAZY_FIELD_TIMINGS][static_metrics[:path]]
|
65
72
|
|
66
|
-
|
67
|
-
|
68
|
-
lazy_resolver_timings: lazy_field_timings || [],
|
69
|
-
)
|
73
|
+
static_metrics[:resolver_timings] = resolver_timings || []
|
74
|
+
static_metrics[:lazy_resolver_timings] = lazy_resolver_timings || []
|
70
75
|
|
71
|
-
field_extracted(
|
76
|
+
field_extracted(static_metrics)
|
72
77
|
end
|
73
78
|
end
|
74
79
|
|
@@ -95,16 +100,16 @@ module GraphQL
|
|
95
100
|
argument.each_value do |a|
|
96
101
|
extract_arguments(a, field_defn, parent_input_object)
|
97
102
|
end
|
98
|
-
when ::GraphQL::
|
103
|
+
when ::GraphQL::Execution::Interpreter::Arguments
|
99
104
|
argument.each_value do |arg_val|
|
100
105
|
extract_arguments(arg_val, field_defn, parent_input_object)
|
101
106
|
end
|
102
|
-
when ::GraphQL::
|
107
|
+
when ::GraphQL::Execution::Interpreter::ArgumentValue
|
103
108
|
extract_argument(argument, field_defn, parent_input_object)
|
104
109
|
extract_arguments(argument.value, field_defn, parent_input_object)
|
105
110
|
when ::GraphQL::Schema::InputObject
|
106
111
|
input_object_argument_values = argument.arguments.argument_values.values
|
107
|
-
parent_input_object = input_object_argument_values.first&.definition&.
|
112
|
+
parent_input_object = input_object_argument_values.first&.definition&.owner
|
108
113
|
|
109
114
|
extract_arguments(input_object_argument_values, field_defn, parent_input_object)
|
110
115
|
end
|
@@ -112,10 +117,10 @@ module GraphQL
|
|
112
117
|
|
113
118
|
def extract_argument(value, field_defn, parent_input_object = nil)
|
114
119
|
static_metrics = {
|
115
|
-
argument_name: value.definition.
|
116
|
-
argument_type_name: value.definition.type.unwrap.
|
117
|
-
parent_field_name: field_defn.
|
118
|
-
parent_field_type_name: field_defn.
|
120
|
+
argument_name: value.definition.graphql_name,
|
121
|
+
argument_type_name: value.definition.type.unwrap.graphql_name,
|
122
|
+
parent_field_name: field_defn.graphql_name,
|
123
|
+
parent_field_type_name: field_defn.owner.graphql_name,
|
119
124
|
parent_input_object_type: parent_input_object&.graphql_name,
|
120
125
|
default_used: value.default_used?,
|
121
126
|
value_is_null: value.value.nil?,
|
@@ -47,7 +47,9 @@ module GraphQL
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def query_present_and_valid?(query)
|
50
|
-
|
50
|
+
# Check for selected_operation as well for graphql 1.9 compatibility
|
51
|
+
# which did not reject "empty" documents in its parser.
|
52
|
+
query.valid? && !query.selected_operation.nil?
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
metadata
CHANGED
@@ -1,57 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Butcher
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: concurrent-ruby
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.1.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.1.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: graphql
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
19
|
+
version: 1.10.8
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
26
|
+
version: 1.10.8
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: concurrent-ruby
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 1.1.0
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|