func kernelTransferLogBuilder()

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
}