function Tracer:start()

in lib/skywalking/tracer.lua [31:88]


function Tracer:start(upstream_name, correlation)
    local serviceName = metadata_shdict:get("serviceName")
    local serviceInstanceName = metadata_shdict:get('serviceInstanceName')
    local req_uri = ngx.var.uri
    if (Util.checkIgnoreSuffix(req_uri)) then
        local tracingContext =  TC.newNoOP()
        local ctx = ngx.ctx
        ctx.tracingContext = tracingContext
        ctx.entrySpan = Span.newNoOP()
        ctx.exitSpan = Span.newNoOP()
        ctx.is_finished = false
        return
    end

    local includeHostInEntrySpan = metadata_shdict:get('includeHostInEntrySpan')
    local tracingContext = TC.new(serviceName, serviceInstanceName, ngx.var.http_request_id)
    
    
    local contextCarrier = Util.tablepool_fetch("sw_contextCarrier")
    contextCarrier["sw8"] = ngx.var.http_sw8
    contextCarrier["sw8-correlation"] = ngx.var.http_sw8_correlation
    local time_now = ngx.now() * 1000
    local entrySpan
    if (includeHostInEntrySpan)  then
        entrySpan = TC.createEntrySpan(tracingContext, ngx.var.host .. req_uri, nil, contextCarrier)
    else
        entrySpan = TC.createEntrySpan(tracingContext, req_uri, nil, contextCarrier)
    end

    Span.start(entrySpan, time_now)
    Span.setComponentId(entrySpan, nginxComponentId)
    Span.setLayer(entrySpan, Layer.HTTP)

    Span.tag(entrySpan, 'http.method', ngx.req.get_method())
    Span.tag(entrySpan, 'http.params',
             ngx.var.scheme .. '://' .. ngx.var.host .. ngx.var.request_uri )

    
    contextCarrier = Util.tablepool_fetch("sw_contextCarrier")
    
    
    local exitSpan = TC.createExitSpan(tracingContext, req_uri, entrySpan)
    Span.start(exitSpan, time_now)
    Span.setComponentId(exitSpan, nginxComponentId)
    Span.setLayer(exitSpan, Layer.HTTP)

    local upstreamServerName = upstream_name
    if upstreamServerName then
        TC.inject(tracingContext, exitSpan, upstreamServerName, correlation)
    end

    
    local ctx = ngx.ctx
    ctx.tracingContext = tracingContext
    ctx.entrySpan = entrySpan
    ctx.exitSpan = exitSpan
    ctx.is_finished = false
end