# GSP
## Concepts
Catégories d'acteurs :
- Seeders (importent de la donnée depuis une autre source)
- Transformers (dérivent de nouveaux datasets à partir de datasets existants)
- Extractors (sortent des données de GSP pour les utiliser)
Dataset :
- Type de dataset = "nom de fonction" qui y correspond, e.g. "dump my_sap"
- Paramètres (comment on a compute les données), e.g. "date=06/06/2022"
- Données
- version de la fonction (commit git ?)
Dépendance :
- Le dataset Y a une dépendance sur le dataset Y (Y est un transformer)
- Quand X change, il déclenche le recalcul de Y
- Un transformer doit pouvoir être enregistré pour matcher un pattern et se déclencher quand un élément qui matche le pattern change (création ou modification)
## Architecture
Multi-services :
- Le storage (serveur S3-compatible)
- Un dispatcher pour trigger les transformers
- Une API pour l'insertion / l'extraction des datasets
GSP capable de relancer un compute (via Lambda, Docker, k8s, Nomad, ...) ? de schedule des crons ?
Exemple de dépendance :
- Seed : snapshot de my_sap
- Transform : construire une frise chronologique des promos (qui va où, etc)
Storage :
- Dans un bucket MinIO
- 1 fichier = 1 dataset
- 1 dossier = 1 type de dataset
# API
tu ne peux pas push de data dans un dataset tant que tu l'a pas declare (nom du dataset / schema / dependance ?)
declare s'assure que le dataset existe ou le crée/modifie
si on essaie de modifier le nom de fonction d'un dataset -> erreur (securité pour s'assurer qu'un seul producteur owned la creation d'un dataset)
Faire des alias de dataset en db
### Post dataset
- POST /dataset
### Get Dataset
- GET /dataset/{type} (get last)
- GET /dataset/{type}/date/{date} (get by date)
### List Dataset versions/dates ?
- GET /dataset/types (liste tout les types)
- GET /dataset/{type}/versions (liste toute les version d'un type)
### Configure Dataset type
- PUT /dataset/{type}/settings ?
- PUT /dataset/{type}/configure ?
# Metrics individual performance es
Librairie + executable qui lit du jsonline sur l'entrée standard
Il faut pouvoir regernerer des metrics et donc generer des batch id : (nom de la fonction + champ discriminant)
## indicateur
- notes
- git
- presence
- consultation intra/log
timestamp = date : granularité minimal
dans le cas ou une metrics est générer pour un range de date, celle-ci figure dans les valeurs du document