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



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?



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?



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



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



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

def date
  DateTime.now.iso8601
end

#dd_versionString



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

def dd_version
  Datadog.configuration.version
end

#debugBoolean?



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

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

#enabledBoolean?



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

def enabled
  Datadog.configuration.tracing.enabled
end

#envString



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

def env
  Datadog.configuration.env
end

#health_metrics_enabledBoolean?



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: “[email protected],[email protected]



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



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.



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.



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

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

#partial_flushing_enabledBoolean?



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?



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?



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?



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.



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



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

def service
  Datadog.configuration.service
end

#tagsHash?



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



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”



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