graphql-metrics 4.0.2 → 4.1.0
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/.gitignore +1 -1
- data/CHANGELOG.md +22 -0
- data/README.md +19 -16
- data/RELEASING +15 -0
- data/lib/graphql/metrics.rb +6 -0
- data/lib/graphql/metrics/analyzer.rb +1 -1
- data/lib/graphql/metrics/instrumentation.rb +5 -0
- data/lib/graphql/metrics/tracer.rb +103 -31
- data/lib/graphql/metrics/version.rb +1 -1
- data/service.yml +1 -0
- metadata +5 -4
- data/Gemfile.lock +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c32ac33ad3d4dcce935518115cb51e8b619b4f06e5eaacf6eded57b0393e8d1
|
4
|
+
data.tar.gz: 466c20309ac8e7ca599580f9145c936bbcb76cb29c9f019fa28c3be3c9c46ba7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc8fa91436e89b75faa0573007bb20ce3a381019231dcb6131f41a73395b4c62c990be07efadbf437c9f1c67f9a9a03ef328c3d379e57132dcee00332489bf7f
|
7
|
+
data.tar.gz: d465979e9f3b3ea7b7f17c0275a48bd629ab45f80eeb89e69dc7d8040dd8f615e7a23bfefdab0befb04402d192e11dfb818417c65f930dd8fdcdd3eae030715b
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
4.1.0
|
2
|
+
-----
|
3
|
+
- [42](https://github.com/Shopify/graphql-metrics/pull/42) Capture timing of the `lex` phase.
|
4
|
+
|
5
|
+
4.0.6
|
6
|
+
-----
|
7
|
+
- [35](https://github.com/Shopify/graphql-metrics/pull/35) Fix query start time, start time offset bugs.
|
8
|
+
|
9
|
+
4.0.5
|
10
|
+
-----
|
11
|
+
- [34](https://github.com/Shopify/graphql-metrics/pull/34) Fix default of pre-parsed query `parsing_duration` to be Float (`0.0`) rather than Integer (`0`).
|
12
|
+
|
13
|
+
4.0.4
|
14
|
+
-----
|
15
|
+
- [33](https://github.com/Shopify/graphql-metrics/pull/33) Setup tracing using lex or execute_multiplex tracer events.
|
16
|
+
|
17
|
+
4.0.3
|
18
|
+
-----
|
19
|
+
- [32](https://github.com/Shopify/graphql-metrics/pull/32) Split validate and analyze_query tracer events (encompasses #30).
|
20
|
+
- [30](https://github.com/Shopify/graphql-metrics/pull/30) Handle queries that have already been parsed (thank you @jturkel).
|
21
|
+
- [29](https://github.com/Shopify/graphql-metrics/pull/29) Remove runtime dependency on activesupport (thank you @jturkel).
|
22
|
+
|
1
23
|
4.0.2
|
2
24
|
-----
|
3
25
|
- [25](https://github.com/Shopify/graphql-metrics/pull/25) Safely handle interrupted runtime metrics.
|
data/README.md
CHANGED
@@ -7,6 +7,9 @@ Compatible with the [`graphql-batch` gem](https://github.com/Shopify/graphql-bat
|
|
7
7
|
|
8
8
|
Be sure to read the [CHANGELOG](CHANGELOG.md) to stay updated on feature additions, breaking changes made to this gem.
|
9
9
|
|
10
|
+
**NOTE**: Not tested with graphql-ruby's multiplexing feature. Metrics may not
|
11
|
+
be accurate if you execute multiple operations at once.
|
12
|
+
|
10
13
|
## Installation
|
11
14
|
|
12
15
|
Add this line to your application's Gemfile:
|
@@ -44,18 +47,16 @@ etc.
|
|
44
47
|
|
45
48
|
What you do with these captured metrics is up to you!
|
46
49
|
|
47
|
-
**NOTE**:
|
48
|
-
|
50
|
+
**NOTE**: If any non-`graphql-ruby` gem-related exceptions occur in your application during query document
|
51
|
+
parsing and validation, **runtime metrics** for queries (like `query_duration`, `parsing_start_time_offset` etc.) as well as field
|
52
|
+
resolver timings (like `resolver_timings`, `lazy_resolver_timings`) **may not be present** in the extracted `metrics` hash,
|
49
53
|
even if you opt to collect them by using `GraphQL::Metrics::Analyzer` and `GraphQL::Metrics::Tracer`.
|
50
54
|
|
51
|
-
More specifically, if any non-`graphql-ruby` gem-related exceptions occur in your application during query document
|
52
|
-
parsing and validation runtime metrics will not be added to the `metrics` hash.
|
53
|
-
|
54
55
|
### Define your own analyzer subclass
|
55
56
|
|
56
57
|
```ruby
|
57
|
-
class
|
58
|
-
ANALYZER_NAMESPACE = :
|
58
|
+
class SimpleAnalyzer < GraphQL::Metrics::Analyzer
|
59
|
+
ANALYZER_NAMESPACE = :simple_analyzer_namespace
|
59
60
|
|
60
61
|
def initialize(query_or_multiplex)
|
61
62
|
super
|
@@ -74,10 +75,15 @@ parsing and validation runtime metrics will not be added to the `metrics` hash.
|
|
74
75
|
# operation_name: "PostDetails",
|
75
76
|
# query_start_time: 1573833076.027327,
|
76
77
|
# query_duration: 2.0207119999686256,
|
78
|
+
# lexing_start_time_offset: 0.0010339999571442604,
|
79
|
+
# lexing_duration: 0.0008190000080503523,
|
77
80
|
# parsing_start_time_offset: 0.0010339999571442604,
|
78
81
|
# parsing_duration: 0.0008190000080503523,
|
79
82
|
# validation_start_time_offset: 0.0030819999519735575,
|
80
83
|
# validation_duration: 0.01704599999357015,
|
84
|
+
# analysis_start_time_offset: 0.0010339999571442604,
|
85
|
+
# analysis_duration: 0.0008190000080503523,
|
86
|
+
# multiplex_start_time: 0.0008190000080503523,
|
81
87
|
# }
|
82
88
|
#
|
83
89
|
# You can use these metrics to track high-level query performance, along with any other details you wish to
|
@@ -178,9 +184,6 @@ class Schema < GraphQL::Schema
|
|
178
184
|
query QueryRoot
|
179
185
|
mutation MutationRoot
|
180
186
|
|
181
|
-
use GraphQL::Execution::Interpreter # Required.
|
182
|
-
use GraphQL::Analysis::AST # Required.
|
183
|
-
|
184
187
|
query_analyzer SimpleAnalyzer
|
185
188
|
|
186
189
|
instrument :query, GraphQL::Metrics::Instrumentation.new # Both of these are required if either is used.
|
@@ -200,9 +203,6 @@ class Schema < GraphQL::Schema
|
|
200
203
|
query QueryRoot
|
201
204
|
mutation MutationRoot
|
202
205
|
|
203
|
-
use GraphQL::Execution::Interpreter # Required.
|
204
|
-
use GraphQL::Analysis::AST # Required.
|
205
|
-
|
206
206
|
query_analyzer SimpleAnalyzer
|
207
207
|
end
|
208
208
|
```
|
@@ -221,12 +221,15 @@ your application as intended, here's a breakdown of the order of execution of th
|
|
221
221
|
|
222
222
|
When used as instrumentation, an analyzer and tracing, the order of execution is:
|
223
223
|
|
224
|
-
* Tracer.
|
224
|
+
* Tracer.capture_lexing_time
|
225
225
|
* Tracer.capture_parsing_time
|
226
|
+
* Tracer.capture_multiplex_start_time
|
226
227
|
* Instrumentation.before_query (context setup)
|
227
|
-
* Tracer.capture_validation_time
|
228
|
+
* Tracer.capture_validation_time
|
229
|
+
* Tracer.capture_analysis_time
|
228
230
|
* Analyzer#initialize (bit more context setup, instance vars setup)
|
229
231
|
* Analyzer#result
|
232
|
+
* Tracer.capture_query_start_time
|
230
233
|
* Tracer.trace_field (n times)
|
231
234
|
* Instrumentation.after_query (call query and field callbacks, now that we have all static and runtime metrics
|
232
235
|
gathered)
|
@@ -250,7 +253,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
250
253
|
|
251
254
|
## Contributing
|
252
255
|
|
253
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/
|
256
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/graphql-metrics. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
254
257
|
|
255
258
|
## License
|
256
259
|
|
data/RELEASING
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Releasing graphql-metrics
|
2
|
+
|
3
|
+
1. Check the Semantic Versioning page for info on how to version the new release: http://semver.org
|
4
|
+
2. Update VERSION in lib/graphql/metrics/version.rb
|
5
|
+
3. Add a CHANGELOG entry for the new release
|
6
|
+
4. Commit the changes with a commit message like "Packaging for release X.Y.Z"
|
7
|
+
5. Tag the release with the version (Leave REV blank for HEAD or provide a SHA)
|
8
|
+
$ git tag vX.Y.Z REV
|
9
|
+
6. Push out the changes
|
10
|
+
$ git push
|
11
|
+
7. Push out the tags
|
12
|
+
$ git push --tags
|
13
|
+
8. Publish the gem
|
14
|
+
$ gem build graphql_metrics.gemspec
|
15
|
+
$ gem push graphql-metrics-X.Y.Z.gem
|
data/lib/graphql/metrics.rb
CHANGED
@@ -22,12 +22,18 @@ module GraphQL
|
|
22
22
|
ANALYZER_INSTANCE_KEY = :analyzer_instance
|
23
23
|
|
24
24
|
# Context keys to store timings for query phases of execution, field resolver timings.
|
25
|
+
MULTIPLEX_START_TIME = :multiplex_start_time
|
26
|
+
MULTIPLEX_START_TIME_MONOTONIC = :multiplex_start_time_monotonic
|
25
27
|
QUERY_START_TIME = :query_start_time
|
26
28
|
QUERY_START_TIME_MONOTONIC = :query_start_time_monotonic
|
29
|
+
LEXING_START_TIME_OFFSET = :lexing_start_time_offset
|
30
|
+
LEXING_DURATION = :lexing_duration
|
27
31
|
PARSING_START_TIME_OFFSET = :parsing_start_time_offset
|
28
32
|
PARSING_DURATION = :parsing_duration
|
29
33
|
VALIDATION_START_TIME_OFFSET = :validation_start_time_offset
|
30
34
|
VALIDATION_DURATION = :validation_duration
|
35
|
+
ANALYSIS_START_TIME_OFFSET = :analysis_start_time_offset
|
36
|
+
ANALYSIS_DURATION = :analysis_duration
|
31
37
|
INLINE_FIELD_TIMINGS = :inline_field_timings
|
32
38
|
LAZY_FIELD_TIMINGS = :lazy_field_timings
|
33
39
|
|
@@ -50,7 +50,7 @@ module GraphQL
|
|
50
50
|
field_name: node.name,
|
51
51
|
return_type_name: visitor.type_definition.graphql_name,
|
52
52
|
parent_type_name: visitor.parent_type_definition.graphql_name,
|
53
|
-
deprecated: visitor.field_definition.deprecation_reason.
|
53
|
+
deprecated: !visitor.field_definition.deprecation_reason.nil?,
|
54
54
|
path: visitor.response_path,
|
55
55
|
}
|
56
56
|
|
@@ -45,6 +45,11 @@ module GraphQL
|
|
45
45
|
parsing_duration: ns[GraphQL::Metrics::PARSING_DURATION],
|
46
46
|
validation_start_time_offset: ns[GraphQL::Metrics::VALIDATION_START_TIME_OFFSET],
|
47
47
|
validation_duration: ns[GraphQL::Metrics::VALIDATION_DURATION],
|
48
|
+
lexing_start_time_offset: ns[GraphQL::Metrics::LEXING_START_TIME_OFFSET],
|
49
|
+
lexing_duration: ns[GraphQL::Metrics::LEXING_DURATION],
|
50
|
+
analysis_start_time_offset: ns[GraphQL::Metrics::ANALYSIS_START_TIME_OFFSET],
|
51
|
+
analysis_duration: ns[GraphQL::Metrics::ANALYSIS_DURATION],
|
52
|
+
multiplex_start_time: ns[GraphQL::Metrics::MULTIPLEX_START_TIME],
|
48
53
|
}
|
49
54
|
|
50
55
|
analyzer.extract_fields
|
@@ -3,10 +3,15 @@
|
|
3
3
|
module GraphQL
|
4
4
|
module Metrics
|
5
5
|
class Tracer
|
6
|
-
# NOTE: These constants come from the graphql ruby gem
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# NOTE: These constants come from the graphql ruby gem and are in "chronological" order based on the phases
|
7
|
+
# of execution of the graphql-ruby gem. Most of them can be run multiple times when multiplexing multiple queries.
|
8
|
+
GRAPHQL_GEM_LEXING_KEY = 'lex' # may not trigger if the query is passed in pre-parsed
|
9
|
+
GRAPHQL_GEM_PARSING_KEY = 'parse' # may not trigger if the query is passed in pre-parsed
|
10
|
+
GRAPHQL_GEM_EXECUTE_MULTIPLEX_KEY = 'execute_multiplex' # wraps everything below this line; only run once
|
11
|
+
GRAPHQL_GEM_VALIDATION_KEY = 'validate'
|
12
|
+
GRAPHQL_GEM_ANALYZE_MULTIPLEX_KEY = 'analyze_multiplex' # wraps all `analyze_query`s; only run once
|
13
|
+
GRAPHQL_GEM_ANALYZE_QUERY_KEY = 'analyze_query'
|
14
|
+
GRAPHQL_GEM_EXECUTE_QUERY_KEY = 'execute_query'
|
10
15
|
GRAPHQL_GEM_TRACING_FIELD_KEYS = [
|
11
16
|
GRAPHQL_GEM_TRACING_FIELD_KEY = 'execute_field',
|
12
17
|
GRAPHQL_GEM_TRACING_LAZY_FIELD_KEY = 'execute_field_lazy'
|
@@ -14,29 +19,32 @@ module GraphQL
|
|
14
19
|
|
15
20
|
def trace(key, data, &block)
|
16
21
|
# NOTE: Context doesn't exist yet during lexing, parsing.
|
17
|
-
|
18
|
-
|
19
|
-
skip_tracing = possible_context&.fetch(GraphQL::Metrics::SKIP_GRAPHQL_METRICS_ANALYSIS, false)
|
22
|
+
context = data[:query]&.context
|
23
|
+
skip_tracing = context&.fetch(GraphQL::Metrics::SKIP_GRAPHQL_METRICS_ANALYSIS, false)
|
20
24
|
return yield if skip_tracing
|
21
25
|
|
22
|
-
# NOTE: Not all tracing events are handled here, but those that are are handled in this case statement in
|
23
|
-
# chronological order.
|
24
26
|
case key
|
25
27
|
when GRAPHQL_GEM_LEXING_KEY
|
26
|
-
return
|
28
|
+
return capture_lexing_time(&block)
|
27
29
|
when GRAPHQL_GEM_PARSING_KEY
|
28
30
|
return capture_parsing_time(&block)
|
29
|
-
when
|
30
|
-
|
31
|
-
|
32
|
-
return yield unless context.query.valid?
|
31
|
+
when GRAPHQL_GEM_EXECUTE_MULTIPLEX_KEY
|
32
|
+
return capture_multiplex_start_time(&block)
|
33
|
+
when GRAPHQL_GEM_VALIDATION_KEY
|
33
34
|
return capture_validation_time(context, &block)
|
35
|
+
when GRAPHQL_GEM_ANALYZE_MULTIPLEX_KEY
|
36
|
+
# Ensures that we reset potentially long-lived PreContext objects between multiplexs. We reset at this point
|
37
|
+
# since all parsing and validation will be done by this point, and a GraphQL::Query::Context will exist.
|
38
|
+
pre_context.reset
|
39
|
+
return yield
|
40
|
+
when GRAPHQL_GEM_ANALYZE_QUERY_KEY
|
41
|
+
return capture_analysis_time(context, &block)
|
42
|
+
when GRAPHQL_GEM_EXECUTE_QUERY_KEY
|
43
|
+
capture_query_start_time(context, &block)
|
34
44
|
when *GRAPHQL_GEM_TRACING_FIELD_KEYS
|
35
|
-
return yield if
|
45
|
+
return yield if context[SKIP_FIELD_AND_ARGUMENT_METRICS]
|
36
46
|
return yield unless GraphQL::Metrics.timings_capture_enabled?(data[:query].context)
|
37
47
|
|
38
|
-
pre_context = nil
|
39
|
-
|
40
48
|
context_key = case key
|
41
49
|
when GRAPHQL_GEM_TRACING_FIELD_KEY
|
42
50
|
GraphQL::Metrics::INLINE_FIELD_TIMINGS
|
@@ -52,44 +60,108 @@ module GraphQL
|
|
52
60
|
|
53
61
|
private
|
54
62
|
|
63
|
+
PreContext = Struct.new(
|
64
|
+
:multiplex_start_time,
|
65
|
+
:multiplex_start_time_monotonic,
|
66
|
+
:parsing_start_time_offset,
|
67
|
+
:parsing_duration,
|
68
|
+
:lexing_start_time_offset,
|
69
|
+
:lexing_duration
|
70
|
+
) do
|
71
|
+
def reset
|
72
|
+
self[:multiplex_start_time] = nil
|
73
|
+
self[:multiplex_start_time_monotonic] = nil
|
74
|
+
self[:parsing_start_time_offset] = nil
|
75
|
+
self[:parsing_duration] = nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
55
79
|
def pre_context
|
56
80
|
# NOTE: This is used to store timings from lexing, parsing, validation, before we have a context to store
|
57
81
|
# values in. Uses thread-safe Concurrent::ThreadLocalVar to store a set of values per thread.
|
58
|
-
@pre_context ||= Concurrent::ThreadLocalVar.new(
|
82
|
+
@pre_context ||= Concurrent::ThreadLocalVar.new(PreContext.new)
|
83
|
+
@pre_context.value
|
59
84
|
end
|
60
85
|
|
61
|
-
def
|
62
|
-
pre_context.
|
63
|
-
pre_context.
|
86
|
+
def capture_multiplex_start_time
|
87
|
+
pre_context.multiplex_start_time = GraphQL::Metrics.current_time
|
88
|
+
pre_context.multiplex_start_time_monotonic = GraphQL::Metrics.current_time_monotonic
|
64
89
|
|
65
90
|
yield
|
66
91
|
end
|
67
92
|
|
93
|
+
def capture_lexing_time
|
94
|
+
# GraphQL::Query#result fires `lex` before the `execute_multiplex` event, so sometimes
|
95
|
+
# `pre_context.multiplex_start_time_monotonic` isn't set.
|
96
|
+
lexing_offset_time = pre_context.multiplex_start_time_monotonic || GraphQL::Metrics.current_time_monotonic
|
97
|
+
timed_result = GraphQL::Metrics.time(lexing_offset_time) { yield }
|
98
|
+
|
99
|
+
pre_context.lexing_start_time_offset = timed_result.start_time
|
100
|
+
pre_context.lexing_duration = timed_result.duration
|
101
|
+
|
102
|
+
timed_result.result
|
103
|
+
end
|
104
|
+
|
68
105
|
def capture_parsing_time
|
69
|
-
|
106
|
+
# GraphQL::Query#result fires `parse` before the `execute_multiplex` event, so sometimes
|
107
|
+
# `pre_context.multiplex_start_time_monotonic` isn't set.
|
108
|
+
parsing_offset_time = pre_context.multiplex_start_time_monotonic || GraphQL::Metrics.current_time_monotonic
|
109
|
+
timed_result = GraphQL::Metrics.time(parsing_offset_time) { yield }
|
70
110
|
|
71
|
-
pre_context.
|
72
|
-
pre_context.
|
111
|
+
pre_context.parsing_start_time_offset = timed_result.start_time
|
112
|
+
pre_context.parsing_duration = timed_result.duration
|
73
113
|
|
74
114
|
timed_result.result
|
75
115
|
end
|
76
116
|
|
117
|
+
# Also consolidates parsing timings (if any) from the `pre_context`
|
77
118
|
def capture_validation_time(context)
|
78
|
-
|
119
|
+
# Queries may already be lexed and parsed before execution (whether a single query or multiplex).
|
120
|
+
# If we don't have those values, use some sane defaults.
|
121
|
+
if pre_context.lexing_duration.nil?
|
122
|
+
pre_context.lexing_start_time_offset = pre_context.multiplex_start_time
|
123
|
+
pre_context.lexing_duration = 0.0
|
124
|
+
end
|
125
|
+
if pre_context.parsing_duration.nil?
|
126
|
+
pre_context.parsing_start_time_offset = pre_context.multiplex_start_time
|
127
|
+
pre_context.parsing_duration = 0.0
|
128
|
+
end
|
129
|
+
|
130
|
+
timed_result = GraphQL::Metrics.time(pre_context.multiplex_start_time_monotonic) { yield }
|
79
131
|
|
80
132
|
ns = context.namespace(CONTEXT_NAMESPACE)
|
81
|
-
previous_validation_duration = ns[GraphQL::Metrics::VALIDATION_DURATION] || 0
|
82
133
|
|
83
|
-
ns[
|
84
|
-
ns[
|
85
|
-
ns[
|
86
|
-
ns[
|
134
|
+
ns[MULTIPLEX_START_TIME] = pre_context.multiplex_start_time
|
135
|
+
ns[MULTIPLEX_START_TIME_MONOTONIC] = pre_context.multiplex_start_time_monotonic
|
136
|
+
ns[LEXING_START_TIME_OFFSET] = pre_context.lexing_start_time_offset
|
137
|
+
ns[LEXING_DURATION] = pre_context.lexing_duration
|
138
|
+
ns[PARSING_START_TIME_OFFSET] = pre_context.parsing_start_time_offset
|
139
|
+
ns[PARSING_DURATION] = pre_context.parsing_duration
|
87
140
|
ns[VALIDATION_START_TIME_OFFSET] = timed_result.time_since_offset
|
88
|
-
ns[VALIDATION_DURATION] = timed_result.duration
|
141
|
+
ns[VALIDATION_DURATION] = timed_result.duration
|
89
142
|
|
90
143
|
timed_result.result
|
91
144
|
end
|
92
145
|
|
146
|
+
def capture_analysis_time(context)
|
147
|
+
ns = context.namespace(CONTEXT_NAMESPACE)
|
148
|
+
|
149
|
+
timed_result = GraphQL::Metrics.time(ns[MULTIPLEX_START_TIME_MONOTONIC]) { yield }
|
150
|
+
|
151
|
+
ns[ANALYSIS_START_TIME_OFFSET] = timed_result.time_since_offset
|
152
|
+
ns[ANALYSIS_DURATION] = timed_result.duration
|
153
|
+
|
154
|
+
timed_result.result
|
155
|
+
end
|
156
|
+
|
157
|
+
def capture_query_start_time(context)
|
158
|
+
ns = context.namespace(CONTEXT_NAMESPACE)
|
159
|
+
ns[QUERY_START_TIME] = GraphQL::Metrics.current_time
|
160
|
+
ns[QUERY_START_TIME_MONOTONIC] = GraphQL::Metrics.current_time_monotonic
|
161
|
+
|
162
|
+
yield
|
163
|
+
end
|
164
|
+
|
93
165
|
def trace_field(context_key, data)
|
94
166
|
ns = data[:query].context.namespace(CONTEXT_NAMESPACE)
|
95
167
|
query_start_time_monotonic = ns[GraphQL::Metrics::QUERY_START_TIME_MONOTONIC]
|
data/service.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
classification: library
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Butcher
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|
@@ -209,9 +209,9 @@ files:
|
|
209
209
|
- CHANGELOG.md
|
210
210
|
- CODE_OF_CONDUCT.md
|
211
211
|
- Gemfile
|
212
|
-
- Gemfile.lock
|
213
212
|
- LICENSE.txt
|
214
213
|
- README.md
|
214
|
+
- RELEASING
|
215
215
|
- Rakefile
|
216
216
|
- bin/console
|
217
217
|
- bin/setup
|
@@ -221,6 +221,7 @@ files:
|
|
221
221
|
- lib/graphql/metrics/instrumentation.rb
|
222
222
|
- lib/graphql/metrics/tracer.rb
|
223
223
|
- lib/graphql/metrics/version.rb
|
224
|
+
- service.yml
|
224
225
|
homepage: https://github.com/Shopify/graphql-metrics
|
225
226
|
licenses:
|
226
227
|
- MIT
|
@@ -240,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
241
|
- !ruby/object:Gem::Version
|
241
242
|
version: '0'
|
242
243
|
requirements: []
|
243
|
-
rubygems_version: 3.
|
244
|
+
rubygems_version: 3.1.2
|
244
245
|
signing_key:
|
245
246
|
specification_version: 4
|
246
247
|
summary: GraphQL Metrics Extractor
|
data/Gemfile.lock
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
graphql-metrics (4.0.1)
|
5
|
-
concurrent-ruby (~> 1.1.0)
|
6
|
-
graphql (>= 1.10.8)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activesupport (5.1.7)
|
12
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
-
i18n (>= 0.7, < 2)
|
14
|
-
minitest (~> 5.1)
|
15
|
-
tzinfo (~> 1.1)
|
16
|
-
byebug (11.0.1)
|
17
|
-
coderay (1.1.2)
|
18
|
-
concurrent-ruby (1.1.5)
|
19
|
-
diffy (3.3.0)
|
20
|
-
fakeredis (0.7.0)
|
21
|
-
redis (>= 3.2, < 5.0)
|
22
|
-
graphql (1.10.8)
|
23
|
-
graphql-batch (0.4.2)
|
24
|
-
graphql (>= 1.3, < 2)
|
25
|
-
promise.rb (~> 0.7.2)
|
26
|
-
hashdiff (1.0.0)
|
27
|
-
i18n (1.7.0)
|
28
|
-
concurrent-ruby (~> 1.0)
|
29
|
-
metaclass (0.0.4)
|
30
|
-
method_source (0.9.2)
|
31
|
-
minitest (5.13.0)
|
32
|
-
minitest-focus (1.1.2)
|
33
|
-
minitest (>= 4, < 6)
|
34
|
-
mocha (1.9.0)
|
35
|
-
metaclass (~> 0.0.1)
|
36
|
-
promise.rb (0.7.4)
|
37
|
-
pry (0.12.2)
|
38
|
-
coderay (~> 1.1.0)
|
39
|
-
method_source (~> 0.9.0)
|
40
|
-
pry-byebug (3.7.0)
|
41
|
-
byebug (~> 11.0)
|
42
|
-
pry (~> 0.10)
|
43
|
-
rake (13.0.1)
|
44
|
-
redis (4.1.3)
|
45
|
-
thread_safe (0.3.6)
|
46
|
-
tzinfo (1.2.5)
|
47
|
-
thread_safe (~> 0.1)
|
48
|
-
|
49
|
-
PLATFORMS
|
50
|
-
ruby
|
51
|
-
|
52
|
-
DEPENDENCIES
|
53
|
-
activesupport (~> 5.1.5)
|
54
|
-
diffy
|
55
|
-
fakeredis
|
56
|
-
graphql-batch
|
57
|
-
graphql-metrics!
|
58
|
-
hashdiff
|
59
|
-
minitest (~> 5.0)
|
60
|
-
minitest-focus
|
61
|
-
mocha
|
62
|
-
pry
|
63
|
-
pry-byebug
|
64
|
-
rake
|
65
|
-
|
66
|
-
BUNDLED WITH
|
67
|
-
2.1.4
|