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); }