module Datadog::Tracing::Contrib::SpanAttributeSchema
def self.fetch_service_name(env, default)
def self.fetch_service_name(env, default) ENV.fetch(env) do if Datadog.configuration.tracing.contrib.global_default_service_name.enabled return Datadog.configuration.service end default end end
def self.filter_peer_service_sources(span, sources)
If peer.service exists, we do not read from any other source rather use peer.service as source
filter_peer_service_sources: returns filtered sources based on existence of peer.service tag
def self.filter_peer_service_sources(span, sources) ps = span.get_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE) # Do not override existing peer.service tag if it exists based on schema version return REFLEXIVE_SOURCES if not_empty_tag?(ps) # Check that peer.service is only set on spankind client/producer spans if (span.get_tag(Tracing::Metadata::Ext::TAG_KIND) == Tracing::Metadata::Ext::SpanKind::TAG_CLIENT) || (span.get_tag(Tracing::Metadata::Ext::TAG_KIND) == Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER) return sources end NO_SOURCE end
def self.not_empty_tag?(tag)
def self.not_empty_tag?(tag) tag && (tag != '') end
def self.set_peer_service!(span, sources)
def self.set_peer_service!(span, sources) # Acquire all peer.service values as well as any potential remapping peer_service_val, peer_service_source = set_peer_service_from_source(span, sources) remap_val = Datadog.configuration.tracing.contrib.peer_service_mapping[peer_service_val] # Only continue to setting peer.service if actual source is found return false unless peer_service_source span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_PEER_SERVICE_SOURCE, peer_service_source) # Set peer.service to remapped value if found otherwise normally set peer.service if remap_val span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, remap_val) span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_PEER_SERVICE_REMAP, peer_service_val) else span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, peer_service_val) end true end
def self.set_peer_service_from_source(span, sources = [])
Sets the source of where the information for peer.service was extracted from
If no values are found, it checks the default list for all spans before returning false for no result
based on the list of source tags passed as a parameter.
set_peer_service_from_source: Implements the extraction logic to determine the peer.service value
def self.set_peer_service_from_source(span, sources = []) # Filter out sources based on existence of peer.service tag sources = filter_peer_service_sources(span, sources) # Find a possible peer.service source from the list of source tags passed in sources.each do |source| source_val = span.get_tag(source) next unless not_empty_tag?(source_val) return source_val, source end false end