public function __invoke(RequestInterface $request, array $options)
{
$fn = $this->handler;
if (!isset($options['step'])) {
return $fn($request, $options);
}
if (!$options['step'] instanceof Step) {
throw new InvalidArgumentException('The "step" option must be an instance of Blackfire\\Player\\Step.');
}
$step = $options['step'];
$values = null;
if (isset($options['values'])) {
if (!$options['values'] instanceof ValueBag) {
throw new InvalidArgumentException('The "values" option must be an instance of Blackfire\\Player\\ValueBag.');
}
$values = $options['values'];
} else {
$values = new ValueBag();
}
$options = $this->prepareRequest($step, $values, $request, $options);
$msg = sprintf('Step %d: %s %s %s%s', $step->getIndex(), $step->getName(), $request->getMethod(), $request->getUri(), $step->getSamples() > 1 ? sprintf(' (%d samples)', $step->getSamples()) : '');
$this->logger and $this->logger->info($msg, ['request' => $request->getHeaderLine('X-Request-Id')]);
return $fn($request, $options)->then(function (ResponseInterface $response) use($request, $options, $step, $values) {
return $this->processResponse($request, $options, $response, $step, $values);
});
}