lib/graphql/tracer.rb in graphql-opentracing-0.1.0 vs lib/graphql/tracer.rb in graphql-opentracing-0.2.0
- old
+ new
@@ -1,50 +1,54 @@
+# frozen_string_literal: true
+
require 'graphql/opentracing/version'
-require 'active_support'
module GraphQL
module Tracer
- class IncompatibleGemVersion < StandardError; end;
+ class IncompatibleGemVersion < StandardError; end
class << self
attr_accessor :ignore_request, :tracer
- IgnoreRequest = ->(_name, _started, _finished, _id, _data) { false }
- CheckErrors = -> (_name, _started, _finished, _id, data) { data[:context]&.errors&.any? }
- def instrument(tracer: OpenTracing.global_tracer, ignore_request: IgnoreRequest, check_errors: CheckErrors)
+ IgnoreRequest = ->(_name, _metadata) { false }
+
+ def instrument(schema: nil, tracer: OpenTracing.global_tracer,
+ ignore_request: IgnoreRequest)
begin
require 'graphql'
rescue LoadError
return
end
raise IncompatibleGemVersion unless compatible_version?
+ @schema = schema
@ignore_request = ignore_request
- @check_errors = check_errors
@tracer = tracer
- subscribe_active_support_notifications
+ install_tracer
end
def compatible_version?
# support for ActiveSupportNotificationsTracing
Gem::Version.new(GraphQL::VERSION) >= Gem::Version.new('1.7.0')
end
- def subscribe_active_support_notifications
- ActiveSupport::Notifications.subscribe(/^graphql/) do |name, started, finished, id, data|
- next if @ignore_request.call(name, started, finished, id, data)
+ def install_tracer
+ @schema.tracer self if @schema
+ end
- tags = {
- "component" => "ruby-graphql",
- "span.kind" => "server",
- "operation" => name
- }
- span = tracer.start_span("graphql",
- tags: tags,
- start_time: started)
+ def trace(key, metadata)
+ return yield if @ignore_request.call(key, metadata)
- span.set_tag("error", true) if @check_errors.call(name, started, finished, id, data)
- span.finish(end_time: finished)
+ @tracer.start_active_span("graphql.#{key}", tags: {
+ 'component' => 'ruby-graphql',
+ 'span.kind' => 'server'
+ }) do |scope|
+ begin
+ yield
+ rescue StandardError
+ scope.span.set_tag('error', true)
+ raise
+ end
end
end
end
end
end