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);
}
}