betagouv / rdv-service-public

Prise de RDV pour les services publics
https://rdv.anct.gouv.fr
GNU Affero General Public License v3.0
17 stars 3 forks source link

Remontées 5xx sur les metrics Scalingo #3108

Closed francois-ferrandis closed 1 year ago

francois-ferrandis commented 1 year ago

Le contexte

Depuis le déploiement de Rails 7 (#3048), Scalingo nous remonte 2 erreurs 5xx par minute (le petit tapis rouge qui commence au moment du déploiement ci-dessous) :

image

Le support Scalingo nous a aidé à trouver les logs correspondants !

2022-11-20 16:50:29.857214671 +0100 CET [router] method=PROPFIND path="/principals/users/nom_prenom@ccas-chambery.fr" host=www.rdv-solidarites.fr request_id=1f4864f7-5dfc-4688-aec2-63d59047577d container=web-2 from="80.124.68.132" protocol=https status=501 duration=0.001s bytes=197 referer="-" user_agent="Zimbra ZCS/8.8.15_GA_4203 (20220121-0035)"
2022-11-20 16:50:29.778914427 +0100 CET [web-1] Unsupported HTTP method used: PROPFIND

2022-11-20 16:50:29.863419763 +0100 CET [router] method=PROPFIND path="/.well-known/caldav" host=www.rdv-solidarites.fr request_id=a7cf8465-abd2-465d-9d7e-b717280e6212 container=web-1 from="80.124.68.132" protocol=https status=501 duration=0.002s bytes=197 referer="-" user_agent="Zimbra ZCS/8.8.15_GA_4203 (20220121-0035)"
2022-11-20 16:50:29.793926160 +0100 CET [web-2] Unsupported HTTP method used: PROPFIND

Nous retournons donc des erreurs HTTP 501 ! https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501

Ce comportement est vraisemblablement une nouveauté de Rails 7 ou puma 6.0, car avant la MAJ Rails 7 nous avions une 404 pour la même requête :

ActionController::RoutingError (No route matches [PROPFIND] "/principals/users/nom_prenom@ccas-chambery.fr"):

Que faut-il faire ?

Bien que la réponse HTTP 501 soit pertinente sémantiquement, le fait qu'elle remonte sur nos metrics comme une 5xx peut-être faussement alarmant. Nous pouvons donc essayer de faire en sorte que la requête retourne une 404 comme auparavant. D'autres solutions sont envisageables, n'hésitez pas à en proposer !

Holist commented 1 year ago

Je suis curieux de savoir comment tu ferais pour retourner une 404 dans ce cas précis ? En te basant sur la méthode utilisée ? (Unsupported HTTP method used: PROPFIND) Si c'est le cas, ce serai pour cette méthode en particulier uniquement ou dans tout les cas "Unsupported HTTP method" ?

francois-ferrandis commented 1 year ago

Je suis curieux de savoir comment tu ferais pour retourner une 404 dans ce cas précis ? En te basant sur la méthode utilisée ? (Unsupported HTTP method used: PROPFIND) Si c'est le cas, ce serai pour cette méthode en particulier uniquement ou dans tout les cas "Unsupported HTTP method" ?

Je viens de creuser un peu : c'est un changement de puma, je pense qu'on peut utiliser la version 5 jusqu'à ce que la version 6 propose une façon d'autoriser les méthode HTTP exotiques !