Sha256: 5c635e1d76a36ca008c429c3bc4b99081747332c363d0f0914be5383cb708092

Contents?: true

Size: 1.38 KB

Versions: 34

Compression:

Stored size: 1.38 KB

Contents

# encoding: utf-8

require 'one_apm/agent/inbound_request_monitor'

module OneApm
  module Agent
    class SyntheticsMonitor < InboundRequestMonitor
      SYNTHETICS_HEADER_KEY  = 'HTTP_X_ONEAPM_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)
        encoded_header = request[SYNTHETICS_HEADER_KEY]
        return unless encoded_header

        incoming_payload = deserialize_header(encoded_header, SYNTHETICS_HEADER_KEY)

        return unless incoming_payload &&
            is_valid_payload?(incoming_payload) &&
            is_supported_version?(incoming_payload) &&
            is_trusted?(incoming_payload)

        state = OneApm::TransactionState.tl_get
        txn = state.current_transaction
        txn.raw_synthetics_header = encoded_header
        txn.synthetics_payload    = incoming_payload
      end

      def is_supported_version?(incoming_payload)
        incoming_payload.first == SUPPORTED_VERSION
      end

      def is_trusted?(incoming_payload)
        account_id = incoming_payload[1]
        OneApm::Manager.config[:trusted_account_ids].include?(account_id)
      end

      def is_valid_payload?(incoming_payload)
        incoming_payload.length == EXPECTED_PAYLOAD_LENGTH
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
oneapm_rpm-1.2.6 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.6.rc1 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.5 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.5.rc1 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.4 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.4.rc1 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.3 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.3.rc2 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.2 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.2.rc lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.1 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.1.rc lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.2.0 lib/one_apm/agent/synthetics_monitor.rb
oneapm_rpm-1.1.3 lib/one_apm/agent/synthetics_monitor.rb