Evolution #21046
[-50] Gérer les icones dans une table à part dans le App Manager
100%
Description
Objectif : avoir une tables "icons" avec un id et le BLOB de l'icon
Dans les tables url, app et category, référencer l'ID de l'icon dans cette table
Utilité : évite la redondance en cas d'icones partagées - Conforme modèle relationnel
Permet d'éviter d'avoir un blob en sortie lorsqu'on interroge les tables concernées
Demandes liées
Révisions associées
ref #21046, cache des icons sur le FS
Fixes #21046 : Gérer les icones dans une table à part dans le App Manager
Ref ##21046 : Gérer les icones dans une table à part dans le App Manager - Gestion du uid des apps en alim auto avec le md5 icon
Historique
#1 Mis à jour par Renaud Dussol il y a plus de 6 ans
penser à modifier la structure
create table icon (id int, name varchar(20), image blob);
le name pour disposer d'une référence si on décide de faire une interface de choix d'icone
#2 Mis à jour par Renaud Dussol il y a plus de 6 ans
En fait le mieux est de faire une gestion des icones à part, comme apps, urls, catégories
Ajout ou modif d'une icône à une app ou une url ==> on choisit dans les icônes dispos
Et interface à part pour insérer une nouvelle icône (avec éventuellement un raccourci au moment de changer l’icône d'une app)
Pour éviter les doublons il faudrait une clé unique sur le blob (?)
Je me demande s'il ne vaut pas mieux revenir au storage des icônes sur le file system, de nombreux posts sur le web semblent pencher dans ce sens
Sinon si on veut aller vite :
- table à part
- insertion : on crée un objet icone (id + blob), on le store, on store l'id dans la table app ou url
- lecture : on prend l'id de l'app et on va chercher l'image correspondante
- on peut toujours améliorer le système par la suite
Certes doublons possibles avec ce systeme, mais c'est déjà le cas
#3 Mis à jour par Christophe LEON il y a plus de 6 ans
- Version cible mis à Envole 5.6
#4 Mis à jour par Arnaud FORNEROT il y a plus de 6 ans
- Version cible changé de Envole 5.6 à Envole 5.7
#5 Mis à jour par Nicolas Penot il y a plus de 6 ans
Bonjour,
Je me permet d'intervenir sur cette demande d'évolution.
Le principal blocage à Caen pour passer complètement sur le AppManager concerne cette gestion d'icone.
En effet, un premier point concernant l'utilisation d'une même icône par plusieurs applications va être traité par Renaud.
Par contre, le stockage de l'icône en format blob en BDD pose plusieurs soucis :
- Nous avions remarqué des ralentissements suite à l'utilisation des icônes se trouvant en BDD.
- Le format blob ne permet pas de modifier rapidement une ou plusieurs icônes en BDD. En effet, il peut être pratique pour des soucis de maintenance / migration, de changer rapidement une icone ou plusieurs icônes via une ou plusieurs requêtes SQL.
C'est pourquoi nous préférions que les icônes soit stockés sur le serveur.
Posh-profil stock ses icônes sur le serveur, pourquoi ne pas faire pareil et avoir une gestion identique autant pour les icônes de posh-profil que d'Arena ?
Nicolas.
#6 Mis à jour par Renaud Dussol il y a plus de 6 ans
Idée de Nicolas Penot :
- Variable dans gen_config : Stockage des images au format BLOB / Fichier
- Se débrouiller pour que le paramètre soit utilisé une fois au niveau de l'entité image et présenté de la même manière aux contrôleurs
- Etudier la faisabilité
Réaliser des TMC pour vérifier
#7 Mis à jour par Christophe LEON il y a plus de 6 ans
- Statut changé de Nouveau à A étudier
La raison du chargement en BDD des icônes, et de ne pas passer du FS
permet de pouvoir déployer des archis cluster ou container sans se soucier du partage d'un éventuel FileSystem.
Passer par un FS, nécessite qu'il soit visible sur l'ensemble des VM/container où est installé edispatcher.
Je doute de la plus value d'une stockage en FS, d'autant plus qu'il y a du cache sur les icônes.
Mais j'ai tout de même, implémenté pour vérifier la non plus value :)
Le script
php utils/iconToFilesystem.php
permet de créer dans ng/public/icons/ les icônes
ainsi l'appel a /api/[app|url|cat]/{id}/icon
va vérifier la présence de ng/public/icons/[app|url|cat]_{id}.png
et si le fichier existe faire un redirect sur /edispatcher/ng/public/icons/[app|url|cat]_{id}.png
sans passer par le chargement de la BDD
NOTE: Pour l'instant le changement d'une icone via AppManager nécessite de relancer le script pour actualiser l'icone du FS
J'ai mis en place chez nous, pour vérifier impact sur le load de la BDD
#8 Mis à jour par Renaud Dussol il y a plus de 6 ans
Trop fort !
Pour être certain il faudrait faire des TMC avec Jmeter ou autre... A moins que Prometheus / Grafana ne permette ça
Je serai très intéressé par les résultats en tout cas
#9 Mis à jour par Arnaud FORNEROT il y a plus de 6 ans
- Version cible changé de Envole 5.7 à Envole 5.8
#10 Mis à jour par Renaud Dussol il y a environ 6 ans
- Priorité changé de Normal à Bas
#11 Mis à jour par Arnaud FORNEROT il y a environ 6 ans
- Version cible
Envole 5.8supprimé
#12 Mis à jour par Christophe LEON il y a plus de 5 ans
- Sujet changé de Gérer les icones dans une table à part dans le App Manager à [-48] Gérer les icones dans une table à part dans le App Manager
#13 Mis à jour par Renaud Dussol il y a plus de 5 ans
D'abord un script RedBean pour générer les tables et les clés étrangères dans app et url
Il est intéressant, pour des besoins de comparaisons, d'ajouter un champ md5icon à la table icon
On pourrait en faire une clé unique, ce qui éviterait les doublons... voire primaire, du coup peut-être plus besoin d'id dans la table icon ?
Le script pourrait être adapté en ce sens (si md5icon trouvé, on ne crée pas une nouvelle entrée on le lie à celle-ci)
Ensuite une modif dans ApiController pour l'affichage de l'icone
Et enfin modif dans l'AppController pour l'enregistrement des icones
Par contre il faut voir l'implication pour le script iconToFileSystem...
#14 Mis à jour par Renaud Dussol il y a plus de 5 ans
- Lié à Evolution #25513: Ajouter la possibilité de retirer l'icone d'une url OU retirer le mécanisme dans la synchro qui affecte automatiquement une icone à une URL ajouté
#15 Mis à jour par Renaud Dussol il y a plus de 5 ans
- Sujet changé de [-48] Gérer les icones dans une table à part dans le App Manager à [-50] Gérer les icones dans une table à part dans le App Manager
- Version cible mis à Envole 5.12
#16 Mis à jour par Renaud Dussol il y a plus de 5 ans
- Statut changé de A étudier à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 7b05a1dd9c8777912f117607a047bb3307776e86.
#17 Mis à jour par Arnaud FORNEROT il y a plus de 5 ans
- Statut changé de Résolu à Fermé