Example #1
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);
 }