GLPI : Résolution et clôture automatique des tickets liés

Dans le cadre de la formation que je donne à distance avec un très grand hôpital du sud de la France, mon client m’a demandé de lui trouver un moyen pour résoudre et clore automatiquement des tickets enfants liés à un ticket parent. J’ai cru pouvoir solutionner le problème par un trigger. La gestion des verrous dans MariaDB m’en a empêché. J’ai donc dû me rabattre sur la création d’un événement s’exécutant toutes les 5 secondes par le planificateur intégré à MariaDB.

Activer le planificateur d’événements

Le planificateur d’événements intégré à MariaDB permet d’exécuter des scripts SQL à intervalle régulier. Pour l’activer à chaud, il vous faudra taper en SQL la commande :

SET GLOBAL event_scheduler=ON;

En cas de redémarrage (activation à froid), afin d’activer le planificateur d’événements, vous devez modifier la configuration de la base de données en ajoutant à l’un des fichiers  ou en le modifiant si la directive y est présente :

event_scheduler=1

La création de l’événement

Elle se fait en SQL. L’intervalle choisi ci-dessous est de 5 secondes. Cela pourrait être moins !

CREATE EVENT change_automatic_status_tickets
    ON SCHEDULE EVERY 5 SECOND
    DO
		UPDATE glpi.glpi_tickets AS t
		INNER JOIN
		(
			SELECT
				t.id AS parent_id,
				t.status AS parent_status,
				tt.tickets_id_1 AS child_id,
				(SELECT status FROM glpi.glpi_tickets WHERE id=tt.tickets_id_1) AS child_status
			FROM	
				glpi.glpi_tickets_tickets AS tt 
				INNER JOIN glpi.glpi_tickets AS t 
				ON tt.tickets_id_2=t.id
			WHERE 
				status IN (5,6)
		) AS req
		ON t.id=req.child_id
		SET status=req.parent_status;

Vérification

Vous devez vérifier tout d’abord que l’événement a bien été créé  (colonne created) et qu’il s’exécute (colonne last_executed) à l’aide de la commande SQL :

SELECT * FROM information_schema.events;
-- ou
SELECT * FROM mysql.event;

mariadb > create event

Et ça marche !

Après avoir clos le ticket parent, les tickets enfants se sont clos au bout de 5 secondes… maxi.

Glpi > Assistance > Tickets > Tickets fermés

GLPI /