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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2af911e9031c446b604b9c296caef2c89f00cb968ecf15350a6a196d6cab08d7
4
- data.tar.gz: 94e65ae882fd6222bf3b4ed9395f32dfc395ec00c85e061a458cb5fe54b9dc67
3
+ metadata.gz: 7c32ac33ad3d4dcce935518115cb51e8b619b4f06e5eaacf6eded57b0393e8d1
4
+ data.tar.gz: 466c20309ac8e7ca599580f9145c936bbcb76cb29c9f019fa28c3be3c9c46ba7
5
5
  SHA512:
6
- metadata.gz: aa3ffe4208e67594c3e65786a0a0477cdcee71506dea37988db388433eb155175d87f92e30082931e5e8c493937876e9a5a4043327b74e9e17bc474d58bd4ed9
7
- data.tar.gz: e876e9f5907cff0863a6ead3e319f34ab238b1904d0f72c8874420fdf50b5cb2941cb0f77fcfbefac35968c2bb86ec6364c5e338842dcee591eb165ee2ed14d6
6
+ metadata.gz: fc8fa91436e89b75faa0573007bb20ce3a381019231dcb6131f41a73395b4c62c990be07efadbf437c9f1c67f9a9a03ef328c3d379e57132dcee00332489bf7f
7
+ data.tar.gz: d465979e9f3b3ea7b7f17c0275a48bd629ab45f80eeb89e69dc7d8040dd8f615e7a23bfefdab0befb04402d192e11dfb818417c65f930dd8fdcdd3eae030715b
data/.gitignore CHANGED
@@ -7,5 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  *.gem
10
-
10
+ Gemfile.lock
11
11
  /vendor/
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**: Runtime metrics on for queries (like `query_duration`, `parsing_start_time_offset` etc.) as well as field
48
- resolver timings (like `resolver_timings`, `lazy_resolver_timings`) may not be present in the extracted `metrics` hash,
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 CaptureAllMetricsAnalyzer < GraphQL::Metrics::Analyzer
58
- ANALYZER_NAMESPACE = :capture_all_metrics_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.setup_tracing_before_lexing
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 (twice, once for `analyze_query`, then `analyze_multiplex`)
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/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.
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
@@ -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.present?,
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
- GRAPHQL_GEM_LEXING_KEY = 'lex'
8
- GRAPHQL_GEM_PARSING_KEY = 'parse'
9
- GRAPHQL_GEM_VALIDATION_KEYS = ['validate', 'analyze_query']
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
- possible_context = data[:query]&.context
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 setup_tracing_before_lexing(&block)
28
+ return capture_lexing_time(&block)
27
29
  when GRAPHQL_GEM_PARSING_KEY
28
30
  return capture_parsing_time(&block)
29
- when *GRAPHQL_GEM_VALIDATION_KEYS
30
- context = possible_context
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 data[:query].context[SKIP_FIELD_AND_ARGUMENT_METRICS]
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(OpenStruct.new)
82
+ @pre_context ||= Concurrent::ThreadLocalVar.new(PreContext.new)
83
+ @pre_context.value
59
84
  end
60
85
 
61
- def setup_tracing_before_lexing
62
- pre_context.value.query_start_time = GraphQL::Metrics.current_time
63
- pre_context.value.query_start_time_monotonic = GraphQL::Metrics.current_time_monotonic
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
- timed_result = GraphQL::Metrics.time { yield }
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.value.parsing_start_time_offset = timed_result.start_time
72
- pre_context.value.parsing_duration = timed_result.duration
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
- timed_result = GraphQL::Metrics.time(pre_context.value.query_start_time_monotonic) { yield }
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[QUERY_START_TIME] = pre_context.value.query_start_time
84
- ns[QUERY_START_TIME_MONOTONIC] = pre_context.value.query_start_time_monotonic
85
- ns[PARSING_START_TIME_OFFSET] = pre_context.value.parsing_start_time_offset
86
- ns[PARSING_DURATION] = pre_context.value.parsing_duration
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 + previous_validation_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]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GraphQL
4
4
  module Metrics
5
- VERSION = "4.0.2"
5
+ VERSION = "4.1.0"
6
6
  end
7
7
  end
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.2
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: 2020-06-11 00:00:00.000000000 Z
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.0.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