class GQLMetrics::Tracer

Attributes

api_client[R]

Public Class Methods

new(schema_definition) click to toggle source
# File lib/gql_metrics_tracer.rb, line 17
def initialize(schema_definition)
  @api_client = ApiClient.new schema_definition: schema_definition
  Thread.new { @api_client.publish_schema! }
end
use(schema_definition, _options = {}) click to toggle source
# File lib/gql_metrics_tracer.rb, line 11
def self.use(schema_definition, _options = {})
  tracer = new(schema_definition)
  schema_definition.instrument(:query, tracer)
  schema_definition.tracer(tracer)
end

Public Instance Methods

after_query(query) click to toggle source
# File lib/gql_metrics_tracer.rb, line 32
def after_query(query)
  query_tracer = query.context.dig("gqlmetrics-trace", "query-tracer")
  query_tracer.end_trace!

  Thread.new { api_client.send_trace!(query_tracer) }
end
before_query(query) click to toggle source
# File lib/gql_metrics_tracer.rb, line 22
def before_query(query)
  query.context["gqlmetrics-trace"] = {
    "query-tracer" => QueryTracer.new(
      schema_id: schema_id,
      query: query.document.to_query_string,
      operation_name: query.context[:operation_name],
    ),
  }
end
trace(key, data) { || ... } click to toggle source
# File lib/gql_metrics_tracer.rb, line 39
def trace(key, data, &block)
  if key == "execute_field"
    context = data[:context] || data[:object].context
    query_tracer = context.dig("gqlmetrics-trace", "query-tracer")

    field = !data[:context].nil? ? data[:context].field : data[:field]
    path = !data[:context].nil? ? data[:context].path : data[:path]
    parent_type = !data[:context].nil? ? data[:context].parent_type : data[:owner].graphql_name

    query_tracer.trace_field!(
      field: field,
      path: path,
      parent_type: parent_type,
      context: context,
      &block
    )
  else
    yield
  end
end