protected Result analyzeProxy(final Result previousResult, final TCPAccessLogEntry entry) {
        if (!entry.hasCommonProperties()) {
            return previousResult;
        }
        if (previousResult.hasUpstreamMetrics() && previousResult.hasDownstreamMetrics()) {
            return previousResult;
        }

        final AccessLogCommon properties = entry.getCommonProperties();
        final Address downstreamLocalAddress = properties.getDownstreamLocalAddress();
        final Address downstreamRemoteAddress = properties.hasDownstreamDirectRemoteAddress() ?
            properties.getDownstreamDirectRemoteAddress() : properties.getDownstreamRemoteAddress();
        final Address upstreamRemoteAddress = properties.getUpstreamRemoteAddress();
        if (!properties.hasDownstreamLocalAddress() || !properties.hasDownstreamRemoteAddress() || !properties.hasUpstreamRemoteAddress()) {
            return previousResult;
        }

        final var downstreamLocalAddressSocketAddress = downstreamLocalAddress.getSocketAddress();
        final var ingress = find(downstreamLocalAddressSocketAddress.getAddress());

        final var newResult = previousResult.toBuilder();
        final var previousMetrics = previousResult.getMetrics();
        final var metrics = previousMetrics.getTcpMetricsBuilder();

        if (!previousResult.hasDownstreamMetrics()) {
            final SocketAddress downstreamRemoteAddressSocketAddress = downstreamRemoteAddress.getSocketAddress();
            final ServiceMetaInfo outside = find(downstreamRemoteAddressSocketAddress.getAddress());

            final TCPServiceMeshMetric.Builder metric = newAdapter(entry, outside, ingress).adaptToDownstreamMetrics();

            log.debug("Transformed ingress inbound mesh metric {}", metric);
            metrics.addMetrics(metric);
            newResult.hasDownstreamMetrics(true);
        }

        if (!previousResult.hasUpstreamMetrics()) {
            final SocketAddress upstreamRemoteAddressSocketAddress = upstreamRemoteAddress.getSocketAddress();
            final ServiceMetaInfo targetService = find(upstreamRemoteAddressSocketAddress.getAddress());

            final TCPServiceMeshMetric.Builder outboundMetric =
                newAdapter(entry, ingress, targetService)
                    .adaptToUpstreamMetrics()
                    // Can't parse it from tls properties, leave it to Server side.
                    .setTlsMode(NON_TLS);

            log.debug("Transformed ingress outbound mesh metric {}", outboundMetric);
            metrics.addMetrics(outboundMetric);
            newResult.hasUpstreamMetrics(true);
        }

        return newResult.metrics(previousMetrics.setTcpMetrics(metrics)).service(ingress).build();
    }
Analysis log based on ingress and mesh scenarios.
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/k8s/K8sALSServiceMeshTCPAnalysis.java