Voici la documentation : https://geoplateforme.pages.gpf-tech.ign.fr/documentation

Skip to content
Extraits de code Groupes Projets

Feature/add log and update log init

Fusionnées Jean-Marie KERLOCH a demandé de fusionner feature/add_log_and_update_log_init vers main
3 fichiers
+ 53
33
Comparer les modifications
  • Côte à côte
  • En ligne
Fichiers
3
@@ -61,7 +61,9 @@ class Road2Agent(PublishAgent):
endpoint_name (str): nom du endPoint
pod_id (str): nom de l'identifiant de service
url_entrepot (str): URL de l'Entrepôt
publication_topic (str): topic du bus sur lequel l'agent écoute
exchange_name (str): nom de l'exchange du bus sur lequel
écouter, vaut "my_exchange" par défaut. Ne doit pas être une
chaîne vide.
publication_result_topic (str): topic du bus sur lequel l'agent envoie une réponse
host (str): nom de l'hôte du serveur RabbitMQ
port (int): port du serveur rabbitMQ
@@ -170,33 +172,31 @@ class Road2Agent(PublishAgent):
"""
logger.info(f"AGENT ROAD2 : traitement du message - {params}")
result: int = 0
result = Status.OK
if params["status"] in [
"PUBLISHED",
"PUBLISHING",
]:
logger.info(f"Publication de l'offering {params['_id']}")
# Publier l'offre correspondante
result |= self.publish(params).value
result = self.publish(params)
if params["status"] in [
"UNPUBLISHED",
"UNPUBLISHING",
]:
logger.info(f"Dépublication de l'offering {params['_id']}")
# Dépublier l'offre correspondante
result |= self.unpublish(params).value
result = self.unpublish(params)
if params["status"] in [
"SYNCHRONIZING",
"MODIFYING",
]:
logger.info(f"Synchronisation/Modification de l'offering {params['_id']}")
result |= self.synchronize(params).value
result = self.synchronize(params)
logger.info(f"INFO: Status de la demande : {Status(result)}")
return Status(result)
logger.info(f"INFO: Status de la demande : {result}")
return result
def publish(self, params: dict) -> Status:
"""Permet de publier un service ITINERARY ou ISOCHRONOUS.
@@ -208,11 +208,10 @@ class Road2Agent(PublishAgent):
Status: état de la publication
"""
try:
result = 0
# Créer configuration pour r2gg
result |= configure_r2gg(
result = configure_r2gg(
self.work_dir, self.endpoint_data_dir, params, self.pgr_infos
).value
)
run_r2gg_road2_config(self.work_dir)
# Redémarrage des services Road2
if not self._restart_road2():
@@ -220,7 +219,7 @@ class Road2Agent(PublishAgent):
# Road2 n'est pas dans un état correct autrement et l'on ne peut plus utiliser le service
self.unpublish(params)
result = Status.ERROR
return Status(result)
return result
except Exception as e:
logger.error(f"publish - {e}")
@@ -260,20 +259,24 @@ class Road2Agent(PublishAgent):
logger.error(f"unpublish - {e}")
return Status.ERROR
def _remove_resource(self, resource_id: str):
def _remove_resource(self, resource_id: str) -> None:
"""Suppression d'une resource et des sources associées.
Si les sources sont utilisées par une autre resource, elle ne sont pas supprimées.
Args:
resource_id (str): id de la resource à supprimer
"""
logger.debug(f"Suppression resource : {resource_id}")
resources_path = Path(self.endpoint_data_dir, "resources")
resource_file_path = resources_path / f"{resource_id}.resource"
# Récupération des sources de la resource à supprimer
current_sources = self._get_source_in_resource(resource_file_path)
logger.debug(f"Suppression des sources associées : {current_sources}")
# Suppression du fichier de resources (nécessaire avant la récupération de la liste des sources utilisées)
logger.debug(f"Suppression fichier de resource : {resource_file_path}")
resource_file_path.unlink()
# Suppression des sources non utilisées
@@ -288,6 +291,7 @@ class Road2Agent(PublishAgent):
"""
# Definition des sources à supprimer : source de la resource à supprimer mais non utilisée ailleurs
used_sources = self._get_source_used()
logger.debug(f"Source en cours d'utilisation : {used_sources}")
deleted_sources = set(
[source for source in source_to_delete if source not in used_sources]
)
@@ -301,9 +305,11 @@ class Road2Agent(PublishAgent):
Args:
source (str): source à supprimer
"""
logger.debug(f"Suppression de la source : {source}")
sources_path = Path(self.endpoint_data_dir, "sources")
source_file_path = sources_path / f"{source}.source"
logger.debug(f"Récupération des données à supprimer pour la source : {source}")
# Lecture du fichier de source pour récupération des données à supprimer
with open(source_file_path, "r") as file:
data = json.load(file)
@@ -312,17 +318,27 @@ class Road2Agent(PublishAgent):
# Fichier OSRM
if "file" in storage:
file_path = Path(storage["file"])
logger.debug(
f"Suppression du répertoire des graphes OSRM : {file_path.parent}"
)
shutil.rmtree(file_path.parent)
# Tuiles valhalla
elif "dir" in storage:
file_path = Path(storage["dir"])
logger.debug(
f"Suppression du répertoire des graphes Valhalla : {file_path.parent}"
)
shutil.rmtree(file_path.parent)
# Configuration base PGR
elif "base" in storage:
file_path = Path(storage["base"]["dbConfig"])
logger.debug(
f"Suppression configuration base de données pgr : {file_path}"
)
file_path.unlink()
# Suppression du fichier de la source
logger.debug(f"Suppression du fichier : {source_file_path}")
source_file_path.unlink()
def _get_source_used(self) -> [str]:
@@ -333,12 +349,22 @@ class Road2Agent(PublishAgent):
"""
resources_path = Path(self.endpoint_data_dir, "resources")
resources_files = [file for file in resources_path.iterdir() if file.is_file()]
logger.debug(f"Fichier de resource disponibles : {resources_files}")
sources_used = []
for f in resources_files:
sources_used += self._get_source_in_resource(f)
return sources_used
def synchronize(self, params: dict) -> Status:
"""Permet de synchroniser un service ITINERARY ou ISOCHRONOUS.
Args:
params (dict): paramètre de publication
Returns:
Status: état de la publication
"""
try:
resource_id = params["layer_name"]
resources_path = Path(self.endpoint_data_dir, "resources")
@@ -346,6 +372,9 @@ class Road2Agent(PublishAgent):
# Récupération des sources initiales de la resource à synchroniser
current_sources = self._get_source_in_resource(resource_file_path)
logger.debug(
f"Sources utilisées avant synchronisation de la resource {resource_id} : {current_sources}"
)
# Nouvelle publication
result = self.publish(params)
@@ -398,7 +427,9 @@ def run(
endpoint_name (str): nom du endPoint pour le bus d'écoute
pod_id (str): Id du POD
url_entrepot (str): URL de l'Entrepôt
publication_topic (str): topic du bus sur lequel l'agent écoute
exchange_name (str): nom de l'exchange du bus sur lequel
écouter, vaut "my_exchange" par défaut. Ne doit pas être une
chaîne vide.
publication_result_topic (str): topic du bus sur lequel l'agent envoie une réponse
host (str): nom de l'hôte du serveur RabbitMQ
port (int): port du serveur rabbitMQ
Chargement en cours