module Atatus::GraphQL

@api private

Constants

CONCATENATOR
KEYS_TO_NAME
MAX_NUMBER_OF_QUERIES_FOR_NAME
MULTIPLE_QUERIES
PREFIX
SUBTYPE
TYPE
UNNAMED

Public Class Methods

trace(key, data) { || ... } click to toggle source
# File lib/atatus/graphql.rb, line 51
def self.trace(key, data)
  return yield unless KEYS_TO_NAME.key?(key)
  return yield unless (transaction = Atatus.current_transaction)

  if key == 'execute_query'
    transaction.name =
      "#{PREFIX}#{query_name(data[:query])}"
  end

  results =
    Atatus.with_span(
      KEYS_TO_NAME.fetch(key, key),
      TYPE, subtype: SUBTYPE, action: key
    ) { yield }

  if key == 'execute_multiplex'
    transaction.name = "#{PREFIX}#{concat_names(results)}"
  end

  results
end

Private Class Methods

concat_names(results) click to toggle source
# File lib/atatus/graphql.rb, line 80
def concat_names(results)
  if results.length > MAX_NUMBER_OF_QUERIES_FOR_NAME
    return MULTIPLE_QUERIES
  end

  results.map do |result|
    query_name(result.query)
  end.join(CONCATENATOR)
end
query_name(query) click to toggle source
# File lib/atatus/graphql.rb, line 76
def query_name(query)
  query.operation_name || UNNAMED
end