Method: GraphQL::Tracing::DataDogTrace#execute_field_span

Defined in:
lib/graphql/tracing/data_dog_trace.rb

#execute_field_span(span_key, query, field, ast_node, arguments, object) ⇒ Object

[View source] [View on GitHub]

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/graphql/tracing/data_dog_trace.rb', line 74

def execute_field_span(span_key, query, field, ast_node, arguments, object)
  return_type = field.type.unwrap
  trace_field = if return_type.kind.scalar? || return_type.kind.enum?
    (field.trace.nil? && @trace_scalars) || field.trace
  else
    true
  end
  platform_key = if trace_field
    @platform_key_cache[DataDogTrace].platform_field_key_cache[field]
  else
    nil
  end
  if platform_key && trace_field
    @tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
      span.set_tag('component', 'graphql')
      span.set_tag('operation', span_key)

      if @has_prepare_span
        prepare_span_data = { query: query, field: field, ast_node: ast_node, arguments: arguments, object: object }
        prepare_span(span_key, prepare_span_data, span)
      end
      yield
    end
  else
    yield
  end
end