private function discoverStartTime()

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