2015-09-22 4 views
9

В настоящее время с помощью Guzzle 6, похоже, нет возможности использовать время вызова API. Каков наилучший способ получить этот стат с помощью обычного вызова, используя следующий код.Каков наилучший способ получить длительность вызова API с помощью Guzzle 6

Я использую следующий код из How do you log all API calls using Guzzle 6

use GuzzleHttp\HandlerStack; 
use GuzzleHttp\Middleware; 
use GuzzleHttp\MessageFormatter; 
use Monolog\Logger; 

$stack = HandlerStack::create(); 
$stack->push(
    Middleware::log(
     new Logger('Logger'), 
     new MessageFormatter('{req_body} - {res_body}') 
    ) 
); 
$client = new \GuzzleHttp\Client(
    [ 
     'base_uri' => 'http://httpbin.org', 
     'handler' => $stack, 
    ] 
); 

echo (string) $client->get('ip')->getBody(); 

ответ

3

Я имею в виду вас вариант запроса на «on_stats» Guzzle Docs - Request Options и TransferStats object

Для реализации этого вы измените запрос получите использовать параметры запроса. Было бы что-то вроде следующего:

// get($uri, $options) proxies to request($method, $uri, $options) 
// request($method, $uri, $options) proxies to requestAsync($method, $uri, $options) 
// and sets the $options[RequestOptions::SYNCHRONOUS] to true 
// and then waits for promises to resolve returning a Psr7\http-message\ResponseInterface instance 

$response = $client->get($uri, [ 
    'on_stats' => function (TransferStats $stats) use ($logger) { 
     // do something inside the callable. 
     echo $stats->getTransferTime() . "\n"; 
     $logger->debug('Request' . $stats->getRequest() . 
         'Response' . $stat->getResponse() . 
         'Tx Time' . $stat->getTransferTime() 
     ); 
    }, 
]); 
echo $response->getBody(); 

** Примечание: Я уверен, есть способы обеспечения журнала отформатирован лучше, однако, это должно было служить доказательством концепции.

TransferStats генерируются и используются внутри отдельных обработчиков и в это время не становятся доступными обработчиком для стека. В результате они недоступны для потребления внутри ведических сред, расположенных на стеке.

+0

Любая идея использования вышеуказанного кода для реализации статистики передачи? – KingKongFrog

+0

отредактировал ответ, чтобы отразить ваш вопрос. –

+0

Я все еще не понимаю, как я могу отправить передаточное время обработчику, чтобы он мог быть на одном выходе? Например: 'new MessageFormatter ('{req_body} - {res_body} - {REQUEST_TIME}')' – KingKongFrog