Module: GraphQL::Metrics::Trace

Included in:
Tracer
Defined in:
lib/graphql/metrics/trace.rb

Defined Under Namespace

Classes: PreContext

Instance Method Summary collapse

Instance Method Details

#analyze_multiplex(multiplex:) ⇒ Object

wraps all ‘analyze_query`s; only run once



42
43
44
45
46
47
48
# File 'lib/graphql/metrics/trace.rb', line 42

def analyze_multiplex(multiplex:)
  return super if skip_tracing?(multiplex)
  # Ensures that we reset potentially long-lived PreContext objects between multiplexs. We reset at this point
  # since all parsing and validation will be done by this point, and a GraphQL::Query::Context will exist.
  pre_context.reset
  super
end

#analyze_query(query:) ⇒ Object



50
51
52
53
# File 'lib/graphql/metrics/trace.rb', line 50

def analyze_query(query:)
  return super if skip_tracing?(query)
  capture_analysis_time(query.context) { super }
end

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



60
61
62
63
64
# File 'lib/graphql/metrics/trace.rb', line 60

def execute_field(field:, query:, ast_node:, arguments:, object:)
  return super if skip_tracing?(query) || query.context[SKIP_FIELD_AND_ARGUMENT_METRICS]
  return super unless GraphQL::Metrics.timings_capture_enabled?(query.context)
  trace_field(GraphQL::Metrics::INLINE_FIELD_TIMINGS, query) { super }
end

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



66
67
68
69
70
# File 'lib/graphql/metrics/trace.rb', line 66

def execute_field_lazy(field:, query:, ast_node:, arguments:, object:)
  return super if skip_tracing?(query) || query.context[SKIP_FIELD_AND_ARGUMENT_METRICS]
  return super unless GraphQL::Metrics.timings_capture_enabled?(query.context)
  trace_field(GraphQL::Metrics::LAZY_FIELD_TIMINGS, query) { super }
end

#execute_multiplex(multiplex:) ⇒ Object

wraps everything below this line; only run once



19
20
21
22
# File 'lib/graphql/metrics/trace.rb', line 19

def execute_multiplex(multiplex:)
  return super if skip_tracing?(multiplex)
  capture_multiplex_start_time { super }
end

#execute_query(query:) ⇒ Object



55
56
57
58
# File 'lib/graphql/metrics/trace.rb', line 55

def execute_query(query:)
  return super if skip_tracing?(query)
  capture_query_start_time(query.context) { super }
end

#initialize(**_rest) ⇒ Object



6
7
8
9
10
11
# File 'lib/graphql/metrics/trace.rb', line 6

def initialize(**_rest)
  super

  query_or_multiplex = @query || @multiplex
  @skip_tracing = query_or_multiplex.context&.fetch(SKIP_GRAPHQL_METRICS_ANALYSIS, false) if query_or_multiplex
end

#lex(query_string:) ⇒ Object

may not trigger if the query is passed in pre-parsed



25
26
27
28
# File 'lib/graphql/metrics/trace.rb', line 25

def lex(query_string:)
  return super if @skip_tracing
  capture_lexing_time { super }
end

#parse(query_string:) ⇒ Object

may not trigger if the query is passed in pre-parsed



31
32
33
34
# File 'lib/graphql/metrics/trace.rb', line 31

def parse(query_string:)
  return super if @skip_tracing
  capture_parsing_time { super }
end

#validate(query:, validate:) ⇒ Object



36
37
38
39
# File 'lib/graphql/metrics/trace.rb', line 36

def validate(query:, validate:)
  return super if skip_tracing?(query)
  capture_validation_time(query.context) { super }
end