39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/datadog/tracing/contrib/elasticsearch/patcher.rb', line 39
def perform_request(*args)
service ||= Datadog.configuration_for(transport, :service_name) || datadog_configuration[:service_name]
on_error = Datadog.configuration_for(transport, :on_error) || datadog_configuration[:on_error]
method = args[0]
path = args[1]
params = args[2]
body = args[3]
full_url = URI.parse(path)
url = full_url.path
response = nil
Tracing.trace(
Datadog::Tracing::Contrib::Elasticsearch::Ext::SPAN_QUERY,
service: service,
on_error: on_error
) do |span|
begin
connection = transport.connections.first
host = connection.host[:host] if connection
port = connection.host[:port] if connection
if datadog_configuration[:peer_service]
span.set_tag(
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
datadog_configuration[:peer_service]
)
end
if span.service != Datadog.configuration.service
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
end
span.type = Datadog::Tracing::Contrib::Elasticsearch::Ext::SPAN_TYPE_QUERY
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host) if host
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
end
span.set_tag(Datadog::Tracing::Contrib::Elasticsearch::Ext::TAG_METHOD, method)
tag_params(params, span)
tag_body(body, span)
span.set_tag(Datadog::Tracing::Contrib::Elasticsearch::Ext::TAG_URL, url)
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, host) if host
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, port) if port
quantized_url = Datadog::Tracing::Contrib::Elasticsearch::Quantize.format_url(url)
span.resource = "#{method} #{quantized_url}"
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
rescue StandardError => e
Datadog.logger.error(e.message)
Datadog::Core::Telemetry::Logger.report(e)
ensure
response = super
if response && response.respond_to?(:status)
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.status)
end
end
end
response
end
|