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)


80
81
82
83
# File 'lib/datadog/core/configuration/settings.rb', line 80

option :api_key do |o|
  o.default { ENV.fetch(Core::Environment::Ext::ENV_API_KEY, nil) }
  o.lazy
end

#envString?

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



155
156
157
158
159
# File 'lib/datadog/core/configuration/settings.rb', line 155

option :env do |o|
  # NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.default { ENV.fetch(Core::Environment::Ext::ENV_ENVIRONMENT, nil) }
  o.lazy
end

#serviceString

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



323
324
325
326
327
328
329
330
331
332
333
334
335
# File 'lib/datadog/core/configuration/settings.rb', line 323

option :service do |o|
  # NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.default { ENV.fetch(Core::Environment::Ext::ENV_SERVICE, Core::Environment::Ext::FALLBACK_SERVICE_NAME) }
  o.lazy

  # 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.



347
348
349
350
# File 'lib/datadog/core/configuration/settings.rb', line 347

option :site do |o|
  o.default { ENV.fetch(Core::Environment::Ext::ENV_SITE, nil) }
  o.lazy
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>)


358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
# File 'lib/datadog/core/configuration/settings.rb', line 358

option :tags do |o|
  o.default do
    tags = {}

    # Parse tags from environment
    env_to_list(Core::Environment::Ext::ENV_TAGS, comma_separated_only: false).each do |tag|
      key, value = tag.split(':', 2)
      tags[key] = value if value && !value.empty?
    end

    # Override tags if defined
    tags[Core::Environment::Ext::TAG_ENV] = env unless env.nil?
    tags[Core::Environment::Ext::TAG_VERSION] = version unless version.nil?

    tags
  end

  o.setter do |new_value, old_value|
    # Coerce keys to strings
    string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h

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

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

    if service_without_fallback.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

  o.lazy
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>)


408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
# File 'lib/datadog/core/configuration/settings.rb', line 408

option :time_now_provider do |o|
  o.default { ::Time.now }

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



428
429
430
431
432
# File 'lib/datadog/core/configuration/settings.rb', line 428

option :version do |o|
  # NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
  o.default { ENV.fetch(Core::Environment::Ext::ENV_VERSION, nil) }
  o.lazy
end