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
|
# File 'lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb', line 22
def trace(keywords)
formatter = GRPC::Formatting::MethodObjectFormatter.new(keywords[:method])
options = {
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND,
service: service_name, resource: formatter.resource_name,
on_error: on_error
}
metadata = keywords[:call].metadata
set_distributed_context!(metadata)
Tracing.trace(Ext::SPAN_SERVICE, **options) do |span|
annotate!(span, metadata, formatter)
begin
yield
rescue StandardError => e
code = e.is_a?(::GRPC::BadStatus) ? e.code : ::GRPC::Core::StatusCodes::UNKNOWN
span.set_tag(Contrib::Ext::RPC::GRPC::TAG_STATUS_CODE, code)
raise
else
span.set_tag(Contrib::Ext::RPC::GRPC::TAG_STATUS_CODE, ::GRPC::Core::StatusCodes::OK)
end
end
end
|