GlpiInsertLog

Le fonctionnement actuel :

Dans les évènements d'enregistrement des données suivants :

  • CommonDBTM->add()
  • CommonDBTM->update()
  • CommonDBTM->delete()

On a un un enregistrement dans la table glpi_logs (Log::history()).

Les problèmes identifiés

Globalement ça fonctionne pas si mal que ça.
On a des soucis de performances dans les cas suivants :

  • Lors d'uninventaire (FusionInventory et probablement OCS aussi), par exemple on peut avoir 20 logiciels à supprimer et 30 logiciels à ajouter
  • Modification massive

On va avoir autant d'INSERT MySQL qu'on a d'appels aux fonctions add, update et delete.
Celà peut prendre énormément de temps pour l'insert.

Solution

La solution sera de regrouper tous ces INSERT dans une variables globale PHP et en fin de page, on fait un seul INSERT qui va juste être super rapide.
Je ne souhaite gérer ce cas que pour des cas spécifiques et donc avoir une variable dans $CFG_GLPI pour activer cette possibilité, par défault elle serai désactiver pour garder le comportement actuel.

Inconvénients

Le principal inconvénient de cette méthode est que si la page crash en plein milieu on perd les INSERT et donc pas de log.
On pourrait optimiser ça en enregistrant les INSERT dans la $_SESSION et en début de page, faire l'INSERT si la valeur n'est pas vide.