organisation du service :
- le front envoie les données légères à l'API (token d'accès BDD, date début sprint, date fin sprint, préferences d'optimisation)
- l'API va chercher les données auprès du back avec en paramètres (token d'accès BDD, date début sprint, date fin sprint)
- l'API vérifier que les données récupérées sont valides, sinon retourne une HTTP Exception, status code 422.
- l'API assigner les tâches aux utilisateurs de manière optimale. Si la procédure échoue retourne une HTTP Exception, status code 422.
- l'API retourne les données au back ? A discuter.
avancée des travaux :
- L'endpoint task_assigner/ va chercher les données auprès du BACK, les prépare, génère une solution mathématique, valide la solution par une batterie de tests, retourne la solution au format JSON formatted string.
- Possibilité de spécifier des préférences d'optimisation via différents paramètres lors de l'appel à l'endpoint task_assigner/.
- L'endpoint test_task_assigner_with_random_data/ teste la fonction task_assigner() avec des données générées aléatoirement et de manière cohérente (propose un grand panel de possibilitées pour la situation des entreprises: surchargées, sous-effectif, sous-chargées, correctes, peu de projets, bcp de projets ...).
- Implémentation de réponses HTTP pour les éxceptions, selon les cas de figures, à tous les niveaux du process
- Réception des paramètres front,
- Collecte des données auprès du BACK
- Vérification de la cohérence des données
- Mise en forme des données
- Production d'une solution mathématique
ensuite:
-
Se construire un jeu de données réelles (provenant des utilisateurs wandeed) et le stocker dans un dossier à l'intérieur du micro-service afin de :
- A) S'assurer qu'elle fonctionne dans un nombre de cas maximal.
- B) A l'avenir : pouvoir s'assurer de la reproductibilité des résultats fournis par le programme.
-
Auprès de quelle URL aller chercher les données ? Si j'ai bien compris, un client Wandeed = une entité à part, une URL? l'URL où aller chercher les données en BDD est donc possiblement un paramètre à précisier lors des requêtes auprès de mon API ?
avancée des travaux :
- preuve de concept terminée avec des données synthétiques (voir demo_notebooks/task_assigner.ipynb)
- Faire tourner une RestAPI en local avec uvicorn : dans un terminal PowerShell, lancer la commande :
uvicorn main:app --reload
- Générer un requirements.txt dans le répertoire courant :
pipreqs --force .
- This will build the Docker image of the Dockerfile, and give the image the tag "myimg"
docker build -t myimg .
- This will run a container corresponding to the Docker image "myimg" on ports 8000:8000, name it "myctn"
docker run -p 8000:8000 --name myctn myimg
-
Open Ubuntu on the start menu of your windows machine
-
Enter command line
sudo service jenkins start
- Go to http://localhost:8080/ on your web browser
- Enter login and password : _admin f236a8ea59c141e784d241170f18e67e
[10:41] Gaylord PETIT
Obtenir les impératifs : { "select": [ "evt_spkevenement", "evt_sfkprojet", "evt_dduree", "lgl_sfkligneparent", ], "from": "lst_vevenement_py", "where": { "condition": "and", "rules": [ { "label": "evt_xdate_debut", "field": "evt_xdate_debut", "operator": "greaterthan", "type": "date", "value": f"{datein_isoformat}" }, { "label": "evt_xdate_fin", "field": "evt_xdate_fin", "operator": "lessthan", "type": "date", "value": f"{dateout_isoformat}" }, { "label": "lgl_sfkligneparent", "field": "lgl_sfkligneparent", "operator": "isnotnull", "type": "integer", "value": "none" }, { "condition": "and", "rules": [ { "label": "ecu_bsysteme", "field": "ecu_bsysteme", "operator": "equal", "type": "integer", "value": 1 }, { "label": "ecu_bsysteme", "field": "ecu_bsysteme", "operator": "equal", "type": "integer", "value": 2 } ] } ] }, }
Obtenir les horaires de travail : { "select": [ "epu_sfkutilisateur", "epl_employe_horaire", "epl_xdebutperiode", "epl_xfinperiode" ], "from": "lst_vutilisateur_horaires_py", "where": { "condition": "and", "rules": [ { "label": "epl_xdebutperiode", "field": "epl_xdebutperiode", "operator": "greaterthan", "type": "date", "value": f"{datein_isoformat}" }, { "label": "epl_xfinperiode", "field": "epl_xfinperiode", "operator": "lessthan", "type": "date", "value": f"{dateout_isoformat}" } ] } }
Obtenir les tâches non planifiées:
[10:49] Antoine PERROT { "select": [ "evt_spkevenement", "evt_sfkprojet", "evt_dduree", "lgl_sfkligneparent", ], "from": "lst_vevenement_py", "where": { "condition": "and", "rules": [ { "label": "evt_xdate_debut", "field": "evt_xdate_debut", "operator": "greaterthan", "type": "date", "value": f"{datein_isoformat}" }, { "label": "evt_xdate_fin", "field": "evt_xdate_fin", "operator": "lessthan", "type": "date", "value": f"{dateout_isoformat}" }, { "label": "lgl_sfkligneparent", "field": "lgl_sfkligneparent", "operator": "isnotnull", "type": "integer", "value": "none" }, ] }, }
à la place de ecu_bsysteme c'est
ecu_idsystem