# Cahier des charges - Application de surveillance de ressources - Prototype

## Contexte et problématique

L'entreprise **PixelVault** est une jeune PME qui gère une solution cloud de partage de photos familiales ou entre amis. 

Elle met en avant le respect de la vie privée de ses utilisateurices, la sécurité et la fiabilité de sa solution. 

Actuellement, ses serveurs rencontrent des problèmes de saturation disque et de surcharge processeur ou réseau, perturbant la qualité de service.

La société decide donc de mettre en place un système de surveillance des ressources pour pouvoir anticiper ces problèmes
et les diagnostiquer plus rapidement.

Elle envisage la création d'une solution sur mesure qu'elle souhaite pouvoir déployer sur ses serveurs.

La société souhaite procéder par étapes, la première d'entre elles étant la réalisation d'un prototype
qui sera mis en oeuvre sur une petite partie de son infrastructure. C'est cette première 
étape qui est l'objet du présent cahier des charges.

## Objectifs

Les objectifs de cette première étape sont les suivants :
- Prouver la **faisabilité technique** d’un système interne de supervision
- Définir et valider les **besoins fonctionnels et techniques** des équipes d’exploitation
- Concevoir une **interface visuelle simple et claire** adaptée à un usage quotidien

## Périmètre

Le prototype sera testé sur une seule machine de développement interne.
Le système ne devra pas impacter les performances de cette machine.

## Description fonctionnelle

L'objectif du projet est que les équipes d'exploitation soient en mesure de :
- **UC1** Visualiser l'état des ressources du serveur
- **UC2** Recevoir une alerte visuelle en cas de dépassement d'un seuil critique


### Cas d'usage

![use cases](images/uc.svg)

### Exigences

```mermaid
requirementDiagram
requirement SysMon_R1 {
  id: R1
  text: "Surveiller les ressources système principales"
}
requirement SysMon_R2 {
  id: R2
  text: "Déclencher une alerte si un seuil critique est atteint"
}
requirement SysMon_R3 {
  id: R3
  text: "Afficher l’état en temps réel via un tableau de bord"
}
requirement SysMon_R4 {
  id: R4
  text: "Supporter plusieurs plateformes (Linux, Windows, Mac)"
}
requirement SysMon_R5 {
  id: R5
  text: "Utiliser Python 3 (Flask) pour le backend et HTML/CSS/JS pour le frontend"
}

SysMon_R1 - derives -> SysMon_R2
SysMon_R1 - derives -> SysMon_R3
SysMon_R1 - derives -> SysMon_R4
SysMon_R4 - refines -> SysMon_R5

```

- **R1** - Surveiller les ressources système principales
  - Utilisation CPU
  - Utilisation mémoire
  - Espace disque occupé
  - Taux d'usage du disque (entrées/sorties)
  - Entrées Sorties Réseau

- **R2** - Déclencher une alerte si un seuil critique est atteint
  - Lorsque des ressources dépassent un seuil d'usage supérieur à 80% de leur capacité, la ressource doit être fortement mise en avant sur le tableau de bord de façon à alerter la personne qui le surveille

- **R3** - Afficher l’état en temps réel via un tableau de bord

- **R4** - Supporter plusieurs plateformes (Linux, Windows, Mac)

- **R5** - Utiliser Python 3 (Flask) pour le backend et HTML/CSS/JS pour le frontend
  - Le système devra être multiplateforme. Par conséquent, le chef de projet impose Python 3 comme langage de programmation Back-end. En front, il faudra utiliser le tryptique HTML, CSS, JavaScript. Pour que l'ensemble fonctionnne, le framework Flask sera utilisé

- **R6** - Versionnement du projet
  - Le projet devra être versionné avec Git

## Livrables attendus

- Code du projet
- Document de conception
