Class: Datadog::Diagnostics::EnvironmentCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/ddtrace/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



116
117
118
119
120
121
122
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 116

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)

    target agent URL for trace flushing



107
108
109
110
111
112
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 107

def agent_url
  # Retrieve the effect agent URL, regardless of how it was configured
  transport = Datadog.tracer.writer.transport
  adapter = transport.client.api.adapter
  adapter.url
end

#analytics_enabledBoolean?

Returns analytics enabled in configuration.

Returns:

  • (Boolean, nil)

    analytics enabled in configuration



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

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

#collect!(transport_responses) ⇒ Hash

Returns environment information available at call time.

Returns:

  • (Hash)

    environment information available at call time



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 225

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,
    **instrumented_integrations_settings
  }
end

#dateString

Returns current time in ISO8601 format.

Returns:

  • (String)

    current time in ISO8601 format



59
60
61
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 59

def date
  DateTime.now.iso8601
end

#dd_versionString

Returns configured application version.

Returns:

  • (String)

    configured application version



102
103
104
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 102

def dd_version
  Datadog.configuration.version
end

#debugBoolean?

Returns debug mode enabled in configuration.

Returns:

  • (Boolean, nil)

    debug mode enabled in configuration



125
126
127
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 125

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

#enabledBoolean?

Returns:

  • (Boolean, nil)


92
93
94
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 92

def enabled
  Datadog.configuration.tracer.enabled
end

#envString

Returns configured application environment.

Returns:

  • (String)

    configured application environment



87
88
89
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 87

def env
  Datadog.configuration.env
end

#health_metrics_enabledBoolean?

Returns health metrics enabled in configuration.

Returns:

  • (Boolean, nil)

    health metrics enabled in configuration



212
213
214
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 212

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

#integrations_loadedString?

Concatenated list of integrations activated, with their gem version. Example: “[email protected],[email protected]

Returns:

  • (String, nil)


180
181
182
183
184
185
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 180

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”



75
76
77
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 75

def lang
  Ext::Runtime::LANG
end

#lang_versionString

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

Returns:

  • (String)


82
83
84
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 82

def lang_version
  Ext::Runtime::LANG_VERSION
end

#os_nameString

Best portable guess of OS information.

Returns:

  • (String)

    platform string



65
66
67
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 65

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



202
203
204
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 202

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

#priority_sampling_enabledBoolean?

Returns priority sampling enabled in configuration.

Returns:

  • (Boolean, nil)

    priority sampling enabled in configuration



207
208
209
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 207

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

#runtime_metrics_enabledBoolean?

Returns runtime metrics enabled in configuration.

Returns:

  • (Boolean, nil)

    runtime metrics enabled in configuration



172
173
174
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 172

def runtime_metrics_enabled
  Datadog.configuration.runtime_metrics.enabled
end

#sample_rateNumeric?

Returns tracer sample rate configured.

Returns:

  • (Numeric, nil)

    tracer sample rate configured



135
136
137
138
139
140
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 135

def sample_rate
  sampler = Datadog.configuration.tracer.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



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 148

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

  sampler.priority_sampler.rules.map do |rule|
    next unless rule.is_a?(Datadog::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



97
98
99
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 97

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



165
166
167
168
169
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 165

def tags
  tags = Datadog.configuration.tags
  return nil if tags.empty?
  hash_serializer(tags)
end

#versionString

Returns ddtrace version.

Returns:

  • (String)

    ddtrace version



70
71
72
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 70

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


190
191
192
193
194
195
196
197
198
199
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 190

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