Skip to content

Architecture

Claire Dagan edited this page Jun 10, 2025 · 3 revisions

Schéma

Périmètre de l'application

MonitorEnv s'articule autour de 3 éléments principaux

  • Data pipeline
  • Back end
  • Front End

Data pipeline

Le service de traitement des données exécute des tâches python par lots pour récupérer des données de sources externes

Les tâches par lots sont orchestrées par Prefect. Pour plus d'information voir la documentation. L'interface utilisateur de Prefect permet aux administrateurs de visualiser chaque flux sous la forme d'un diagramme des tâches qui le composent, de surveiller leur exécution, de consulter les journaux et de déboguer en cas d'échec de l'exécution d'un flux.

  • python 3.8.7
  • SQLAlchemy, une boîte à outils SQL en python pour interagir avec les bases de données SQL
  • Adaptateurs de base de données: cx_Oracle et psycopg2 pour la connectivité aux bases de données Oracle et PostgreSQL respectivement
  • Pandas pour la manipulation des données en pyhton
  • Prefect python librairie pour écrire des travaux par lots sous forme de flux de tâches

Back end

  • Kotlin
  • Spring Boot
  • Flyway (database migration)
  • PostgreSQL with PostGIS/TimescaleDB
  • Tomcat (version 9.0.37)

Front end

  • Openlayers
  • React

Swagger : https://monitorenv.din.developpement-durable.gouv.fr/swagger-ui/index.html

Sources externes de données

L'application MonitorEnv utilise des ressources externes pour différentes raisons :

  • Récupérer les actions faites par le CNSP et par les unités elle-même au sein d'une mission

    • API MonitorFish (Liste des actions)
    • API RapportNav (Booléen qui indique si l'unioté à créé ou non des actions)
  • Récupérer les NATINFS (référentiel des différents types de nature d'infractions) pour les afficher dans l'application

    • Flow Prefect qui va chercher les données dans la base de données FMC (Fishing Monitoring Center) pour les intégrer ensuite dans la base de données MonitorEnv
  • Récupérer les différentes couches réglementaires (zones réglementaires, AMP), les sémaphores de la base du CROSS

    • Flows prefect qui va chercher les données dans la base de données du CACEM (au CROSS-A) pour les intégrer ensuite dans la base de données MonitorEnv
  • Utilisation de google places

Consommateurs de nos apis

  • Les applications MonitorFish et RapportNav consomment des apis de MonitorEnv:
    • API /GET

      • /missions: Liste des missions

      • /missions/find?{missionIds}: Liste des missions par ids

      • /missions/{missionId}: Détails d'une mission, et des actions créées dans MonitorEnv

      • /missions/{missionId}/can_delete: Vérification qu'une mission peut être supprimée par la source qui appelle l'api (MonitorFish ou RapportNav)

      • /missions/engaged_control_units: Liste des unités de contrôle en cours de mission

      • /administrations: Liste des administrations

      • /administrations/{administrationId}: détails d'une administration

      • /administrations/{administrationId}/can_delete: Vérification qu'une administration peut être supprimée

      • /administrations/{administrationId}/can_archive: Vérification qu'une administration peut être archivée

      • /control_plans: Liste des plans de contrôle (thématiques)

      • /control_plans/{year}: Liste des plans de contrôle (thématiques) par année

      • /control_unit_resources: Liste des resources des unités de contrôle

      • /control_unit_resources/{controlUnitResourceId}/can_delete: Vérification qu'une ressource d'une unité de contrôle peut être supprimée

      • /control_unit_resources/{controlUnitResourceId}: Détails d'une ressource d'une unité de contrôle

      • /control_units: Liste des unités de contrôle (Legacy)

      • /control_units: Liste des unités de contrôle

      • /control_units/{controlUnitId}: Détails d'une unité de contrôle

      • /control_units/{controlUnitId}/can_delete: Vérification qu'une unité de contrôle peut être supprimée

      • /stations: Liste des bases

      • /stations/{stationId}: Détails d'une base

      • /stations/{stationId}/can_delete: Vérification qu'une base peut être supprimée

      • /control_unit_contacts: Liste des contacts des unités de contrôle

      • /control_unit_contacts/{controlUnitContactId}: Détails des contacts d'une unité de contrôle

      • /test/trigger_sentry_error: Permet de vérifier si les erreurs sont bien envoyées à Sentry

      • /version: Permet de récupérer la version de l'application

    • API /POST

      • /missions: Création d'une mission

      • /missions/{missionId}: Modification d'une mission (Legacy)

      • /administrations: Création d'une administration

      • /control_unit_resources: Création d'une ressource d'une unité de contrôle

      • /stations: Création d'une base

      • /authorization/management: Création d'un nouvel utilisateur

      • /control_units: Création d'une unité de contrôle

      • /control_unit_contacts: Création des contacts d'une unité de contrôle

    • API /PUT

      • /administrations/{administrationId}: Modification d'une administration

      • /administrations/{administrationId}/archive: Archivage d'une administration

      • /control_unit_resources/{controlUnitResourceId}: Modification d'une ressource d'une unité de contrôle

      • /control_unit_resources/{controlUnitResourceId}/archive: Archivage d'une resource d'une unité de contrôle

      • /stations/{stationId}: Modification d'une base

      • /control_units/{controlUnitId}: Modification d'une unité de contrôle

      • /control_units/{controlUnitId}/archive: Archivage d'une unité de contrôle

    • API /PATCH

      • /actions/{id}: Modification des actions ENV d'une mission
      • /missions/{missionId}: Modification d'une mission
      • /control_unit_contacts/{controlUnitContactId}: Modification des contacts d'une untié de contrôle
    • API /DELETE

      • /missions/{missionId}: Suppression d'une mission
      • /administrations/{administrationId}: Suppression d'une administration
      • /control_unit_resources/{controlUnitResourceId}: Suppression d'une ressource d'une unité de contrôle
      • /stations/{stationId}: Suppression d'une base
      • /authorization/management/{email}: Suppression d'un utilisateur
      • /control_units/{controlUnitId}: Suppression d'une unité de contrôle
      • /control_unit_contacts/{controlUnitContactId}: Suppression des contacts d'une unité

Data

Flux

Les flux (flows) sont des travaux par lots qui déplacent et transforment les données. Collectivement, ils constituent le pipeline de données de l'architecture MonitorEnv.

Chaque tâche est écrite comme un flux Prefect qui extrait des données (de sources externes et/ou de tables dans la base de données MonitorEnv), traite les données et les charge dans une table de la base de données MonitorEnv.

Les flux sont composés de tâches typiquement écrites comme des fonctions python pures. L'interface utilisateur (accès restreint) permet aux administrateurs de visualiser chaque flux sous la forme d'un diagramme des tâches qui le composent, de surveiller leur exécution, de consulter les journaux et de déboguer en cas d'échec de l'exécution d'un flux...

Liste des flux

  • admin_areas,
  • amp_cacem,
  • amp_ofb,
  • control_objectives,
  • competence_cross_areas,
  • email_actions_to_units,
  • facade_areas,
  • facade_areas_unextended,
  • fao_areas,
  • historic_control_units,
  • historic_controls,
  • infractions,
  • marpol,
  • refresh_materialized_view,
  • regulations,
  • semaphores,
  • themes_and_tags,
  • three_hundred_meters_areas,
  • update_departments_and_facades, //lancer manuellement

Détail des flux

  • Administrative areas:

Le flux Administrative areas extrait les zones administratives (zones FAO, zones économiques exclusives...) de la base de données du CACEM et insère les données dans différents tables de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données du CACEM après une mise à jour.

  • Amp CACEM:

Le flux Amp CACEM extrait les zones AMP (Aires Marines protégées) de la base de données du CACEM et les charge dans la table amp_cacem de la base de données MonitorEnv. Il est programmé pour s'exécuter tous les jours.

  • Amp OFB:

Le flux Amp OFB extrait les zones AMP (Aires Marines protégées) fournies par l'OFB (Office Français de la Biodiversité), via une API et insère les données dans la table Aires marines protégées de la base de données CACEM. Il est programmé pour s'exécuter tous les jours.

  • Control Objectives:

Le flux Control Objectives permet d'ajouter les objectifs de contrôle nationaux dans la table control_objectives de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire.

  • Competence cross areas:

Le flux Competence cross areas extrait les zones de compétences de chaque CROSS, avec leur nom, de la base de données CACEM et insère les données dans la table competence_cross_areas de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données CACEM après une mise à jour.

  • Email actions to units:

Le flux Email actions to units permet d'envoyer un mail aux unités détaillant leur missions et actions de contrôle de la semaine passée. Il est executé tous les lundis matin.

  • Facade areas:

Le flux Facade areas extrait les zones de façade (NAMO, MEMN...) de la base de données CROSSA et les charge dans la table facade_areas_subdivided de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données CROSSA après une mise à jour.

  • Facade areas unextended:

Le flux Facade areas unextended extrait les zones de façade (NAMO, MEMN...) de la base de données CROSSA et les charge dans la table facade_areas_unextended de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données CROSSA après une mise à jour.

  • Fao Areas:

Le flux FAO Areas extrait les zones FAO du site web de la FAO et les charge dans la table fao_areas de la base de données MonitorEnv. Il est exécuté manuellement si nécessaire, afin de synchroniser la base de données MonitorEnv avec le site web de la FAO après une mise à jour.

  • Historic Control Units:

Le flux Historic Control Units a permis d'extraire les unités de contrôle de la base de données FMC (Fisheries Monitoring Center) pour les chargr ensuite dans la table control_units de MonitorEnv. Cela a ensuite permis de pouvoir administrer les unités de contrôles directement depuis MonitorEnv. Le flux a été lancé une fois et n'a pas vocation a être relancé.

  • Historic Controls:

Le flux Historic Controls a permis d'extraire les missions et les actions de contrôles de la base de données Poséidon , dans laquelle était historiqument stockées les missions, pour les charger ensuite dans la base de données MonitorEnv. Le flux a été lancé une fois et n'a pas vocation a être relancé.

  • Infraction:

Le flux Infractions extrait la liste des infractions, avec leur code NATINF et leur description, de la base de données FMC et charge les données dans la table « infractions » de la base de données MonitorEnv. Il est programmé pour s'exécuter 2 fois par jour.

  • Marpol:

Le flux Marpol extrait les zones MARPOL (MARine POLlution) de la base de données CACEM et insère les données dans la table marpol de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données CACEM après une mise à jour.

  • Refresh materialized view:

Le flux Refresh materialized view permet de mettre à jour les différentes vues Metabase créées. Il est executé toutes les heures.

  • Regulations:

Le flux Regulations extrait les zones règlementaires de la base de données CACEM et insère les données dans la table regulations_cacem de la base de données MonitorEnv. Il est executé toutes les 10 minutes.

  • Semaphores:

Le flux Semaphores extrait les données des sémaphores de la base de données CACEM et insère les données dans la table semaphore de la base de données MonitorEnv. Il est executé 1 fois par jour.

  • Themes and tags:

Le flux Themes and tags extrait les thèmes et tags, ainsi que les données des tables relationnelles des zones règlementaires avec leurs thèmes et tags. Il insère ensuite ces données dans les tables themes, tags, themes_regulatory_areas et tags_regulatory_areasde la base de données MonitorEnv. Il est executé toutes les 10 minutes.

  • 300 meters areas:

Le flux 300 meters areas extrait les données des limites des 300 mètres de la laisse de basse mer de la base de données CACEM et insère les données dans la table three_hundred_meters_areas de la base de données MonitorEnv. Il est exécuté manuellement lorsque cela est nécessaire, afin de synchroniser la base de données MonitorEnv avec la base de données CACEM après une mise à jour.

  • Departments and façades:

Le flux Update departments and façades for missions and envActions a permis de mettre à jour les facades déjà calculée de certaines missions et actions suite à une mise à jour de ces facades dans la base du CROSSA. Le flux a été lancé une fois et n'a pas vocation a être relancé.

Clone this wiki locally