Class: Datadog::Tracing::TraceSegment

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/tracing/trace_segment.rb

Overview

Serializable construct representing a trace

Constant Summary collapse

TAG_NAME =
'name'.freeze
TAG_RESOURCE =
'resource'.freeze
TAG_SERVICE =
'service'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(spans, agent_sample_rate: nil, hostname: nil, id: nil, lang: nil, name: nil, origin: nil, process_id: nil, rate_limiter_rate: nil, resource: nil, root_span_id: nil, rule_sample_rate: nil, runtime_id: nil, sample_rate: nil, sampling_priority: nil, service: nil, tags: nil, metrics: nil) ⇒ TraceSegment

rubocop:disable Metrics/CyclomaticComplexity rubocop:disable Metrics/PerceivedComplexity

Parameters:

  • spans (Array<Datadog::Span>)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/datadog/tracing/trace_segment.rb', line 39

def initialize(
  spans,
  agent_sample_rate: nil,
  hostname: nil,
  id: nil,
  lang: nil,
  name: nil,
  origin: nil,
  process_id: nil,
  rate_limiter_rate: nil,
  resource: nil,
  root_span_id: nil,
  rule_sample_rate: nil,
  runtime_id: nil,
  sample_rate: nil,
  sampling_priority: nil,
  service: nil,
  tags: nil,
  metrics: nil
)
  @id = id
  @root_span_id = root_span_id
  @spans = spans || []

  # Does not make an effort to move metrics out of tags
  # The caller is expected to have done that
  @meta = (tags && tags.dup) || {}
  @metrics = (metrics && metrics.dup) || {}

  # Set well-known tags, defaulting to getting the values from tags
  @agent_sample_rate = agent_sample_rate || agent_sample_rate_tag
  @hostname = hostname || hostname_tag
  @lang = lang || lang_tag
  @name = Core::Utils::SafeDup.frozen_or_dup(name || name_tag)
  @origin = Core::Utils::SafeDup.frozen_or_dup(origin || origin_tag)
  @process_id = process_id || process_id_tag
  @rate_limiter_rate = rate_limiter_rate || rate_limiter_rate_tag
  @resource = Core::Utils::SafeDup.frozen_or_dup(resource || resource_tag)
  @rule_sample_rate = rule_sample_rate_tag || rule_sample_rate
  @runtime_id = runtime_id || runtime_id_tag
  @sample_rate = sample_rate || sample_rate_tag
  @sampling_decision_maker = sampling_decision_maker_tag
  @sampling_priority = sampling_priority || sampling_priority_tag
  @service = Core::Utils::SafeDup.frozen_or_dup(service || service_tag)
end

Instance Attribute Details

#agent_sample_rateObject

Returns the value of attribute agent_sample_rate.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def agent_sample_rate
  @agent_sample_rate
end

#hostnameObject

Returns the value of attribute hostname.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def hostname
  @hostname
end

#idObject (readonly)

Returns the value of attribute id.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def id
  @id
end

#langObject

Returns the value of attribute lang.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def lang
  @lang
end

#nameObject

Returns the value of attribute name.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def name
  @name
end

#originObject

Returns the value of attribute origin.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def origin
  @origin
end

#process_idObject

Returns the value of attribute process_id.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def process_id
  @process_id
end

#rate_limiter_rateObject

Returns the value of attribute rate_limiter_rate.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def rate_limiter_rate
  @rate_limiter_rate
end

#resourceObject

Returns the value of attribute resource.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def resource
  @resource
end

#rule_sample_rateObject

Returns the value of attribute rule_sample_rate.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def rule_sample_rate
  @rule_sample_rate
end

#runtime_idObject

Returns the value of attribute runtime_id.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def runtime_id
  @runtime_id
end

#sample_rateObject

Returns the value of attribute sample_rate.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def sample_rate
  @sample_rate
end

#sampling_decision_makerObject (readonly)

Returns the value of attribute sampling_decision_maker.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def sampling_decision_maker
  @sampling_decision_maker
end

#sampling_priorityObject

Returns the value of attribute sampling_priority.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def sampling_priority
  @sampling_priority
end

#serviceObject

Returns the value of attribute service.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def service
  @service
end

#spansObject (readonly)

Returns the value of attribute spans.



18
19
20
# File 'lib/datadog/tracing/trace_segment.rb', line 18

def spans
  @spans
end

Instance Method Details

#any?Boolean

rubocop:enable Metrics/PerceivedComplexity rubocop:enable Metrics/CyclomaticComplexity

Returns:

  • (Boolean)


87
88
89
# File 'lib/datadog/tracing/trace_segment.rb', line 87

def any?
  @spans.any?
end

#countObject



91
92
93
# File 'lib/datadog/tracing/trace_segment.rb', line 91

def count
  @spans.count
end

#empty?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/datadog/tracing/trace_segment.rb', line 95

def empty?
  @spans.empty?
end

#high_order_tidObject



130
131
132
133
134
# File 'lib/datadog/tracing/trace_segment.rb', line 130

def high_order_tid
  high_order = Tracing::Utils::TraceId.to_high_order(@id)

  high_order.to_s(16) if high_order != 0
end

#keep!void

This method returns an undefined value.

If an active trace is present, forces it to be retained by the Datadog backend.

Any sampling logic will not be able to change this decision.



112
113
114
# File 'lib/datadog/tracing/trace_segment.rb', line 112

def keep!
  self.sampling_priority = Sampling::Ext::Priority::USER_KEEP
end

#lengthObject



99
100
101
# File 'lib/datadog/tracing/trace_segment.rb', line 99

def length
  @spans.length
end

#reject!void

This method returns an undefined value.

If an active trace is present, forces it to be dropped and not stored by the Datadog backend.

Any sampling logic will not be able to change this decision.



121
122
123
# File 'lib/datadog/tracing/trace_segment.rb', line 121

def reject!
  self.sampling_priority = Sampling::Ext::Priority::USER_REJECT
end

#sampled?Boolean

Returns:

  • (Boolean)


125
126
127
128
# File 'lib/datadog/tracing/trace_segment.rb', line 125

def sampled?
  sampling_priority == Sampling::Ext::Priority::AUTO_KEEP \
    || sampling_priority == Sampling::Ext::Priority::USER_KEEP
end

#sizeObject



103
104
105
# File 'lib/datadog/tracing/trace_segment.rb', line 103

def size
  @spans.size
end