module ZipkinTracer::SqsHandler
This module is designed to prepend to the SQS client to add trace data as message attributes. github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-sqs/lib/aws-sdk-sqs/client.rb
Constants
- ZIPKIN_KEYS
- ZIPKIN_REMOTE_ENDPOINT_SQS
Public Instance Methods
send_message(params = {}, options = {})
click to toggle source
Calls superclass method
# File lib/zipkin-tracer/sqs/zipkin-tracer.rb, line 5 def send_message(params = {}, options = {}) zipkin_sqs_trace_wrapper(params, __method__) { |params_with_trace| super(params_with_trace, options) } end
send_message_batch(params = {}, options = {})
click to toggle source
Calls superclass method
# File lib/zipkin-tracer/sqs/zipkin-tracer.rb, line 9 def send_message_batch(params = {}, options = {}) zipkin_sqs_trace_wrapper(params, __method__) { |params_with_trace| super(params_with_trace, options) } end
Private Instance Methods
zipkin_message_attributes(trace_id)
click to toggle source
# File lib/zipkin-tracer/sqs/zipkin-tracer.rb, line 48 def zipkin_message_attributes(trace_id) ZIPKIN_KEYS.each_with_object({}) do |zipkin_key, message_attributes| zipkin_value = trace_id.send(zipkin_key) next unless zipkin_value message_attributes[zipkin_key] = { string_value: zipkin_value.to_s, data_type: 'String' } end end
zipkin_set_message_attributes(params, method_name, trace_id)
click to toggle source
# File lib/zipkin-tracer/sqs/zipkin-tracer.rb, line 36 def zipkin_set_message_attributes(params, method_name, trace_id) attributes = zipkin_message_attributes(trace_id) case method_name when :send_message params[:message_attributes] = attributes.merge(params[:message_attributes] || {}) when :send_message_batch params[:entries].each do |entry| entry[:message_attributes] = attributes.merge(entry[:message_attributes] || {}) end end end
zipkin_sqs_trace_wrapper(params, method_name) { |params| ... }
click to toggle source
# File lib/zipkin-tracer/sqs/zipkin-tracer.rb, line 18 def zipkin_sqs_trace_wrapper(params, method_name) trace_id = TraceGenerator.new.next_trace_id zipkin_set_message_attributes(params, method_name, trace_id) TraceContainer.with_trace_id(trace_id) do if Trace.tracer && trace_id.sampled? Trace.tracer.with_new_span(trace_id, method_name) do |span| span.kind = Trace::Span::Kind::PRODUCER span.remote_endpoint = ZIPKIN_REMOTE_ENDPOINT_SQS span.record_tag('queue.url', params[:queue_url]) yield(params) end else yield(params) end end end