in agent/php/ElasticApm/Impl/AutoInstrument/TransactionForExtensionRequest.php [562:610]
private function discoverStartTime(float $requestInitStartTime): float
{
$serverRequestTimeAsString = self::getMandatoryServerVarElement('REQUEST_TIME_FLOAT');
if ($serverRequestTimeAsString === null) {
($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
&& $loggerProxy->log(
'Using requestInitStartTime for transaction start time'
. ' because $_SERVER[\'REQUEST_TIME_FLOAT\'] is not set',
['requestInitStartTime' => $requestInitStartTime]
);
return $requestInitStartTime;
}
/** @phpstan-ignore-next-line */
$serverRequestTimeInSeconds = floatval($serverRequestTimeAsString);
$serverRequestTimeInMicroseconds = $serverRequestTimeInSeconds * TimeUtil::NUMBER_OF_MICROSECONDS_IN_SECOND;
if ($requestInitStartTime < $serverRequestTimeInMicroseconds) {
($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
&& $loggerProxy->log(
'Using requestInitStartTime for transaction start time'
. ' because $_SERVER[\'REQUEST_TIME_FLOAT\'] is later'
. ' (further into the future) than requestInitStartTime',
[
'requestInitStartTime' => $requestInitStartTime,
'$_SERVER[\'REQUEST_TIME_FLOAT\']' => $serverRequestTimeInMicroseconds,
'$_SERVER[\'REQUEST_TIME_FLOAT\'] - requestInitStartTime (seconds)'
=> TimeUtil::microsecondsToSeconds(
$serverRequestTimeInMicroseconds - $requestInitStartTime
),
]
);
return $requestInitStartTime;
}
($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
&& $loggerProxy->log(
'Using $_SERVER[\'REQUEST_TIME_FLOAT\'] for transaction start time',
[
'$_SERVER[\'REQUEST_TIME_FLOAT\']' => $serverRequestTimeInMicroseconds,
'requestInitStartTime' => $requestInitStartTime,
'requestInitStartTime - $_SERVER[\'REQUEST_TIME_FLOAT\'] (seconds)'
=> TimeUtil::microsecondsToSeconds(
$serverRequestTimeInMicroseconds - $requestInitStartTime
),
]
);
return $serverRequestTimeInMicroseconds;
}