Skip to content

Instantly share code, notes, and snippets.

@al-kudryavtsev
Last active August 19, 2019 22:03
Show Gist options
  • Save al-kudryavtsev/4f0de0d4b21d94722adaa4cc9144cef7 to your computer and use it in GitHub Desktop.
Save al-kudryavtsev/4f0de0d4b21d94722adaa4cc9144cef7 to your computer and use it in GitHub Desktop.
DD trace test endpoint
class ExperimentsController < ApplicationController
def test_ddtrace
span = Datadog.tracer.active_span
span.set_tag(Datadog::Ext::ManualTracing::TAG_KEEP, true)
url_headers = 'http://httpbin.org/headers'
url_409 = 'http://httpbin.org/status/409'
url_timeout = 'http://httpbin.org/delay/3'
timeout = 1 # sec
ress = Hash.new
Datadog.tracer.trace('test_ddtrace.easy') do |span|
easy = Ethon::Easy.new
easy.http_request(url_headers, 'GET', timeout_ms: timeout * 1000)
easy.perform
response = Typhoeus::Response.new(easy.mirror.options)
ress['easy'] = JSON.parse(response.body)
span.set_tag('http.request.body', JSON.parse(response.body))
easy.reset
easy.http_request('http://httpbin.org/status/204', 'DELETE', timeout_ms: timeout * 1000)
easy.perform
response = Typhoeus::Response.new(easy.mirror.options)
ress['easy2'] = [response.code, response.body]
end
Datadog.tracer.trace('test_ddtrace.multi') do
multi = Ethon::Multi.new
easy = Ethon::Easy.new
easy.http_request(url_409, 'GET', timeout_ms: timeout * 1000)
multi.add(easy)
easy = Ethon::Easy.new
easy.http_request(url_timeout, 'GET', timeout_ms: timeout * 1000)
multi.add(easy)
easy = Ethon::Easy.new
easy.http_request('http://httpbin.org/status/200', 'POST', timeout_ms: timeout * 1000)
multi.add(easy)
multi.perform
response = Typhoeus::Response.new(easy.mirror.options)
ress['multi'] = [response.code, response.body]
end
Datadog.tracer.trace('test_ddtrace.typhoeus.request') do
resp1 = Typhoeus::Request.new(url_409, timeout: timeout).run
resp2 = Typhoeus::Request.new(url_timeout, timeout: timeout).run
ress['typhoeus.request1'] = [resp1.code, resp1.body]
ress['typhoeus.request2'] = [resp2.code, resp2.body]
end
Datadog.tracer.trace('test_ddtrace.typhoeus.hydra.single') do
hydra = Typhoeus::Hydra.new
request = Typhoeus::Request.new(url_409, timeout: timeout)
hydra.queue(request)
hydra.run
resp2 = Typhoeus::Request.new(url_timeout, timeout: timeout).run
ress['typhoeus.hydra.single.request1'] = [request.response.code, request.response.body]
ress['typhoeus.hydra.single.request2'] = [resp2.code, resp2.body]
end
Datadog.tracer.trace('test_ddtrace.typhoeus.hydra.concurrent') do
hydra = Typhoeus::Hydra.new
hydra.queue(Typhoeus::Request.new(url_timeout, timeout: timeout))
hydra.queue(Typhoeus::Request.new('http://httpbin.org/status/204', timeout: timeout))
request = Typhoeus::Request.new(url_409, timeout: timeout)
request.on_complete { |response|
10.times {
hydra.add(Typhoeus::Request.new(url_409, timeout: timeout))
}
request.response = response
}
hydra.queue(request)
hydra.run
end
render json: ress, status: :ok
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment