Sha256: 937d888453ba187d0aa44f8248e605587ceba9c17f0e335069dacd5c83b071dc

Contents?: true

Size: 1.96 KB

Versions: 22

Compression:

Stored size: 1.96 KB

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.io/terms.html
require 'set'
require 'sqreen/shared_storage'
require 'sqreen/events/request_record'

module Sqreen
  # Store event/observations that happened in this request
  module RequestRecorder
    def observed_items
      SharedStorage.get(:observed_items)
    end

    def observed_items=(value)
      SharedStorage.set(:observed_items, value)
    end

    def payload_requests
      SharedStorage.get(:payload_requests)
    end

    def payload_requests=(value)
      SharedStorage.set(:payload_requests, value)
    end

    def only_metric_observation
      SharedStorage.get(:only_metric_observation)
    end

    def only_metric_observation=(value)
      SharedStorage.set(:only_metric_observation, value)
    end

    def clean_request_record
      self.only_metric_observation = true
      self.payload_requests = Set.new
      self.observed_items = Hash.new { |hash, key| hash[key] = [] }
    end

    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

    def close_request_record(queue, observations_queue, payload_creator)
      clean_request_record if observed_items.nil?
      if only_metric_observation
        push_metrics(observations_queue, queue)
        return clean_request_record
      end
      payload = payload_creator.payload(payload_requests)
      payload[:observed] = observed_items
      queue.push RequestRecord.new(payload)
      clean_request_record
    end

    protected

    def push_metrics(observations_queue, event_queue)
      observed_items[:observations].each do |obs|
        observations_queue.push obs
      end
      return unless observations_queue.size > MAX_OBS_QUEUE_LENGTH / 2
      event_queue.push Sqreen::METRICS_EVENT
    end
  end
end

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
sqreen-1.10.5-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.5 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.5 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.4-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.4 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.4 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.3-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.3 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.3 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.2-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.2 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.2 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.1-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.1 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.1 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.0-java lib/sqreen/frameworks/request_recorder.rb
sqreen-alt-1.10.0 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.10.0 lib/sqreen/frameworks/request_recorder.rb
sqreen-1.9.2-java lib/sqreen/frameworks/request_recorder.rb
sqreen-1.9.2 lib/sqreen/frameworks/request_recorder.rb