etalab / noms-de-domaine-organismes-secteur-public

Liste de noms de domaine d'organismes publics
Other
22 stars 15 forks source link

Validation périodique de urls.txt #29

Closed JulienPalard closed 1 year ago

JulienPalard commented 2 years ago

Aujourd’hui, scripts/consolidate.py s’assure que chaque URL ajoutée dans urls.txt répond 200 OK.

Cependant, comme indiqué dans https://github.com/etalab/noms-de-domaine-organismes-publics/issues/6, on a rien pour vérifier que ça reste vrai.

Il faudrait donc un script qui repasse sur urls.txt pour en retirer les URL qui ne répondent plus, et peut être en faire un commit avec la raison du retrait (échec DNS, échec TLS, échec HTTP, redirection, …).

mfaure commented 2 years ago

Merci @JulienPalard d'avoir créé cette issue !

Dans Gitlab, on peut programmer des Jobs CI (p. ex. toutes les nuits), j'imagine qu'on doit pouvoir faire pareil dans Github, et a minima faire la verif (vert = OK ; rouge = traitement manuel à faire).

J'étends la réflexion sur les entrées à supprimer : est-ce qu'on en conserve une trace quelques part, genre dans un fichier -cimetiere.txt ? Je n'arrive pas à savoir si cette idée à de la valeur. Vos avis ?

bzg commented 2 years ago

Matthieu FAURE @.***> writes:

J'étends la réflexion sur les entrées à supprimer : est-ce qu'on en conserve une trace quelques part, genre dans un fichier -cimetiere.txt ? Je n'arrive pas à savoir si cette idée à de la valeur. Vos avis ?

Sur ce point particulier, je pense qu'il ne faut se charger de garder trace des entrées supprimées. Le fait de les lister constitue une réutilisation possible du dépôt, et la trace est dans l'historique.

JulienPalard commented 2 years ago

J'étends la réflexion sur les entrées à supprimer : est-ce qu'on en conserve une trace quelque part, genre dans un fichier -cimetiere.txt ? Je n'arrive pas à savoir si cette idée à de la valeur. Vos avis ?

Si un jour on en a besoin on pourra reconstruire la liste à partir de l'historique git.

JulienPalard commented 2 years ago

J'ai mené une expérience durant mes vacances :

* 3201f3f Refreshing 1k domains. 2022-05-07 09:49:34 +0200 Julien Palard
* 4918e7e Refreshing 1k domains. 2022-05-07 09:49:33 +0200 Julien Palard
* 8d92a64 Refreshing 1k domains. 2022-05-07 09:49:33 +0200 Julien Palard
* c031a97 Refreshing 1k domains. 2022-05-07 09:49:33 +0200 Julien Palard
* 6169b86 Refreshing 1k domains. 2022-05-07 09:49:32 +0200 Julien Palard
* 1a0ab5f Refreshing 1k domains. 2022-05-01 12:15:42 +0200 Julien Palard
* b01e55c Refreshing 1k domains. 2022-05-01 11:32:29 +0200 Julien Palard

C'était :

from sys import executable
from time import sleep
from subprocess import run as _run

def run(command):
    _run(command, shell=True, check=False)

run(f"{executable} scripts/http_checker.py -s --limit 1000")
run("git add urls.txt domains.csv")
run("git commit -m 'Refreshing 1k domains'.")
sleep(60)
run(f"{executable} scripts/http_checker.py -s --grep $(git show urls.txt | grep ^- | sed 1d | cut -d/ -f3)")
run("git add urls.txt domains.csv")
run("git commit -m 'Fix last refresh 1mn later'.")
sleep(60 * 15)
run(f"{executable} scripts/http_checker.py -s --grep $(git log -p urls.txt | grep ^-http | head -n 100 | cut -d/ -f3)")
run("git add urls.txt domains.csv")
run("git commit -m 'Recheck last 100 removals'.")

Pas de git push, ça m'a permis de relire en rentrant de vacances pour voir à quel point une exécution automatique peut remonter des faux positifs et faire "clignotter" des domaines dans urls.txt.

En conclusion :

Je viens donc de mettre en place :

=> https://github.com/etalab/noms-de-domaine-organismes-publics/blob/master/.github/workflows/refresh.yml

Je ne pense pas qu'il faille faire comme mon script (de gros sleep), mais plutôt une autre tâche périodique dédiée à retester les domaines qui ont disparu récement, et donc qui ont de forte chances de revenir rapidement.

Peut-être via quelque chose comme :

python scripts/http_checker.py --grep $(git diff urls.txt | grep ^- | sed 1d | cut -d/ -f3)

ou plus élaboré, le problème du git diff | grep ^- c'est qu'il reteste aussi les domaines qui ont changé de protocole :

- http://data.gouv.fr
+ https://data.gouv.fr

^ là le grep trouve le - et on reteste data.gouv.fr pour rien. Il faudrait faire mieux,

JulienPalard commented 1 year ago

Les actions github en place font correctement leur travail, je ferme cette issue.

Elles actualisent 1000 domaines par jour, ce qui "boucle" actuellement en 85 jours.