in lib/skywalking/tracer.lua [114:151]
function Tracer:prepareForReport()
if not ngx.ctx.is_finished then
self.finish()
end
local entrySpan = ngx.ctx.entrySpan
if not entrySpan then
return
end
local ngxstatus = ngx.var.status
Span.tag(entrySpan, 'http.status', ngxstatus)
if tonumber(ngxstatus) >= 500 then
Span.errorOccurred(entrySpan)
end
Span.finish(entrySpan, ngx.now() * 1000)
local ok, segment = TC.drainAfterFinished(ngx.ctx.tracingContext)
if not ok then
return
end
local segmentJson, err = json.encode(Segment.transform(segment))
if not segmentJson then
ngx.log(ngx.ERR, "failed to encode segment: ", err)
return
end
local length, err = metadata_shdict:lpush(Const.segment_queue, segmentJson)
if not length then
ngx.log(ngx.ERR, "failed to push segment: ", err)
return
end
Util.tablepool_release()
end