# 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 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