Backend - Serveur

Un récapitulatif des fichiers et outils utilisés dans la partie backend de la nouvelle architecture compatible à distance.

Serveur de base (NodeJS/Express)

Beaucoup de logique et de fichiers ont été déplacés vers le "/backend" dossier pour faciliter leur exécution à distance, en particulier lorsqu'ils utilisent la gestion de fichiers locale ou démarrent des serveurs par exemple.

Le Express serveur agit comme point d'entrée pour gérer et garder les autres serveurs sous contrôle. Il peut se trouver dans le backend/ExpressServer.mjs fichier, qui contient sa logique de démarrage ainsi que ses points de terminaison pour les requêtes.

Contrôle CLI / sans interface

Dans le cli dossier, le medomics-server.mjs fichier permet l'utilisation du serveur Express dans des déploiements distants via la ligne de commande, que le client utilise pour démarrer et arrêter un backend distant. Il expose les commandes start, status, ensure, install et stop du serveur et aide à gérer l'état du processus backend.

Commande
But principal
Préconditions
Actions internes
Appels d'endpoint du backend
État/Fichiers modifiés
Sortie en cas de succès
Comportement en cas d'échec/sortie

start

Lancer le processus enfant du backend Express et enregistrer l'état d'exécution

Le chemin d'entrée Express doit se résoudre et exister

Résout le chemin du backend, écrit un état de démarrage provisoire, crée un processus enfant, suit stdout/stderr, attend le message IPC EXPRESS_PORT, définit l'état en cours d'exécution

Aucun directement ; le backend enfant se lance lui-même

Écrit un fichier d'état et server-child.log sous le répertoire d'état

Ligne JSON avec success true et expressPort

Se termine avec un code non nul si le chemin est manquant, si l'enfant se termine prématurément ou si le démarrage dépasse le délai

status

Interroger l'instantané du statut actuel du backend

Le fichier d'état doit exister et inclure expressPort

Lit le fichier d'état, effectue un GET HTTP vers la route de statut du backend

GET /status

Aucune écriture en chemin normal

JSON avec pid, expressPort, charge utile de statut

Se termine avec un code non nul si l'état est manquant ou si la requête de statut HTTP échoue

ensure

S'assurer idempotemment que les services sélectionnés sont actifs

Le fichier d'état doit contenir expressPort ; les indicateurs indiquent quels services

Lit l'état, appelle conditionnellement les endpoints d'ensure des services

POST /ensure-go, POST /ensure-mongo, POST /ensure-jupyter

Pas de mises à jour directes du fichier d'état dans le CLI

JSON avec un objet ensured par service sélectionné

Se termine avec un code non nul si l'état est manquant ou si un appel ensure lève une exception

install

Installer les exigences d'exécution manquantes via l'API backend

Express doit être en cours d'exécution ou démarrable

Démarre automatiquement si nécessaire, vérifie les exigences, installe conditionnellement Mongo/environnement Python/paquets Python en utilisant des heuristiques, revérifie les exigences

GET /check-requirements, POST /install-mongo, POST /install-bundled-python, POST /install-required-python-packages, GET /check-requirements

Peut mettre à jour l'état s'il démarre automatiquement d'abord

Résumé JSON avec initial, actions, final

Se termine avec un code non nul en cas d'échec de toute étape de vérification/installation

stop

Arrêter le processus backend enregistré dans le fichier d'état

Fichier d'état contenant pid

Vérifie si le pid est vivant, envoie SIGTERM, attend, escalade SIGKILL en cas de délai, supprime l'état obsolète

Aucun

Supprime le fichier d'état lorsque le processus s'arrête ou est obsolète

JSON succès avec résultat stopped ou forced

Se termine avec un code non nul lorsqu'il n'y a pas d'état en cours ; peut rapporter forced false si le kill échoue

Modules utilitaires backend

Quelques fichiers auparavant frontend ont été déplacés vers le backend/utils dossier et modifiés pour exclure toute utilisation d'Electron.

  • server.mjs: Précédemment server.js dans le frontend, est toujours utilisé pour exécuter et gérer le serveur GO, mais dispose aussi de l' findAvailablePort() helper.

  • serverInstallation.js: Précédemment installation.js dans le frontend, utilisé pour vérifier les exigences du serveur (MongoDB et Python) et installer MongoDB.

  • serverPathUtils.js: Remplacement pour app.getPath() et app.setPath() fonctions.

  • serverWorkspace.js: Précédemment workspace.js dans le frontend, utilisé pour créer un espace de travail et ses dossiers.

  • mongoDBServer.js (NOUVEAU): Logique de détection/démarrage/arrêt/chemin de MongoDB utilisée par les endpoints du backend.

  • jupyterServer.js (NOUVEAU): Logique de détection/démarrage/arrêt de Jupyter utilisée par les endpoints du backend.

  • pythonEnv.js: Aides pour la configuration/vérification de l'environnement Python pour les flux de travail gérés par le backend. Était auparavant dans le frontend, et a été ajusté pour ne plus utiliser les dépendances d'Electron.

  • medomics.server.dev.js: Support d'entrée/assistant serveur backend en mode développement, une copie de medomics.dev.js pour utilisation dans les autres assistants backend.

Intégration au service OS

Le /service le dossier contient des fichiers spécifiques au système d'exploitation pour exécuter le backend en tant que service, cela n'a pas encore été testé.

Mis à jour