Skip to content

Latest commit

 

History

History
49 lines (34 loc) · 3.08 KB

File metadata and controls

49 lines (34 loc) · 3.08 KB

Architecture de erraid & tadmor

Vue d'ensemble

Le projet s'articule autour de deux programmes distincts qui communiquent via des tubes nommés (FIFO) :

  • tadmor (client) : L'interface utilisateur permettant d'envoyer des commandes de planification.
  • erraid (démon) : Le service tournant en arrière-plan, chargé de gérer le temps et d'exécuter les tâches.

La communication entre ces deux entités s'appuie sur un protocole binaire encodé en big-endian (défini dans common/protocol.c), garantissant une lecture uniforme des données.

Organisation du Code

Le code source est réparti en trois grands dossiers pour séparer les responsabilités :

1. Code Commun (common/)

  • task_model.c : Gère la structure de données des tâches (Task). Cette structure est récursive, ce qui permet de créer des tâches complexes (un tableau subtasks contient les sous-tâches).
  • protocol.c : Regroupe les fonctions utilitaires pour lire et écrire les types de base (entiers uint16, chaînes de caractères, etc.) pour la communication.

2. Le Client (tadmor-dir/)

  • Utilise getopt pour analyser les options saisies par l'utilisateur dans le terminal.
  • Construit le message binaire (une suite d'octets) à envoyer au serveur.
  • Affiche les réponses du serveur de manière lisible, en utilisant une fonction récursive pour bien indenter les commandes imbriquées.

3. Le Démon (erraid-dir/ et server/)

  • Planification : Une boucle infinie vérifie chaque minute (via tm_should_run) si une tâche doit être lancée.
  • Exécution (server/executor.c) : Gère le lancement des commandes de façon récursive selon leur type :
    • SI (Simple) : Utilise fork et execvp. Redirige les sorties (stdout/stderr) vers des fichiers de logs avec dup2.
    • SQ (Séquence) : Exécute les sous-tâches les unes après les autres.
    • PL (Pipeline) : Crée des tubes (pipe()) entre les processus fils pour lier leurs entrées/sorties.
    • IF (Conditionnelle) : Lance la première sous-tâche, analyse son code de retour, puis décide d'exécuter la branche THEN ou la branche ELSE.

Stockage et Persistance

Chaque tâche possède un identifiant unique qui sert de nom à son répertoire de sauvegarde. Par défaut, l'ensemble de ces données est stocké dans le répertoire /tmp/$USER/erraid/.

Voici comment sont organisés les fichiers pour une tâche donnée :

  • cmd/ : Contient la définition de la commande (type, arguments). Pour les tâches complexes, ce dossier devient récursif (cmd/0/, cmd/1/, etc.) pour stocker les sous-tâches.
  • timing : Fichier gérant la planification (utilise des bitmaps pour enregistrer les minutes, heures et jours d'exécution).
  • Historique et Logs :
    • times-exitcodes : Enregistre les codes de retour des anciennes exécutions.
    • stdout : Sauvegarde la sortie standard.
    • stderr : Sauvegarde la sortie d'erreur.
  • pipes/ : Dossier contenant les tubes nommés (FIFO) utilisés pour la communication directe entre erraid et tadmor.