Sha256: ce63ce421c51eec02e15f85c3a6a291eb943ec29b628d36b5864052b692b2b7f

Contents?: true

Size: 1004 Bytes

Versions: 4

Compression:

Stored size: 1004 Bytes

Contents

# frozen_string_literal: true

module Datadog
  class Statsd
    class Batch
      def initialize(connection, max_buffer_bytes)
        @connection = connection
        @max_buffer_bytes = max_buffer_bytes
        @depth = 0
        reset
      end

      def open
        @depth += 1

        yield
      ensure
        @depth -= 1
        flush if !open?
      end

      def open?
        @depth > 0
      end

      def add(message)
        message_bytes = message.bytesize

        unless @buffer_bytes == 0
          if @buffer_bytes + 1 + message_bytes >= @max_buffer_bytes
            flush
          else
            @buffer << "\n"
            @buffer_bytes += 1
          end
        end

        @buffer << message
        @buffer_bytes += message_bytes
      end

      def flush
        return if @buffer_bytes == 0
        @connection.write(@buffer)
        reset
      end

      private

      def reset
        @buffer = String.new
        @buffer_bytes = 0
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dogstatsd-ruby-4.8.3 lib/datadog/statsd/batch.rb
dogstatsd-ruby-4.8.2 lib/datadog/statsd/batch.rb
dogstatsd-ruby-4.8.1 lib/datadog/statsd/batch.rb
dogstatsd-ruby-4.8.0 lib/datadog/statsd/batch.rb