2015-09-22 32 views
9

Obecnie z Guzzle 6 wydaje się, że nie ma wyjścia z pudełka, aby uzyskać czas trwania połączenia API. Jaki jest najlepszy sposób uzyskania tej statystyki za pomocą zwykłego połączenia za pomocą poniższego kodu.Jaki jest najlepszy sposób, aby uzyskać czas trwania połączenia API przy użyciu Guzzle 6

Używam następujący kod z 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(); 

Odpowiedz

3

odsyłam do opcji zażądać 'on_stats' Guzzle Docs - Request Options i TransferStats object

Aby to realizować chcesz zmodyfikować swoją prośbę dostać się do wykorzystania zażądaj opcji. To byłoby coś jak poniżej:

// 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(); 

** Uwaga: Jestem pewien, istnieją sposoby zapewnienia dziennik jest sformatowana ładniejszy, jednak ten miał służyć jako dowód koncepcji.

Generatory TransferStats są generowane i używane w poszczególnych modułach obsługi iw tym momencie nie są udostępniane przez moduł obsługi stosowi. W rezultacie nie są one dostępne do spożycia w ramach poszczególnych środków umieszczonych na stosie.

+0

Każdy pomysł, jak użyć powyższego kodu do wdrożenia statystyk transferu? – KingKongFrog

+0

edytował odpowiedź, aby odzwierciedlić Twoje pytanie. –

+0

Nadal nie rozumiem, w jaki sposób mogę wysłać transfertime do obsługi, aby mógł być na tym samym wyjściu? Na przykład: 'new MessageFormatter ('{req_body} - {res_body} - {REQUEST_TIME}') – KingKongFrog