/taskmaster

A small taskmaster written in TypeScript (deno)

Primary LanguageTypeScript

Taskmaster

A supervisor-like CLI written in deno

Installation

Follow the deno instructions

Then take the 1.13.2 version:

deno upgrade --version 1.13.2

Run

You can run taskmaster locally or with Docker, pick one of the following methods

Locally

  • Run the server with

    TASKMASTER_TCP_PORT=9000 deno run --allow-env --allow-write --allow-read --allow-net --allow-run --unstable src/server.ts resources/simple.json
  • Run the client with

    TASKMASTER_TCP_PORT=9000 deno run --allow-env --allow-net --unstable src/client.ts

Architecture

Project has 2 programs

  • client.ts
  • server.ts

The client offers an REPL in which to interact.

The server is a daemon, it receives user inputs, treat them and returns a JSON response.

Folder structure

  • lib/

    • commands/

      Implements behaviour for all possible commands (start, stop, status...).

    • config/

      Allow interactions (parse, reload...) with the configuration file that must be passed when starting the server.

    • process/

      Register and keeps track of all processes. These ones are built from the configuration file.

    • repl/

      Provide a basic shell where to write and edit commands. Contains some extra features like command history.

    • tcp/

      Expose utilitary classes to trigger actions through TCP (listen, connect, read, write...).

    • utils/

      Expose generic util functions used by every other parts.

  • client.ts

  • server.ts

Features

  • La configuration doit être rechargeable pendant que taskmaster est en train de tourner en lui envoyant un SIGHUP
  • Votre programme doit avoir un système de registres afin d’enregistrer les évènementsdans un fichier local

Le shell devra au moins autoriser l’utilisateur à :

  • Voir le statut de tous les programmes décris dans le fichier de configuration (avec la commande "status")
  • Lancer les programmes
  • Arrêter les programmes
  • Relancer les programmes
  • Recharger le fichier de configuration sans que le programme principal s’arrête
  • Arrêter le programme principal

Le fichier de configuration doit autoriser l’utilisateur à spécifier ce qui suit, pour chaque programme cela doit être supervisé :

  • La commande à utiliser pour lancer le programme
  • Le nombre de processus à lancer et laisser tourner
  • Choisir de lancer ce programme au démarrage ou non
  • Choisir si le programme doit toujours être relancé, jamais, ou uniquement lorsqu’ils’arrête de manière innatendue
  • Quel code de retour represente une sortie "attendue" du programme
  • Combien de temps le programme doit-il tourner après son démarrage pour quel’on considère qu’il s’est "lancé correctement"
  • Combien de fois un redémarrage doit être réalisé avant de s’arrêter
  • Quel signal doit être utilisé pour arrêter (i.e. exit gracefully) le programme
  • Combien de temps d’attente après un graceful stop avant de kill le programme
  • Options pour retirer les stdout du programme ou pour rediriger vers des fichiers
  • Options pour retirer les stderr du programme ou pour rediriger vers des fichiers
  • Des variables d’environnement a set avant de lancer le programme
  • Un répertoire de travail a set avant de lancer le programme
  • Un umask a set avant de lancer le programme

Bonuses

  • Gestion des process par groupe
  • Architecture client / serveur
  • Système de log avancé
  • Commande Help
  • Commande Exit