Sha256: 6abaf1a8f0113b5848baea6cd18756f93067d9f799588b2b476b7ece84a3668c
Contents?: true
Size: 1.48 KB
Versions: 4
Compression:
Stored size: 1.48 KB
Contents
module LiveQA module Processor class Batch attr_reader :messages MAX_BYTES = 204_800 # 200Kb MAX_MESSAGES = 100 MAX_MESSAGE_BYTES = 32_768 # 32Kb MAX_RETRY = 10 RETRY_MAP = { 1 => 2, 2 => 5, 3 => 10, 4 => 20, 5 => 30, 6 => 30, 7 => 30, 8 => 30, 9 => 30, 10 => 30, }.freeze def initialize @retry_count = 0 @total_bytes = 0 @messages = [] end def <<(message) message_json_size = message.to_json.bytesize if max_message_reached?(message_json_size) LiveQA.configurations.logger.error('Message is too big to be send') return false end @total_bytes += message_json_size @messages << message true end def full? max_messages_reached? || max_size_reached? end def update_retry @retry_count += 1 @retry_at = Time.now + (RETRY_MAP[@retry_count] || 120) end def can_run? return true if @retry_count.zero? Time.now >= @retry_at end def can_retry? @retry_count < MAX_RETRY end private def max_messages_reached? @messages.length >= MAX_MESSAGES end def max_size_reached? @total_bytes >= MAX_BYTES end def max_message_reached?(message_json_size) message_json_size > MAX_MESSAGE_BYTES end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
liveqa-1.9.3 | lib/liveqa/processor/batch.rb |
liveqa-1.9.2 | lib/liveqa/processor/batch.rb |
liveqa-1.9.1 | lib/liveqa/processor/batch.rb |
liveqa-1.9.0 | lib/liveqa/processor/batch.rb |