class SemanticLogger::Appender::AsyncBatch
def process_messages
def process_messages loop do # Wait for batch interval or number of messages to be exceeded. signal.wait(batch_seconds) logs = [] messages = [] first = true message_count = queue.length message_count.times do # Queue#pop(true) raises an exception when there are no more messages, which is considered expensive. message = queue.pop if message.is_a?(Log) logs << message if first check_lag(message) first = false end else messages << message end end appender.batch(logs) if logs.size.positive? messages.each { |message| process_message(message) } signal.reset unless queue.size >= batch_size end end