sdi-checker/README.md
Guillaume RYCKELYNCK ea6096301c update documentation
2024-06-23 09:16:04 +02:00

337 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sdi-checker
Nouvelle application basée sur sdi-consistence-check.
Elle reprend l'objectif initial de pouvoir vérifier la cohérence entre les données et métadonnées d'une IDG.
A ce stade, les principales modifications sont les suivantes:
- Intégration dands un CLI (via le module Click) avec la possibilité également de l'utiliser comme une application dédiée (via le module Python Prompt Toolkit).
- Ajout de la notion "d'audits" : gestion et exécution de tests préenregistrés au format JSON.
- Séparation des logs (cf. classe libs/logs.py) et des rapports (cf. classe libs/reports.py) afin de pouvoir les enregistrer dans différents formats (JSON, CSV, etc.)
## Concepts
![Concepts](./docs/SDI-CHECKER_concepts.png)
- SERVICE : désigne un service web accessible via un URL (ex. : https://sdi.georchestra.org/geoserver/wfs). Le service doit être indépendant de la solution logicielle utilisée (GeoServer, GeoNetwork ou autre). Il se caractérise principalement par son type : « WMS », « WFS » ou « CSW ». Les services WMS et WFS étant similaires, le cas échéant ils sont regroupés sous la terminologie « WxS ».
- COLLECTION : sous-ensemble déléments (ITEMS) retournés par le service interrogé. Il regroupe un ensemble dITEMS. Il peut par exemple sagir dun espace de travail (workspace) dans le cas de lutilisation de GeoServer.
- ITEM : élément unitaire testé par SDI CHECKER. Dans le cas de flux WMS et WFS on parlera de « LAYER », dans le cas de CSW on parlera de « METADATA » ou « MD »
- LAYER : ITEM provenant dune SERVICE/COLLECTION de type WxS
- MD : ITEM provenant dune SERVICE/COLLECTION de type CSW
- AUDIT : correspond à une vérification de conformité sur un SERVICE, une COLLECTION ou un ITEM. Il donne lieu à un REPORT
- REPORT : rapport issu dun ensemble de CHECKS appliqué à un SERVICE, une COLLECTION ou un ITEM.
- CHECK : il sagit dune vérification unitaire de cohérence et validité dune information dun ITEM. Une vérification porte généralement sur un ensemble de CHECKS appliqué à un ITEM.
## Installation
```
$ git clone ...
$ cd sdi-checker
$ python -m venv venv
$ ./venv/scripts/activate # windows
$ source ./venv/bin/activate # linux
$ pip install -r requirements.txt
```
## Utilisation
```
# Créer un premier audit
$ python .\sdi-checker.py audits add --url https://www.datagrandest.fr/geoserver/araa/ows --name 'WMS de l'ARAA' --type WMS
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
+----+---------------+------+------------------------------------------------+
# Créer un second audit
$ python .\sdi-checker.py audits add --url https://www.datagrandest.fr/geoserver/araa/ows --name 'WFS de l'ARAA' --type WFS
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
| 1 | WMS de l'ARAA | WFS | https://www.datagrandest.fr/geoserver/araa/ows |
+----+---------------+------+------------------------------------------------+
# Créer un troisième audit
$ python .\sdi-checker.py audits add --url https://www.datagrandest.fr/geoserver/wfs --name 'Audit de test' --type WFS
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
| 1 | WMS de l'ARAA | WFS | https://www.datagrandest.fr/geoserver/araa/ows |
| 2 | Audit de test | WFS | https://www.datagrandest.fr/geoserver/wfs |
+----+---------------+------+------------------------------------------------+
# Modifier un audit
$ python .\sdi-checker.py audits edit 2 --url https://www.datagrandest.fr/geoserver/wms --name 'Audit WMS' --type WMS
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
| 1 | WMS de l'ARAA | WFS | https://www.datagrandest.fr/geoserver/araa/ows |
| 2 | Audit WMS | WMS | https://www.datagrandest.fr/geoserver/wms |
+----+---------------+------+------------------------------------------------+
# Supprimer un audit
$ python .\sdi-checker.py audits delete 2
Do you want to delete audit 2 ? [y/N]: y
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
| 1 | WMS de l'ARAA | WFS | https://www.datagrandest.fr/geoserver/araa/ows |
+----+---------------+------+------------------------------------------------+
# Lister les audits
$ python .\sdi-checker.py audits list
Liste des audits
Nb. audits: 3/3
+----+---------------+------+------------------------------------------------+
| ID | NAME | TYPE | URL |
+----+---------------+------+------------------------------------------------+
| 0 | WMS de l'ARAA | WMS | https://www.datagrandest.fr/geoserver/araa/ows |
| 1 | WMS de l'ARAA | WFS | https://www.datagrandest.fr/geoserver/araa/ows |
+----+---------------+------+------------------------------------------------+
# Lancer un audit pré-enregistré
$ python .\sdi-checker.py audits run 0
(...)
# Lancer un audit à la volée et enregistrer le résultat dans le fichier 'araa_wfs.json'
$ python .\sdi-checker.py check wfs https://www.datagrandest.fr/geoserver/araa/ows -ro araa_wfs.json
(...)
```
## Organisation des fichiers
### Organisation du code
Un point d'entrée unique dans l'application :
```
$ python ./sdi-checker.py [MODE]
```
Une classe centrale permet de gérer l'application : `./sdi_checker/app/application.py`.
Plusieurs mode d'exécution:
- 'cli' (par défaut) : `./sdi_checker/app_cli/application.py`
- 'web' (serveur bottle) : `./sdi_checker/app_web/application.py`
Possibilité ainsi d'étendre avec une version desktop au besoin ('gui'), etc.
Les librairies utilisées sont organisés sous forme de classes dans `./sdi_checker/libs`.
Pour l'application CLI les commandes et sous-commandes sont définies dans `./sdi_checker/app_cli/commands` : un fichier par commande et un répertoire correspodnant pour les sous-commandes (cf. section 'Liste des commandes' ci-dessous).
### Gestion de la liste des audits
Un fichier JSON avec la liste des audits et leurs paramètres
Fichier "audits.json"
```json
[{
"id": "md5"
"name": "wms_araa"
"description": "Service WMS ARAA",
"url": "https://www.datagrandest.fr/geoserver/araa/ows",
"last_check": "1709124512",
"reports": ["data/araa/1709124512.json"]
...
}, { }]
```
## Liste des commandes (à compléter)
### audits
#### list/ls = liste les audits déjà renseignés
Paramètres:
- SEARCH = filtrer la liste des audits contenant le terme "SEARCH"
#### add
Objectif : ajouter un nouvel audit
Paramètres:
- name NAME
- description DESCRIPTION
- url SERVER
- type {WMS,WFS,CSW}
- inspire {flexible,strict}
- geoserver-to-check GEOSERVER_TO_CHECK [GEOSERVER_TO_CHECK ...]
- check-layers
- disable-ssl-verification
- only-err
- xunit
- xunit-output XUNIT_OUTPUT
- log-to-file LOG_TO_FILE
- timeout TIMEOUT
#### delete/remove/del/rm
Objectif : supprimer un audit
Paramètres:
- NAME / ID
#### edit
Objectif : modifier les paramètres d'un audit
Paramètres:
- NAME / ID
#### run
Objectif : lancer la génération d'un rapport (à partir d'un audit existant en utilisant `audits run NAME/ID`)
Paramètres:
- NAME / ID
- TYPE / URL / ...
- save = faut-il enregistrer le rapport dans la BDD
### check
Objectif : lancer la génération d'un rapport en indiquant les paramètre en ligne de commande
#### wms
Objectif : générer le rapport d'un web service WMS
Paramètres:
- ...
#### wfs
Objectif : générer le rapport d'un web service WFS
Paramètres:
- ...
#### csw
Objectif : générer le rapport d'un web service CSW
Paramètres:
- ...
### reports
#### list AUDITS
Objectif :
Paramètres:
#### errors REPORT
Objectif :
Paramètres:
#### layers REPORT
Objectif :
Paramètres:
#### worspaces REPORT
Objectif :
Paramètres:
#### dashboard REPPORT
Objectif :
Paramètres:
## API d'interrogation des serveurs et rapports
Cette API a vocation a pemrttre de générer et consulter des rapports pour une réutilisation dans d'autres applications.
Les bases du ode se situent dans `sdi-checker/app_web`.
**!! Les fonctionnalités de consultation des rapports et erreurs (ex.: http://127.0.0.1:8001/reports) ne sont actuellement plus fonctionnelles suite à une modification importante du code de l'application SDI Checker.**
Utilisation:
```
# Démarrer le serveur
$ python .\sdi-checker.py web [MODE]
```
Les modes possibles sont:
- 'prod' (défaut) : ouvre Webview
- 'dev' : ouvre Webview en mode développement
- 'browser' : ouvre l'application dans le navigateur
- 'wsgi' : exécuter le serveur dans un contexte WSGI
A terme, cette partie du code devrait faire l'objet d'un projet spécifique avec un dépôt dédié.
## UI
La volonté à terme est de développer une interface simple d'usage de l'API SDI Checker.
Ce développement fera l'objet d'un projet spécifique.
## TODOLIST
### DONE
- [x] audits - Créer nouvelle commande "audits"
- [x] audits_list - Créer la sous-commande "list"
- [x] audits_list - Ajouter une fonction display pour afficher la liste des service sous forme de table
- [x] audits_add - Créer la sous-commande "add"
- [x] audits_delete - Créer la sous-commande "delete"
- [x] audits_edit - Créer la sous-commande "edit"
- [x] audits_run - Créer la sous-commande "run" (cf. "check wms")
### TODO
- Réfléchir à l'architecture et au fonctionnement de l'application
- Travailler sur la commande "check_wms" avec l'ensemble des paramètres définis (format, etc.)
- Reprendre le travail sur la commande "check_wms" et le reporter sur "check_wfs"
- Reprendre le travail sur la commande "check_csw" et le reporter sur "check_csw"
- Etufier la sauvegarde en base de donnée (SQLite en local + PostGreSQL)
- reports - Créer nouvelle commande "reports" (reprendre sdi-cc-report)
- reports_list - Créer la sous-commande "list" (reprendre sdi-cc-report)
- reports_errors - Créer la sous-commande "errors" (reprendre sdi-cc-report)
- reports_layers - Créer la sous-commande "layers" (reprendre sdi-cc-report)
- reports_workspaces - Créer la sous-commande "workspaces" (reprendre sdi-cc-report)
- reports_dashboard - Créer la sous-commande "dashboard" (reprendre sdi-cc-report)
- api - Mettre en place l'API (cf. app_web)
- ui - Développer un UI simple