337 lines
11 KiB
Markdown
337 lines
11 KiB
Markdown
# 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
|
||
|
||

|
||
|
||
- 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 d’ITEMS. Il peut par exemple s’agir d’un espace de travail (workspace) dans le cas de l’utilisation 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 d’une SERVICE/COLLECTION de type WxS
|
||
- MD : ITEM provenant d’une 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 d’un ensemble de CHECKS appliqué à un SERVICE, une COLLECTION ou un ITEM.
|
||
- CHECK : il s’agit d’une vérification unitaire de cohérence et validité d’une information d’un 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
|