Class: GQLMetricsTracer
- Inherits:
-
Object
- Object
- GQLMetricsTracer
- Defined in:
- lib/gql_metrics_tracer.rb
Class Method Summary collapse
Instance Method Summary collapse
- #after_query(query) ⇒ Object
- #before_query(query) ⇒ Object
-
#initialize(schema_definition) ⇒ GQLMetricsTracer
constructor
A new instance of GQLMetricsTracer.
- #trace(key, data, &block) ⇒ Object
Constructor Details
#initialize(schema_definition) ⇒ GQLMetricsTracer
Returns a new instance of GQLMetricsTracer.
13 14 15 16 17 18 |
# File 'lib/gql_metrics_tracer.rb', line 13 def initialize(schema_definition) @schema_id = nil @schema_definition = schema_definition publish_schema! end |
Class Method Details
.use(schema_definition, _options = {}) ⇒ Object
7 8 9 10 11 |
# File 'lib/gql_metrics_tracer.rb', line 7 def self.use(schema_definition, = {}) tracer = new(schema_definition) schema_definition.instrument(:query, tracer) schema_definition.tracer(tracer) end |
Instance Method Details
#after_query(query) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/gql_metrics_tracer.rb', line 28 def after_query(query) ended_at_ns = precise_time = Time.current started_at = query.context.dig("gqlmetrics-trace", "starts-timestamp") started_at_ns = query.context.dig("gqlmetrics-trace", "starts-ns") traces = query.context.dig("gqlmetrics-trace", "traces") send_trace!( query: query.document.to_query_string, duration_ns: ended_at_ns - started_at_ns, started_at: started_at, ended_at: , traces: traces, ) end |
#before_query(query) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/gql_metrics_tracer.rb', line 20 def before_query(query) query.context["gqlmetrics-trace"] = { "starts-ns" => precise_time, "starts-timestamp" => Time.current, "traces" => [], } end |
#trace(key, data, &block) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gql_metrics_tracer.rb', line 44 def trace(key, data, &block) if key == "execute_field" field = data[:context].present? ? data[:context].field : data[:field] path = data[:context].present? ? data[:context].path : data[:path] parent_type = data[:context].present? ? data[:context].parent_type : data[:owner].graphql_name context = data[:context] || data[:object].context trace_field!(field: field, path: path, parent_type: parent_type, context: context, &block) else yield end end |