in pkg/profiling/task/network/analyze/base/traffic.go [211:249]
func (t *TrafficAnalyzer) generateOrCombineTraffic(traffic *ProcessTraffic, con *ConnectionContext, remotePid uint32) *ProcessTraffic {
if traffic == nil {
traffic = &ProcessTraffic{
Analyzer: t,
LocalPid: con.LocalPid,
LocalProcesses: con.LocalProcesses,
LocalIP: con.LocalIP,
LocalPort: con.LocalPort,
Metrics: t.analyzeContext.NewConnectionMetrics(),
}
}
if len(traffic.LocalProcesses) == 0 && len(con.LocalProcesses) > 0 {
traffic.LocalProcesses = con.LocalProcesses
}
if traffic.Role == enums.ConnectionRoleUnknown && con.Role != enums.ConnectionRoleUnknown {
traffic.Role = con.Role
}
if traffic.Protocol == enums.ConnectionProtocolUnknown && con.Protocol != enums.ConnectionProtocolUnknown {
traffic.Protocol = con.Protocol
}
if !traffic.IsSSL && con.IsSSL {
traffic.IsSSL = true
}
if remotePid != 0 {
traffic.RemotePid = remotePid
traffic.RemoteProcesses = t.processData[remotePid]
}
traffic.RemoteIP = con.RemoteIP
traffic.RemotePort = con.RemotePort
// flush connection metrics
traffic.Metrics.MergeMetricsFromConnection(con)
con.FlushDataCount++
return traffic
}