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



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

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



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

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



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

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



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
252
253
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 227

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



60
61
62
# File 'lib/ddtrace/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/ddtrace/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



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

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

#enabledBoolean?

Returns:

  • (Boolean, nil)


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

def enabled
  Datadog.configuration.tracer.enabled
end

#envString

Returns configured application environment.

Returns:

  • (String)

    configured application environment



88
89
90
# File 'lib/ddtrace/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



214
215
216
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 214

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)


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

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/ddtrace/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/ddtrace/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/ddtrace/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



204
205
206
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 204

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



209
210
211
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 209

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



174
175
176
# File 'lib/ddtrace/diagnostics/environment_logger.rb', line 174

def runtime_metrics_enabled
  Datadog.configuration.runtime_metrics.enabled
end

#sample_rateNumeric?

Returns tracer sample rate configured.

Returns:

  • (Numeric, nil)

    tracer sample rate configured



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

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



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

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



98
99
100
# File 'lib/ddtrace/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



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

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/ddtrace/diagnostics/environment_logger.rb', line 71

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)


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

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