79 lines
2.5 KiB
Ruby
79 lines
2.5 KiB
Ruby
module OpenTracing
|
|
#:nodoc:
|
|
class Reference
|
|
CHILD_OF = 'child_of'.freeze
|
|
FOLLOWS_FROM = 'follows_from'.freeze
|
|
|
|
# @param context [SpanContext, Span] child_of context refers to a
|
|
# parent Span that caused *and* somehow depends upon the new child Span.
|
|
# Often (but not always), the parent Span cannot finish until the child
|
|
# Span does.
|
|
#
|
|
# An timing diagram for a child Span that is blocked on the new Span:
|
|
#
|
|
# [-Parent Span----------]
|
|
# [-Child Span----]
|
|
#
|
|
# See http://opentracing.io/documentation/pages/spec
|
|
#
|
|
# @return [Reference] a ChildOf reference
|
|
#
|
|
# @example
|
|
# root_span = OpenTracing.start_span('root operation')
|
|
# child_span = OpenTracing.start_span('child operation', references: [
|
|
# OpenTracing::Reference.child_of(root_span)
|
|
# ])
|
|
#
|
|
def self.child_of(context)
|
|
context = context.context if context.is_a?(Span)
|
|
Reference.new(CHILD_OF, context)
|
|
end
|
|
|
|
# @param context [SpanContext, Span] follows_from context refers to a
|
|
# parent Span that does not depend in any way on the result of the new
|
|
# child Span. For instance, one might use FollowsFrom Span to describe
|
|
# pipeline stages separated by queues, or a fire-and-forget cache insert
|
|
# at the tail end of a web request.
|
|
#
|
|
# A FollowsFrom Span is part of the same logical trace as the new Span:
|
|
# i.e., the new Span is somehow caused by the work of its FollowsFrom
|
|
# Span.
|
|
#
|
|
# All of the following could be valid timing diagrams for children that
|
|
# "FollowFrom" a parent:
|
|
#
|
|
# [-Parent Span--] [-Child Span-]
|
|
#
|
|
# [-Parent Span--]
|
|
# [-Child Span-]
|
|
#
|
|
# [-Parent Span-]
|
|
# [-Child Span-]
|
|
#
|
|
# See http://opentracing.io/documentation/pages/spec
|
|
#
|
|
# @return [Reference] a FollowsFrom reference
|
|
#
|
|
# @example
|
|
# context = OpenTracing.extract(OpenTracing::FORMAT_RACK, rack_env)
|
|
# span = OpenTracing.start_span('following operation', references: [
|
|
# OpenTracing::Reference.follows_from(context)
|
|
# ])
|
|
#
|
|
def self.follows_from(context)
|
|
context = context.context if context.is_a?(Span)
|
|
Reference.new(FOLLOWS_FROM, context)
|
|
end
|
|
|
|
def initialize(type, context)
|
|
@type = type
|
|
@context = context
|
|
end
|
|
|
|
# @return [String] reference type
|
|
attr_reader :type
|
|
|
|
# @return [SpanContext] the context of a span this reference is referencing
|
|
attr_reader :context
|
|
end
|
|
end
|