Sha256: 9736d5f1d6b42576e7948e01216eccb824491d9137a5a7674d06cc5a7fd8239e

Contents?: true

Size: 942 Bytes

Versions: 1

Compression:

Stored size: 942 Bytes

Contents

require 'net/http'
require 'uri'
require 'json'

module Zipkin
  class JsonClient
    def initialize(url:, collector:, flush_interval:)
      @collector = collector
      @flush_interval = flush_interval
      @spans_uri = URI.parse("#{url}/api/v1/spans")
    end

    def start
      @thread = Thread.new do
        loop do
          emit_batch(@collector.retrieve)
          sleep @flush_interval
        end
      end
    end

    def stop
      @thread.terminate if @thread
      emit_batch(@collector.retrieve)
    end

    private

    def emit_batch(spans)
      return if spans.empty?

      http = Net::HTTP.new(@spans_uri.host, @spans_uri.port)
      request = Net::HTTP::Post.new(@spans_uri.request_uri, {
        'Content-Type' => 'application/json'
      })
      request.body = JSON.dump(spans)
      response = http.request(request)

      if response.code != 202
        STDERR.puts(response.body)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zipkin-0.3.0 lib/zipkin/json_client.rb