in pkg/accesslog/forwarder/transfer.go [36:101]
func kernelTransferLogBuilder(event events.Event) *v3.AccessLogKernelLog {
transferEvent := event.(*events.SocketDetailEvent)
// process the read or write
switch transferEvent.FunctionName.GetSocketOperationType() {
case enums.SocketOperationTypeWrite:
return &v3.AccessLogKernelLog{
Operation: &v3.AccessLogKernelLog_Write{
Write: &v3.AccessLogKernelWriteOperation{
StartTime: BuildOffsetTimestamp(transferEvent.StartTime),
EndTime: BuildOffsetTimestamp(transferEvent.EndTime),
Syscall: parseWriteSyscall(transferEvent.FunctionName),
L4Metrics: &v3.AccessLogKernelWriteL4Metrics{
TotalDuration: uint64(transferEvent.L4Duration),
TotalTransmitPackageCount: int64(transferEvent.L4PackageCount),
TotalRetransmitPackageCount: int64(transferEvent.L4RetransmitPackageCount),
TotalPackageSize: int64(transferEvent.L4TotalPackageSize),
},
L3Metrics: &v3.AccessLogKernelWriteL3Metrics{
TotalDuration: uint64(transferEvent.L3Duration),
TotalLocalDuration: uint64(transferEvent.L3LocalDuration),
TotalOutputDuration: uint64(transferEvent.L3OutputDuration),
TotalResolveMACCount: uint64(transferEvent.L3ResolveMacCount),
TotalResolveMACDuration: uint64(transferEvent.L3ResolveMacDuration),
TotalNetFilterCount: uint64(transferEvent.L3NetFilterCount),
TotalNetFilterDuration: uint64(transferEvent.L3NetFilterDuration),
},
L2Metrics: &v3.AccessLogKernelWriteL2Metrics{
TotalDuration: uint64(transferEvent.L2Duration),
Ifindex: transferEvent.IfIndex,
TotalEnterQueueBufferCount: uint64(transferEvent.L2EnterQueueCount),
TotalReadySendDuration: uint64(transferEvent.L2ReadySendDuration),
TotalNetDeviceSendDuration: uint64(transferEvent.L2SendDuration),
},
},
},
}
case enums.SocketOperationTypeRead:
return &v3.AccessLogKernelLog{
Operation: &v3.AccessLogKernelLog_Read{
Read: &v3.AccessLogKernelReadOperation{
StartTime: BuildOffsetTimestamp(transferEvent.StartTime),
EndTime: BuildOffsetTimestamp(transferEvent.EndTime),
Syscall: parseReadSyscall(transferEvent.FunctionName),
L2Metrics: &v3.AccessLogKernelReadL2Metrics{
Ifindex: transferEvent.IfIndex,
TotalPackageCount: uint32(transferEvent.L4PackageCount),
TotalPackageSize: transferEvent.L4TotalPackageSize,
TotalPackageToQueueDuration: uint64(transferEvent.L2PackageToQueueDuration),
TotalRcvPackageFromQueueDuration: transferEvent.L4PackageRcvFromQueueDuration,
},
L3Metrics: &v3.AccessLogKernelReadL3Metrics{
TotalDuration: uint64(transferEvent.L3Duration),
TotalRecvDuration: uint64(transferEvent.L3TotalRcvDuration),
TotalLocalDuration: uint64(transferEvent.L3LocalDuration),
TotalNetFilterCount: uint64(transferEvent.L3NetFilterCount),
TotalNetFilterDuration: uint64(transferEvent.L3NetFilterDuration),
},
L4Metrics: &v3.AccessLogKernelReadL4Metrics{
TotalDuration: uint64(transferEvent.L4Duration),
},
},
},
}
}
return nil
}