Module: NewRelic::Agent::TransactionErrorPrimitive

Extended by:
TransactionErrorPrimitive
Included in:
TransactionErrorPrimitive
Defined in:
lib/new_relic/agent/transaction_error_primitive.rb

Constant Summary collapse

SAMPLE_TYPE =
'TransactionError'
TYPE_KEY =
'type'
ERROR_CLASS_KEY =
'error.class'
ERROR_MESSAGE_KEY =
'error.message'
ERROR_EXPECTED_KEY =
'error.expected'
TIMESTAMP_KEY =
'timestamp'
PORT_KEY =
'port'
NAME_KEY =
'transactionName'
DURATION_KEY =
'duration'
SAMPLED_KEY =
'sampled'
CAT_GUID_KEY =
'nr.transactionGuid'
CAT_REFERRING_TRANSACTION_GUID_KEY =
'nr.referringTransactionGuid'
SYNTHETICS_RESOURCE_ID_KEY =
'nr.syntheticsResourceId'
SYNTHETICS_JOB_ID_KEY =
'nr.syntheticsJobId'
SYNTHETICS_MONITOR_ID_KEY =
'nr.syntheticsMonitorId'
SYNTHETICS_TYPE_KEY =
'nr.syntheticsType'
SYNTHETICS_INITIATOR_KEY =
'nr.syntheticsInitiator'
SYNTHETICS_KEY_PREFIX =
'nr.synthetics'
PRIORITY_KEY =
'priority'
SPAN_ID_KEY =
'spanId'
GUID_KEY =
'guid'
SYNTHETICS_PAYLOAD_EXPECTED =
[:synthetics_resource_id, :synthetics_job_id, :synthetics_monitor_id, :synthetics_type, :synthetics_initiator]

Instance Method Summary collapse

Instance Method Details

#append_cat(payload, sample) ⇒ Object

[View source]

99
100
101
102
# File 'lib/new_relic/agent/transaction_error_primitive.rb', line 99

def append_cat(payload, sample)
  sample[CAT_GUID_KEY] = payload[:guid] if payload[:guid]
  sample[CAT_REFERRING_TRANSACTION_GUID_KEY] = payload[:referring_transaction_guid] if payload[:referring_transaction_guid]
end

#append_synthetics(payload, sample) ⇒ Object

[View source]

82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/new_relic/agent/transaction_error_primitive.rb', line 82

def append_synthetics(payload, sample)
  return unless payload[:synthetics_job_id]

  sample[SYNTHETICS_RESOURCE_ID_KEY] = payload[:synthetics_resource_id] if payload[:synthetics_resource_id]
  sample[SYNTHETICS_JOB_ID_KEY] = payload[:synthetics_job_id] if payload[:synthetics_job_id]
  sample[SYNTHETICS_MONITOR_ID_KEY] = payload[:synthetics_monitor_id] if payload[:synthetics_monitor_id]
  sample[SYNTHETICS_TYPE_KEY] = payload[:synthetics_type] if payload[:synthetics_type]
  sample[SYNTHETICS_INITIATOR_KEY] = payload[:synthetics_initiator] if payload[:synthetics_initiator]

  payload.each do |k, v|
    next unless k.to_s.start_with?('synthetics_') && !SYNTHETICS_PAYLOAD_EXPECTED.include?(k)

    new_key = SYNTHETICS_KEY_PREFIX + NewRelic::LanguageSupport.camelize(k.to_s.gsub('synthetics_', ''))
    sample[new_key] = v
  end
end

#create(noticed_error, payload, span_id) ⇒ Object

[View source]

43
44
45
46
47
48
49
# File 'lib/new_relic/agent/transaction_error_primitive.rb', line 43

def create(noticed_error, payload, span_id)
  [
    intrinsic_attributes_for(noticed_error, payload, span_id),
    noticed_error.custom_attributes,
    noticed_error.agent_attributes
  ]
end

#intrinsic_attributes_for(noticed_error, payload, span_id) ⇒ Object

[View source]

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
# File 'lib/new_relic/agent/transaction_error_primitive.rb', line 51

def intrinsic_attributes_for(noticed_error, payload, span_id)
  attrs = {
    TYPE_KEY => SAMPLE_TYPE,
    ERROR_CLASS_KEY => noticed_error.exception_class_name,
    ERROR_MESSAGE_KEY => noticed_error.message,
    ERROR_EXPECTED_KEY => noticed_error.expected,
    TIMESTAMP_KEY => noticed_error.timestamp.to_f
  }

  attrs[SPAN_ID_KEY] = span_id if span_id
  # don't use safe navigation - leave off keys with missing values
  # instead of using nil
  attrs[PORT_KEY] = noticed_error.request_port if noticed_error.request_port
  attrs[GUID_KEY] = noticed_error.transaction_id if noticed_error.transaction_id

  if payload
    attrs[NAME_KEY] = payload[:name]
    attrs[DURATION_KEY] = payload[:duration]
    attrs[SAMPLED_KEY] = payload[:sampled] if payload.key?(:sampled)
    attrs[PRIORITY_KEY] = payload[:priority]
    append_synthetics(payload, attrs)
    append_cat(payload, attrs)
    DistributedTraceAttributes.copy_to_hash(payload, attrs)
    PayloadMetricMapping.append_mapped_metrics(payload[:metrics], attrs)
  else
    attrs[PRIORITY_KEY] = rand.round(NewRelic::PRIORITY_PRECISION)
  end

  attrs
end