Sommaire

Configuration du module webui-module-service-weather

Les logs du cache

Le cache se constitue de trois composants :

  • Le View Manager : C'est le composant qui va stocker en mémoire les Weathers pour un accès rapide aux données. Il va interroger le Data Hub pour savoir si sa données est à jour et la lui demander dans le cas contraire.
  • Le Data Hub : Ce composant va garder une liste de météos dans un espace mémoire partagée. Les données sont accessibles par tous les modules du même groupe ( voir Configuration du module webui-module-service-weather ).
  • Le Weather Updater : Ce composant va régulièrement interroger la base de données pour garder à jour les données dans le Data Hub pour les modules qui en ont besoin.
  • Le Weather Controller : Ce composant va ordonnancer les Weather Updaters pour qu'ils se répartissent équitablement le nombre de Weathers à garder à jour.

Pour des informations plus approfondies sur le fonctionnement du cache, voir Fonctionnement du cache - Météo

Le Data Hub - Chapitre [ DATA HUB : ID_DATAHUB ]

Le data hub est un composant du module webui-module-service-weather qui a pour rôle de stocker les données des objets Weathers dans un espace mémoire partagé /dev/shm pour aider le cache à accéder rapidement au données à jour en cas de besoin.

Les données stockées par ce composant sont mises à jour grâce au composant Weather Updater

Initialisation du Data Hub - Chapitre [ INIT ]

Au démarrage, le data hub va initialiser une liste de Weathers qu'il va stocker et mettre à disposition.

Initialisation du dossier

Lors de l'initialisation du composant, il va vérifier que le dossier dans lequel il va enregistrer les données des Weathers au format JSON.

Si le dossier n'existe pas, il va nous informer et le créer :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ INIT ] The data hub folder FOLDER_PATH does not exists. Will create it

Lancement de l'initialisation

Nous sommes informés du début de l'initialisation avec ce log :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ INIT ] Starting check NB_WEATHERS Weathers

Vérification des données

Lors de l'initialisation d'un Data Hub, on vérifie si les données de chacun des éléments connus ne sont pas corrompues :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ INIT ] Weather with uuid [ WEATHER_UUID ] successfully check

Fin de l'initialisation

Nous sommes informés de la fin de l'initialisation et du temps prit avec ce log :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ INIT ] Check data in hub ended in [ ELAPSED_TIME ] seconds

Récupération d'une Weather - Chapitre [ GET ]

Le data hub fourni des Weahters qu'il garde à jour grâce à leur ID à condition qu'elles soient enregistrées.

Cas normal

La récupération d'une Weather nous est remontée dans les logs avec l'UUID de la Weather récupérée et le temps écoulé lors de la collecte dans le Data Hub :

[YYYY-MM-DD HH:MM:SS] DEBUG  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET ] Weather with uuid [ WEATHER_UUID ] retrieved in [ ELAPSED_TIME ] seconds

Cas d'erreurs

Le Data Hub n'est pas initialisé

Quand on demande une Weather alors que le Data Hub n'est pas initialisé, ce log est retourné. La demande a été effectuée trop tôt, il faut alors attendre un peu avant de réessayer.

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET ] Cannot get the Weather with uuid [ WEATHER_UUID ] because the Data Hub is not initialized, please retry later
La Weather n'existe pas

Dans le cas où l'on demande une Weather qui n'est pas dans le Data Hub, cela signifie qu'il y a probablement une erreur dans l'URL utilisée pour l'affichée :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET ] The Weather with uuid [ WEATHER_UUID ] was not found in the Data Hub
Le fichier est corrompu

Si on n'arrive pas à lire le fichier contenant les données de la Weather pour un soucis de format ( si par exemple le fichier est corrompu ) un log nous averti du problème et le Data Hub va tenter de réécrire le fichier avec des données saines

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET ] [ SHARED MEMORY ] The Weather with uuid [ WEATHER_UUID ] could not be retrieved because its data is corrupted

Enregistrement d'une Weather - Chapitre [ SAVE ]

Il est possible d'enregistrer une nouvelle Weather ou une nouvelle version d'une Weather pour le garder à jour dans le data hub

Cas normal

Succès de l'enregistrement

Lors de l'enregistrement d'une Weather avec succès, un logs nous préviens du temps que ça a pris :

[YYYY-MM-DD HH:MM:SS] DEBUG  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ SAVE ] Weather with uuid [ WEATHER_UUID ] saved in [ ELAPSED_TIME ] seconds

Cas d'erreur

Data Hub non initialisé

Si on essaye d'enregistrer une Weather alors que le Data Hub n'est pas initialisé, ce cas signifie que la requête a été effectuée trop tôt et il faut alors attendre un peu puis réessayer :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ SAVE ] Cannot save the Weather with uuid [ WEATHER_UUID ] because the Data Hub is not initialized yet, please retry later

Récupération de la date de la dernière modification - Chapitre [ GET LAST MODIF ]

Il est possible de demander au Data Hub la date de dernière modification d'une Weather, certaines erreurs peuvent apparaître lors de cette récupération

Cas d'erreurs

Data Hub non initialisé

Si le Data Hub n'est pas initialisé, alors ce log apparait :

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET LAST MODIF ] Cannot get the last modification time of Weather with uuid [ WEATHER_UUID ] because the data hub is not initialized, please retry later
La Weather n'est pas enregistrée

Si la Weather n'est pas enregistrée dans le Data Hub, alors ce log est lancé :

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ GET LAST MODIF ] The Weather with uuid [ WEATHER_UUID ] was not found in the Data Hub

Retrait d'une Weather - Chapitre [ REMOVE ]

Cas normal

La Weather dont on demande la suppression a été correctement retirée du Data Hub :

[YYYY-MM-DD HH:MM:SS] DEBUG  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ REMOVE ] The Weather with uuid [ WEATHER_UUID ] has been removed

Cas d'erreur

Le Data Hub n'est pas initialisé

Si lors de la suppression de la Weather le Data Hub n'est pas encore initialisé, alors on a le log suivant :

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ REMOVE ] Cannot remove the Weather with uuid [ WEATHER_UUID ] because the Data Hub is not initialized yet, please retry later

Retention du Data Hub - Chapitre [ RETENTION ]

Régulièrement, le data hub va effectuer une rétention des données qu'il garde.

Succès de la rétention

[YYYY-MM-DD HH:MM:SS] WARNING: [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ RETENTION ] Retention done in [ ELAPSED_TIME ] seconds for NB_WEATHER_SAVED Weathers

Cas récurrents

Ces logs peuvent survenir dans de nombreux cas différents. (chaque sauvegarde, sauvegarde de rétention, récupération de Weather, etc)

Le fichier n'existe pas

[YYYY-MM-DD HH:MM:SS] DEBUG  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ RETENTION ] [ INIT ] The path does not exist [ FILE_PATH ] was it move ?

Ceci n'est pas considéré comme une erreur, car le fait que le fichier n'existe pas n'empêche pas le module de fonctionner, celui-ci le créera par la suite.

Cas d'erreurs

Pour chaque sauvegarde, sauvegarde de rétention, récupération de Weather et récupération de date de modification d'une Weather, le Data Hub va interagir avec le système de fichiers, ce qui peut amener les erreurs suivantes :

Pas de droits de lecture

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ RETENTION ] [ READ ] No read access [ FILE_PATH ]

Pas de droits d'écriture

[YYYY-MM-DD HH:MM:SS] ERROR  : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ DATA HUB : ID_DATAHUB ] [ RETENTION ] [ READ ] No write access [ FILE_PATH ]

Le Weather Updater - Chapitre [ WEATHER UPDATER : GROUP_NAME ]

Le Weather Updater est un composant qui va est chargé de deux choses :

  • Initialiser le Data Hub
  • Recalcule les Weathers pour garder à jour les données dans le Data Hub

Chaque Webui possède un unique Weather Writer qui va être chargé de maintenir à jour une liste des Weathers qui sont distribuées équitablement entre les Webui pour équilibrer la charge entre elles.

La tâche de distribution des Weathers ( ou élection des WebUI ) est faite par un autre copmosant, le Weather Controller ( voir Weather Controller ).

Les Writers vont ensuite régulièrement ( toutes les minutes ) tenir à jour les informations des Data Hub des weathers qui leur sont attribuées.

Initialisation - Chapitre [ INIT ]

Lancement du thread du WEATHER UPDATER

Une fois toutes ces étapes terminées, il ne reste plus qu'à lancer un Thread qui va tourner régulièrement pour maintenir à jour dans le Data Hub les Weathers qui lui sont attribuées.

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER :  GROUP_NAME] [ INIT ] Starting to refresh [ WEATHER_COUNT ] Weathers each [ REFRESH_RATE ] seconds

Rafraichissement des données - Chapitre [ REFRESH ]

Au lancement du rafraichissement, un log nous informe des Weathers dont on va recalculer les données pour les enregistrer dans le Data Hub :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ REFRESH ] Refresh done : updated [ NB_WEATHERS ] Weathers in [ ELAPSED_TIME ] seconds

Création d'une nouvelle Weather - Chapitre [ SAVE ]

Le WEATHER UPDATER peut aussi avoir la nécessitée de créer des Weathers si elles n'existent pas pour pouvoir les enregistrer en même temps dans le base de données et dans le data hub.

Création de la Weather

Dans le cas où la Weather n'existe pas, le Writer va initialiser l'objet pour l'enregistrer dans la base de données et dans le data hub :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ SAVE ] New Weather [ WEATHER_UUID ] added in Data Hub and Database

Le Weather Controller - Chapitre [ WEATHER CONTROLLER ]

Le Weather Controller est un composant utilisé par les WEATHER UPDATERs obtenir la liste des Weathers qu'il doit maintenir à jour

Ce composant se repose sur un fichier partagé entre les WebUI où l'on trouve les informations suivantes :

  • Les Weathers qu'elle est chargée de mettre à jour
  • La date de sa dernière passe dans le fichier.

Ces informations permettent de répartir équitablement les Weathers entre les différentes WebUI, et de savoir quand une WebUI n'a pas écrit depuis trop longtemps. Dans ce cas, il peut être décidé de sortir la WebUI du fichier et de redistribuer ses Weathers si elle en a.

La redistribution ( ou élection ) est faite de sorte qu’il n'y ait pas de Weathers sans WebUI, et qu'elles soient réparties entre chaque WebUI équitablement pour redistribuer la charge de calcul du rafraichissement des données des Weathers. Il peut donc y avoir des WebUI sans Weathers ( s'il y a plus de Weathers que de WebUI ) mais pas l'inverse.

Afin de ne pas se retrouver avec des Weathers sans WebUI, une élection est demandée à chaque changement du nombre de WebUI inscrites :

  • Une nouvelle WebUI est démarrée.
  • Une WebUI a été détectée comme inactive, et donc ses Weathers seront redistribuées.

Enregistrement d'une nouvelle WebUI ( démarrage du composant )

Au démarrage de la WebUI, on va aller l'enregistrer :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] Registering the WebUI [ WEBUI_NAME ]

La WebUI n'est pas dans le fichier et c'est la première

Si la WebUI n'est pas déjà enregistrer, et qu'il n'y a pas d'autre WebUI déjà présentes, alors pas besoin de lancer d'élection pour le moment, on attribue toutes les Weathers existantes à cette première arrivante :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] The Webui [ WEBUI_NAME ] will now keep up to date these Weathers: WEATHER_ID1, WEATHER_ID2 ...

Réélection des WebUI

Demande de réélection

Au besoin, une réélection peut être demandée. Les cas possibles sont les suivants :

  • On ajoute une nouvelle WebUI
  • On supprime une WebUI qui gérait des Weathers
  • Une WebUI se rend compte qu'elle n'est plus dans le Weather Controller, alors elle s'ajout à nouveau
[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] A WebUI reelection has been requested. Will equally redistribute all Weathers between these WebUI: WEBUI_00, WEBUI_01 ... 

Fin de la réélection

Une fois la réélection terminée, un log nous informe du temps que ça a pris ainsi que des résultats, c’est-à-dire quelle WebUI va gérer telles Weathers :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] WebUI reelection done in [ ELAPSED_TIME ] seconds
[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] The WebUI [ WEBUI_01 ] will now periodically refresh the following Weathers: WEATHER_01
[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] The WebUI [ WEBUI_02 ] will now periodically refresh the following Weathers: WEATHER_02
[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] The WebUI [ WEBUI_03 ] does not have to manage any Weather

Recherche des WebUI inactives

Lors de leur rafraichissement régulier des Weathers, les Writers vont demander la recherche des WebUI inactives ( si elles n'ont pas modifié leur Weathers depuis plus de 5 minutes ), si elles les trouvent elles vont être retirées du Weather Controller, et si elles ont des Weathers attribuées, une réélection va être demandée.

Une WebUI inactive détectée

Si une WebUI inactive est trouvée, nous sommes au courant de pourquoi elle va être retirée.

[YYYY-MM-DD HH:MM:SS] WARNING: [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] The WebUI [ WEBUI_NAME ] was inactive for 5 minutes. It will be remove Weather Updaters pool

Fin de la recherche

Quand la recherche est terminée, nous sommes prévenus de sa fin et du temps écoulé, et un court résumé est affiché :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] Synchronization file cleaning finished in [ ELAPSED_TIME ] seconds
[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] We found and removed X WebUI inactive for more than Y minutes

Rafraichissement de date de dernière modification d'une WebUI

Lorsque la WebUI modifie une donnée dans le Data Hub, elle demande de mettre à jour la date de dernière modification par le Weather Controller :

[YYYY-MM-DD HH:MM:SS] INFO   : [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] Refreshing WebUI [ WEBUI_NAME ] last update date

Si la WebUI n'est plus dans le Weather Controller à ce moment ( si par exemple elle a été jugée inactive par une autre WebUI ) elle va se réinscrire et demander une réélection

[YYYY-MM-DD HH:MM:SS] WARNING: [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] My WebUI has been removed, re-registering it and asking for a reelection

Cas d'erreurs

Chargement d'un fichier corrompu à l'initialisation

S'il est impossible de charger le fichier lors de l'initialisation parce qu'il semble corrompu ( impossible de charger le JSON ), le fichier est réinitialisé

[YYYY-MM-DD HH:MM:SS] WARNING: [ WEBUI_NAME      ] [ webui-module-service-weather ] [ WEATHER UPDATER : GROUP_NAME ] [ WEATHER CONTROLLER ] Cannot load data because its corrupted. Reinitializing it