func SetClientMetadata()

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
}