Loading module/Import/src/Import/Service/FetcherService.php +95 −29 Original line number Diff line number Diff line Loading @@ -2,11 +2,16 @@ namespace Import\Service; use DateTime; use Doctrine\ORM\EntityManager; use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Psr7; use UnicaenApp\Exception\RuntimeException; use Zend\Http\Response; use DateTime; use UnicaenApp\Exception; /** * FetcherService est un service dédié à la récupération des données provenant du Web Service fournit par chaque Loading @@ -26,6 +31,7 @@ class FetcherService /** * $entityManager et $config sont fournis par la factory et permettent l'acces à la BD et à la config * * @var EntityManager $entityManager * @var array $config */ Loading @@ -33,7 +39,9 @@ class FetcherService protected $config; /** * les quatres variables $url, $code, $user et $password sont des données de configuration pour l'acces au Web Service * les quatres variables $url, $code, $user et $password sont des données de configuration pour l'acces au Web * Service * * @var string $url : le chemin d'acces au web service * @var string $code : le code de l'établissement * @var string $user : l'identifiant pour l'authentification Loading @@ -51,6 +59,7 @@ class FetcherService /** * Constructor ... * * @param EntityManager $entityManager * @param array $config */ Loading @@ -65,50 +74,78 @@ class FetcherService /** * Accessors ... */ public function getEntityManager() { public function getEntityManager() { return $this->entityManager; } public function setEntityManager(EntityManager $entityManager) { public function setEntityManager(EntityManager $entityManager) { $this->entityManager = $entityManager; } public function getUrl() { public function getUrl() { return $this->url; } public function setUrl($url) { public function setUrl($url) { $this->url = $url; } public function getUser() { public function getUser() { return $this->user; } public function setUser($user) { public function setUser($user) { $this->user = $user; } public function getPassword() { public function getPassword() { return $this->password; } public function setPassword($password) { public function setPassword($password) { $this->password = $password; } public function getCode() { public function getCode() { return $this->code; } public function setCode($code) { public function setCode($code) { $this->code = $code; } public function getProxy() { public function getProxy() { return $this->proxy; } public function setProxy($proxy) { public function setProxy($proxy) { $this->proxy = $proxy; } public function getVerify() { public function getVerify() { return $this->verify; } public function setVerify($verify) { public function setVerify($verify) { $this->verify = $verify; } /** Cette fonction retourne la position d'un extablissement dans la table des établissements (voir config) * * @param string $etablissement * @return int * @throws \Exception; Loading @@ -124,12 +161,14 @@ class FetcherService } if ($position === -1) { print "<span style='background-color:salmon;'> L'établissement [" . $etablissement . "] n'a pas pu être trouvée.</span><br/>"; throw new Exception\RuntimeException("L'établissement [" . $etablissement . "] n'a pas pu être trouvée."); throw new RuntimeException("L'établissement [" . $etablissement . "] n'a pas pu être trouvée."); } return $position; } public function setConfigWithPosition($positionEtablissement) { public function setConfigWithPosition($positionEtablissement) { $this->code = $this->config['import-api']['etablissements'][$positionEtablissement]['code']; $this->url = $this->config['import-api']['etablissements'][$positionEtablissement]['url']; $this->proxy = $this->config['import-api']['etablissements'][$positionEtablissement]['proxy']; Loading Loading @@ -167,26 +206,40 @@ class FetcherService $options['verify'] = $this->verify; } try { $client = new Client($options); try { $response = $client->request('GET', $uri); } catch (\Exception $e) { $response = new Response(); $response->setStatusCode(500); $response->setReasonPhrase($e->getCode()." - ".$e->getMessage()); throw $e; } catch (ClientException $e) { throw new RuntimeException("Erreur ClientException rencontrée lors de l'envoi de la requête au WS", null, $e); } catch (ServerException $e) { $message = "Erreur distante rencontrée par le serveur du WS"; $previous = null; if ($e->hasResponse()) { $previous = new RuntimeException($e->getResponse()->getBody()); } throw new RuntimeException($message, null, $previous); } catch (RequestException $e) { $message = "Erreur réseau rencontrée lors de l'envoi de la requête au WS"; if ($e->hasResponse()) { $message .= " : " . Psr7\str($e->getResponse()); } // var_dump($response); throw new RuntimeException($message, null, $e); } catch (GuzzleException $e) { throw new RuntimeException("Erreur inattendue rencontrée lors de l'envoi de la requête au WS", null, $e); } return $response; } /** * Fonction de mise en forme des données typées pour les requêtes Oracle * * @param mixed $value : la value à formater * @param string $type : le type de la donnée à formater * @return string la donnée formatée * * RMQ si un format n'est pas prévu par le traitement la valeur est retournée sans traitement et un message est affiché * RMQ si un format n'est pas prévu par le traitement la valeur est retournée sans traitement et un message est * affiché */ protected function prepValue($value, $type) { Loading @@ -206,23 +259,28 @@ class FetcherService $nvalue = $value; break; } return $nvalue; } protected function prepString($value) { return ("'" . str_replace("'", "''", $value) . "'"); } protected function prepDate($value) { if ($value === null) { return "null"; } $date = explode(' ', $value->{'date'})[0]; return "to_date('" . $date . "','YYYY-MM-DD')"; } /** * Fonction écrivant dans la table des logs API_LOGS * * @param DateTime $start_date : date de début du traitement * @param DateTime $end_date : date de fin (avec succés ou échec) du traitement * @param string $route : la route du traitement Loading Loading @@ -258,10 +316,12 @@ class FetcherService /** * Fonction en charge de l'affichage des metadonnées associées à une entity * * @param string $dataName : le nom de l'entité * @param string $entityClass : le chemin vers l'entité (namespace) */ public function displayMetadata($dataName, $entityClass) { public function displayMetadata($dataName, $entityClass) { $metadata = $this->entityManager->getClassMetadata($entityClass); $tableName = $metadata->table['name']; $tableRelation = $metadata->columnNames; Loading @@ -276,6 +336,7 @@ class FetcherService /** * Mise sous forme de table des données appartenant à une entité * * @param mixed $entity_json : le json associé à une entité * @param mixed metadata : les metadonnées associées à lentité * @return array les données mises sous forme d'un tableau Loading @@ -301,11 +362,13 @@ class FetcherService else $value = $entity_json->{$propriete}; $valuesArray[] = $this->prepValue($value, $type); } return $valuesArray; } /** * Fonction en charge de préparer et d'appelé fetchOne ou fetchAll * * @param string $dataName * @param string $entityClass * @param mixed $source_code Loading @@ -320,6 +383,7 @@ class FetcherService } else { $logs = $this->fetchAll($dataName, $entityClass, 0); } return $logs; } Loading @@ -327,7 +391,8 @@ class FetcherService /** * @throws \Doctrine\DBAL\DBALException */ public function updateBDD() { public function updateBDD() { $this->entityManager->getConnection()->executeQuery("begin APP_IMPORT.SYNCHRONISATION(); end;"); } Loading Loading @@ -390,6 +455,7 @@ class FetcherService } $_fin = microtime(true); if ($debug_level > 0) print "<p><span style='background-color:lightgreen;'> ExecQueries: " . ($_fin - $_debut) . " secondes.</span></p>"; return $this->doLog($start_date, new DateTime(), $this->url . "/" . $dataName . "/" . $sourceCode, "OK", "Récupération de " . $dataName . ":" . $sourceCode . " de [" . $this->code . "] en " . ($_fin - $debut) . " seconde(s)."); } Loading Loading
module/Import/src/Import/Service/FetcherService.php +95 −29 Original line number Diff line number Diff line Loading @@ -2,11 +2,16 @@ namespace Import\Service; use DateTime; use Doctrine\ORM\EntityManager; use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Psr7; use UnicaenApp\Exception\RuntimeException; use Zend\Http\Response; use DateTime; use UnicaenApp\Exception; /** * FetcherService est un service dédié à la récupération des données provenant du Web Service fournit par chaque Loading @@ -26,6 +31,7 @@ class FetcherService /** * $entityManager et $config sont fournis par la factory et permettent l'acces à la BD et à la config * * @var EntityManager $entityManager * @var array $config */ Loading @@ -33,7 +39,9 @@ class FetcherService protected $config; /** * les quatres variables $url, $code, $user et $password sont des données de configuration pour l'acces au Web Service * les quatres variables $url, $code, $user et $password sont des données de configuration pour l'acces au Web * Service * * @var string $url : le chemin d'acces au web service * @var string $code : le code de l'établissement * @var string $user : l'identifiant pour l'authentification Loading @@ -51,6 +59,7 @@ class FetcherService /** * Constructor ... * * @param EntityManager $entityManager * @param array $config */ Loading @@ -65,50 +74,78 @@ class FetcherService /** * Accessors ... */ public function getEntityManager() { public function getEntityManager() { return $this->entityManager; } public function setEntityManager(EntityManager $entityManager) { public function setEntityManager(EntityManager $entityManager) { $this->entityManager = $entityManager; } public function getUrl() { public function getUrl() { return $this->url; } public function setUrl($url) { public function setUrl($url) { $this->url = $url; } public function getUser() { public function getUser() { return $this->user; } public function setUser($user) { public function setUser($user) { $this->user = $user; } public function getPassword() { public function getPassword() { return $this->password; } public function setPassword($password) { public function setPassword($password) { $this->password = $password; } public function getCode() { public function getCode() { return $this->code; } public function setCode($code) { public function setCode($code) { $this->code = $code; } public function getProxy() { public function getProxy() { return $this->proxy; } public function setProxy($proxy) { public function setProxy($proxy) { $this->proxy = $proxy; } public function getVerify() { public function getVerify() { return $this->verify; } public function setVerify($verify) { public function setVerify($verify) { $this->verify = $verify; } /** Cette fonction retourne la position d'un extablissement dans la table des établissements (voir config) * * @param string $etablissement * @return int * @throws \Exception; Loading @@ -124,12 +161,14 @@ class FetcherService } if ($position === -1) { print "<span style='background-color:salmon;'> L'établissement [" . $etablissement . "] n'a pas pu être trouvée.</span><br/>"; throw new Exception\RuntimeException("L'établissement [" . $etablissement . "] n'a pas pu être trouvée."); throw new RuntimeException("L'établissement [" . $etablissement . "] n'a pas pu être trouvée."); } return $position; } public function setConfigWithPosition($positionEtablissement) { public function setConfigWithPosition($positionEtablissement) { $this->code = $this->config['import-api']['etablissements'][$positionEtablissement]['code']; $this->url = $this->config['import-api']['etablissements'][$positionEtablissement]['url']; $this->proxy = $this->config['import-api']['etablissements'][$positionEtablissement]['proxy']; Loading Loading @@ -167,26 +206,40 @@ class FetcherService $options['verify'] = $this->verify; } try { $client = new Client($options); try { $response = $client->request('GET', $uri); } catch (\Exception $e) { $response = new Response(); $response->setStatusCode(500); $response->setReasonPhrase($e->getCode()." - ".$e->getMessage()); throw $e; } catch (ClientException $e) { throw new RuntimeException("Erreur ClientException rencontrée lors de l'envoi de la requête au WS", null, $e); } catch (ServerException $e) { $message = "Erreur distante rencontrée par le serveur du WS"; $previous = null; if ($e->hasResponse()) { $previous = new RuntimeException($e->getResponse()->getBody()); } throw new RuntimeException($message, null, $previous); } catch (RequestException $e) { $message = "Erreur réseau rencontrée lors de l'envoi de la requête au WS"; if ($e->hasResponse()) { $message .= " : " . Psr7\str($e->getResponse()); } // var_dump($response); throw new RuntimeException($message, null, $e); } catch (GuzzleException $e) { throw new RuntimeException("Erreur inattendue rencontrée lors de l'envoi de la requête au WS", null, $e); } return $response; } /** * Fonction de mise en forme des données typées pour les requêtes Oracle * * @param mixed $value : la value à formater * @param string $type : le type de la donnée à formater * @return string la donnée formatée * * RMQ si un format n'est pas prévu par le traitement la valeur est retournée sans traitement et un message est affiché * RMQ si un format n'est pas prévu par le traitement la valeur est retournée sans traitement et un message est * affiché */ protected function prepValue($value, $type) { Loading @@ -206,23 +259,28 @@ class FetcherService $nvalue = $value; break; } return $nvalue; } protected function prepString($value) { return ("'" . str_replace("'", "''", $value) . "'"); } protected function prepDate($value) { if ($value === null) { return "null"; } $date = explode(' ', $value->{'date'})[0]; return "to_date('" . $date . "','YYYY-MM-DD')"; } /** * Fonction écrivant dans la table des logs API_LOGS * * @param DateTime $start_date : date de début du traitement * @param DateTime $end_date : date de fin (avec succés ou échec) du traitement * @param string $route : la route du traitement Loading Loading @@ -258,10 +316,12 @@ class FetcherService /** * Fonction en charge de l'affichage des metadonnées associées à une entity * * @param string $dataName : le nom de l'entité * @param string $entityClass : le chemin vers l'entité (namespace) */ public function displayMetadata($dataName, $entityClass) { public function displayMetadata($dataName, $entityClass) { $metadata = $this->entityManager->getClassMetadata($entityClass); $tableName = $metadata->table['name']; $tableRelation = $metadata->columnNames; Loading @@ -276,6 +336,7 @@ class FetcherService /** * Mise sous forme de table des données appartenant à une entité * * @param mixed $entity_json : le json associé à une entité * @param mixed metadata : les metadonnées associées à lentité * @return array les données mises sous forme d'un tableau Loading @@ -301,11 +362,13 @@ class FetcherService else $value = $entity_json->{$propriete}; $valuesArray[] = $this->prepValue($value, $type); } return $valuesArray; } /** * Fonction en charge de préparer et d'appelé fetchOne ou fetchAll * * @param string $dataName * @param string $entityClass * @param mixed $source_code Loading @@ -320,6 +383,7 @@ class FetcherService } else { $logs = $this->fetchAll($dataName, $entityClass, 0); } return $logs; } Loading @@ -327,7 +391,8 @@ class FetcherService /** * @throws \Doctrine\DBAL\DBALException */ public function updateBDD() { public function updateBDD() { $this->entityManager->getConnection()->executeQuery("begin APP_IMPORT.SYNCHRONISATION(); end;"); } Loading Loading @@ -390,6 +455,7 @@ class FetcherService } $_fin = microtime(true); if ($debug_level > 0) print "<p><span style='background-color:lightgreen;'> ExecQueries: " . ($_fin - $_debut) . " secondes.</span></p>"; return $this->doLog($start_date, new DateTime(), $this->url . "/" . $dataName . "/" . $sourceCode, "OK", "Récupération de " . $dataName . ":" . $sourceCode . " de [" . $this->code . "] en " . ($_fin - $debut) . " seconde(s)."); } Loading