Method: Datadog::Tracing::Contrib::Sinatra::Tracer::Base#route_eval

Defined in:
lib/datadog/tracing/contrib/sinatra/tracer.rb

#route_evalObject

Invoked when a matching route is found. This method yields directly to user code.



48
49
50
51
52
53
54
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
# File 'lib/datadog/tracing/contrib/sinatra/tracer.rb', line 48

def route_eval
  configuration = Datadog.configuration.tracing[:sinatra]
  return super unless Tracing.enabled?

  datadog_route = Sinatra::Env.route_path(env)

  Tracing.trace(
    Ext::SPAN_ROUTE,
    service: configuration[:service_name],
    type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND,
    resource: "#{request.request_method} #{datadog_route}",
  ) do |span, trace|
    span.set_tag(Ext::TAG_APP_NAME, settings.name || settings.superclass.name)
    span.set_tag(Ext::TAG_ROUTE_PATH, datadog_route)

    if request.script_name && !request.script_name.empty?
      span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
    end

    span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
    span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_ROUTE)

    trace.resource = span.resource

    _, path = env['sinatra.route'].split(' ', 2)
    trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE, path)
    trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE_PATH, env['SCRIPT_NAME'])

    sinatra_request_span = Sinatra::Env.datadog_span(env)

    sinatra_request_span.resource = span.resource

    Contrib::Analytics.set_measured(span)

    super
  end
end