Class: GraphQL::Tracing::NotificationsTracing
- Inherits:
-
Object
- Object
- GraphQL::Tracing::NotificationsTracing
- Defined in:
- lib/graphql/tracing/notifications_tracing.rb
Overview
This implementation forwards events to a notification handler (i.e.
ActiveSupport::Notifications or Dry::Monitor::Notifications)
with a graphql
suffix.
Constant Summary collapse
- KEYS =
A cache of frequently-used keys to avoid needless string allocations
{ "lex" => "lex.graphql", "parse" => "parse.graphql", "validate" => "validate.graphql", "analyze_multiplex" => "analyze_multiplex.graphql", "analyze_query" => "analyze_query.graphql", "execute_query" => "execute_query.graphql", "execute_query_lazy" => "execute_query_lazy.graphql", "execute_field" => "execute_field.graphql", "execute_field_lazy" => "execute_field_lazy.graphql", "authorized" => "authorized.graphql", "authorized_lazy" => "authorized_lazy.graphql", "resolve_type" => "resolve_type.graphql", "resolve_type_lazy" => "resolve_type.graphql", }
- MAX_KEYS_SIZE =
100
Instance Method Summary collapse
-
#initialize(notifications_engine) ⇒ NotificationsTracing
constructor
Initialize a new NotificationsTracing instance.
-
#trace(key, metadata) { ... } ⇒ Object
Sends a GraphQL tracing event to the notification handler.
Constructor Details
#initialize(notifications_engine) ⇒ NotificationsTracing
Initialize a new NotificationsTracing instance
35 36 37 |
# File 'lib/graphql/tracing/notifications_tracing.rb', line 35 def initialize(notifications_engine) @notifications_engine = notifications_engine end |
Instance Method Details
#trace(key, metadata) { ... } ⇒ Object
Sends a GraphQL tracing event to the notification handler
. notifications_engine = Dry::Monitor::Notifications.new(:graphql) . tracer = GraphQL::Tracing::NotificationsTracing.new(notifications_engine) . tracer.trace("lex") { ... }
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/graphql/tracing/notifications_tracing.rb', line 49 def trace(key, , &blk) prefixed_key = KEYS[key] || "#{key}.graphql" # Cache the new keys while making sure not to induce a memory leak if KEYS.size < MAX_KEYS_SIZE KEYS[key] ||= prefixed_key end @notifications_engine.instrument(prefixed_key, , &blk) end |