Class: Labkit::Tracing::TracingUtils
- Inherits:
-
Object
- Object
- Labkit::Tracing::TracingUtils
- Defined in:
- lib/labkit/tracing/tracing_utils.rb
Overview
Internal methods for tracing. This is not part of the LabKit public API. For internal usage only
Class Method Summary collapse
- .include_stacktrace?(operation_name) ⇒ Boolean
-
.kv_tags_for_exception(exception) ⇒ Object
Generate key-value tags for an exception.
-
.log_common_fields_on_span(span, operation_name) ⇒ Object
Add common fields to a span.
-
.log_exception_on_span(span, exception) ⇒ Object
Add exception logging to a span.
-
.postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) ⇒ Object
Generate a span retrospectively.
-
.tracer ⇒ Object
Obtain a tracer instance.
-
.with_tracing(operation_name:, tags:, child_of: nil) ⇒ Object
Convience method for running a block with a span.
Class Method Details
.include_stacktrace?(operation_name) ⇒ Boolean
73 74 75 76 77 78 79 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 73 def self.include_stacktrace?(operation_name) @include_stacktrace ||= Hash.new do |result, name| result[name] = Tracing.stacktrace_operations.any? { |stacktrace_operation| name.starts_with?(stacktrace_operation) } end @include_stacktrace[operation_name] end |
.kv_tags_for_exception(exception) ⇒ Object
Generate key-value tags for an exception
59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 59 def self.(exception) case exception when Exception { :"event" => "error", :"error.kind" => exception.class.to_s, :"message" => Labkit::Logging::Sanitizer.sanitize_field(exception.), :"stack" => exception.backtrace&.join('\n'), } else { :"event" => "error", :"error.kind" => exception.class.to_s, :"error.object" => Labkit::Logging::Sanitizer.sanitize_field(exception.to_s) } end end |
.log_common_fields_on_span(span, operation_name) ⇒ Object
Add common fields to a span
44 45 46 47 48 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 44 def self.log_common_fields_on_span(span, operation_name) correlation_id = Labkit::Correlation::CorrelationId.current_id span.set_tag("correlation_id", correlation_id) if correlation_id span.log_kv(stack: caller.join('\n')) if include_stacktrace?(operation_name) end |
.log_exception_on_span(span, exception) ⇒ Object
Add exception logging to a span
51 52 53 54 55 56 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 51 def self.log_exception_on_span(span, exception) return if exception.blank? span.set_tag("error", true) span.log_kv(**(exception)) end |
.postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) ⇒ Object
Generate a span retrospectively
34 35 36 37 38 39 40 41 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 34 def self.postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) span = OpenTracing.start_span(operation_name, start_time: start_time, tags: , child_of: child_of) log_common_fields_on_span(span, operation_name) log_exception_on_span(span, exception) if exception span.finish(end_time: end_time) end |
.tracer ⇒ Object
Obtain a tracer instance
29 30 31 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 29 def self.tracer OpenTracing.global_tracer end |
.with_tracing(operation_name:, tags:, child_of: nil) ⇒ Object
Convience method for running a block with a span
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/labkit/tracing/tracing_utils.rb', line 12 def self.with_tracing(operation_name:, tags:, child_of: nil) scope = tracer.start_active_span(operation_name, child_of: child_of, tags: ) span = scope.span log_common_fields_on_span(span, operation_name) begin yield span rescue StandardError => e log_exception_on_span(span, e) raise e ensure scope.close end end |