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


709
710
711
712
713
714
715
716
717
718
719
720
721
722
# File 'lib/datadog/core/configuration/settings.rb', line 709

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.



565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
# File 'lib/datadog/core/configuration/settings.rb', line 565

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.



591
592
593
594
# File 'lib/datadog/core/configuration/settings.rb', line 591

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


602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
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
# File 'lib/datadog/core/configuration/settings.rb', line 602

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|
    values = if env_value.include?(',')
               env_value.split(',')
             else
               env_value.split(' ') # rubocop:disable Style/RedundantArgument
             end
    values.map! do |v|
      v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')

      v.empty? ? nil : v
    end

    values.compact!
    values.each_with_object({}) do |tag, tags|
      key, value = tag.split(':', 2)
      if value.nil?
        # support tags/attributes delimited by the OpenTelemetry separator (`=`)
        key, value = tag.split('=', 2)
      end
      next if value.nil? || value.empty?

      # maps OpenTelemetry semantic attributes to Datadog tags
      case key.downcase
      when 'deployment.environment'
        tags['env'] = value
      when 'service.version'
        tags['version'] = value
      when 'service.name'
        tags['service'] = value
      else
        tags[key] = value
      end
    end
  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>)


680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
# File 'lib/datadog/core/configuration/settings.rb', line 680

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



728
729
730
731
732
# File 'lib/datadog/core/configuration/settings.rb', line 728

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