-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ajout validateur GBFS à la multi-validation #2554
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai fait une première passe "ultra rapide" à l'instant.
Est-ce que tu sais si le validateur hébergé est effectivement proche de master (cf discussion sur MobilityData/gbfs-validator#77), car il y aurait un auto-deploy par exemple ?
Je suis toujours méfiant de stocker une info de ce type si elle n'est pas garantie, car ça peut faire perdre pas mal de temps derrière.
Cela étant dit j'irai reviewer plus en détail et faire tourner en local pour prendre la main sur le sujet, et je reviens vers toi ! (sauf si Francis l'a fait avant, vu que je vais être en congés par tranches).
Beau boulot par ailleurs et par avance, c'est cool de voir la multi-validation se déployer sur davantage de formats !
@thbar Je suis quasiment certain que |
Bonjour @AntoineAugusti @thbar , je vous confirme que Pour que je comprenne bien, quelle serait l'usage pour vous de cette information ? |
Hello @PierrickP! Merci pour pour la confirmation!
Cela permet de noter la version précise du validateur contre lequel un rapport de validation aura été calculé, dans le but par exemple de pouvoir reproduire localement un rapport avec la bonne version du validateur, quand on débuggue quelque chose. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai pu faire tourner le code en local comme suit:
[resource_id] = Transport.Jobs.GBFSMultiValidationDispatcherJob.relevant_resources()
|> Enum.drop(3)
|> Enum.take(1)
Transport.Jobs.GBFSMultiValidationJob.perform(%Oban.Job{args: %{"resource_id" => resource_id}})
J'ai eu des résultats au début négatifs, je partage mes copies d'écran:
Du coup je me suis demandé:
- pourquoi on a ces erreurs
- est-ce lié au statut "hébergé" du validateur
- comment les reproduire en local pour comprendre
J'ai vu passer les discussions suivantes:
- CLI or HTTP API? MobilityData/gbfs-validator#53
- CLI or http for local gbfs files MobilityData/gbfs-validator#70
Avec notamment:
The validator is currently hosted on my personnal Netlify (free plan, limited to 125k requests/month) account and we are in the way to transfer it to MobilityData.
J'ai pu reproduire au final les erreurs:
❯ node cli.js "https://gateway.prod.zoov.io/gbfs/2.2/bordeaux/en/station_information.json?key=NGFlMjU3MDUtNDk5My00MTM4LTk1ZjctNmNlNDM1MWQ0NjE1"
/Users/thbar/git/transport/gbfs-validator/gbfs-validator/gbfs.js:314
this.autoDiscovery.data[key[0]].feeds.find(f => f.name === type)
^
TypeError: Cannot read properties of undefined (reading 'find')
at /Users/thbar/git/transport/gbfs-validator/gbfs-validator/gbfs.js:314:49
at Array.map (<anonymous>)
at GBFS.getFile (/Users/thbar/git/transport/gbfs-validator/gbfs-validator/gbfs.js:311:60)
at /Users/thbar/git/transport/gbfs-validator/gbfs-validator/gbfs.js:437:27
at Array.map (<anonymous>)
at GBFS.validation (/Users/thbar/git/transport/gbfs-validator/gbfs-validator/gbfs.js:437:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
Plus important: celle qui donne un timeout marche en local, qui est probablement lié à Netlify.
Conclusion: j'approuve en l'état, ça me semble bon ! Toutefois je recommande qu'on surveille ce qui se passe, et qu'on passe en CLI si on constate trop de soucis.
@thbar Pour Vélib, ils bloquent les ips de datacenter (avec cloudflare). Mis à part faire en local ou utiliser des proxies, pas de solution Pour Zoov: (attention à la |
@PierrickP Faut qu'on regarde si un tel filtrage n'est pas contraire à la loi 😉 |
@PierrickP La clé est bien publique ici |
@etalab/transport-tech Dans mon dernier commit 49f5551, j'ai remplacé le code utilisé pour avoir la version du validateur GBFS en utilisant l'API GitHub par du code lisant cette information dans le rapport d'erreur du validateur GBFS. MobilityData/gbfs-validator#78 n'est pas encore passée en prod, il faut attendre un peu. @fchabouis tu me diras si tu veux relire avant que je merge (ou pas !) |
@behaviour Transport.Validators.Validator | ||
|
||
@impl Transport.Validators.Validator | ||
def validate_and_save(%DB.Resource{url: url, format: "gbfs", id: resource_id}) do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prend une ressource en param et non une ResourceHistory
car les ressources GBFS ne sont pas historisées (car c'est du temps réel).
|
||
@impl Transport.Validators.Validator | ||
def validate_and_save(%DB.Resource{url: url, format: "gbfs", id: resource_id}) do | ||
result = GBFSMetadata.compute_feed_metadata(url, "https://#{Application.fetch_env!(:transport, :domain_name)}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ça prend l'adresse du site web pour déterminer si le PAN est autorisé via CORS. À voir si c'est vraiment utile ou si en réalité on l'utilise pas, c'est dans la classe existante.
Transport.Shared.GBFSMetadata.Mock | ||
|> expect(:compute_feed_metadata, fn ^url, "https://transport.data.gouv.fr" -> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On pourrait peut-être simplifier les tests, là c'est du copié collé dans le test du job par rapport au test du validateur.
Peut-être lors de la suppression de la classe de validation dans shared
en mettant un behaviour ?
} = DB.MultiValidation |> DB.Repo.one!() |> DB.Repo.preload(:metadata) | ||
end | ||
|
||
defp setup_validator_version_mocks(default_branch \\ "master", sha \\ Ecto.UUID.generate()) do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même remarque qu'avant, j'ai repris les tests du validateur.
@@ -98,6 +98,7 @@ oban_crontab_all_envs = | |||
{"30 */6 * * *", Transport.Jobs.BNLCToGeoData}, | |||
{"15 10 * * *", Transport.Jobs.DatabaseBackupReplicationJob}, | |||
{"0 7 * * *", Transport.Jobs.GTFSRTMultiValidationDispatcherJob}, | |||
{"30 7 * * *", Transport.Jobs.GBFSMultiValidationDispatcherJob}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
30mn plus tard que la validation GTFS-RT. Dites-moi ce que vous en pensez en terme de fréquence.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
je pense qu'on va adapter par la suite si la cette fréquence pose problème.
gosh, j'avais pas posté tous mes commentaires en attente 😅 désolé @thbar |
PR ajoutant la version du validateur mergée ! On peut passer ça en prod quand on veut. |
je vais essayer de relire dans l'aprem, on peut merger ce soir ? |
Sans problème, j'attends :) |
tout bon pour moi ! |
En lien avec #2390 #2555
Cette PR ajoute la validation GBFS au processus de multi-validation.
Elle comporte :
transport
Ce qui manque :
resource_metadata
Je découpe ainsi pour ne pas avoir trop de code et pour avoir un peu d'historique à disposition en base de données.