Class: NewRelic::Agent::TraceContextPayload
- Inherits:
-
Object
- Object
- NewRelic::Agent::TraceContextPayload
- Extended by:
- Coerce
- Defined in:
- lib/new_relic/agent/distributed_tracing/trace_context_payload.rb
Constant Summary collapse
- VERSION =
0- PARENT_TYPE =
0- DELIMITER =
'-'.freeze
- SUPPORTABILITY_PARSE_EXCEPTION =
'Supportability/TraceContext/Parse/Exception'.freeze
- TRUE_CHAR =
'1'.freeze
- FALSE_CHAR =
'0'.freeze
- PARENT_TYPES =
%w[App Browser Mobile].map(&:freeze).freeze
- INVALID =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
This is an invalid instance of the TraceContextPayload that is used to help us determine the sampling decision for an incoming trace when the tracestate header is missing. Creating an invalid instance allows us to call methods like .sampled on it without throwing errors. The timestamp value will represent the time it was created/when this class was initialized.
create
Instance Attribute Summary collapse
-
#id ⇒ Object
Returns the value of attribute id.
-
#parent_account_id ⇒ Object
Returns the value of attribute parent_account_id.
-
#parent_app_id ⇒ Object
Returns the value of attribute parent_app_id.
-
#parent_type_id ⇒ Object
Returns the value of attribute parent_type_id.
-
#priority ⇒ Object
Returns the value of attribute priority.
-
#sampled ⇒ Object
(also: #sampled?)
Returns the value of attribute sampled.
-
#timestamp ⇒ Object
Returns the value of attribute timestamp.
-
#transaction_id ⇒ Object
Returns the value of attribute transaction_id.
-
#version ⇒ Object
Returns the value of attribute version.
Class Method Summary collapse
- .create(version: VERSION, parent_type: PARENT_TYPE, parent_account_id: nil, parent_app_id: nil, id: nil, transaction_id: nil, sampled: nil, priority: nil, timestamp: now_ms) ⇒ Object
- .from_s(payload_string) ⇒ Object
Instance Method Summary collapse
-
#initialize(version, parent_type_id, parent_account_id, parent_app_id, id, transaction_id, sampled, priority, timestamp) ⇒ TraceContextPayload
constructor
A new instance of TraceContextPayload.
- #parent_type ⇒ Object
- #to_s ⇒ Object
- #valid? ⇒ Boolean
Methods included from Coerce
boolean_int!, float, float!, int, int!, int_or_nil, log_failure, scalar, string, value_or_nil
Constructor Details
#initialize(version, parent_type_id, parent_account_id, parent_app_id, id, transaction_id, sampled, priority, timestamp) ⇒ TraceContextPayload
Returns a new instance of TraceContextPayload.
86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 86 def initialize(version, parent_type_id, parent_account_id, parent_app_id, id, transaction_id, sampled, priority, ) @version = version @parent_type_id = parent_type_id @parent_account_id = parent_account_id @parent_app_id = parent_app_id @id = id @transaction_id = transaction_id @sampled = sampled @priority = priority = end |
Instance Attribute Details
#id ⇒ Object
Returns the value of attribute id.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def id @id end |
#parent_account_id ⇒ Object
Returns the value of attribute parent_account_id.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def parent_account_id @parent_account_id end |
#parent_app_id ⇒ Object
Returns the value of attribute parent_app_id.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def parent_app_id @parent_app_id end |
#parent_type_id ⇒ Object
Returns the value of attribute parent_type_id.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def parent_type_id @parent_type_id end |
#priority ⇒ Object
Returns the value of attribute priority.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def priority @priority end |
#sampled ⇒ Object Also known as: sampled?
Returns the value of attribute sampled.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def sampled @sampled end |
#timestamp ⇒ Object
Returns the value of attribute timestamp.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def end |
#transaction_id ⇒ Object
Returns the value of attribute transaction_id.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def transaction_id @transaction_id end |
#version ⇒ Object
Returns the value of attribute version.
74 75 76 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 74 def version @version end |
Class Method Details
.create(version: VERSION, parent_type: PARENT_TYPE, parent_account_id: nil, parent_app_id: nil, id: nil, transaction_id: nil, sampled: nil, priority: nil, timestamp: now_ms) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 21 def create(version: VERSION, parent_type: PARENT_TYPE, parent_account_id: nil, parent_app_id: nil, id: nil, transaction_id: nil, sampled: nil, priority: nil, timestamp: now_ms) new(version, parent_type, parent_account_id, parent_app_id, id, transaction_id, sampled, priority, ) end |
.from_s(payload_string) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 37 def from_s(payload_string) attrs = payload_string.split(DELIMITER) payload = create( \ version: int!(attrs[0]), parent_type: int!(attrs[1]), parent_account_id: attrs[2], parent_app_id: attrs[3], id: value_or_nil(attrs[4]), transaction_id: value_or_nil(attrs[5]), sampled: value_or_nil(attrs[6]) ? boolean_int!(attrs[6]) == 1 : nil, priority: float!(attrs[7]), timestamp: int!(attrs[8]) ) handle_invalid_payload(message: 'payload missing attributes') unless payload.valid? payload rescue => e handle_invalid_payload(error: e) raise end |
Instance Method Details
#parent_type ⇒ Object
109 110 111 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 109 def parent_type @parent_type_string ||= PARENT_TYPES[@parent_type_id] end |
#to_s ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 123 def to_s result = version.to_s # required result << DELIMITER << parent_type_id.to_s # required result << DELIMITER << parent_account_id # required result << DELIMITER << parent_app_id # required result << DELIMITER << (id || NewRelic::EMPTY_STR) result << DELIMITER << (transaction_id || NewRelic::EMPTY_STR) result << DELIMITER << (sampled ? TRUE_CHAR : FALSE_CHAR) result << DELIMITER << sprintf('%.6f', priority) result << DELIMITER << .to_s # required result end |
#valid? ⇒ Boolean
113 114 115 116 117 118 119 120 121 |
# File 'lib/new_relic/agent/distributed_tracing/trace_context_payload.rb', line 113 def valid? version \ && parent_type_id \ && !parent_account_id.empty? \ && !parent_app_id.empty? \ && rescue false end |