Skip to content

Commit

Permalink
Merge pull request #934 from DataDog/feat/skip-tag-external-services-2
Browse files Browse the repository at this point in the history
Tag spans from external services
  • Loading branch information
ericmustin committed Sep 10, 2020
2 parents 18096f4 + ecf4ca0 commit 0574335
Show file tree
Hide file tree
Showing 50 changed files with 326 additions and 19 deletions.
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/active_record/events/sql.rb
@@ -1,3 +1,4 @@
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/active_record/ext'
Expand Down Expand Up @@ -39,6 +40,9 @@ def process(span, event, _id, payload)
span.resource = payload.fetch(:sql)
span.span_type = Datadog::Ext::SQL::TYPE

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/aws/instrumentation.rb
@@ -1,5 +1,6 @@
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/aws/ext'
require 'ddtrace/ext/integration'

module Datadog
module Contrib
Expand Down Expand Up @@ -29,6 +30,9 @@ def annotate!(span, context)
span.name = Ext::SPAN_COMMAND
span.resource = context.safely(:resource)

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/dalli/instrumentation.rb
@@ -1,3 +1,4 @@
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/dalli/ext'
Expand All @@ -20,6 +21,9 @@ def request(op, *args)
span.service = datadog_configuration[:service_name]
span.span_type = Datadog::Contrib::Dalli::Ext::SPAN_TYPE_COMMAND

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/elasticsearch/patcher.rb
@@ -1,5 +1,6 @@
require 'ddtrace/contrib/patcher'
require 'ddtrace/ext/app_types'
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/elasticsearch/ext'
Expand Down Expand Up @@ -77,6 +78,9 @@ def perform_request(*args)
params = JSON.generate(params) if params && !params.is_a?(String)
body = JSON.generate(body) if body && !body.is_a?(String)

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
Expand Down
6 changes: 4 additions & 2 deletions lib/ddtrace/contrib/ethon/easy_patch.rb
@@ -1,5 +1,6 @@
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
require 'ddtrace/ext/integration'
require 'ddtrace/propagation/http_propagator'
require 'ddtrace/contrib/ethon/ext'
require 'ddtrace/contrib/http_annotation_helper'
Expand All @@ -12,8 +13,8 @@ module EasyPatch
def self.included(base)
base.send(:prepend, InstanceMethods)
end

# InstanceMethods - implementing instrumentation
# rubocop:disable Metrics/ModuleLength
module InstanceMethods
include Datadog::Contrib::HttpAnnotationHelper

Expand Down Expand Up @@ -103,7 +104,8 @@ def datadog_tag_request
method = @datadog_method.to_s
end
span.resource = method

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/ethon/multi_patch.rb
@@ -1,5 +1,6 @@
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
require 'ddtrace/ext/integration'
require 'ddtrace/propagation/http_propagator'
require 'ddtrace/contrib/ethon/ext'

Expand Down Expand Up @@ -52,6 +53,9 @@ def datadog_multi_span
service: datadog_configuration[:service_name]
)

# Tag as an external peer service
@datadog_multi_span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, @datadog_multi_span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(@datadog_multi_span, analytics_sample_rate) if analytics_enabled?

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/excon/middleware.rb
@@ -1,5 +1,6 @@
require 'excon'
require 'ddtrace/ext/http'
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
require 'ddtrace/propagation/http_propagator'
Expand Down Expand Up @@ -108,6 +109,9 @@ def annotate!(span, datum)
span.service = service_name(datum[:host], @options)
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if analytics_enabled?
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/faraday/middleware.rb
@@ -1,5 +1,6 @@
require 'faraday'
require 'ddtrace/ext/http'
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/propagation/http_propagator'
require 'ddtrace/contrib/analytics'
Expand Down Expand Up @@ -41,6 +42,9 @@ def annotate!(span, env, options)
span.service = options[:split_by_domain] ? env[:url].host : options[:service_name]
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(options[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb
@@ -1,4 +1,5 @@
require 'ddtrace/ext/http'
require 'ddtrace/ext/integration'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/grpc/ext'

Expand Down Expand Up @@ -32,6 +33,9 @@ def trace(keywords)
def annotate!(span, metadata)
span.set_tags(metadata)

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb
@@ -1,4 +1,5 @@
require 'ddtrace/ext/http'
require 'ddtrace/ext/integration'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/grpc/ext'

Expand Down Expand Up @@ -46,6 +47,9 @@ def annotate!(span, metadata)
span.set_tag(header, value)
end

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/http/instrumentation.rb
Expand Up @@ -2,6 +2,7 @@
require 'ddtrace/pin'
require 'ddtrace/ext/app_types'
require 'ddtrace/ext/http'
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
require 'ddtrace/contrib/analytics'
Expand Down Expand Up @@ -83,6 +84,9 @@ def annotate_span_with_request!(span, request, request_options)
span.set_tag(Datadog::Ext::NET::TARGET_HOST, host)
span.set_tag(Datadog::Ext::NET::TARGET_PORT, port.to_s)

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
set_analytics_sample_rate(span, request_options)
end
Expand Down
3 changes: 3 additions & 0 deletions lib/ddtrace/contrib/httprb/instrumentation.rb
Expand Up @@ -72,6 +72,9 @@ def annotate_span_with_request!(span, req, req_options)
logger.debug("service #{req_options[:service_name]} span #{Ext::SPAN_REQUEST} missing uri")
end

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

set_analytics_sample_rate(span, req_options)
end

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/mongodb/subscribers.rb
@@ -1,6 +1,7 @@
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/mongodb/ext'
require 'ddtrace/contrib/mongodb/parsers'
require 'ddtrace/ext/integration'

module Datadog
module Contrib
Expand All @@ -24,6 +25,9 @@ def started(event)
query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
serialized_query = query.to_s

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if analytics_enabled?
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/mysql2/instrumentation.rb
@@ -1,4 +1,5 @@
require 'ddtrace/ext/app_types'
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/ext/sql'
require 'ddtrace/contrib/analytics'
Expand All @@ -21,6 +22,9 @@ def query(sql, options = {})
span.service = datadog_pin.service
span.span_type = Datadog::Ext::SQL::TYPE

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
3 changes: 3 additions & 0 deletions lib/ddtrace/contrib/presto/instrumentation.rb
Expand Up @@ -90,6 +90,9 @@ def decorate!(span)
set_nilable_tag!(span, :http_proxy, Ext::TAG_PROXY)
set_nilable_tag!(span, :model_version, Ext::TAG_MODEL_VERSION)

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/racecar/event.rb
@@ -1,6 +1,7 @@
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/active_support/notifications/event'
require 'ddtrace/contrib/racecar/ext'
require 'ddtrace/ext/integration'

module Datadog
module Contrib
Expand Down Expand Up @@ -37,6 +38,9 @@ def process(span, event, _id, payload)
span.service = configuration[:service_name]
span.resource = payload[:consumer_class]

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/redis/tags.rb
@@ -1,3 +1,4 @@
require 'ddtrace/ext/integration'
require 'ddtrace/ext/net'
require 'ddtrace/contrib/analytics'
require 'ddtrace/contrib/redis/ext'
Expand All @@ -9,6 +10,9 @@ module Redis
module Tags
class << self
def set_common_tags(client, span)
# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
4 changes: 4 additions & 0 deletions lib/ddtrace/contrib/rest_client/request_patch.rb
@@ -1,5 +1,6 @@
require 'ddtrace/ext/net'
require 'ddtrace/ext/distributed'
require 'ddtrace/ext/integration'
require 'ddtrace/propagation/http_propagator'
require 'ddtrace/contrib/rest_client/ext'

Expand Down Expand Up @@ -31,6 +32,9 @@ def execute(&block)
def datadog_tag_request(uri, span)
span.resource = method.to_s.upcase

# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?

Expand Down
2 changes: 1 addition & 1 deletion lib/ddtrace/contrib/sequel/database.rb
Expand Up @@ -24,7 +24,7 @@ def run(sql, options = ::Sequel::OPTS)
span.service = datadog_pin.service
span.resource = opts[:query]
span.span_type = Datadog::Ext::SQL::TYPE
Utils.set_analytics_sample_rate(span)
Utils.set_common_tags(span)
span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
response = super(sql, options)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/ddtrace/contrib/sequel/dataset.rb
Expand Up @@ -45,7 +45,7 @@ def trace_execute(super_method, sql, options, &block)
span.service = datadog_pin.service
span.resource = opts[:query]
span.span_type = Datadog::Ext::SQL::TYPE
Utils.set_analytics_sample_rate(span)
Utils.set_common_tags(span)
span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
response = super_method.call(sql, options, &block)
end
Expand Down
8 changes: 7 additions & 1 deletion lib/ddtrace/contrib/sequel/utils.rb
@@ -1,3 +1,5 @@
require 'ddtrace/ext/integration'

module Datadog
module Contrib
module Sequel
Expand Down Expand Up @@ -40,7 +42,11 @@ def parse_opts(sql, opts, db_opts)
}
end

def set_analytics_sample_rate(span)
def set_common_tags(span)
# Tag as an external peer service
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)

# Set analytics sample rate
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
end

Expand Down
8 changes: 8 additions & 0 deletions lib/ddtrace/ext/integration.rb
@@ -0,0 +1,8 @@
module Datadog
module Ext
module Integration
# Name of external service that performed the work
TAG_PEER_SERVICE = 'peer.service'.freeze
end
end
end
25 changes: 25 additions & 0 deletions spec/ddtrace/contrib/active_record/multi_db_spec.rb
@@ -1,5 +1,6 @@
require 'ddtrace/contrib/support/spec_helper'
require 'ddtrace'
require 'ddtrace/contrib/integration_examples'

require 'active_record'

Expand Down Expand Up @@ -172,6 +173,14 @@ def mysql_connection_string
# Widget isn't, ends up assigned to the default database service
expect(widget_span.service).to eq(default_db_service_name)
end

it_behaves_like 'a peer service span' do
let(:span) { gadget_span }
end

it_behaves_like 'a peer service span' do
let(:span) { widget_span }
end
end

context 'for an in-memory database' do
Expand All @@ -190,6 +199,14 @@ def mysql_connection_string
# Widget belongs to its own database
expect(widget_span.service).to eq(widget_db_service_name)
end

it_behaves_like 'a peer service span' do
let(:span) { gadget_span }
end

it_behaves_like 'a peer service span' do
let(:span) { widget_span }
end
end
end

Expand All @@ -211,6 +228,14 @@ def mysql_connection_string
# Widget belongs to its own database
expect(widget_span.service).to eq(widget_db_service_name)
end

it_behaves_like 'a peer service span' do
let(:span) { gadget_span }
end

it_behaves_like 'a peer service span' do
let(:span) { widget_span }
end
end
end
end

0 comments on commit 0574335

Please sign in to comment.