public function consume()

in agent/php/ElasticApm/Impl/BackendComm/EventSender.php [91:168]


    public function consume(
        Metadata $metadata,
        array $spans,
        array $errors,
        ?BreakdownMetricsPerTransaction $breakdownMetricsPerTransaction,
        ?Transaction $transaction
    ): void {
        if ($this->userAgentHttpHeader === null) {
            $this->userAgentHttpHeader = self::buildUserAgentHttpHeader(
                $metadata->service->name,
                $metadata->service->version
            );
        }

        $serializedMetadata = '{"metadata":';
        $serializedMetadata .= SerializationUtil::serializeAsJson($metadata);
        $serializedMetadata .= "}";

        $serializedEvents = $serializedMetadata;

        foreach ($spans as $span) {
            $serializedEvents .= "\n";
            $serializedEvents .= '{"span":';
            $serializedEvents .= SerializationUtil::serializeAsJson($span);
            $serializedEvents .= '}';
        }

        foreach ($errors as $error) {
            $serializedEvents .= "\n";
            $serializedEvents .= '{"error":';
            $serializedEvents .= SerializationUtil::serializeAsJson($error);
            $serializedEvents .= '}';
        }

        if ($breakdownMetricsPerTransaction !== null) {
            $breakdownMetricsPerTransaction->forEachMetricSet(
                function (MetricSet $metricSet) use (&$serializedEvents) {
                    $serializedEvents .= "\n";
                    $serializedEvents .= '{"metricset":';
                    $serializedEvents .= SerializationUtil::serializeAsJson($metricSet);
                    $serializedEvents .= '}';
                }
            );
        }

        if ($transaction !== null) {
            $serializedEvents .= "\n";
            $serializedEvents .= '{"transaction":';
            $serializedEvents .= SerializationUtil::serializeAsJson($transaction);
            $serializedEvents .= "}";
        }

        if ($this->config->devInternal()->dropEventsBeforeSendCCode()) {
            ($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
            && $loggerProxy->log(
                'Dropping events because '
                . OptionNames::DEV_INTERNAL . ' sub-option ' . DevInternalSubOptionNames::DROP_EVENTS_BEFORE_SEND_C_CODE
                . ' is set'
            );
        } else {
            ($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
            && $loggerProxy->log(
                'Calling elastic_apm_send_to_server...',
                [
                    'userAgentHttpHeader'      => $this->userAgentHttpHeader,
                    'strlen(serializedEvents)' => strlen($serializedEvents),
                ]
            );

            /**
             * elastic_apm_* functions are provided by the elastic_apm extension
             *
             * @noinspection PhpFullyQualifiedNameUsageInspection, PhpUndefinedFunctionInspection
             * @phpstan-ignore-next-line
             */
            \elastic_apm_send_to_server($this->userAgentHttpHeader, $serializedEvents);
        }
    }