From 537e5b3c887ef7b68d4b42bf5781f09085cd3d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 16 Feb 2024 14:43:05 +0100 Subject: [PATCH] feat: optional logging of bpn requests/responses for debugging --- .env | 1 + config/services.yaml | 11 ++++------- src/BusProNet/ApiClient.php | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.env b/.env index 0cb2b6d..d3e4c42 100644 --- a/.env +++ b/.env @@ -45,6 +45,7 @@ APP_BASE_URI=https://myep-team.ddev.site APP_BPN_USER= APP_BPN_PASSWORD= APP_BPN_ENDPOINT= +APP_BPN_DEBUG=false # This hotel code will be assigned to admin users together with ROLE_HOTEL_MANAGER # in dev and staging environments for testing purposes diff --git a/config/services.yaml b/config/services.yaml index 51b5c43..f7c263f 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -1,8 +1,4 @@ parameters: - bpn_url: '%env(APP_BPN_ENDPOINT)%' - bpn_username: '%env(APP_BPN_USER)%' - bpn_password: '%env(APP_BPN_PASSWORD)%' - bpn_crm_id_admin: '%env(int:APP_BPN_CRM_ID_ADMIN)%' bpn_crm_id_manager: '%env(int:APP_BPN_CRM_ID_MANAGER)%' bpn_crm_id_teamer: '%env(int:APP_BPN_CRM_ID_TEAMER)%' @@ -42,9 +38,10 @@ services: arguments: $logger: '@monolog.logger.bpn' $options: - bpn_username: '%bpn_username%' - bpn_password: '%bpn_password%' - bpn_url: '%bpn_url%' + bpn_username: '%env(APP_BPN_USER)%' + bpn_password: '%env(APP_BPN_PASSWORD)%' + bpn_url: '%env(APP_BPN_ENDPOINT)%' + debug: '%env(bool:APP_BPN_DEBUG)%' App\BusProNet\ResponseParser: arguments: diff --git a/src/BusProNet/ApiClient.php b/src/BusProNet/ApiClient.php index 93a27b2..48ed38c 100644 --- a/src/BusProNet/ApiClient.php +++ b/src/BusProNet/ApiClient.php @@ -10,6 +10,7 @@ use App\Entity\User; use Psr\Log\LoggerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Serializer\SerializerInterface; +use Symfony\Component\Uid\Uuid; use Symfony\Contracts\HttpClient\HttpClientInterface; class ApiClient @@ -134,11 +135,20 @@ class ApiClient */ private function sendRequest(string $type, array $data): mixed { + $requestId = (string) Uuid::v4(); + $body = $this ->serializer ->serialize($data, 'xml') ; + if (true === $this->config['debug']) { + $this->logger->info('Request sent', [ + 'id' => $requestId, + 'request' => $body, + ]); + } + try { $response = $this->httpClient->request('GET', $this->config['bpn_url'], [ 'query' => [ @@ -148,6 +158,13 @@ class ApiClient $xml = $response->getContent(); + if (true === $this->config['debug']) { + $this->logger->info('Response received', [ + 'id' => $requestId, + 'response' => $xml, + ]); + } + return $this->responseParser->parseXmlString($type, $xml); } catch (\Throwable $e) { } @@ -167,6 +184,9 @@ class ApiClient { $optionsResolver = new OptionsResolver(); $optionsResolver->setRequired(['bpn_url', 'bpn_username', 'bpn_password']); + $optionsResolver->setDefaults([ + 'debug' => false, + ]); return $optionsResolver->resolve($options); }