Class: Datadog::Core::Configuration::Settings

Inherits:
Object
  • Object
show all
Extended by:
Tracing::Configuration::Settings
Includes:
Base
Defined in:
lib/datadog/core/configuration/settings.rb

Overview

Global configuration settings for the Datadog library. rubocop:disable Metrics/BlockLength

Instance Method Summary collapse

Methods included from Tracing::Configuration::Settings

extended

Methods included from Base

included

Instance Method Details

#api_keyString?

Datadog API key.

For internal use only.

Returns:

  • (String, nil)


104
105
106
107
# File 'lib/datadog/core/configuration/settings.rb', line 104

option :api_key do |o|
  o.type :string, nilable: true
  o.env Core::Environment::Ext::ENV_API_KEY
end

#envString?

The ‘env` tag in Datadog. Use it to separate out your staging, development, and production environments.



166
167
168
169
170
# File 'lib/datadog/core/configuration/settings.rb', line 166

option :env do |o|
  o.type :string, nilable: true
  # NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.env Core::Environment::Ext::ENV_ENVIRONMENT
end

#get_time_providerProc<Numeric>

The monotonic clock time provider used by Datadog. This option is internal and is used by ‘datadog-ci` gem to avoid traces’ durations being skewed by timecop.

It must respect the interface of [Datadog::Core::Utils::Time#get_time] method.

For [Timecop](rubygems.org/gems/timecop), for example, ‘->(unit = :float_second) { ::Process.clock_gettime_without_mock(::Process::CLOCK_MONOTONIC, unit) }` allows Datadog features to use the real monotonic time when time is frozen with `Timecop.mock_process_clock = true`.

Returns:

  • (Proc<Numeric>)


724
725
726
727
728
729
730
731
732
733
734
735
736
737
# File 'lib/datadog/core/configuration/settings.rb', line 724

option :get_time_provider do |o|
  o.default_proc { |unit = :float_second| ::Process.clock_gettime(::Process::CLOCK_MONOTONIC, unit) }
  o.type :proc

  o.after_set do |get_time_provider|
    Core::Utils::Time.get_time_provider = get_time_provider
  end

  o.resetter do |_value|
    ->(unit = :float_second) { ::Process.clock_gettime(::Process::CLOCK_MONOTONIC, unit) }.tap do |default|
      Core::Utils::Time.get_time_provider = default
    end
  end
end

#serviceString

The ‘service` tag in Datadog. Use it to group related traces into a service.



587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
# File 'lib/datadog/core/configuration/settings.rb', line 587

option :service do |o|
  o.type :string, nilable: true

  # NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.env [Core::Environment::Ext::ENV_SERVICE, Core::Environment::Ext::ENV_OTEL_SERVICE]
  o.default Core::Environment::Ext::FALLBACK_SERVICE_NAME

  # There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
  # nil instead so that one can do
  # nice_service_name = Datadog.configuration.service_without_fallback || nice_service_name_default
  o.helper(:service_without_fallback) do
    service_name = service
    service_name unless service_name.equal?(Core::Environment::Ext::FALLBACK_SERVICE_NAME)
  end
end

#siteString?

The Datadog site host to send data to. By default, data is sent to the Datadog US site: ‘app.datadoghq.com`.

If your organization is on another site, you must update this value to the new site.

For internal use only.



613
614
615
616
# File 'lib/datadog/core/configuration/settings.rb', line 613

option :site do |o|
  o.type :string, nilable: true
  o.env Core::Environment::Ext::ENV_SITE
end

#tagsHash<String,String>

Default tags

These tags are used by all Datadog products, when applicable. e.g. trace spans, profiles, etc.

Returns:

  • (Hash<String,String>)


624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
# File 'lib/datadog/core/configuration/settings.rb', line 624

option :tags do |o|
  o.type :hash, nilable: true
  o.env [Core::Environment::Ext::ENV_TAGS, Core::Environment::Ext::ENV_OTEL_RESOURCE_ATTRIBUTES]
  o.env_parser do |env_value|
    # Parses a string containing key-value pairs and returns a hash.
    # Key-value pairs are delimited by ':' OR `=`, and pairs are separated by whitespace, comma, OR BOTH.
    result = {}
    unless env_value.nil? || env_value.empty?
      # falling back to comma as separator
      sep = env_value.include?(',') ? ',' : ' '
      # split by separator
      env_value.split(sep).each do |tag|
        tag.strip!
        next if tag.empty?

        # tag by : or = (for OpenTelemetry)
        key, val = tag.split(/[:=]/, 2).map(&:strip)
        val ||= ''
        # maps OpenTelemetry semantic attributes to Datadog tags
        key = case key.downcase
              when 'deployment.environment' then 'env'
              when 'service.version' then 'version'
              when 'service.name' then 'service'
              else key
              end
        result[key] = val unless key.empty?
      end
    end
    result
  end
  o.setter do |new_value, old_value|
    raw_tags = new_value || {}

    env_value = env
    version_value = version
    service_name = service_without_fallback

    # Override tags if defined
    raw_tags[Core::Environment::Ext::TAG_ENV] = env_value unless env_value.nil?
    raw_tags[Core::Environment::Ext::TAG_VERSION] = version_value unless version_value.nil?

    # Coerce keys to strings
    string_tags = raw_tags.collect { |k, v| [k.to_s, v] }.to_h

    # Cross-populate tag values with other settings
    if env_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_ENV)
      self.env = string_tags[Core::Environment::Ext::TAG_ENV]
    end

    if version_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_VERSION)
      self.version = string_tags[Core::Environment::Ext::TAG_VERSION]
    end

    if service_name.nil? && string_tags.key?(Core::Environment::Ext::TAG_SERVICE)
      self.service = string_tags[Core::Environment::Ext::TAG_SERVICE]
    end

    # Merge with previous tags
    (old_value || {}).merge(string_tags)
  end
end

#time_now_providerProc<Time>

The time provider used by Datadog. It must respect the interface of [Time](ruby-doc.org/core-3.0.1/Time.html).

When testing, it can be helpful to use a different time provider.

For [Timecop](rubygems.org/gems/timecop), for example, ‘->{ Time.now_without_mock_time }` allows Datadog features to use the real wall time when time is frozen.

Returns:

  • (Proc<Time>)


695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
# File 'lib/datadog/core/configuration/settings.rb', line 695

option :time_now_provider do |o|
  o.default_proc { ::Time.now }
  o.type :proc

  o.after_set do |time_provider|
    Core::Utils::Time.now_provider = time_provider
  end

  o.resetter do |_value|
    # TODO: Resetter needs access to the default value
    # TODO: to help reduce duplication.
    -> { ::Time.now }.tap do |default|
      Core::Utils::Time.now_provider = default
    end
  end
end

#versionString?

The ‘version` tag in Datadog. Use it to enable [Deployment Tracking](docs.datadoghq.com/tracing/deployment_tracking/).



743
744
745
746
747
# File 'lib/datadog/core/configuration/settings.rb', line 743

option :version do |o|
  # NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.type :string, nilable: true
  o.env Core::Environment::Ext::ENV_VERSION
end