Module: Labkit::Tracing

Defined in:
lib/labkit/tracing.rb,
lib/labkit/tracing/grpc.rb,
lib/labkit/tracing/rails.rb,
lib/labkit/tracing/factory.rb,
lib/labkit/tracing/sidekiq.rb,
lib/labkit/tracing/tracing_utils.rb,
lib/labkit/tracing/jaeger_factory.rb,
lib/labkit/tracing/rack_middleware.rb,
lib/labkit/tracing/grpc_interceptor.rb,
lib/labkit/tracing/rails/rails_common.rb,
lib/labkit/tracing/sidekiq/sidekiq_common.rb,
lib/labkit/tracing/grpc/client_interceptor.rb,
lib/labkit/tracing/grpc/server_interceptor.rb,
lib/labkit/tracing/sidekiq/client_middleware.rb,
lib/labkit/tracing/sidekiq/server_middleware.rb,
lib/labkit/tracing/rails/action_view_subscriber.rb,
lib/labkit/tracing/rails/active_record_subscriber.rb

Overview

Tracing provides distributed tracing functionality

Defined Under Namespace

Modules: GRPC, Rails, Sidekiq Classes: Factory, JaegerFactory, RackMiddleware, TracingUtils

Constant Summary collapse

GRPCInterceptor =

GRPCInterceptor is the deprecated name for GRPCClientInterceptor

GRPC::ClientInterceptor

Class Method Summary collapse

Class Method Details

.connection_stringObject



22
23
24
# File 'lib/labkit/tracing.rb', line 22

def self.connection_string
  ENV["GITLAB_TRACING"]
end

.enabled?Boolean

Tracing is only enabled when the ‘GITLAB_TRACING` env var is configured.

Returns:

  • (Boolean)


18
19
20
# File 'lib/labkit/tracing.rb', line 18

def self.enabled?
  connection_string.present?
end

.tracing_url(service_name) ⇒ Object

This will provide a link into the distributed tracing for the current trace, if it has been captured.



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/labkit/tracing.rb', line 36

def self.tracing_url(service_name)
  return unless tracing_url_enabled?

  correlation_id = Labkit::Correlation::CorrelationId.current_id.to_s

  # Avoid using `format` since it can throw TypeErrors
  # which we want to avoid on unsanitised env var input
  tracing_url_template.to_s
                      .gsub("{{ correlation_id }}", correlation_id)
                      .gsub("{{ service }}", service_name)
end

.tracing_url_enabled?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/labkit/tracing.rb', line 30

def self.tracing_url_enabled?
  enabled? && tracing_url_template.present?
end

.tracing_url_templateObject



26
27
28
# File 'lib/labkit/tracing.rb', line 26

def self.tracing_url_template
  ENV["GITLAB_TRACING_URL"]
end

.with_tracing(**kwargs, &block) ⇒ Object

This will run a block with a span

Parameters:

  • operation_name (String)

    The operation name for the span

  • tags (Hash)

    Tags to assign to the span

  • child_of (SpanContext, Span)

    SpanContext that acts as a parent to the newly-started span. If a span instance is provided, its context is automatically substituted.



54
55
56
# File 'lib/labkit/tracing.rb', line 54

def self.with_tracing(**kwargs, &block)
  TracingUtils.with_tracing(**kwargs, &block)
end