Example #1
0
 /**
  * {@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;
 }
Example #2
0
 /**
  * @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('/');
 }
Example #3
0
 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);
 }