in pkg/accesslog/collector/protocols/http2.go [246:291]
func (r *HTTP2Protocol) HandleWholeStream(_ *PartitionConnection, stream *HTTP2Streaming) error {
details := make([]events.SocketDetail, 0)
var allInclude = true
var idRange *buffer.DataIDRange
details, idRange, allInclude = AppendSocketDetailsFromBuffer(details, stream.ReqHeaderBuffer, idRange, allInclude)
details, idRange, allInclude = AppendSocketDetailsFromBuffer(details, stream.ReqBodyBuffer, idRange, allInclude)
details, idRange, allInclude = AppendSocketDetailsFromBuffer(details, stream.RespHeaderBuffer, idRange, allInclude)
details, idRange, allInclude = AppendSocketDetailsFromBuffer(details, stream.RespBodyBuffer, idRange, allInclude)
if !allInclude {
return fmt.Errorf("cannot found any detail events for HTTP/2 protocol, data id: %d-%d, current details count: %d",
stream.ReqHeaderBuffer.FirstSocketBuffer().DataID(), stream.RespBodyBuffer.LastSocketBuffer().DataID(),
len(details))
}
idRange.DeleteDetails(stream.ReqHeaderBuffer)
streamHost := stream.ReqHeader[":authority"]
if streamHost == "" {
streamHost = stream.ReqHeader[":host"]
}
forwarder.SendTransferProtocolEvent(r.ctx, common.NewProtocolLogEvent(details, &v3.AccessLogProtocolLogs{
Protocol: &v3.AccessLogProtocolLogs_Http{
Http: &v3.AccessLogHTTPProtocol{
StartTime: forwarder.BuildOffsetTimestamp(r.FirstDetail(stream.ReqBodyBuffer, details[0]).GetStartTime()),
EndTime: forwarder.BuildOffsetTimestamp(details[len(details)-1].GetEndTime()),
Version: v3.AccessLogHTTPProtocolVersion_HTTP2,
Request: &v3.AccessLogHTTPProtocolRequest{
Method: r.ParseHTTPMethod(stream),
Path: stream.ReqHeader[":path"],
SizeOfHeadersBytes: r.BufferSizeOfZero(stream.ReqHeaderBuffer),
SizeOfBodyBytes: r.BufferSizeOfZero(stream.ReqBodyBuffer),
Host: streamHost,
Trace: AnalyzeTraceInfo(func(key string) string {
return stream.ReqHeader[key]
}, http2Log),
},
Response: &v3.AccessLogHTTPProtocolResponse{
StatusCode: int32(stream.Status),
SizeOfHeadersBytes: r.BufferSizeOfZero(stream.RespHeaderBuffer),
SizeOfBodyBytes: r.BufferSizeOfZero(stream.RespBodyBuffer),
},
},
},
}))
return nil
}