Projet

Général

Profil

Evolution #21046

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

Ajouté par Renaud Dussol il y a presque 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Début:
10/10/2018
Echéance:
% réalisé:

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


Demandes liées

Lié à 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

Révisions associées

Révision da22d28c (diff)
Ajouté par Christophe LEON il y a plus de 6 ans

ref #21046, cache des icons sur le FS

Révision 7b05a1dd (diff)
Ajouté par Renaud Dussol il y a plus de 5 ans

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

Révision ff0106a3 (diff)
Ajouté par Renaud Dussol il y a plus de 5 ans

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.8 supprimé

#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

#17 Mis à jour par Arnaud FORNEROT il y a plus de 5 ans

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF