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