module Sqreen::RequestRecorder

Store event/observations that happened in this request

Public Instance Methods

clean_request_record() click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 44
def clean_request_record
  self.only_metric_observation = true
  self.payload_requests = Set.new
  self.observed_items = Hash.new { |hash, key| hash[key] = [] }
end
close_request_record(queue, observations_queue, payload_creator) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 57
def close_request_record(queue, observations_queue, payload_creator)
  Sqreen.log.debug { "close_request_record called. observed_items: #{observed_items}" }

  clean_request_record if observed_items.nil?
  if Sqreen.features['use_signals'] || only_metric_observation
    push_metrics(observations_queue, queue)
  end

  if only_metric_observation
    clean_request_record
    return
  end

  # signals require request section to be present
  payload_requests << 'request'
  # for signals, response is optional, but the backend team wants them
  payload_requests << 'response'
  payload = payload_creator.payload(payload_requests)
  payload[:observed] = observed_items

  queue.push create_request_record(payload)
  clean_request_record
end
observe(what, data, accessors = [], report = true) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 50
def observe(what, data, accessors = [], report = true)
  clean_request_record if observed_items.nil?
  self.only_metric_observation = false if report
  observed_items[what] << data
  payload_requests.merge(accessors)
end
observed_items() click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 20
def observed_items
  SharedStorage.get(:observed_items)
end
observed_items=(value) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 24
def observed_items=(value)
  SharedStorage.set(:observed_items, value)
end
only_metric_observation() click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 36
def only_metric_observation
  SharedStorage.get(:only_metric_observation)
end
only_metric_observation=(value) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 40
def only_metric_observation=(value)
  SharedStorage.set(:only_metric_observation, value)
end
payload_requests() click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 28
def payload_requests
  SharedStorage.get(:payload_requests)
end
payload_requests=(value) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 32
def payload_requests=(value)
  SharedStorage.set(:payload_requests, value)
end

Protected Instance Methods

create_request_record(payload) click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 83
def create_request_record(payload)
  RequestRecord.new(payload, redactor)
end
push_metrics(observations_queue, event_queue) click to toggle source

pushes metric observations to the observations queue and clears the list for the request record

# File lib/sqreen/frameworks/request_recorder.rb, line 94
def push_metrics(observations_queue, event_queue)
  observed_items[:observations].each do |obs|
    observations_queue.push obs
  end
  observed_items[:observations] = []
  return unless observations_queue.size > MAX_OBS_QUEUE_LENGTH / 2
  event_queue.push Sqreen::METRICS_EVENT
end
redactor() click to toggle source
# File lib/sqreen/frameworks/request_recorder.rb, line 87
def redactor
  return nil unless Sqreen.config_get(:strip_sensitive_data)
  @redactor ||= SensitiveDataRedactor.from_config
end