in internal/beater/otlp/clientmetadata.go [32:68]
func SetClientMetadata(ctx context.Context, batch *modelpb.Batch) error {
for i := range *batch {
event := (*batch)[i]
if event.GetAgent().GetName() != "iOS/swift" && event.GetAgent().GetName() != "android/java" {
// This is not an event from an agent we would consider to be
// running on an end-user device.
//
// TODO(axw) use User-Agent in the check, when we know what we
// should be looking for?
continue
}
clientMetadata, ok := interceptors.ClientMetadataFromContext(ctx)
if ok {
if event.GetSource().GetIp() == nil {
if tcpAddr, ok := clientMetadata.SourceAddr.(*net.TCPAddr); ok {
if event.Source == nil {
event.Source = &modelpb.Source{}
}
sourceAddrPort := tcpAddr.AddrPort()
event.Source.Ip = modelpb.Addr2IP(sourceAddrPort.Addr().Unmap())
event.Source.Port = uint32(sourceAddrPort.Port())
}
}
if event.GetClient().GetIp() == nil && clientMetadata.ClientIP.IsValid() {
if event.Client == nil {
event.Client = &modelpb.Client{}
}
event.Client.Ip = modelpb.Addr2IP(clientMetadata.ClientIP)
}
if clientMetadata.SourceNATIP.IsValid() {
event.Source.Nat = &modelpb.NAT{}
event.Source.Nat.Ip = modelpb.Addr2IP(clientMetadata.SourceNATIP)
}
}
}
return nil
}