1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# frozen_string_literal: true
module GraphQL
module Tracing
module StatsdTrace
include PlatformTrace
# @param statsd [Object] A statsd client
def initialize(statsd:, **rest)
@statsd = statsd
super(**rest)
end
# rubocop:disable Development/NoEvalCop This eval takes static inputs at load-time
{
'lex' => "graphql.lex",
'parse' => "graphql.parse",
'validate' => "graphql.validate",
'analyze_query' => "graphql.analyze_query",
'analyze_multiplex' => "graphql.analyze_multiplex",
'execute_multiplex' => "graphql.execute_multiplex",
'execute_query' => "graphql.execute_query",
'execute_query_lazy' => "graphql.execute_query_lazy",
}.each do |trace_method, platform_key|
module_eval <<-RUBY, __FILE__, __LINE__
def #{trace_method}(**data)
@statsd.time("#{platform_key}") do
super
end
end
RUBY
end
# rubocop:enable Development/NoEvalCop
def platform_execute_field(platform_key, &block)
@statsd.time(platform_key, &block)
end
def platform_authorized(key, &block)
@statsd.time(key, &block)
end
alias :platform_resolve_type :platform_authorized
def platform_field_key(field)
"graphql.#{field.path}"
end
def platform_authorized_key(type)
"graphql.authorized.#{type.graphql_name}"
end
def platform_resolve_type_key(type)
"graphql.resolve_type.#{type.graphql_name}"
end
end
end
end
|