Sha256: 29f456779a4073f17b896e416d0e5f53c4dc85dd552b7875216b7bbece556f80
Contents?: true
Size: 1.74 KB
Versions: 2
Compression:
Stored size: 1.74 KB
Contents
# encoding: utf-8 # This file is distributed under New Relic's license terms. # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details. # frozen_string_literal: true module NewRelic module Agent class SyntheticsMonitor < InboundRequestMonitor SYNTHETICS_HEADER_KEY = 'HTTP_X_NEWRELIC_SYNTHETICS'.freeze SUPPORTED_VERSION = 1 EXPECTED_PAYLOAD_LENGTH = 5 def on_finished_configuring(events) events.subscribe(:before_call, &method(:on_before_call)) end def on_before_call(request) # THREAD_LOCAL_ACCESS encoded_header = request[SYNTHETICS_HEADER_KEY] return unless encoded_header incoming_payload = deserialize_header(encoded_header, SYNTHETICS_HEADER_KEY) return unless incoming_payload && SyntheticsMonitor.is_valid_payload?(incoming_payload) && SyntheticsMonitor.is_supported_version?(incoming_payload) && SyntheticsMonitor.is_trusted?(incoming_payload) txn = Tracer.current_transaction txn.raw_synthetics_header = encoded_header txn.synthetics_payload = incoming_payload end class << self def is_supported_version?(incoming_payload) incoming_payload.first == SUPPORTED_VERSION end def is_trusted?(incoming_payload) account_id = incoming_payload[1] Agent.config[:trusted_account_ids].include?(account_id) end def is_valid_payload?(incoming_payload) incoming_payload.length == EXPECTED_PAYLOAD_LENGTH end def reject_messaging_synthetics_header(headers) headers.reject { |k, _| k == CrossAppTracing::NR_MESSAGE_BROKER_SYNTHETICS_HEADER } end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
newrelic_rpm-8.10.1 | lib/new_relic/agent/monitors/synthetics_monitor.rb |
newrelic_rpm-8.10.0 | lib/new_relic/agent/monitors/synthetics_monitor.rb |