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

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

Overview

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

Instance Method Summary collapse

Methods included from Tracing::Configuration::Settings

extended

Methods included from OpenTelemetry::Configuration::Settings

add_settings!, extended, headers_parser, normalize_protocol, normalize_temporality_preference

Methods included from OpenFeature::Configuration::Settings

add_settings!, extended

Methods included from AIGuard::Configuration::Settings

add_settings!, extended

Methods included from Base

included

Instance Method Details

#api_keyString?

Datadog API key.

For internal use only.

Returns:

  • (String, nil)


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

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.



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

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

#experimental_propagate_process_tags_enabledBoolean

Enable process tags propagation such that payloads like spans contain the process tag.

Returns:

  • (Boolean)


1064
1065
1066
1067
1068
# File 'lib/datadog/core/configuration/settings.rb', line 1064

option :experimental_propagate_process_tags_enabled do |o|
  o.env 'DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED'
  o.default true
  o.type :bool
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>)


813
814
815
816
817
818
819
820
821
822
823
824
825
826
# File 'lib/datadog/core/configuration/settings.rb', line 813

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.



674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
# File 'lib/datadog/core/configuration/settings.rb', line 674

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.
  # Note: Alias (OTEL_SERVICE_NAME) defined in supported-configurations.json
  o.env Core::Environment::Ext::ENV_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.



701
702
703
704
# File 'lib/datadog/core/configuration/settings.rb', line 701

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>)


712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
# File 'lib/datadog/core/configuration/settings.rb', line 712

option :tags do |o|
  o.type :hash, nilable: true
  # Note: Alias (OTEL_RESOURCE_ATTRIBUTES) defined in supported-configurations.json
  o.env Core::Environment::Ext::ENV_TAGS
  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>)


784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
# File 'lib/datadog/core/configuration/settings.rb', line 784

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/).



832
833
834
835
836
# File 'lib/datadog/core/configuration/settings.rb', line 832

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