/** * {@inheritDoc} * @see \Zend\ServiceManager\Factory\FactoryInterface::__invoke() */ public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $config = $container->get('config'); $clientConfig = $config['hermes']; $client = new \Zend\Http\Client($clientConfig['uri'], $clientConfig['http_client']['options']); $client->getRequest()->getHeaders()->addHeaders($clientConfig['headers']); $hermes = new Client($client, isset($clientConfig['service_name']) ? $clientConfig['service_name'] : null, $clientConfig['depth']); if (isset($clientConfig['append_path'])) { $hermes->setAppendPath($clientConfig['append_path']); } return $hermes; }
/** * @covers Hermes\Api\Client::doRequest * @covers Hermes\Api\Client::get * @covers Hermes\Api\Client::isAvailable * @covers Hermes\Api\Client::reportSuccess * @covers Hermes\Api\Client::reportFailure */ public function testGetNotAvailableWithCircuitBreaker() { $storage = StorageFactory::factory(['adapter' => ['name' => 'memory', 'options' => ['namespace' => 'test']], 'plugins' => ['exception_handler' => ['throw_exceptions' => false]]]); $storage->flush(); $cerberus = new Cerberus($storage, 2, 2); $cerberus->reportFailure(); $cerberus->reportFailure(); $cerberus->reportFailure(); $this->object->setCircuitBreaker($cerberus); $client = new \Zend\Http\Client('http://127.0.0.1:1', []); $this->object->setZendClient($client); $this->setExpectedException(NotAvailableException::class); $this->object->get('/'); }
public function attach(Client $hermes) { $kharonDir = $this->kharonDir; $apiKey = $this->apiKey; $sourceRequest = $this->sourceRequest; $serviceName = $this->serviceName; $em = $hermes->getEventManager(); $em->attach('request.pre', function (Event $e) use($sourceRequest) { if ($sourceRequest == null) { return; } /* @var \Hermes\Api\Client $hermes */ $hermes = $e->getTarget(); $hermes->importRequestId($sourceRequest); $hermes->incrementRequestDepth($sourceRequest); }, 100); $em->attach('request.post', function (Event $e) use($sourceRequest, $serviceName, $kharonDir, $apiKey) { if ($sourceRequest == null) { return; } /* @var \Hermes\Api\Client $hermes */ $hermes = $e->getTarget(); $request = $hermes->getZendClient()->getRequest(); if ($sourceRequest instanceof \Zend\Http\Request) { $sourceUri = $this->sourceRequest->getUriString(); } elseif ($sourceRequest instanceof \Psr\Http\Message\RequestInterface) { $sourceUri = $sourceRequest->getUri()->__toString(); } else { $sourceUri = 'console'; } $data = ['status' => 1, 'source' => ['service' => $serviceName, 'server' => $_SERVER['SERVER_ADDR'], 'uri' => $sourceUri], 'destination' => ['service' => $hermes->getServiceName(), 'server' => $request->getUri()->getHost(), 'uri' => $request->getUriString()], 'http_code' => $hermes->getZendClient()->getResponse()->getStatusCode()]; if (!empty($apiKey)) { $data['api_key'] = $apiKey; } $data = $this->prepareData($data, $request); $logFile = $kharonDir . '/success-' . getmypid() . '-' . microtime(true) . '.kharon'; file_put_contents($logFile, json_encode($data, null, 100)); }, 100); $em->attach('request.fail', function (Event $e) use($sourceRequest, $kharonDir, $apiKey) { if ($sourceRequest == null) { return; } /* @var \Hermes\Api\Client $hermes */ $hermes = $e->getTarget(); $request = $hermes->getZendClient()->getRequest(); if ($sourceRequest instanceof \Zend\Http\Request) { $sourceUri = $this->sourceRequest->getUriString(); } elseif ($sourceRequest instanceof \Psr\Http\Message\RequestInterface) { $sourceUri = $sourceRequest->getUri()->__toString(); } else { $sourceUri = 'console'; } $data = ['status' => 0, 'source' => ['service' => $hermes->getServiceName(), 'server' => $_SERVER['SERVER_ADDR'], 'uri' => $sourceUri], 'destination' => ['service' => $hermes->getServiceName(), 'server' => $request->getUri()->getHost(), 'uri' => $request->getUriString()]]; if (!empty($apiKey)) { $data['api_key'] = $apiKey; } $exception = $e->getParams(); $data['http_code'] = $exception->getCode(); $data['error'] = $exception->getMessage(); $data = $this->prepareData($data, $request); $logFile = $kharonDir . '/failed-' . getmypid() . '-' . microtime(true) . '.kharon'; file_put_contents($logFile, json_encode($data, null, 100)); }, 100); }