Module: TraceView::Inst::CurlUtility
- Included in:
- CurlEasy
- Defined in:
- lib/traceview/inst/curb.rb
Overview
Curb instrumentation wraps instance and class methods in two classes: Curl::Easy and Curl::Multi. This CurlUtility module is used as a common module to be shared among both modules.
Instance Method Summary collapse
-
#profile_curb_method(kvs, method, args, &block) ⇒ Object
profile_curb_method.
-
#traceview_collect(verb = nil) ⇒ Object
traceview_collect.
Instance Method Details
#profile_curb_method(kvs, method, args, &block) ⇒ Object
profile_curb_method
An agnostic method that will profile any Curl::Easy method (and optional args and block) that you throw at it.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/traceview/inst/curb.rb', line 55 def profile_curb_method(kvs, method, args, &block) # If we're not tracing, just do a fast return. return self.send(method, args, &block) if !TraceView.tracing? begin response_context = nil req_context = nil handle_cross_host = TraceView::Config[:curb][:cross_host] kvs.merge! traceview_collect TraceView::API.log_entry(:curb, kvs) kvs.clear if handle_cross_host && !kvs[:blacklisted] req_context = TraceView::Context.toString() self.headers['X-Trace'] = req_context end # The core curb call response = self.send(method, *args, &block) if handle_cross_host kvs[:HTTPStatus] = response_code # If we get a redirect, report the location header if ((300..308).to_a.include? response_code) && headers.key?("Location") kvs[:Location] = headers["Location"] end _, *response_headers = header_str.split(/[\r\n]+/).map(&:strip) response_headers = Hash[response_headers.flat_map{ |s| s.scan(/^(\S+): (.+)/) }] response_context = response_headers['X-Trace'] if response_context && !kvs[:blacklisted] TraceView::XTrace.continue_service_context(req_context, response_context) end end response rescue => e TraceView::API.log_exception(:curb, e) raise e ensure TraceView::API.log_exit(:curb, kvs) end end |
#traceview_collect(verb = nil) ⇒ Object
traceview_collect
Used as a central area to retrieve and return values that we’re interesting in reporting to TraceView
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/traceview/inst/curb.rb', line 18 def traceview_collect(verb = nil) kvs = {} if TraceView::Config[:curb][:cross_host] kvs[:IsService] = 1 # Conditionally log query args if TraceView::Config[:curb][:log_args] kvs[:RemoteURL] = url else kvs[:RemoteURL] = url.split('?').first end kvs[:HTTPMethod] = verb if verb end # Avoid cross host tracing for blacklisted domains kvs[:blacklisted] = TraceView::API.blacklisted?(URI(url).hostname) kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:curb][:collect_backtraces] kvs rescue => e TraceView.logger.debug "[traceview/debug] Error capturing curb KVs: #{e.}" if TraceView::Config[:verbose] TraceView.logger.debug "[traceview/debug] #{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.}" TraceView.logger.debug e.backtrace.join('\n') end ensure return kvs end |