Module: GraphQL::Tracing::DataDogTrace

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

Instance Method Summary collapse

Methods included from PlatformTrace

#platform_authorized_lazy, #platform_execute_field_lazy, #platform_resolve_type_lazy

Instance Method Details

#authorized(object:, type:, query:, span_key: "authorized") ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/graphql/tracing/data_dog_trace.rb', line 113

def authorized(object:, type:, query:, span_key: "authorized")
  platform_key = @platform_key_cache[DataDogTrace].platform_authorized_key_cache[type]
  @tracer.trace(platform_key, service: @service_name) do |span|
    span.span_type = 'custom'
    if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
      span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
      span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
    end
    if @has_prepare_span
      prepare_span(span_key, {object: object, type: type, query: query}, span)
    end
    super(query: query, type: type, object: object)
  end
end

#authorized_lazy(**kwargs, &block) ⇒ Object



128
129
130
# File 'lib/graphql/tracing/data_dog_trace.rb', line 128

def authorized_lazy(**kwargs, &block)
  authorized(span_key: "authorized_lazy", **kwargs, &block)
end

#execute_field(span_key = "execute_field", query:, field:, ast_node:, arguments:, object:) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/graphql/tracing/data_dog_trace.rb', line 79

def execute_field(span_key = "execute_field", 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) do |span|
      span.span_type = 'custom'
      if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
        span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
        span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
      end
      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
      super(query: query, field: field, ast_node: ast_node, arguments: arguments, object: object)
    end
  else
    super(query: query, field: field, ast_node: ast_node, arguments: arguments, object: object)
  end
end

#execute_field_lazy(query:, field:, ast_node:, arguments:, object:) ⇒ Object



109
110
111
# File 'lib/graphql/tracing/data_dog_trace.rb', line 109

def execute_field_lazy(query:, field:, ast_node:, arguments:, object:)
  execute_field("execute_field_lazy", query: query, field: field, ast_node: ast_node, arguments: arguments, object: object)
end

#initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service: "ruby-graphql", **rest) ⇒ Object

Parameters:

  • analytics_enabled (Boolean) (defaults to: false)

    Deprecated

  • analytics_sample_rate (Float) (defaults to: 1.0)

    Deprecated



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/graphql/tracing/data_dog_trace.rb', line 8

def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service: "ruby-graphql", **rest)
  if tracer.nil?
    tracer = defined?(Datadog::Tracing) ? Datadog::Tracing : Datadog.tracer
  end
  @tracer = tracer

  analytics_available = defined?(Datadog::Contrib::Analytics) \
      && Datadog::Contrib::Analytics.respond_to?(:enabled?) \
      && Datadog::Contrib::Analytics.respond_to?(:set_sample_rate)

  @analytics_enabled = analytics_available && Datadog::Contrib::Analytics.enabled?(analytics_enabled)
  @analytics_sample_rate = analytics_sample_rate
  @service_name = service
  @has_prepare_span = respond_to?(:prepare_span)
  super
end

#platform_authorized_key(type) ⇒ Object



164
165
166
# File 'lib/graphql/tracing/data_dog_trace.rb', line 164

def platform_authorized_key(type)
  "#{type.graphql_name}.authorized"
end

#platform_field_key(field) ⇒ Object

Implement this method in a subclass to apply custom tags to datadog spans def prepare_span(key, data, span) end

Parameters:

  • key (String)

    The event being traced

  • data (Hash)

    The runtime data for this event (@see GraphQL::Tracing for keys for each event)

  • span (Datadog::Tracing::SpanOperation)

    The datadog span for this event



160
161
162
# File 'lib/graphql/tracing/data_dog_trace.rb', line 160

def platform_field_key(field)
  field.path
end

#platform_resolve_type_key(type) ⇒ Object



168
169
170
# File 'lib/graphql/tracing/data_dog_trace.rb', line 168

def platform_resolve_type_key(type)
  "#{type.graphql_name}.resolve_type"
end

#resolve_type(object:, type:, query:, span_key: "resolve_type") ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/graphql/tracing/data_dog_trace.rb', line 132

def resolve_type(object:, type:, query:, span_key: "resolve_type")
  platform_key = @platform_key_cache[DataDogTrace].platform_resolve_type_key_cache[type]
  @tracer.trace(platform_key, service: @service_name) do |span|
    span.span_type = 'custom'
    if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
      span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
      span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
    end
    if @has_prepare_span
      prepare_span(span_key, {object: object, type: type, query: query}, span)
    end
    super(query: query, type: type, object: object)
  end
end

#resolve_type_lazy(**kwargs, &block) ⇒ Object



147
148
149
# File 'lib/graphql/tracing/data_dog_trace.rb', line 147

def resolve_type_lazy(**kwargs, &block)
  resolve_type(span_key: "resolve_type_lazy", **kwargs, &block)
end