module ElasticAPM::GraphQL
def self.trace(key, data)
def self.trace(key, data) return yield unless KEYS_TO_NAME.key?(key) return yield unless (transaction = ElasticAPM.current_transaction) if key == 'execute_query' transaction.name = "#{PREFIX}#{query_name(data[:query])}" end results = ElasticAPM.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
def concat_names(results)
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
def query_name(query)
def query_name(query) query.operation_name || UNNAMED end