in pkg/profiling/task/network/analyze/layer7/protocols/http1/metrics.go [186:231]
func (h *Trace) Flush(duration int64, process api.ProcessInterface, traffic *base.ProcessTraffic, metricsBuilder *base.MetricsBuilder) {
logData := &logv3.LogData{}
logData.Service = process.Entity().ServiceName
logData.ServiceInstance = process.Entity().InstanceName
logData.Layer = process.Entity().Layer
logData.Tags = &logv3.LogTags{Data: make([]*commonv3.KeyStringValuePair, 0)}
logData.Tags.Data = append(logData.Tags.Data, &commonv3.KeyStringValuePair{Key: "LOG_KIND", Value: "NET_PROFILING_SAMPLED_TRACE"})
// trace context
traceContext := &logv3.TraceContext{}
traceContext.TraceId = h.Trace.TraceID()
logData.TraceContext = traceContext
// body
logBody := &logv3.LogDataBody{Type: "json"}
body := &SamplingTraceLogBody{
Latency: duration,
TraceProvider: h.Trace.Provider().Name,
DetectPoint: traffic.Role.String(),
Component: traffic.Protocol.String(),
SSL: traffic.IsSSL,
URI: h.RequestURI,
Reason: h.Type,
Status: h.Response.Original().StatusCode,
}
if traffic.Role == events.ConnectionRoleClient {
body.ClientProcess = &SamplingTraceLogProcess{ProcessID: process.ID()}
body.ServerProcess = NewHTTP1SampledTraceLogRemoteProcess(traffic, process)
} else {
body.ServerProcess = &SamplingTraceLogProcess{ProcessID: process.ID()}
body.ClientProcess = NewHTTP1SampledTraceLogRemoteProcess(traffic, process)
}
bodyJSON, err := json.Marshal(body)
if err != nil {
log.Warnf("format the slow trace log body failure: %v", err)
return
}
logBody.Content = &logv3.LogDataBody_Json{Json: &logv3.JSONLog{Json: string(bodyJSON)}}
logData.Body = logBody
metricsBuilder.AppendLogs(process.Entity().ServiceName, logData)
// append full http content and syscall
h.AppendHTTPEvents(process, traffic, metricsBuilder)
}