opentelemetry-instrumentation-graphql 0.21.0 → 0.22.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: 48699b82e87fb857a932c25ee18b23fc7628d5f5396e1b19797f42414db99bbc
4
- data.tar.gz: 3f450cd5c2a8f5255ee069bf434ee4e355af9be89f8b06352ad2d261f9a9085b
3
+ metadata.gz: 5015100d46cc0f99c590360df33781cc842d904c34bac8bb03775bcb92034211
4
+ data.tar.gz: 16dae74e81ea06bc994c0f974a963be0daed52a209b4db2dc6c2388f6e8f88be
5
5
  SHA512:
6
- metadata.gz: dfe590317f2815fe31fe8b9552851c1911b39a746ec573a1990b5b98754cea7f4c59569274d61e22af345ef58ec5e742ddd6f49f4e65f90d67c0849d63b994be
7
- data.tar.gz: ed778297d96522297945f402626a847e33ddad9dad664a6eb4ba877d3d155902e7d1e46ef6812430a6d0bf0af7b6e8d9340dca3b017fc2ac6f3e1af9a383e033
6
+ metadata.gz: 4afdb500fe0423832111b88a75554bb271ba5c478a4dbd7786c054e8110b69cb2f0903f1198a0fc90cf76c9d5b51a5a2bb24054ce0d54069b51a61f299acaa52
7
+ data.tar.gz: bdd7284be3c68c61791735fe2ab695dccc74a926a4bc2d91ca322330cb96716056093cf7b27f3037df45cfac7660bf8e19f6e94aec5e2c65cc7eef48550ef939
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Release History: opentelemetry-instrumentation-graphql
2
2
 
3
+ ### v0.22.0 / 2023-01-27
4
+
5
+ * ADDED: Normalize GraphQL span names for easier aggregation analysis
6
+
7
+ ### v0.21.1 / 2023-01-14
8
+
9
+ * DOCS: Fix gem homepage
10
+ * DOCS: More gem documentation fixes
11
+
3
12
  ### v0.21.0 / 2022-07-12
4
13
 
5
14
  * FIXED: Use semantic graphql attribute names
data/README.md CHANGED
@@ -40,7 +40,12 @@ OpenTelemetry::SDK.configure do |c|
40
40
  # enable_platform_authorized maps to the authorized and authorized_lazy keys
41
41
  enable_platform_authorized: false,
42
42
  # enable_platform_resolve_type maps to the resolve_type and resolve_type_lazy keys
43
- enable_platform_resolve_type: false
43
+ enable_platform_resolve_type: false,
44
+
45
+ # Controls if platform tracing (field/authorized/resolve_type)
46
+ # should use the legacy span names (e.g. "MyType.myField") or the
47
+ # new normalized span names (e.g. "graphql.execute_field").
48
+ legacy_platform_span_names: false
44
49
  }
45
50
  end
46
51
  ```
@@ -11,6 +11,10 @@ module OpenTelemetry
11
11
  module GraphQL
12
12
  # The Instrumentation class contains logic to detect and install the GraphQL instrumentation
13
13
  class Instrumentation < OpenTelemetry::Instrumentation::Base
14
+ compatible do
15
+ gem_version < Gem::Version.new('3.0.0')
16
+ end
17
+
14
18
  install do |config|
15
19
  require_dependencies
16
20
  install_tracer(config)
@@ -31,6 +35,11 @@ module OpenTelemetry
31
35
  # The enable_platform_resolve_type key expects a boolean value,
32
36
  # and enables the tracing of "resolve_type" and "resolve_type_lazy".
33
37
  #
38
+ # The legacy_platform_span_names key expects a boolean value,
39
+ # and controls if platform tracing (field/authorized/resolve_type)
40
+ # should use the legacy span names (e.g. "MyType.myField") or the
41
+ # new normalized span names (e.g. "graphql.execute_field").
42
+ #
34
43
  # The schemas key expects an array of Schemas, and is used to specify
35
44
  # which schemas are to be instrumented. If this value is not supplied
36
45
  # the default behaviour is to instrument all schemas.
@@ -38,9 +47,14 @@ module OpenTelemetry
38
47
  option :enable_platform_field, default: false, validate: :boolean
39
48
  option :enable_platform_authorized, default: false, validate: :boolean
40
49
  option :enable_platform_resolve_type, default: false, validate: :boolean
50
+ option :legacy_platform_span_names, default: false, validate: :boolean
41
51
 
42
52
  private
43
53
 
54
+ def gem_version
55
+ Gem::Version.new(::GraphQL::VERSION)
56
+ end
57
+
44
58
  def require_dependencies
45
59
  require_relative 'tracers/graphql_tracer'
46
60
  end
@@ -24,12 +24,12 @@ module OpenTelemetry
24
24
  'execute_multiplex' => 'graphql.execute_multiplex'
25
25
  }
26
26
 
27
- def platform_trace(platform_key, key, data)
27
+ def platform_trace(platform_key, key, data) # rubocop:disable Metrics/CyclomaticComplexity
28
28
  return yield if platform_key.nil?
29
29
 
30
30
  tracer.in_span(platform_key, attributes: attributes_for(key, data)) do |span|
31
31
  yield.tap do |response|
32
- errors = response[:errors]&.compact&.map { |e| e.to_h }&.to_json if key == 'validate'
32
+ errors = response[:errors]&.compact&.map(&:to_h)&.to_json if key == 'validate'
33
33
  unless errors.nil?
34
34
  span.add_event(
35
35
  'graphql.validation.error',
@@ -45,19 +45,31 @@ module OpenTelemetry
45
45
  def platform_field_key(type, field)
46
46
  return unless config[:enable_platform_field]
47
47
 
48
- "#{type.graphql_name}.#{field.graphql_name}"
48
+ if config[:legacy_platform_span_names]
49
+ "#{type.graphql_name}.#{field.graphql_name}"
50
+ else
51
+ 'graphql.execute_field'
52
+ end
49
53
  end
50
54
 
51
55
  def platform_authorized_key(type)
52
56
  return unless config[:enable_platform_authorized]
53
57
 
54
- "#{type.graphql_name}.authorized"
58
+ if config[:legacy_platform_span_names]
59
+ "#{type.graphql_name}.authorized"
60
+ else
61
+ 'graphql.authorized'
62
+ end
55
63
  end
56
64
 
57
65
  def platform_resolve_type_key(type)
58
66
  return unless config[:enable_platform_resolve_type]
59
67
 
60
- "#{type.graphql_name}.resolve_type"
68
+ if config[:legacy_platform_span_names]
69
+ "#{type.graphql_name}.resolve_type"
70
+ else
71
+ 'graphql.resolve_type'
72
+ end
61
73
  end
62
74
 
63
75
  private
@@ -70,9 +82,19 @@ module OpenTelemetry
70
82
  GraphQL::Instrumentation.instance.config
71
83
  end
72
84
 
73
- def attributes_for(key, data)
85
+ def attributes_for(key, data) # rubocop:disable Metrics/CyclomaticComplexity
74
86
  attributes = {}
75
87
  case key
88
+ when 'execute_field', 'execute_field_lazy'
89
+ attributes['graphql.field.parent'] = data[:owner]&.graphql_name # owner is the concrete type, not interface
90
+ attributes['graphql.field.name'] = data[:field]&.graphql_name
91
+ attributes['graphql.lazy'] = key == 'execute_field_lazy'
92
+ when 'authorized', 'authorized_lazy'
93
+ attributes['graphql.type.name'] = data[:type]&.graphql_name
94
+ attributes['graphql.lazy'] = key == 'authorized_lazy'
95
+ when 'resolve_type', 'resolve_type_lazy'
96
+ attributes['graphql.type.name'] = data[:type]&.graphql_name
97
+ attributes['graphql.lazy'] = key == 'resolve_type_lazy'
76
98
  when 'execute_query'
77
99
  attributes['graphql.operation.name'] = data[:query].selected_operation_name if data[:query].selected_operation_name
78
100
  attributes['graphql.operation.type'] = data[:query].selected_operation.operation_type
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module GraphQL
10
- VERSION = '0.21.0'
10
+ VERSION = '0.22.0'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-instrumentation-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-13 00:00:00.000000000 Z
11
+ date: 2023-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -56,30 +56,36 @@ dependencies:
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.17'
61
+ version: '2.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.17'
68
+ version: '2.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: graphql
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.9.0
76
+ - - "<"
74
77
  - !ruby/object:Gem::Version
75
- version: '1.11'
78
+ version: 3.0.0
76
79
  type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
- - - "~>"
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 1.9.0
86
+ - - "<"
81
87
  - !ruby/object:Gem::Version
82
- version: '1.11'
88
+ version: 3.0.0
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: minitest
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -128,28 +134,28 @@ dependencies:
128
134
  requirements:
129
135
  - - "~>"
130
136
  - !ruby/object:Gem::Version
131
- version: 12.3.3
137
+ version: '13.0'
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: 12.3.3
144
+ version: '13.0'
139
145
  - !ruby/object:Gem::Dependency
140
146
  name: rubocop
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
149
  - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: 0.73.0
151
+ version: 1.41.1
146
152
  type: :development
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
156
  - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: 0.73.0
158
+ version: 1.41.1
153
159
  - !ruby/object:Gem::Dependency
154
160
  name: simplecov
155
161
  requirement: !ruby/object:Gem::Requirement
@@ -223,14 +229,14 @@ files:
223
229
  - lib/opentelemetry/instrumentation/graphql/instrumentation.rb
224
230
  - lib/opentelemetry/instrumentation/graphql/tracers/graphql_tracer.rb
225
231
  - lib/opentelemetry/instrumentation/graphql/version.rb
226
- homepage: https://github.com/open-telemetry/opentelemetry-contrib
232
+ homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
227
233
  licenses:
228
234
  - Apache-2.0
229
235
  metadata:
230
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-graphql/v0.21.0/file.CHANGELOG.html
236
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-graphql/0.22.0/file/CHANGELOG.md
231
237
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/graphql
232
238
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
233
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-graphql/v0.21.0
239
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-graphql/0.22.0
234
240
  post_install_message:
235
241
  rdoc_options: []
236
242
  require_paths: