SDIS62 / prevarisc-passerelle-platau

Passerelle permettant d'automatiser les échanges entre Prevarisc et Plat'AU
Other
9 stars 4 forks source link

Problème lors de l'export d'avis avec la dernière version (feature export-pieces-jointes) #56

Closed SDIS33 closed 7 months ago

SDIS33 commented 9 months ago

Bonjour,

Suite au déploiement dans notre environnement de la dernière version de la passerelle (comprenant essentiellement les développements d'Atos concernant l'export de PJ avec les avis), nous rencontrons systématiquement l'erreur suivante lors du lancement de la commande d'export d'avis :

In RequestException.php line 113:

  Server error: 'POST https://api.aife.economie.gouv.fr/mtes/platau/v9/consul
  tations/recherche?colonneTri=DT_DEPOT&sensTri=DESC&numeroPage=0&nbElementsP
  arPage=10' resulted in a '500 Internal Server Error' response:
  {"message":"Command failed with error 292 (QueryExceededMemoryLimitNoDiskUs
  eAllowed): 'PlanExecutor error during aggregation :: caused by :: Sort exce
  eded memory limit of 104857600 bytes, but did not opt in to external sortin
  g.' on server mongo-mongodb-0.mongo-mongodb-headless.prod.svc.cluster.local
  :27017. The full response is {\"ok\": 0.0, \"errmsg\": \"PlanExecutor error
   during aggregation :: caused by :: Sort exceeded memory limit of 104857600
   bytes, but did not opt in to external sorting.\", \"code\": 292, \"codeNam
  e\": \"QueryExceededMemoryLimitNoDiskUseAllowed\", \"$clusterTime\": {\"clu
  sterTime\": {\"$timestamp\": {\"t\": 1701330621, \"i\": 15}}, \"signature\"
  : {\"hash\": {\"$binary\": {\"base64\": \"nBh+4uftDspXrnEa4pT0LPKmSkc=\", \
  "subType\": \"00\"}}, \"keyId\": 7259789727304253443}}, \"operationTime\":
  {\"$timestamp\": {\"t\": 1701330621, \"i\": 15}}}; nested exception is com.
  mongodb.MongoCommandException: Command failed with error 292 (QueryExceeded
  MemoryLimitNoDiskUseAllowed): 'PlanExecutor error during aggregation :: cau
  sed by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in
   to external sorting.' on server mongo-mongodb-0.mongo-mongodb-headless.pro
  d.svc.cluster.local:27017. The full response is {\"ok\": 0.0, \"errmsg\": \
  "PlanExecutor error during aggregation :: caused by :: Sort exceeded memory
   limit of 104857600 bytes, but did not opt in to external sorting.\", \"cod
  e\": 292, \"codeName\": \"QueryExceededMemoryLimitNoDiskUseAllowed\", \"$cl
  usterTime\": {\"clusterTime\": {\"$timestamp\": {\"t\": 1701330621, \"i\":
  15}}, \"signature\": {\"hash\": {\"$binary\": {\"base64\": \"nBh+4uftDspXrn
  Ea4pT0LPKmSkc=\", \"subType\": \"00\"}}, \"keyId\": 7259789727304253443}},
  \"operationTime\": {\"$timestamp\": {\"t\": 1701330621, \"i\": 15}}}","uuid
  ":"187c3a91-22a7-4600-a423-1be1e937e1fa","codeErreur":500}

Il semble que l'on soit à nouveau confronté à un souci de volumétrie (#41) sur la BDD de Plat'AU.

A noter que tout se passe bien lorsqu'on lance un export d'avis pour un dossier en particulier, par exemple : php bin/platau --config=platau_prevarisc.json --consultation-id=KVZ-Q5R-27O export-avis Toutefois, suite à vérification auprès du service instructeur, l'avis a bien été reçu mais pas les PJ associées...

Je cherche de mon côté mais si vous avez des billes @kdubuc ou @A709197, je suis preneur !

A709197 commented 9 months ago

Bonjour @CFX-SDIS33,

Concernant le fait que l'avis est bien reçu et pas les PJs associées, nous avons également un SDIS qui rencontre ce souci (à noter que parfois les PJs sont bien reçues...) Nous sommes actuellement en discussion avec le support Plat'AU.

Cordialement, Maxime Merrien

SDIS33 commented 9 months ago

Merci pour l'info @A709197

SDIS33 commented 9 months ago

A noter que j'ai réussi à contourner le souci concernant la commande d'export d'avis en supprimant les 2 lignes suivantes dans le fichier Service/PlatauConsultation.php :

'colonneTri' => $order_by,
'sensTri'    => $sort,
kdubuc commented 9 months ago

L'API Plat'AU montre un problème d'optimisation de leur base de données (pas d'index sur les opérations sort, ni l'autorisation de fichiers de cache pour les aggrégations mongodb).

Tout ça pour dire : l'API Plat'AU est instable en utilisant colonneTri et sensTri.

On peut les supprimer des appels sans trop de conséquences, si ce n'est la non optimisations de nos appels.

Si @A709197 a créé un ticket, je ne doublerais pas sur le support plat'au, mais je suis curieux de leur réponse.

On se tient au courant

A709197 commented 9 months ago

Bonjour à tous les deux,

Nous avons eu un retour du support Plat'AU qui nous a indiqué que les documents sont bien versés, mais qu'ils ne sont pas liés à la consultation. Il semble donc qu'il y ait un problème lors de l'envoi de l'avis vis-à-vis de la récupération des documents à joindre. Nous allons effectuer des tests de notre côté pour cibler plus précisément le problème.

kdubuc commented 9 months ago

étrange, car, au moment de l'envoi de l'avis, les documents sont directement liés à la consultation via idConsultation https://github.com/SDIS62/prevarisc-passerelle-platau/blob/master/src/Service/PlatauConsultation.php#L142

SDIS33 commented 9 months ago

Bonjour à tous les deux,

Nous avons eu un retour du support Plat'AU qui nous a indiqué que les documents sont bien versés, mais qu'ils ne sont pas liés à la consultation. Il semble donc qu'il y ait un problème lors de l'envoi de l'avis vis-à-vis de la récupération des documents à joindre. Nous allons effectuer des tests de notre côté pour cibler plus précisément le problème.

Bonjour, Merci pour l'info @A709197. Étonnant que ces PJ puissent se retrouver sur Plat'AU, reliées à rien... Ce qui m'intrigue également, c'est que ce problème intervienne aléatoirement puisque ça a l'air de fonctionner pour certains SDIS, certains avis.

LD-SDIS33 commented 9 months ago

Demain visio synchro. Des retours sur tests pour le dysfonctionnement ?

A709197 commented 9 months ago

Bonjour @LD-SDIS33,

De notre côté, nous n'avons pas de retours concluants pour le moment.

LD-SDIS33 commented 9 months ago

Numéro de ticket ?

A709197 commented 9 months ago

Si vous parlez bien du ticket auprès du support Plat'AU, il s'agit du #290133

LD-SDIS33 commented 9 months ago

merci


IMPORTANT : Par discrétion et courtoisie pour vos correspondants, en redirigeant vos messages, effacez toutes leurs adresses visibles. De même lors d'envois simultanés vers plusieurs de vos contacts, utilisez le champ adresse « Bcc » ou « Cci » (Copie Carbone Invisible). Vous lutterez ainsi contre les activités des spammeurs, pirates, et autres «agissements malfaisants» et apporterez votre concours et votre soutien pour plus de sécurité sur le Net. MERCI. Afin de partager des fichiers merci d'utiliser la Plateforme du SDIS de la Gironde https://partage.sdis33.fr

IMPORTANT : By discretion and courtesy to your correspondents, by redirecting your messages, delete all their visible addresses. Similarly, when sending simultaneously to several of your contacts, use the address field «Bcc» or «Cci» (Invisible Carbon Copy). You will fight against the activities of spammers, hackers, and other «malicious acts» and provide your assistance and support for more security on the Net. THANK YOU.

To share files, please use the Gironde SDIS Platform https://partage.sdis33.fr

De: "Maxime MERRIEN" @.> À: "SDIS62/prevarisc-passerelle-platau" @.> Cc: "Laurent Dellac" @.>, "Mention" @.> Envoyé: Mardi 12 Décembre 2023 11:58:14 Objet: Re: [SDIS62/prevarisc-passerelle-platau] Problème lors de l'export d'avis avec la dernière version (feature export-pieces-jointes) (Issue #56)

Si vous parlez bien du ticket auprès du support Plat'AU, il s'agit du #290133

— Reply to this email directly, [ https://github.com/SDIS62/prevarisc-passerelle-platau/issues/56#issuecomment-1851808859 | view it on GitHub ] , or [ https://github.com/notifications/unsubscribe-auth/A3SBYQ4BAPWM7PNKFZDW2M3YJA2ENAVCNFSM6AAAAABAA62ATSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNJRHAYDQOBVHE | unsubscribe ] . You are receiving this because you were mentioned. Message ID: @.***>

-- Ce courriel et tous les fichiers attachés qu'il contient sont confidentiels et destinés exclusivement à la personne à laquelle ils sont adressés. Si vous avez reçu ce courriel par erreur, merci de le retourner à son expéditeur et de le détruire. Il est rappelé que tout message électronique est susceptible d'alteration au cours de son acheminement sur internet. Seuls les documents officiels du SDIS sont de nature à engager sa responsabilité. Les idées ou opinions présentées dans ce courriel sont celles de son auteur et ne représentent pas nécessairement celles du SDIS de la Gironde.

LD-SDIS33 commented 8 months ago

Avez vous un retour sur ticket #290133 ?

A709197 commented 7 months ago

Bonjour à tous,

Nous avons récemment ré-effectué des tests sur ce point. Nous avons effectué ces tests sur notre version de développement avant mise à jour avec la version du SDIS 62 et après mise à jour avec la version du SDIS 62. Voici nos premiers points de constatation.

Avec notre version de développement avant mise à jour avec la version du SDIS 62 :

Après mise à jour avec la version du SDIS 62 :

@kdubuc, une idée ?

Cordialement, Maxime Merrien

kdubuc commented 7 months ago

Après un rapide debug, il semble que le service Syncplicity ne soit jamais activé (options Syncplicity correctement renseignées dans la configuration Plat'AU)

j'ai poussé un fix https://github.com/SDIS62/prevarisc-passerelle-platau/commit/327d30ec7d4c9fe6a867276b74434bae1f9eac63 vérifiable avec l'amélioration de la commande healthcheck (https://github.com/SDIS62/prevarisc-passerelle-platau/commit/647afaa14c6cf54f96a70279869dd7061a75a7b0)

Cela devrait améliorer le process.

Pour autant, les documents ne semblent effectivement pas être liés à la consultation

Qu'en est'il du ticket support Plat'AU ?

A709197 commented 7 months ago

Merci pour le fix ! Je ne peux pas le tester de suite mais nous avions entamer une correction similaire.

Au niveau du support Plat'AU, nous avons eu la confirmation que les documents censés être envoyés avec l'avis n'apparaissent pas, sans pour autant avoir plus de précision. Le seul commentaire que nous avons eu est que "l'erreur doit être située en amont de l'appel à Plat'AU". Il faudrait selon moi faire des tests plus approfondis avec notamment la récupération des notifications Plat'AU, et ré-ouvrir le ticket avec ces nouveaux éléments au besoin.

Pour ma part, nous n'avons pas fait évolué le code de cette feature et l'API Plat'AU ne semble pas avoir changée en version 9.

Cordialement, Maxime Merrien

kdubuc commented 7 months ago

normalement, à la suite d'un upload d'une pièce + son association à une donnée métier (avis, pec ...) un déclenchement d'une notification accessible sur l'endpoint /notifications permet de savoir l'état de l'upload. A tester pour aller plus loin sur la non-liaison avec la consultation ?

A709197 commented 7 months ago

Effectivement, il est possible d'avoir ces informations. D'après la documentation du Wiki Plat'AU, il faut vérifier si le versement de la pièce sur Syncplicity est en succès, puis regarder si le versement de la donnée métier sur Plat'AU est également en succès => A savoir qu'il y a à priori plusieurs codes de succès pour ces événements

A terme, il serait également intéressant d'utiliser ces notifications (pour remplacer les statuts actuellement en place)

A709197 commented 7 months ago

Bonjour @kdubuc et @CFX-SDIS33,

J'ai pu de nouveau effectuer des tests. Hormis une correction sur les statuts, j'ai pu correctement exporter un avis avec un document. Après vérification des notifications Plat'AU sur l'endpoint /notifications, l'ajout du document est en succès et l'ajout de l'avis est en succès avec l'ensemble des documents associés. J'ai également vérifié sur l'endpoint /avis/recherche et je peux voir l'avis émis avec les documents associés dans la réponse JSON.

Pouvez-vous également tester de votre côté pour valider le bon fonctionnement ?

Cordialement, Maxime Merrien

kdubuc commented 7 months ago

je clos le ticket, si un problème est de nouveau constaté, nous réouvrirons.

SDIS33 commented 7 months ago

Bonjour,

Nous rencontrons toujours des soucis pour l'export des PJ associées aux avis. J'ai peut-être une idée pouvant expliquer ce dysfonctionnement constaté dans notre environnement : en faisant un healthcheck, j'ai remarqué la ligne de log Syncplicity : Non activé. Est-ce que ça peut être lié à notre souci ? Si oui, comment l'activer ?

Merci d'avance.

SDIS33 commented 7 months ago

J'ai aussi constaté une nouvelle erreur depuis la version #59.

PHP Fatal error:  Uncaught TypeError: Argument 5 passed to App\Service\PlatauConsultation::versementAvis() must be an instance of DateTime or null, bool given, called in /opt/prevarisc-passerelle-platau/src/Command/ExportAvis.php on line 114 and defined in /opt/prevarisc-passerelle-platau/src/Service/PlatauConsultation.php:151
Stack trace:
#0 /opt/prevarisc-passerelle-platau/src/Command/ExportAvis.php(114): App\Service\PlatauConsultation->versementAvis()
#1 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Command/Command.php(298): App\Command\ExportAvis->execute()
#2 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run()
#3 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand()
#4 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
#5 /opt/prevarisc-passerelle-platau/bin/platau(40): Symfony\Component\ in /opt/prevarisc-passerelle-platau/src/Service/PlatauConsultation.php on line 151
kdubuc commented 7 months ago

Nous rencontrons toujours des soucis pour l'export des PJ associées aux avis. J'ai peut-être une idée pouvant expliquer ce dysfonctionnement constaté dans notre environnement : en faisant un healthcheck, j'ai remarqué la ligne de log Syncplicity : Non activé. Est-ce que ça peut être lié à notre souci ? Si oui, comment l'activer ?

Vous devez activer Syncplicity en le configurant dans votre fichier de configuration

"syncplicity.options": {
      "PISTE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "PISTE_CLIENT_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  },

Normalement, sur votre compte PISTE, vous devez activer l'API PJ UPLOAD dans votre application. Suivant cette configuration, PISTE_CLIENT_ID et PISTE_CLIENT_SECRET sont identiques aux valeurs de plat'au.

J'ai aussi constaté une nouvelle erreur depuis la version #59.

PHP Fatal error:  Uncaught TypeError: Argument 5 passed to App\Service\PlatauConsultation::versementAvis() must be an instance of DateTime or null, bool given, called in /opt/prevarisc-passerelle-platau/src/Command/ExportAvis.php on line 114 and defined in /opt/prevarisc-passerelle-platau/src/Service/PlatauConsultation.php:151
Stack trace:
#0 /opt/prevarisc-passerelle-platau/src/Command/ExportAvis.php(114): App\Service\PlatauConsultation->versementAvis()
#1 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Command/Command.php(298): App\Command\ExportAvis->execute()
#2 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run()
#3 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand()
#4 /opt/prevarisc-passerelle-platau/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
#5 /opt/prevarisc-passerelle-platau/bin/platau(40): Symfony\Component\ in /opt/prevarisc-passerelle-platau/src/Service/PlatauConsultation.php on line 151

Pouvez vous me donner la date DATE_AVIS du dossier qui pose problème en base ?

SDIS33 commented 7 months ago

Merci pour le retour

Vous devez activer Syncplicity en le configurant dans votre fichier de configuration

"syncplicity.options": {
      "PISTE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "PISTE_CLIENT_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  },

Normalement, sur votre compte PISTE, vous devez activer l'API PJ UPLOAD dans votre application. Suivant cette configuration, PISTE_CLIENT_ID et PISTE_CLIENT_SECRET sont identiques aux valeurs de plat'au.

J'ai modifié notre fichier de configuration comme suit (j'avais déjà activé l'API PJ UPLOAD sur notre application PISTE) :

    "platau.options": {
         "PISTE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "PISTE_CLIENT_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "PLATAU_ID_ACTEUR_APPELANT": "XL9-GQV-QGO" 
    },
    "prevarisc.options": {
        "PREVARISC_DB_NAME": "xxx",
        "PREVARISC_DB_USER": "xxx",
        "PREVARISC_DB_PASSWORD": "xxx",
        "PREVARISC_DB_HOST": "xxx",
        "PREVARISC_DB_DRIVER": "pdo_mysql",
        "PREVARISC_DB_CHARSET": "utf8",
        "PREVARISC_DB_PORT": 3306,
        "PREVARISC_DB_PLATAU_USER_ID": 0,
        "PREVARISC_PIECES_JOINTES_PATH": "xxx" 
    },
    "syncplicity.options": {
         "PISTE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "PISTE_CLIENT_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}

et nous avons maintenant l'erreur suivante lors d'un healthcheck : PHP Parse error: syntax error, unexpected ':', expecting ')' in /opt/prevarisc-passerelle-platau/src/Service/SyncplicityClient.php on line 198

Pouvez vous me donner la date DATE_AVIS du dossier qui pose problème en base ?

Aucune date d'avis en BDD PREVARISC : image

Mais sur Plat'AU, le dossier a une date d'avis au 11/01/2024... image

kdubuc commented 7 months ago

et nous avons maintenant l'erreur suivante lors d'un healthcheck : PHP Parse error: syntax error, unexpected ':', expecting ')' in /opt/prevarisc-passerelle-platau/src/Service/SyncplicityClient.php on line 198

C'est du à une incompatibilité de version de PHP. J'ai corrigé pour être compatible PHP7 : https://github.com/SDIS62/prevarisc-passerelle-platau/commit/ca55e0b870adc75cdda5ee330f6a96b9d85ea615

Aucune date d'avis en BDD PREVARISC

Hum, normalement, la passerelle attend une date d'avis donnée par PREVARISC afin de la donner à Plat'AU.

Cela est du à un changement dans la gestion de la date d'avis Prevarisc / Plat'AU (voir https://github.com/SDIS62/prevarisc-passerelle-platau/blob/master/src/Service/Prevarisc.php#L54-L60).

@A709197 comment gérer ce problème ? Peut on ajouter des conditions SQL pour gérer les dates d'avis antérieures au passage à la V10 ? (si platauconsultation.DATE_AVIS ?? dossier.DATE_AVIS) ?

A709197 commented 7 months ago

Bonjour à tous les deux,

En fait le problème était dû à un bug sur le renseignement de la date d'avis dans Prevarisc par la passerelle.

La date d'avis initiale n'étant utilisée que lors d'un renvoi d'avis (comme indiqué dans la capture : STATUT_AVIS à to_export) et étant donné que la consultation est récupérée depuis Plat'AU, il me semble plus pertinent d'utiliser directement le champ dtAvis si l'information n'est pas présente en base.

Je vous tiens au courant.

SDIS33 commented 7 months ago

C'est du à une incompatibilité de version de PHP. J'ai corrigé pour être compatible PHP7 : ca55e0b

Merci pour la réactivité et le correctif Kevin, l'export des PJ a l'air désormais opérationnel dans notre environnement !