zipkin-tracer 0.35.1 → 0.36.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09555ccde6ee7aa47e75a36c70445a2611bab1218b518c399bfad8d76d341063'
4
- data.tar.gz: 8235afc71c8685567466a11d28ce2bda7596b5e4784f51e266db1c85f085914c
3
+ metadata.gz: 0b65eb925752852ca858a99985cd7d9c93927b75a2094e9accddbc50adecf759
4
+ data.tar.gz: a0f10e2b2798cb7d7c235ee9c6b5165da922e66f01a57c503b8583bbd34965ac
5
5
  SHA512:
6
- metadata.gz: 897ad8d5b52dacfdd982f36440b07db9a478489c9396f6b92144a848d75a987af0e20f246e348348d3ef7fce9500aca6f1f698e144c7fc64ad80843d9ef1a36e
7
- data.tar.gz: 97dd7106d21aff8dfa9147b02cfd2b9224bda862216c0909dce21708ada1464580d46bc024e5656634d9f63dffcba22703c3b073ebd7562349943d81fa8fce49
6
+ metadata.gz: fb7d829f81ae485aabf96c50f970d0637dd836be7379496d6d6879a7928054dbc0922c77b37702a274734a1b1007a78cb17767fab344b7fc65c382a5af338edc
7
+ data.tar.gz: 22d4fbc7486aa150fb63a87efa258f38c9a290d1f47ff0ada1949d75f37c90f9294fe69e55cfeb5a29c35522691d8a9051417969f6443b2c2cbcc541992ba603
@@ -5,11 +5,10 @@ require 'zipkin-tracer/rack/zipkin-tracer'
5
5
  module ZipkinTracer
6
6
  # Configuration of this gem. It reads the configuration and provides default values
7
7
  class Config
8
- attr_reader :service_name, :json_api_host,
9
- :zookeeper, :sample_rate, :logger, :log_tracing,
8
+ attr_reader :service_name, :sample_rate,
9
+ :json_api_host, :zookeeper, :kafka_producer, :kafka_topic, :sqs_queue_name, :sqs_region, :log_tracing,
10
10
  :annotate_plugin, :filter_plugin, :whitelist_plugin,
11
- :sampled_as_boolean,
12
- :kafka_producer, :kafka_topic, :trace_id_128bit
11
+ :logger, :sampled_as_boolean, :trace_id_128bit
13
12
 
14
13
  def initialize(app, config_hash)
15
14
  config = config_hash || Application.config(app)
@@ -22,6 +21,9 @@ module ZipkinTracer
22
21
  # Kafka producer information
23
22
  @kafka_producer = config[:producer]
24
23
  @kafka_topic = config[:topic] if present?(config[:topic])
24
+ # Amazon SQS queue information
25
+ @sqs_queue_name = config[:sqs_queue_name]
26
+ @sqs_region = config[:sqs_region]
25
27
  # Percentage of traces which by default this service traces (as float, 1.0 means 100%)
26
28
  @sample_rate = config[:sample_rate] || DEFAULTS[:sample_rate]
27
29
  # A block of code which can be called to do extra annotations of traces
@@ -61,6 +63,8 @@ module ZipkinTracer
61
63
  :kafka
62
64
  elsif @kafka_producer && @kafka_producer.respond_to?(:push)
63
65
  :kafka_producer
66
+ elsif present?(@sqs_queue_name) && defined?(Aws::SQS)
67
+ :sqs
64
68
  elsif !!@log_tracing
65
69
  :logger
66
70
  else
@@ -1,4 +1,4 @@
1
- require 'zipkin-tracer/zipkin_tracer_base'
1
+ require 'zipkin-tracer/zipkin_sender_base'
2
2
  require 'zipkin-tracer/trace_container'
3
3
  # Most of this code is copied from Finagle
4
4
  # https://github.com/twitter/finagle/blob/finagle-6.39.0/finagle-thrift/src/main/ruby/lib/finagle-thrift/trace.rb
@@ -5,28 +5,31 @@ module ZipkinTracer
5
5
 
6
6
  tracer = case adapter
7
7
  when :json
8
- require 'zipkin-tracer/zipkin_json_tracer'
8
+ require 'zipkin-tracer/zipkin_http_sender'
9
9
  options = { json_api_host: config.json_api_host, logger: config.logger }
10
- Trace::ZipkinJsonTracer.new(options)
10
+ Trace::ZipkinHttpSender.new(options)
11
11
  when :kafka
12
- require 'zipkin-tracer/zipkin_kafka_tracer'
13
- Trace::ZipkinKafkaTracer.new(zookeepers: config.zookeeper)
12
+ require 'zipkin-tracer/zipkin_kafka_sender'
13
+ Trace::ZipkinKafkaSender.new(zookeepers: config.zookeeper)
14
14
  when :kafka_producer
15
- require 'zipkin-tracer/zipkin_kafka_tracer'
15
+ require 'zipkin-tracer/zipkin_kafka_sender'
16
16
  options = { producer: config.kafka_producer }
17
17
  options[:topic] = config.kafka_topic unless config.kafka_topic.nil?
18
- Trace::ZipkinKafkaTracer.new(options)
18
+ Trace::ZipkinKafkaSender.new(options)
19
+ when :sqs
20
+ require 'zipkin-tracer/zipkin_sqs_sender'
21
+ options = { logger: config.logger, queue_name: config.sqs_queue_name , region: config.sqs_region }
22
+ Trace::ZipkinSqsSender.new(options)
19
23
  when :logger
20
- require 'zipkin-tracer/zipkin_logger_tracer'
21
- Trace::ZipkinLoggerTracer.new(logger: config.logger)
24
+ require 'zipkin-tracer/zipkin_logger_sender'
25
+ Trace::ZipkinLoggerSender.new(logger: config.logger)
22
26
  else
23
- require 'zipkin-tracer/zipkin_null_tracer'
24
- Trace::NullTracer.new
27
+ require 'zipkin-tracer/zipkin_null_sender'
28
+ Trace::NullSender.new
25
29
  end
26
30
  Trace.tracer = tracer
27
31
 
28
32
  tracer
29
33
  end
30
-
31
34
  end
32
35
  end
@@ -1,3 +1,3 @@
1
1
  module ZipkinTracer
2
- VERSION = '0.35.1'.freeze
2
+ VERSION = '0.36.0'.freeze
3
3
  end
@@ -1,15 +1,15 @@
1
1
  require 'json'
2
2
  require 'sucker_punch'
3
- require 'zipkin-tracer/zipkin_tracer_base'
3
+ require 'zipkin-tracer/zipkin_sender_base'
4
4
  require 'zipkin-tracer/hostname_resolver'
5
5
 
6
- class AsyncJsonApiClient
6
+ class AsyncHttpApiClient
7
7
  include SuckerPunch::Job
8
8
  SPANS_PATH = '/api/v2/spans'
9
9
 
10
10
  def perform(json_api_host, spans)
11
11
  spans_with_ips =
12
- ::ZipkinTracer::HostnameResolver.new.spans_with_ips(spans, ZipkinJsonTracer::IP_FORMAT).map(&:to_h)
12
+ ::ZipkinTracer::HostnameResolver.new.spans_with_ips(spans, ZipkinHttpSender::IP_FORMAT).map(&:to_h)
13
13
  resp = Faraday.new(json_api_host).post do |req|
14
14
  req.url SPANS_PATH
15
15
  req.headers['Content-Type'] = 'application/json'
@@ -27,7 +27,7 @@ end
27
27
  module Trace
28
28
  # This class sends information to the Zipkin API.
29
29
  # The API accepts a JSON representation of a list of spans
30
- class ZipkinJsonTracer < ZipkinTracerBase
30
+ class ZipkinHttpSender < ZipkinSenderBase
31
31
  IP_FORMAT = :string
32
32
 
33
33
  def initialize(options)
@@ -37,7 +37,7 @@ module Trace
37
37
  end
38
38
 
39
39
  def flush!
40
- AsyncJsonApiClient.perform_async(@json_api_host, spans.dup)
40
+ AsyncHttpApiClient.perform_async(@json_api_host, spans.dup)
41
41
  end
42
42
  end
43
43
  end
@@ -6,13 +6,13 @@ begin
6
6
  rescue LoadError => e
7
7
  end
8
8
 
9
- require 'zipkin-tracer/zipkin_tracer_base'
9
+ require 'zipkin-tracer/zipkin_sender_base'
10
10
  require 'zipkin-tracer/hostname_resolver'
11
11
 
12
12
  module Trace
13
13
  # This class sends information to Zipkin through Kafka.
14
14
  # Spans are encoded using Thrift
15
- class ZipkinKafkaTracer < ZipkinTracerBase
15
+ class ZipkinKafkaSender < ZipkinSenderBase
16
16
  DEFAULT_KAFKA_TOPIC = "zipkin".freeze
17
17
  IP_FORMAT = :i32
18
18
 
@@ -1,9 +1,9 @@
1
- require 'zipkin-tracer/zipkin_tracer_base'
1
+ require 'zipkin-tracer/zipkin_sender_base'
2
2
  require 'zipkin-tracer/hostname_resolver'
3
3
  require 'json'
4
4
 
5
5
  module Trace
6
- class ZipkinLoggerTracer < ZipkinTracerBase
6
+ class ZipkinLoggerSender < ZipkinSenderBase
7
7
  TRACING_KEY = 'Tracing information'
8
8
  IP_FORMAT = :string
9
9
 
@@ -1,8 +1,5 @@
1
1
  module Trace
2
- # Monkey patching Nulltracer from thrift.
3
- # All our tracers have a start_span method, adding it to
4
- # the NullTracer also.
5
- class NullTracer
2
+ class NullSender
6
3
  def with_new_span(trace_id, name)
7
4
  span = start_span(trace_id, name)
8
5
  result = yield span
@@ -1,12 +1,12 @@
1
1
  require 'faraday'
2
2
 
3
3
  module Trace
4
- # This class is a base for tracers sending information to Zipkin.
4
+ # This class is a base for senders sending information to Zipkin.
5
5
  # It knows about zipkin types of annotations and send traces when the server
6
6
  # is done with its request
7
- # Traces dealing with zipkin should inherit from this class and implement the
7
+ # Senders dealing with zipkin should inherit from this class and implement the
8
8
  # flush! method which actually sends the information
9
- class ZipkinTracerBase
9
+ class ZipkinSenderBase
10
10
 
11
11
  def initialize(options={})
12
12
  @options = options
@@ -0,0 +1,39 @@
1
+ require "aws-sdk-sqs"
2
+ require "json"
3
+ require 'sucker_punch'
4
+ require "zipkin-tracer/zipkin_sender_base"
5
+ require "zipkin-tracer/hostname_resolver"
6
+
7
+ module Trace
8
+ class AsyncSqsClient
9
+ include SuckerPunch::Job
10
+
11
+ def perform(sqs_options, queue_name, spans)
12
+ spans_with_ips =
13
+ ::ZipkinTracer::HostnameResolver.new.spans_with_ips(spans, ZipkinSqsSender::IP_FORMAT).map(&:to_h)
14
+ sqs = Aws::SQS::Client.new(**sqs_options)
15
+ queue_url = sqs.get_queue_url(queue_name: queue_name).queue_url
16
+ sqs.send_message(queue_url: queue_url, message_body: JSON.generate(spans_with_ips))
17
+ rescue Aws::SQS::Errors::NonExistentQueue
18
+ error_message = "A queue named '#{@queue_name}' does not exist."
19
+ SuckerPunch.logger.error(error_message)
20
+ rescue => e
21
+ SuckerPunch.logger.error(e)
22
+ end
23
+ end
24
+
25
+ class ZipkinSqsSender < ZipkinSenderBase
26
+ IP_FORMAT = :string
27
+
28
+ def initialize(options)
29
+ @sqs_options = options[:region] ? { region: options[:region] } : {}
30
+ @queue_name = options[:queue_name]
31
+ SuckerPunch.logger = options[:logger]
32
+ super(options)
33
+ end
34
+
35
+ def flush!
36
+ AsyncSqsClient.perform_async(@sqs_options, @queue_name, spans.dup)
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zipkin-tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.1
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franklin Hu
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2019-04-03 00:00:00.000000000 Z
16
+ date: 2019-04-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: faraday
@@ -57,6 +57,20 @@ dependencies:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
59
  version: '2.0'
60
+ - !ruby/object:Gem::Dependency
61
+ name: aws-sdk-sqs
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '1.0'
60
74
  - !ruby/object:Gem::Dependency
61
75
  name: excon
62
76
  requirement: !ruby/object:Gem::Requirement
@@ -182,11 +196,12 @@ files:
182
196
  - lib/zipkin-tracer/trace_generator.rb
183
197
  - lib/zipkin-tracer/tracer_factory.rb
184
198
  - lib/zipkin-tracer/version.rb
185
- - lib/zipkin-tracer/zipkin_json_tracer.rb
186
- - lib/zipkin-tracer/zipkin_kafka_tracer.rb
187
- - lib/zipkin-tracer/zipkin_logger_tracer.rb
188
- - lib/zipkin-tracer/zipkin_null_tracer.rb
189
- - lib/zipkin-tracer/zipkin_tracer_base.rb
199
+ - lib/zipkin-tracer/zipkin_http_sender.rb
200
+ - lib/zipkin-tracer/zipkin_kafka_sender.rb
201
+ - lib/zipkin-tracer/zipkin_logger_sender.rb
202
+ - lib/zipkin-tracer/zipkin_null_sender.rb
203
+ - lib/zipkin-tracer/zipkin_sender_base.rb
204
+ - lib/zipkin-tracer/zipkin_sqs_sender.rb
190
205
  homepage: https://github.com/openzipkin/zipkin-tracer
191
206
  licenses:
192
207
  - Apache-2.0