diff --git a/lib/ddtrace/contrib/active_record/events/sql.rb b/lib/ddtrace/contrib/active_record/events/sql.rb index 68a8372fd70..ad2dfff8a28 100644 --- a/lib/ddtrace/contrib/active_record/events/sql.rb +++ b/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' @@ -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]) diff --git a/lib/ddtrace/contrib/aws/instrumentation.rb b/lib/ddtrace/contrib/aws/instrumentation.rb index 0dee60c8363..2f923c8ab6f 100644 --- a/lib/ddtrace/contrib/aws/instrumentation.rb +++ b/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 @@ -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]) diff --git a/lib/ddtrace/contrib/dalli/instrumentation.rb b/lib/ddtrace/contrib/dalli/instrumentation.rb index 9a43fdfe3ef..67ce0c9aa2a 100644 --- a/lib/ddtrace/contrib/dalli/instrumentation.rb +++ b/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' @@ -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]) diff --git a/lib/ddtrace/contrib/elasticsearch/patcher.rb b/lib/ddtrace/contrib/elasticsearch/patcher.rb index 375779fe4dd..5a32a55a083 100644 --- a/lib/ddtrace/contrib/elasticsearch/patcher.rb +++ b/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' @@ -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]) diff --git a/lib/ddtrace/contrib/ethon/easy_patch.rb b/lib/ddtrace/contrib/ethon/easy_patch.rb index 61221b5f1bb..bb21dda4f5e 100644 --- a/lib/ddtrace/contrib/ethon/easy_patch.rb +++ b/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' @@ -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 @@ -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? diff --git a/lib/ddtrace/contrib/ethon/multi_patch.rb b/lib/ddtrace/contrib/ethon/multi_patch.rb index 4745984e820..7b9be2acd10 100644 --- a/lib/ddtrace/contrib/ethon/multi_patch.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/excon/middleware.rb b/lib/ddtrace/contrib/excon/middleware.rb index a9ec9ce5764..1d95575bf25 100644 --- a/lib/ddtrace/contrib/excon/middleware.rb +++ b/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' @@ -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) diff --git a/lib/ddtrace/contrib/faraday/middleware.rb b/lib/ddtrace/contrib/faraday/middleware.rb index b7b9219bfa9..6e70f88fccb 100644 --- a/lib/ddtrace/contrib/faraday/middleware.rb +++ b/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' @@ -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]) diff --git a/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb b/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb index 57f3f8e7688..cf00837caab 100644 --- a/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb b/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb index 639503fa801..a4af53c7136 100644 --- a/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/http/instrumentation.rb b/lib/ddtrace/contrib/http/instrumentation.rb index da8605da513..76fe662775b 100644 --- a/lib/ddtrace/contrib/http/instrumentation.rb +++ b/lib/ddtrace/contrib/http/instrumentation.rb @@ -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' @@ -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 diff --git a/lib/ddtrace/contrib/httprb/instrumentation.rb b/lib/ddtrace/contrib/httprb/instrumentation.rb index 90fdac5aab7..7354124852e 100644 --- a/lib/ddtrace/contrib/httprb/instrumentation.rb +++ b/lib/ddtrace/contrib/httprb/instrumentation.rb @@ -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 diff --git a/lib/ddtrace/contrib/mongodb/subscribers.rb b/lib/ddtrace/contrib/mongodb/subscribers.rb index dfb108fff7c..3a6835ecdac 100644 --- a/lib/ddtrace/contrib/mongodb/subscribers.rb +++ b/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 @@ -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) diff --git a/lib/ddtrace/contrib/mysql2/instrumentation.rb b/lib/ddtrace/contrib/mysql2/instrumentation.rb index 4c01d70dea7..590774c6592 100644 --- a/lib/ddtrace/contrib/mysql2/instrumentation.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/presto/instrumentation.rb b/lib/ddtrace/contrib/presto/instrumentation.rb index 3a4b4d9963a..f2e027a5bdf 100644 --- a/lib/ddtrace/contrib/presto/instrumentation.rb +++ b/lib/ddtrace/contrib/presto/instrumentation.rb @@ -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]) diff --git a/lib/ddtrace/contrib/racecar/event.rb b/lib/ddtrace/contrib/racecar/event.rb index 893f6168b5c..a3c3bec1e1a 100644 --- a/lib/ddtrace/contrib/racecar/event.rb +++ b/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 @@ -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]) diff --git a/lib/ddtrace/contrib/redis/tags.rb b/lib/ddtrace/contrib/redis/tags.rb index 9856a391798..8911b31690f 100644 --- a/lib/ddtrace/contrib/redis/tags.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/rest_client/request_patch.rb b/lib/ddtrace/contrib/rest_client/request_patch.rb index 926e2728123..ee2e0555be9 100644 --- a/lib/ddtrace/contrib/rest_client/request_patch.rb +++ b/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' @@ -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? diff --git a/lib/ddtrace/contrib/sequel/database.rb b/lib/ddtrace/contrib/sequel/database.rb index 825806b782d..e32d395682d 100644 --- a/lib/ddtrace/contrib/sequel/database.rb +++ b/lib/ddtrace/contrib/sequel/database.rb @@ -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 diff --git a/lib/ddtrace/contrib/sequel/dataset.rb b/lib/ddtrace/contrib/sequel/dataset.rb index f4f52dd86f6..991671bf67e 100644 --- a/lib/ddtrace/contrib/sequel/dataset.rb +++ b/lib/ddtrace/contrib/sequel/dataset.rb @@ -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 diff --git a/lib/ddtrace/contrib/sequel/utils.rb b/lib/ddtrace/contrib/sequel/utils.rb index 823fe9ddc7a..17ef6bc0b03 100644 --- a/lib/ddtrace/contrib/sequel/utils.rb +++ b/lib/ddtrace/contrib/sequel/utils.rb @@ -1,3 +1,5 @@ +require 'ddtrace/ext/integration' + module Datadog module Contrib module Sequel @@ -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 diff --git a/lib/ddtrace/ext/integration.rb b/lib/ddtrace/ext/integration.rb new file mode 100644 index 00000000000..61a98593ae5 --- /dev/null +++ b/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 diff --git a/spec/ddtrace/contrib/active_record/multi_db_spec.rb b/spec/ddtrace/contrib/active_record/multi_db_spec.rb index 2285583693a..8c20c267f44 100644 --- a/spec/ddtrace/contrib/active_record/multi_db_spec.rb +++ b/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' @@ -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 @@ -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 @@ -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 diff --git a/spec/ddtrace/contrib/active_record/tracer_spec.rb b/spec/ddtrace/contrib/active_record/tracer_spec.rb index bd715209305..1b6bad09462 100644 --- a/spec/ddtrace/contrib/active_record/tracer_spec.rb +++ b/spec/ddtrace/contrib/active_record/tracer_spec.rb @@ -1,5 +1,6 @@ require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' +require 'ddtrace/contrib/integration_examples' require 'ddtrace' require_relative 'app' @@ -34,6 +35,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::ActiveRecord::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false it 'calls the instrumentation when is used standalone' do diff --git a/spec/ddtrace/contrib/aws/instrumentation_spec.rb b/spec/ddtrace/contrib/aws/instrumentation_spec.rb index 4523611f96d..8fa699f6c13 100644 --- a/spec/ddtrace/contrib/aws/instrumentation_spec.rb +++ b/spec/ddtrace/contrib/aws/instrumentation_spec.rb @@ -1,5 +1,6 @@ require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' +require 'ddtrace/contrib/integration_examples' require 'aws-sdk' require 'ddtrace' @@ -55,6 +56,8 @@ expect(span.get_tag('http.status_code')).to eq('200') end + it_behaves_like 'a peer service span' + it 'returns the correct response' do expect(list_buckets.buckets.map(&:name)).to eq(['bucket1']) end diff --git a/spec/ddtrace/contrib/dalli/instrumentation_spec.rb b/spec/ddtrace/contrib/dalli/instrumentation_spec.rb index 0874a3de820..8bdb639cc61 100644 --- a/spec/ddtrace/contrib/dalli/instrumentation_spec.rb +++ b/spec/ddtrace/contrib/dalli/instrumentation_spec.rb @@ -1,5 +1,6 @@ require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' +require 'ddtrace/contrib/integration_examples' require 'dalli' require 'ddtrace' @@ -49,6 +50,8 @@ expect(span.get_tag('out.host')).to eq(test_host) expect(span.get_tag('out.port')).to eq(test_port.to_f) end + + it_behaves_like 'a peer service span' end describe 'when multiplexed configuration is provided' do @@ -76,6 +79,8 @@ expect(span.get_tag('out.host')).to eq(test_host) expect(span.get_tag('out.port')).to eq(test_port.to_f) end + + it_behaves_like 'a peer service span' end end end diff --git a/spec/ddtrace/contrib/elasticsearch/patcher_spec.rb b/spec/ddtrace/contrib/elasticsearch/patcher_spec.rb index 01a3fd09b54..59dc7160be0 100644 --- a/spec/ddtrace/contrib/elasticsearch/patcher_spec.rb +++ b/spec/ddtrace/contrib/elasticsearch/patcher_spec.rb @@ -1,5 +1,6 @@ require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' +require 'ddtrace/contrib/integration_examples' require 'ddtrace' require 'elasticsearch-transport' @@ -66,6 +67,8 @@ it { expect(span.span_type).to eq('elasticsearch') } it { expect(span.parent_id).not_to be_nil } it { expect(span.trace_id).not_to be_nil } + + it_behaves_like 'a peer service span' end describe 'health request span' do @@ -79,6 +82,8 @@ it { expect(span.span_type).to eq('elasticsearch') } it { expect(span.parent_id).not_to be_nil } it { expect(span.trace_id).not_to be_nil } + + it_behaves_like 'a peer service span' end end @@ -128,6 +133,8 @@ expect(span.get_tag('elasticsearch.body')) .to eq('{"field":"?","nested_object":{"value":"?"},"nested_array":["?"],"nested_object_array":[{"a":"?"},"?"]}') end + + it_behaves_like 'a peer service span' end end end diff --git a/spec/ddtrace/contrib/elasticsearch/transport_spec.rb b/spec/ddtrace/contrib/elasticsearch/transport_spec.rb index 850cf30116c..9b547339923 100644 --- a/spec/ddtrace/contrib/elasticsearch/transport_spec.rb +++ b/spec/ddtrace/contrib/elasticsearch/transport_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'time' require 'elasticsearch-transport' @@ -84,6 +85,8 @@ def call(env) expect(span.get_tag('out.host')).to eq(host) expect(span.get_tag('out.port')).to eq(port) end + + it_behaves_like 'a peer service span' end context 'PUT request' do @@ -113,6 +116,8 @@ def call(env) expect(span.get_tag('out.host')).to eq(host) expect(span.get_tag('out.port')).to eq(port) end + + it_behaves_like 'a peer service span' end context 'with Hash params' do diff --git a/spec/ddtrace/contrib/ethon/shared_examples.rb b/spec/ddtrace/contrib/ethon/shared_examples.rb index e4bb38c9e77..4905a47d8fd 100644 --- a/spec/ddtrace/contrib/ethon/shared_examples.rb +++ b/spec/ddtrace/contrib/ethon/shared_examples.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/ethon/integration_context' RSpec.shared_examples_for 'span' do @@ -37,6 +38,8 @@ it 'has correct service name' do expect(span.service).to eq('ethon') end + + it_behaves_like 'a peer service span' end RSpec.shared_examples_for 'instrumented request' do diff --git a/spec/ddtrace/contrib/excon/instrumentation_spec.rb b/spec/ddtrace/contrib/excon/instrumentation_spec.rb index fda255bf8ef..1b7679402c9 100644 --- a/spec/ddtrace/contrib/excon/instrumentation_spec.rb +++ b/spec/ddtrace/contrib/excon/instrumentation_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -98,6 +99,8 @@ expect(request_span.span_type).to eq(Datadog::Ext::HTTP::TYPE_OUTBOUND) expect(request_span).to_not have_error end + + it_behaves_like 'a peer service span' end context 'when there is a failing request' do @@ -117,6 +120,8 @@ expect(request_span).to have_error_type('Error 500') expect(request_span).to have_error_message('Boom!') end + + it_behaves_like 'a peer service span' end context 'when the path is not found' do @@ -163,6 +168,8 @@ expect(request_span.resource).to eq('GET') end + it_behaves_like 'a peer service span' + context 'and the host matches a specific configuration' do before do Datadog.configure do |c| @@ -257,6 +264,7 @@ end context 'global service name' do + subject(:get) { connection.get(path: '/success') } let(:service_name) { 'excon-global' } before(:each) do @@ -267,10 +275,13 @@ after(:each) { Datadog.configure { |c| c.use :excon, service_name: @old_service_name } } it do - Excon.stub({ method: :get, path: '/success' }, body: 'OK', status: 200) - connection.get(path: '/success') + subject expect(request_span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end context 'service name per request' do @@ -285,12 +296,20 @@ include_context 'connection with default middleware' let(:service_name) { 'request-with-default' } it { expect(request_span.service).to eq(service_name) } + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end context 'with custom middleware' do include_context 'connection with custom middleware' let(:service_name) { 'request-with-custom' } it { expect(request_span.service).to eq(service_name) } + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end end end diff --git a/spec/ddtrace/contrib/faraday/middleware_spec.rb b/spec/ddtrace/contrib/faraday/middleware_spec.rb index 32bcba5ca47..0c18f17be91 100644 --- a/spec/ddtrace/contrib/faraday/middleware_spec.rb +++ b/spec/ddtrace/contrib/faraday/middleware_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -59,6 +60,8 @@ expect(request_span).to_not have_error end + it_behaves_like 'a peer service span' + it 'executes without warnings' do expect { response }.to_not output(/WARNING/).to_stderr end @@ -131,6 +134,8 @@ expect(request_span.span_type).to eq(Datadog::Ext::HTTP::TYPE_OUTBOUND) expect(request_span).to_not have_error end + + it_behaves_like 'a peer service span' end context 'when there is a failing request' do @@ -150,6 +155,8 @@ expect(request_span).to have_error_type('Error 500') expect(request_span).to have_error_message('Boom!') end + + it_behaves_like 'a peer service span' end context 'with library error' do @@ -170,6 +177,10 @@ expect(request_span).to have_error_type('Faraday::ConnectionFailed') expect(request_span).to have_error_message(/Test error/) end + + it_behaves_like 'a peer service span' do + subject { client.get('/error') rescue nil } + end end context 'when there is a client error' do @@ -198,6 +209,8 @@ expect(request_span.resource).to eq('GET') end + it_behaves_like 'a peer service span' + context 'and the host matches a specific configuration' do before do Datadog.configure do |c| @@ -257,10 +270,16 @@ after(:each) { Datadog.configure { |c| c.use :faraday, service_name: @old_service_name } } + subject { client.get('/success') } + it do - client.get('/success') + subject expect(request_span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end context 'service name per request' do @@ -272,6 +291,10 @@ it do expect(request_span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end context 'configuration override' do diff --git a/spec/ddtrace/contrib/grpc/datadog_interceptor/client_spec.rb b/spec/ddtrace/contrib/grpc/datadog_interceptor/client_spec.rb index 936778c4da2..02e1016de30 100644 --- a/spec/ddtrace/contrib/grpc/datadog_interceptor/client_spec.rb +++ b/spec/ddtrace/contrib/grpc/datadog_interceptor/client_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -43,12 +44,14 @@ default_client_interceptor.request_response(keywords) {} span = fetch_spans.first expect(span.service).to eq 'rspec' + expect(span.get_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE)).to eq('rspec') clear_spans! configured_client_interceptor.request_response(keywords) {} span = fetch_spans.first expect(span.service).to eq 'cepsr' + expect(span.get_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE)).to eq('cepsr') end end @@ -65,6 +68,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false end diff --git a/spec/ddtrace/contrib/grpc/datadog_interceptor/server_spec.rb b/spec/ddtrace/contrib/grpc/datadog_interceptor/server_spec.rb index e1c424ecb16..bcbf0651b1d 100644 --- a/spec/ddtrace/contrib/grpc/datadog_interceptor/server_spec.rb +++ b/spec/ddtrace/contrib/grpc/datadog_interceptor/server_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -34,6 +35,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', true end diff --git a/spec/ddtrace/contrib/grpc/integration_spec.rb b/spec/ddtrace/contrib/grpc/integration_spec.rb index 4a0bb878575..81b89588b38 100644 --- a/spec/ddtrace/contrib/grpc/integration_spec.rb +++ b/spec/ddtrace/contrib/grpc/integration_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/grpc/integration' diff --git a/spec/ddtrace/contrib/grpc/interception_context_spec.rb b/spec/ddtrace/contrib/grpc/interception_context_spec.rb index 8839e696982..ec19f83fe2f 100644 --- a/spec/ddtrace/contrib/grpc/interception_context_spec.rb +++ b/spec/ddtrace/contrib/grpc/interception_context_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -37,6 +38,8 @@ let(:analytics_enabled_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_ENABLED } let(:analytics_sample_rate_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + + it_behaves_like 'a peer service span' end context 'request response call type' do @@ -79,6 +82,8 @@ expect(span.get_tag('error.stack')).to be_nil expect(span.get_tag(:some)).to eq 'datum' end + + it_behaves_like 'a peer service span' end context 'bidirectional streaming call type' do @@ -107,6 +112,8 @@ let(:analytics_enabled_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_ENABLED } let(:analytics_sample_rate_var) { Datadog::Contrib::GRPC::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + + it_behaves_like 'a peer service span' end context 'request response call type' do diff --git a/spec/ddtrace/contrib/http/miniapp_spec.rb b/spec/ddtrace/contrib/http/miniapp_spec.rb index d5fcb7cfd20..792852a1033 100644 --- a/spec/ddtrace/contrib/http/miniapp_spec.rb +++ b/spec/ddtrace/contrib/http/miniapp_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace' require 'net/http' @@ -56,6 +57,7 @@ http_spans.each do |span| expect(span.name).to eq('http.request') expect(span.service).to eq('net/http') + expect(span.get_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE)).to eq('net/http') expect(span.resource).to eq('GET') expect(span.get_tag('http.url')).to eq('/my/path') expect(span.get_tag('http.method')).to eq('GET') diff --git a/spec/ddtrace/contrib/http/patcher_spec.rb b/spec/ddtrace/contrib/http/patcher_spec.rb index 5c8f677c436..47ce453910b 100644 --- a/spec/ddtrace/contrib/http/patcher_spec.rb +++ b/spec/ddtrace/contrib/http/patcher_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace' require 'net/http' @@ -22,11 +23,16 @@ end describe 'with default configuration' do - it 'uses default service name' do - Net::HTTP.get(host, '/') + subject { Net::HTTP.get(host, '/') } + it 'uses default service name' do + subject expect(request_span.service).to eq('net/http') end + + it_behaves_like 'a peer service span' do + let(:span) { request_span } + end end describe 'with changed service name' do @@ -40,10 +46,15 @@ after(:each) { Datadog.configure { |c| c.use :http, service_name: Datadog::Contrib::HTTP::Ext::SERVICE_NAME } } - it 'uses new service name' do - Net::HTTP.get(host, '/') + subject { Net::HTTP.get(host, '/') } + it 'uses new service name' do + subject expect(request_span.service).to eq(new_service_name) end + + it_behaves_like 'a peer service span' do + let(:service) { request_span } + end end end diff --git a/spec/ddtrace/contrib/http/request_spec.rb b/spec/ddtrace/contrib/http/request_spec.rb index 1882d825a12..1825089c63f 100644 --- a/spec/ddtrace/contrib/http/request_spec.rb +++ b/spec/ddtrace/contrib/http/request_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -64,6 +65,8 @@ it_behaves_like 'measured span for integration', false do before { response } end + + it_behaves_like 'a peer service span' end context 'that returns 404' do @@ -87,6 +90,8 @@ expect(span.get_tag('error.msg')).to be nil end + it_behaves_like 'a peer service span' + context 'when configured with #after_request hook' do before { Datadog::Contrib::HTTP::Instrumentation.after_request(&callback) } after(:each) { Datadog::Contrib::HTTP::Instrumentation.instance_variable_set(:@after_request, nil) } @@ -149,6 +154,8 @@ expect(span.get_tag('out.port')).to eq(port.to_s) expect(span.status).to eq(0) end + + it_behaves_like 'a peer service span' end end @@ -178,6 +185,8 @@ expect(span.get_tag('out.port')).to eq(port.to_s) expect(span.status).to eq(0) end + + it_behaves_like 'a peer service span' end end @@ -200,6 +209,8 @@ expect(span.name).to eq('http.request') expect(span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' end end diff --git a/spec/ddtrace/contrib/httprb/instrumentation_spec.rb b/spec/ddtrace/contrib/httprb/instrumentation_spec.rb index 0ea9f166faf..a4743cab552 100644 --- a/spec/ddtrace/contrib/httprb/instrumentation_spec.rb +++ b/spec/ddtrace/contrib/httprb/instrumentation_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' require 'ddtrace' @@ -108,6 +109,8 @@ expect(span.service).to eq('httprb') end + it_behaves_like 'a peer service span' + it_behaves_like 'analytics for integration' do let(:analytics_enabled_var) { Datadog::Contrib::Httprb::Ext::ENV_ANALYTICS_ENABLED } let(:analytics_sample_rate_var) { Datadog::Contrib::Httprb::Ext::ENV_ANALYTICS_SAMPLE_RATE } diff --git a/spec/ddtrace/contrib/integration_examples.rb b/spec/ddtrace/contrib/integration_examples.rb new file mode 100644 index 00000000000..e9b9393fab5 --- /dev/null +++ b/spec/ddtrace/contrib/integration_examples.rb @@ -0,0 +1,10 @@ +RSpec.shared_examples 'a peer service span' do + before { subject } + + let(:peer_service) { span.service } + + it 'contains peer service tag' do + expect(span.get_tag('peer.service')).to_not be nil + expect(span.get_tag('peer.service')).to eq(peer_service) + end +end diff --git a/spec/ddtrace/contrib/mongodb/client_spec.rb b/spec/ddtrace/contrib/mongodb/client_spec.rb index 224f613608e..85012e1700e 100644 --- a/spec/ddtrace/contrib/mongodb/client_spec.rb +++ b/spec/ddtrace/contrib/mongodb/client_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -55,11 +56,15 @@ def suppress_warnings let(:service) { 'mongodb-primary' } before(:each) { Datadog.configure(client, service_name: service) } + subject { client[collection].insert_one(name: 'FKA Twigs') } + it 'produces spans with the correct service' do - client[collection].insert_one(name: 'FKA Twigs') + subject expect(spans).to have(1).items expect(spans.first.service).to eq(service) end + + it_behaves_like 'a peer service span' end context 'to disable the tracer' do @@ -91,6 +96,8 @@ def suppress_warnings let(:analytics_sample_rate_var) { Datadog::Contrib::MongoDB::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false end diff --git a/spec/ddtrace/contrib/mysql2/patcher_spec.rb b/spec/ddtrace/contrib/mysql2/patcher_spec.rb index 7e3277b846c..a98ce4fd706 100644 --- a/spec/ddtrace/contrib/mysql2/patcher_spec.rb +++ b/spec/ddtrace/contrib/mysql2/patcher_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -73,6 +74,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::Mysql2::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false end diff --git a/spec/ddtrace/contrib/presto/client_spec.rb b/spec/ddtrace/contrib/presto/client_spec.rb index 61557a0f2b6..85a76b43c3b 100644 --- a/spec/ddtrace/contrib/presto/client_spec.rb +++ b/spec/ddtrace/contrib/presto/client_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -202,6 +203,8 @@ def suppress_warnings end it_behaves_like 'measured span for integration', false + + it_behaves_like 'a peer service span' end describe '#run operation' do diff --git a/spec/ddtrace/contrib/rails/database_spec.rb b/spec/ddtrace/contrib/rails/database_spec.rb index e4882434198..401960efd06 100644 --- a/spec/ddtrace/contrib/rails/database_spec.rb +++ b/spec/ddtrace/contrib/rails/database_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/rails/rails_helper' require 'ddtrace/contrib/analytics_examples' @@ -51,6 +52,8 @@ # ensure that the sql.query tag is not set expect(span.get_tag('sql.query')).to be_nil end + + it_behaves_like 'a peer service span' end context 'on record creation' do @@ -123,12 +126,14 @@ end context 'with custom database_service' do + subject(:query) { Article.count } let(:database_service) { 'customer-db' } it 'doing a database call uses the proper service name if it is changed' do - Article.count - + subject expect(span.service).to eq('customer-db') end + + it_behaves_like 'a peer service span' end end diff --git a/spec/ddtrace/contrib/rails/redis_cache_spec.rb b/spec/ddtrace/contrib/rails/redis_cache_spec.rb index 99d54a64daf..dcbd4e8448a 100644 --- a/spec/ddtrace/contrib/rails/redis_cache_spec.rb +++ b/spec/ddtrace/contrib/rails/redis_cache_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/rails/rails_helper' # It's important that there's *NO* "require 'redis-rails'" or @@ -74,6 +75,10 @@ expect(cache.trace_id).to eq(redis.trace_id) expect(cache.span_id).to eq(redis.parent_id) end + + it_behaves_like 'a peer service span' do + let(:span) { spans.last } + end end context '#read' do @@ -134,6 +139,10 @@ expect(cache.trace_id).to eq(redis.trace_id) expect(cache.span_id).to eq(redis.parent_id) end + + it_behaves_like 'a peer service span' do + let(:span) { spans.last } + end end context '#delete' do @@ -154,6 +163,10 @@ expect(cache.trace_id).to eq(del.trace_id) expect(cache.span_id).to eq(del.parent_id) end + + it_behaves_like 'a peer service span' do + let(:span) { spans.last } + end end private diff --git a/spec/ddtrace/contrib/redis/miniapp_spec.rb b/spec/ddtrace/contrib/redis/miniapp_spec.rb index ae946b9bdcf..69319b57e53 100644 --- a/spec/ddtrace/contrib/redis/miniapp_spec.rb +++ b/spec/ddtrace/contrib/redis/miniapp_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'time' @@ -91,6 +92,14 @@ expect(redis_cmd2_span.parent_id).to eq(process_span.span_id) expect(redis_cmd2_span.trace_id).to eq(publish_span.trace_id) end + + it_behaves_like 'a peer service span' do + let(:span) { redis_cmd1_span } + end + + it_behaves_like 'a peer service span' do + let(:span) { redis_cmd2_span } + end end end end diff --git a/spec/ddtrace/contrib/redis/redis_spec.rb b/spec/ddtrace/contrib/redis/redis_spec.rb index 0b6c1446a86..1fa0aeb7a71 100644 --- a/spec/ddtrace/contrib/redis/redis_spec.rb +++ b/spec/ddtrace/contrib/redis/redis_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -89,6 +90,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end describe 'get span' do @@ -102,6 +104,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end end @@ -152,6 +155,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end end @@ -183,6 +187,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end end @@ -198,6 +203,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end describe 'get span' do @@ -217,6 +223,7 @@ end it_behaves_like 'a span with common tags' + it_behaves_like 'a peer service span' end describe 'auth span' do @@ -230,6 +237,8 @@ expect(span.resource).to eq('AUTH ?') expect(span.get_tag('redis.raw_command')).to eq('AUTH ?') end + + it_behaves_like 'a peer service span' end end end diff --git a/spec/ddtrace/contrib/rest_client/request_patch_spec.rb b/spec/ddtrace/contrib/rest_client/request_patch_spec.rb index 31eced2bd38..4b336bb04fa 100644 --- a/spec/ddtrace/contrib/rest_client/request_patch_spec.rb +++ b/spec/ddtrace/contrib/rest_client/request_patch_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -88,6 +89,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::RestClient::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false end @@ -197,6 +200,8 @@ it 'has correct service name' do expect(span.service).to eq('rest_client') end + + it_behaves_like 'a peer service span' end end end diff --git a/spec/ddtrace/contrib/sequel/configuration_spec.rb b/spec/ddtrace/contrib/sequel/configuration_spec.rb index 22aede2bbda..e08e18aa603 100644 --- a/spec/ddtrace/contrib/sequel/configuration_spec.rb +++ b/spec/ddtrace/contrib/sequel/configuration_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'time' @@ -38,44 +39,65 @@ def perform_query! context 'only with defaults' do # Expect it to be the normalized adapter name. - it do + before do Datadog.configure { |c| c.use :sequel } perform_query! + end + + it do expect(span.service).to eq('sqlite') end + + it_behaves_like 'a peer service span' end context 'with options set via #use' do let(:service_name) { 'my-sequel' } - it do + before do Datadog.configure { |c| c.use :sequel, service_name: service_name } perform_query! + end + + it do expect(span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' end context 'with options set on Sequel::Database' do let(:service_name) { 'custom-sequel' } - it do + before do Datadog.configure { |c| c.use :sequel } Datadog.configure(sequel, service_name: service_name) + Datadog.configure { |c| c.use :sequel } perform_query! + end + + it do expect(span.service).to eq(service_name) end + + it_behaves_like 'a peer service span' end context 'after the database has been initialized' do # NOTE: This test really only works when run in isolation. # It relies on Sequel not being patched, and there's # no way to unpatch it once its happened in other tests. - it do + before do sequel Datadog.configure { |c| c.use :sequel } perform_query! + end + + it do expect(span.service).to eq('sqlite') end + + it_behaves_like 'a peer service span' end end end diff --git a/spec/ddtrace/contrib/sequel/instrumentation_spec.rb b/spec/ddtrace/contrib/sequel/instrumentation_spec.rb index 88712221601..bf93328babc 100644 --- a/spec/ddtrace/contrib/sequel/instrumentation_spec.rb +++ b/spec/ddtrace/contrib/sequel/instrumentation_spec.rb @@ -1,3 +1,4 @@ +require 'ddtrace/contrib/integration_examples' require 'ddtrace/contrib/support/spec_helper' require 'ddtrace/contrib/analytics_examples' @@ -69,6 +70,8 @@ let(:analytics_sample_rate_var) { Datadog::Contrib::Sequel::Ext::ENV_ANALYTICS_SAMPLE_RATE } end + it_behaves_like 'a peer service span' + it_behaves_like 'measured span for integration', false end