Sha256: c2d476b301de13a0dba67fca2c06293d35b15e0db2ef2da5537ef6a5e3b91dbe

Contents?: true

Size: 673 Bytes

Versions: 3

Compression:

Stored size: 673 Bytes

Contents

# frozen_string_literal: true

require 'thread'

require_relative './async_reporter/buffer'

module Zipkin
  class AsyncReporter
    def self.create(sender:, flush_interval:)
      reporter = new(sender)

      # start flush thread
      Thread.new do
        loop do
          reporter.flush
          sleep(flush_interval)
        end
      end

      reporter
    end

    def initialize(sender)
      @sender = sender
      @buffer = Buffer.new
    end

    def flush
      spans = @buffer.retrieve
      @sender.send_spans(spans) if spans.any?
      spans
    end

    def report(span)
      return unless span.context.sampled?
      @buffer << span
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
zipkin-1.6.3 lib/zipkin/async_reporter.rb
zipkin-1.6.2 lib/zipkin/async_reporter.rb
zipkin-1.6.1 lib/zipkin/async_reporter.rb