Class: Datadog::Core::Diagnostics::EnvironmentCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/core/diagnostics/environment_logger.rb

Overview

Collects environment information for diagnostic logging

Instance Method Summary collapse

Instance Method Details

#agent_error(transport_responses) ⇒ String

Error returned by Datadog agent during a tracer flush attempt

Returns:

  • (String)

    concatenated list of transport errors



121
122
123
124
125
126
127
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 121

def agent_error(transport_responses)
  error_responses = transport_responses.reject(&:ok?)

  return nil if error_responses.empty?

  error_responses.map(&:inspect).join(','.freeze)
end

#agent_urlString?

Returns target agent URL for trace flushing.

Returns:

  • (String, nil)

    target agent URL for trace flushing



108
109
110
111
112
113
114
115
116
117
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 108

def agent_url
  # Retrieve the effect agent URL, regardless of how it was configured
  transport = Tracing.send(:tracer).writer.transport

  # return `nil` with IO transport
  return unless transport.respond_to?(:client)

  adapter = transport.client.api.adapter
  adapter.url
end

#analytics_enabledBoolean?

Returns analytics enabled in configuration.

Returns:

  • (Boolean, nil)

    analytics enabled in configuration



135
136
137
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 135

def analytics_enabled
  !!Datadog.configuration.tracing.analytics.enabled
end

#collect!(transport_responses) ⇒ Hash

Returns environment information available at call time.

Returns:

  • (Hash)

    environment information available at call time



231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 231

def collect!(transport_responses)
  {
    date: date,
    os_name: os_name,
    version: version,
    lang: lang,
    lang_version: lang_version,
    env: env,
    enabled: enabled,
    service: service,
    dd_version: dd_version,
    agent_url: agent_url,
    agent_error: agent_error(transport_responses),
    debug: debug,
    analytics_enabled: analytics_enabled,
    sample_rate: sample_rate,
    sampling_rules: sampling_rules,
    tags: tags,
    runtime_metrics_enabled: runtime_metrics_enabled,
    integrations_loaded: integrations_loaded,
    vm: vm,
    partial_flushing_enabled: partial_flushing_enabled,
    priority_sampling_enabled: priority_sampling_enabled,
    health_metrics_enabled: health_metrics_enabled,
    profiling_enabled: profiling_enabled,
    **instrumented_integrations_settings
  }
end

#dateString

Returns current time in ISO8601 format.

Returns:

  • (String)

    current time in ISO8601 format



60
61
62
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 60

def date
  DateTime.now.iso8601
end

#dd_versionString

Returns configured application version.

Returns:

  • (String)

    configured application version



103
104
105
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 103

def dd_version
  Datadog.configuration.version
end

#debugBoolean?

Returns debug mode enabled in configuration.

Returns:

  • (Boolean, nil)

    debug mode enabled in configuration



130
131
132
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 130

def debug
  !!Datadog.configuration.diagnostics.debug
end

#enabledBoolean?

Returns:

  • (Boolean, nil)


93
94
95
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 93

def enabled
  Datadog.configuration.tracing.enabled
end

#envString

Returns configured application environment.

Returns:

  • (String)

    configured application environment



88
89
90
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 88

def env
  Datadog.configuration.env
end

#health_metrics_enabledBoolean?

Returns health metrics enabled in configuration.

Returns:

  • (Boolean, nil)

    health metrics enabled in configuration



218
219
220
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 218

def health_metrics_enabled
  !!Datadog.configuration.diagnostics.health_metrics.enabled
end

#integrations_loadedString?

Concatenated list of integrations activated, with their gem version. Example: “rails@6.0.3,rack@2.2.3”

Returns:

  • (String, nil)


186
187
188
189
190
191
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 186

def integrations_loaded
  integrations = instrumented_integrations
  return if integrations.empty?

  integrations.map { |name, integration| "#{name}@#{integration.class.version}" }.join(','.freeze)
end

#langString

Returns “ruby”.

Returns:

  • (String)

    “ruby”



76
77
78
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 76

def lang
  Core::Environment::Ext::LANG
end

#lang_versionString

Supported Ruby language version. Will be distinct from VM version for non-MRI environments.

Returns:

  • (String)


83
84
85
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 83

def lang_version
  Core::Environment::Ext::LANG_VERSION
end

#os_nameString

Best portable guess of OS information.

Returns:

  • (String)

    platform string



66
67
68
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 66

def os_name
  RbConfig::CONFIG['host'.freeze]
end

#partial_flushing_enabledBoolean?

Returns partial flushing enabled in configuration.

Returns:

  • (Boolean, nil)

    partial flushing enabled in configuration



208
209
210
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 208

def partial_flushing_enabled
  !!Datadog.configuration.tracing.partial_flush.enabled
end

#priority_sampling_enabledBoolean?

Returns priority sampling enabled in configuration.

Returns:

  • (Boolean, nil)

    priority sampling enabled in configuration



213
214
215
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 213

def priority_sampling_enabled
  !!Datadog.configuration.tracing.priority_sampling
end

#profiling_enabledObject



222
223
224
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 222

def profiling_enabled
  !!Datadog.configuration.profiling.enabled
end

#runtime_metrics_enabledBoolean?

Returns runtime metrics enabled in configuration.

Returns:

  • (Boolean, nil)

    runtime metrics enabled in configuration



178
179
180
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 178

def runtime_metrics_enabled
  Datadog.configuration.runtime_metrics.enabled
end

#sample_rateNumeric?

Returns tracer sample rate configured.

Returns:

  • (Numeric, nil)

    tracer sample rate configured



140
141
142
143
144
145
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 140

def sample_rate
  sampler = Datadog.configuration.tracing.sampler
  return nil unless sampler

  sampler.sample_rate(nil) rescue nil
end

#sampling_rulesHash?

DEV: We currently only support SimpleRule instances. DEV: These are the most commonly used rules. DEV: We should expand support for other rules in the future, DEV: although it is tricky to serialize arbitrary rules.

Returns:

  • (Hash, nil)

    sample rules configured



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 153

def sampling_rules
  sampler = Datadog.configuration.tracing.sampler
  return nil unless sampler.is_a?(Tracing::Sampling::PrioritySampler) &&
    sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)

  sampler.priority_sampler.rules.map do |rule|
    next unless rule.is_a?(Tracing::Sampling::SimpleRule)

    {
      name: rule.matcher.name,
      service: rule.matcher.service,
      sample_rate: rule.sampler.sample_rate(nil)
    }
  end.compact
end

#serviceString

Returns configured application service name.

Returns:

  • (String)

    configured application service name



98
99
100
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 98

def service
  Datadog.configuration.service
end

#tagsHash?

Returns concatenated list of global tracer tags configured.

Returns:

  • (Hash, nil)

    concatenated list of global tracer tags configured



170
171
172
173
174
175
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 170

def tags
  tags = Datadog.configuration.tags
  return nil if tags.empty?

  hash_serializer(tags)
end

#versionString

Returns ddtrace version.

Returns:

  • (String)

    ddtrace version



71
72
73
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 71

def version
  DDTrace::VERSION::STRING
end

#vmString?

Ruby VM name and version. Examples: “ruby-2.7.1”, “jruby-9.2.11.1”, “truffleruby-20.1.0”

Returns:

  • (String, nil)


196
197
198
199
200
201
202
203
204
205
# File 'lib/datadog/core/diagnostics/environment_logger.rb', line 196

def vm
  # RUBY_ENGINE_VERSION returns the VM version, which
  # will differ from RUBY_VERSION for non-mri VMs.
  if defined?(RUBY_ENGINE_VERSION)
    "#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}"
  else
    # Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION
    "#{RUBY_ENGINE}-#{RUBY_VERSION}"
  end
end