lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb in opentelemetry-instrumentation-graphql-0.26.8 vs lib/opentelemetry/instrumentation/graphql/tracers/graphql_trace.rb in opentelemetry-instrumentation-graphql-0.27.0
- old
+ new
@@ -14,12 +14,50 @@
# the new GraphQL tracing API (>= 2.0.18)
module GraphQLTrace # rubocop:disable Metrics/ModuleLength
def initialize(trace_scalars: false, **_options)
@trace_scalars = trace_scalars
@_otel_field_key_cache = Hash.new { |h, k| h[k] = _otel_field_key(k) }
+ @_otel_field_key_cache.compare_by_identity
@_otel_authorized_key_cache = Hash.new { |h, k| h[k] = _otel_authorized_key(k) }
+ @_otel_authorized_key_cache.compare_by_identity
@_otel_resolve_type_key_cache = Hash.new { |h, k| h[k] = _otel_resolve_type_key(k) }
+ @_otel_resolve_type_key_cache.compare_by_identity
+
+ @_otel_type_attrs_cache = Hash.new do |h, type|
+ h[type] = {
+ 'graphql.type.name' => type.graphql_name,
+ 'graphql.lazy' => false
+ }.freeze
+ end
+ @_otel_type_attrs_cache.compare_by_identity
+
+ @_otel_lazy_type_attrs_cache = Hash.new do |h, type|
+ h[type] = {
+ 'graphql.type.name' => type.graphql_name,
+ 'graphql.lazy' => true
+ }.freeze
+ end
+ @_otel_lazy_type_attrs_cache.compare_by_identity
+
+ @_otel_field_attrs_cache = Hash.new do |h, field|
+ h[field] = {
+ 'graphql.field.parent' => field.owner&.graphql_name,
+ 'graphql.field.name' => field.graphql_name,
+ 'graphql.lazy' => false
+ }.freeze
+ end
+ @_otel_field_attrs_cache.compare_by_identity
+
+ @_otel_lazy_field_attrs_cache = Hash.new do |h, field|
+ h[field] = {
+ 'graphql.field.parent' => field.owner&.graphql_name,
+ 'graphql.field.name' => field.graphql_name,
+ 'graphql.lazy' => true
+ }.freeze
+ end
+ @_otel_lazy_field_attrs_cache.compare_by_identity
+
super
end
def execute_multiplex(multiplex:, &block)
tracer.in_span('graphql.execute_multiplex', &block)
@@ -71,76 +109,51 @@
tracer.in_span('graphql.execute_query_lazy', &block)
end
def execute_field(field:, query:, ast_node:, arguments:, object:, &block)
platform_key = _otel_execute_field_key(field: field)
- return super unless platform_key
+ return super(field: field, query: query, ast_node: ast_node, object: object, arguments: arguments, &block) unless platform_key
- attributes = {
- 'graphql.field.parent' => field.owner&.graphql_name,
- 'graphql.field.name' => field.graphql_name,
- 'graphql.lazy' => false
- }
+ attributes = @_otel_field_attrs_cache[field]
tracer.in_span(platform_key, attributes: attributes, &block)
end
def execute_field_lazy(field:, query:, ast_node:, arguments:, object:, &block)
platform_key = _otel_execute_field_key(field: field)
- return super unless platform_key
+ return super(field: field, query: query, ast_node: ast_node, object: object, arguments: arguments, &block) unless platform_key
- attributes = {
- 'graphql.field.parent' => field.owner&.graphql_name,
- 'graphql.field.name' => field.graphql_name,
- 'graphql.lazy' => true
- }
+ attributes = @_otel_lazy_field_attrs_cache[field]
tracer.in_span(platform_key, attributes: attributes, &block)
end
def authorized(query:, type:, object:, &block)
platform_key = @_otel_authorized_key_cache[type]
return super unless platform_key
- attributes = {
- 'graphql.type.name' => type.graphql_name,
- 'graphql.lazy' => false
- }
+ attributes = @_otel_type_attrs_cache[type]
tracer.in_span(platform_key, attributes: attributes, &block)
end
def authorized_lazy(query:, type:, object:, &block)
platform_key = @_otel_authorized_key_cache[type]
return super unless platform_key
- attributes = {
- 'graphql.type.name' => type.graphql_name,
- 'graphql.lazy' => true
- }
-
+ attributes = @_otel_lazy_type_attrs_cache[type]
tracer.in_span(platform_key, attributes: attributes, &block)
end
def resolve_type(query:, type:, object:, &block)
platform_key = @_otel_resolve_type_key_cache[type]
-
- attributes = {
- 'graphql.type.name' => type.graphql_name,
- 'graphql.lazy' => false
- }
-
+ attributes = @_otel_type_attrs_cache[type]
tracer.in_span(platform_key, attributes: attributes, &block)
end
def resolve_type_lazy(query:, type:, object:, &block)
platform_key = @_otel_resolve_type_key_cache[type]
-
- attributes = {
- 'graphql.type.name' => type.graphql_name,
- 'graphql.lazy' => true
- }
-
+ attributes = @_otel_lazy_type_attrs_cache[type]
tracer.in_span(platform_key, attributes: attributes, &block)
end
private