Project

General

Profile

Evolution #21046

[-50] Gérer les icones dans une table à part dans le App Manager

Added by Renaud Dussol over 2 years ago. Updated over 1 year ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Target version:
Start date:
10/10/2018
Due date:
% Done:

100%

Distribution:

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


Related issues

Related to eole-dispatcher - 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 Fermé 10/10/2018

Associated revisions

Revision da22d28c (diff)
Added by Christophe LEON over 2 years ago

ref #21046, cache des icons sur le FS

Revision 7b05a1dd (diff)
Added by Renaud Dussol over 1 year ago

Fixes #21046 : Gérer les icones dans une table à part dans le App Manager

Revision ff0106a3 (diff)
Added by Renaud Dussol over 1 year ago

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

History

#1 Updated by Renaud Dussol over 2 years ago

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 Updated by Renaud Dussol over 2 years ago

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 Updated by Christophe LEON over 2 years ago

  • Target version set to Envole 5.6

#4 Updated by Arnaud FORNEROT over 2 years ago

  • Target version changed from Envole 5.6 to Envole 5.7

#5 Updated by Nicolas Penot over 2 years ago

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 Updated by Renaud Dussol over 2 years ago

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 Updated by Christophe LEON over 2 years ago

  • Status changed from Nouveau to 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 Updated by Renaud Dussol over 2 years ago

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 Updated by Arnaud FORNEROT over 2 years ago

  • Target version changed from Envole 5.7 to Envole 5.8

#10 Updated by Renaud Dussol about 2 years ago

  • Priority changed from Normal to Bas

#11 Updated by Arnaud FORNEROT about 2 years ago

  • Target version deleted (Envole 5.8)

#12 Updated by Christophe LEON over 1 year ago

  • Subject changed from Gérer les icones dans une table à part dans le App Manager to [-48] Gérer les icones dans une table à part dans le App Manager

#13 Updated by Renaud Dussol over 1 year ago

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 Updated by Renaud Dussol over 1 year ago

  • Related to 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 added

#15 Updated by Renaud Dussol over 1 year ago

  • Subject changed from [-48] Gérer les icones dans une table à part dans le App Manager to [-50] Gérer les icones dans une table à part dans le App Manager
  • Target version set to Envole 5.12

#16 Updated by Renaud Dussol over 1 year ago

  • Status changed from A étudier to Résolu
  • % Done changed from 0 to 100

#17 Updated by Arnaud FORNEROT over 1 year ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF