func()

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)
}