Introduction

Dans AEM (CQ) 5.6, la prise en charge Workflow MBean JMX a été ajoutée pour conserver le système de flux de travail. Le Workflow est enregistré dans le registre de services OSGi en tant que service MBean. Ce fichier MBean est disponible dans la console JMX qui expose les opérations de flux de travail. 15 opérations pouvant être effectuées sont répertoriées dans la section Fonctionnalités prises en charge. Il existe plusieurs façons de surveiller le fux de travail :

  • Utiliser l’interface utilisateur via la console Felix.
  • Utiliser CURL.
  • Créer un client JMX utilisant Workflow MBean.

Fonctionnalités prises en charge

Workflow JMX

Purge Completed Workflows

  • Après un certain nombre de jours écoulés une fois le flux de travail terminé. 
  • Une option par modèle après un certain nombre de jours depuis que le flux de travail du modèle est terminé.
  • Il est également possible d'effectuer une exécution d'essai afin de prévisualiser un flux de travail terminé qui serait purgé.

Purge Active Workflows

  • Après un certain nombre de jours écoulés depuis que le flux de travail est actif. 
  • Avec une option par modèle après un certain nombre de jours écoulés depuis que le flux de travail du modèle est actif.
  • Vous pouvez également exécuter une exécution d’essai pour prévisualiser un flux de travail en cours d’exécution qui sera purgé.

Count stale workflow

  • Renvoie le nombre de flux de travaux obsolètes dans le système.
  • Une option permet de renvoyer le nombre de flux de travaux obsolètes par modèle.

Restart stale workflow

  • Tous les flux de travaux obsolètes du système.
  • Avec une option permettant de redémarrer tous les flux de travaux obsolètes par modèle.
  • Vous pouvez également effectuer une exécution d'essai pour prévisualiser un flux de travail obsolète qui serait redémarré.

Workflow model list

  • Renvoie toutes les informations du modèle de flux de travail dont le nom et l’ID sont dans le système.

Count running workflow

  • Renvoie le nombre de flux de travaux en cours d’exécution dans le système.
  • Une option permet de renvoyer le nombre de flux de travaux en cours d’exécution par modèle.

Count completed workflow

  • Renvoie le nombre de flux de travaux terminés dans le système.
  • Une option permet de renvoyer le nombre de flux de travaux terminés par modèle.

Running Workflow model list

  • Répertorie tous les workflows en cours d’exécution dans le système.

Completed Workflow model list

  • Répertorie tous les workflows par modèle terminés dans le système.

Informations sur la file du processus

  • Récupérer des informations à partir du démarrage système telles que les tâches, le nom de la file d’attente, les tâches actives, le temps de traitement moyen, le temps d’attente moyen, les travaux terminés, les travaux ayant échoué, les travaux traités et les travaux en file d’attente.

Workflow job topic information

  • Renvoie les informations de tâche des workflows telles que nom de la rubrique, temps de traitement moyen, temps d’attente moyen, les tâches annulées, les travaux terminés et les travaux ayant échoué.

Count failed workflow

  • Renvoie le nombre de workflows ayant échoué dans le système.
  • Une option permet de renvoyer le nombre workflows ayant échoué par modèle.

Failed Workflow model list

  • Répertorie tous les workflows par modèle qui ont échoué dans le système.

Failed Instances

  • Arrête toutes les instances de workflows ayant échoué dans le système.
  • Une option permet d’interrompre toutes les instances de workflows ayant échoué par modèle.
  • Faire une exécution d'essai pour prévisualiser les instances de workflows ayant échoué.
  • Relance toutes les instances de workflows ayant échoué dans le système.
  • Une option permet de redémarrer toutes les instances de workflows ayant échoué par modèle.
  • Faire une exécution d'essai pour prévisualiser les instances de workflows ayant échoué.

Failed Workitems

  • Relance les éléments de travail ayant échoué dans le système.
  • Une option permet de relancer les éléments de travail ayant échoué par modèle dans le système.
  • Faire une exécution d'essai pour prévisualiser un élément de travail ayant échoué qui serait relancé.

Remarque :

Vous pouvez actuellement purger les workflows qui sont supérieurs à un jour.

Paramètres d’entrée

Il y a 15 opérations au total et une opération peut posséder entre un et cinq des attributs suivants : Namely

  • modèle [facultatif] : Cette option est facultative et la valeur doit correspondre à l’ID du modèle de workflow. Ex:- /etc/workflow/models/request_for_activation/jcr:content/model
  • nombre de jours écoulés depuis le workflow : champ obligatoire pour les opérations purgeCompleted. Doit être égal ou supérieur à un.
  • nombre de jours depuis le démarrage du workflow : Ce champ est obligatoire pour l’opération purgeActive. Doit être égal ou supérieur à un.
  • dry run : La valeur peut être true ou false. La valeur par défaut est false. 
  • Redémarrer l’instance : La valeur peut être true ou false. False par défaut.

Options de contrôle du flux de production

Trois méthodes différentes :

Interface utilisateur via la console Felix

Utilisation de votre navigateur Web favori pour accéder à la console Felix, soit en

  • tapant http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance OU Web console > Main > JMX > com.adobe.granite.workflow > Maintenance
  • Sélectionnant parmi les 15 l’opération que vous souhaitez exécuter.
  • Entrant les paramètres et en invoquant.
Purge Completed

cURL

Remplacez la valeur entre crochets par une valeur réelle. Ex:- <dryRun> par true

Purge Completed Workflows

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>&number of days since workflow has been completed=<numberOfDays>&dry run=<dryRun>" http://<host>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeCompleted/java.lang.String,java.lang.Integer,java.lang.Boolean

Ex : La commande cURL pour prévisualiser tous les workflows qui se trouvent dans le modèle request_for_activation est

curl -u admin:admin -X POST --data "model [optional]=/etc/workflow/models/request_for_activation/jcr:content/model&number of days since workflow has been completed=1&dry run=true" http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeCompleted/java.lang.String,java.lang.Integer,java.lang.Boolean

Purge Active Workflows

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>&number of days since workflow started=<numberOfDays>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/purgeActive/java.lang.String,java.lang.Integer,java.lang.Boolean

Count stale workflow

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countStaleWorkflows/java.lang.String

Restart stale workflow

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/restartStaleWorkflows/java.lang.String,java.lang.Boolean

Workflow model list

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/fetchModelList/

Count running workflow

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countRunningWorkflows/java.lang.String

Count completed workflow

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/countCompletedWorkflows/java.lang.String

Running Workflow model list

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/listRunningWorkflowsPerModel/

Completed Workflow model list

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/listCompletedWorkflowsPerModel/

Workflow queue information

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnWorkflowQueueInfo/

Workflow job topic information

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnWorkflowJobTopicInfo/

Count failed workflow

curl -u <UID>:<PASSWORD> -X POST --data "model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnFailedWorkflowCount/java.lang.String

Failed Workflow model list

curl -u <UID>:<PASSWORD> -X POST http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/returnFailedWorkflowCountPerModel/

Failed Instances

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>&restart the instance=<restartInstance>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/terminateFailedInstances/boolean,boolean,java.lang.String

Failed Workitems

curl -u <UID>:<PASSWORD> -X POST --data "dry run=<dryRun>&model [optional]=<modelId>" http://<HOST>:<PORT>/system/console/jmx/com.adobe.granite.workflow:type=Maintenance/op/retryFailedWorkItems/boolean,java.lang.String

Créer un client JMX utilisant Workflow MBean.

Vous trouverez ci-dessous un code client jmx d'exemple qui exécute les 15 opérations et affiche la sortie. Les paramètres d'entrées sont Exécution d'essai, numberOfDays à 1 et pour tous les modèles.

import javax.management.DynamicMBean;
import java.util.Hashtable;

import javax.management.openmbean.TabularData;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;


public class WorkflowJMXSampleClient {

	public static void main(String[] args) throws Exception{
		String userid = "admin";
		String password = "admin";
		String serverUrl = "service:jmx:rmi:///jndi/rmi://localhost:9000/jmxrmi";
		String OBJECT_NAME = "com.adobe.granite.workflow:type=Maintenance";
		String[] buffer = new String[] { userid, password };
		Hashtable<String, String[]> attributes = new Hashtable<String, String[]>();
		attributes.put("jmx.remote.credentials", (String[]) buffer);		
		MBeanServerConnection server = (MBeanServerConnection) JMXConnectorFactory.connect(new JMXServiceURL(serverUrl), attributes).getMBeanServerConnection();
		ObjectName name = new ObjectName(OBJECT_NAME);
		WorkflowMBean workflow = (WorkflowMBean) MBeanServerInvocationHandler.newProxyInstance(server, name, WorkflowMBean.class,false);

		/* Execute all the methods*/
		String model = "";
		Integer numberOfDays = 1 ;
		Boolean dryRun = true;
		boolean restartInstance = false;

		logTabularData("purgeCompleted",workflow.purgeCompleted( model, numberOfDays, dryRun));
		logTabularData("purgeActive",workflow.purgeActive( model,  numberOfDays,  dryRun));
		logCount("countStaleWorkflows",workflow.countStaleWorkflows( model));
		logTabularData("restartStaleWorkflows",workflow.restartStaleWorkflows( model, dryRun) );
		logTabularData("fetchModelList",workflow.fetchModelList() );
		logCount("countRunningWorkflows",workflow.countRunningWorkflows( model) );
		logCount("countCompletedWorkflows",workflow.countCompletedWorkflows( model) );
		logTabularData("listRunningWorkflowsPerModel",workflow.listRunningWorkflowsPerModel() );
		logTabularData("listCompletedWorkflowsPerModel",workflow.listCompletedWorkflowsPerModel() );
		logTabularData("returnWorkflowQueueInfo",workflow.returnWorkflowQueueInfo() );
		logTabularData("returnWorkflowJobTopicInfo",workflow.returnWorkflowJobTopicInfo() );
		logCount("returnFailedWorkflowCount",workflow.returnFailedWorkflowCount( model) );
		logTabularData("returnFailedWorkflowCountPerModel",workflow.returnFailedWorkflowCountPerModel() );
		logTabularData("terminateFailedInstances",workflow.terminateFailedInstances( restartInstance, dryRun, model) );
		logTabularData("retryFailedWorkItems",workflow.retryFailedWorkItems( dryRun, model)); 
		
	}
	
	public static void logTabularData(String operation, TabularData data) {
		System.out.println("-----Operation "+operation+"--------------");
		try {
			System.out.println("Number of records "+data.size());
			int counter = 0;
			for (Object o : data.values()) {
				System.out.println("Record Number "+(++counter));
				CompositeData row = (CompositeData) o;
			    CompositeType type = row.getCompositeType();
			    	for (Object k : type.keySet()) {
			    		String key = k.toString();
						System.out.println(key + " -- "+ row.get(key));
			    }
			}
		} catch (Exception e) {
			System.out.println("-----Error during operation "+operation+"--------------"+e.getMessage());		
		}
		System.out.println("-----Completed "+operation+"--------------");		
		System.out.println("       ");		

	}

	public static void logCount(String operation, int counter) {
		System.out.println("--------------"+operation+"--------------");
		try {
			System.out.println("count is "+counter);
		} catch (Exception e) {
			System.out.println("-----Error during operation "+operation+"--------------"+e.getMessage());		
		}
		System.out.println("-----Completed "+operation+"--------------");		
		System.out.println("       ");		
	}
	
	public static interface WorkflowMBean extends DynamicMBean {
		public TabularData purgeCompleted(String model,Integer numberOfDays,Boolean dryRun);
		public TabularData purgeActive(String model, Integer numberOfDays, Boolean dryRun);
		public int countStaleWorkflows(String model);
		public TabularData restartStaleWorkflows(String model,Boolean dryRun) ;
		public TabularData fetchModelList() ;
		public int countRunningWorkflows(String model) ;
		public int countCompletedWorkflows(String model) ;
		public TabularData listRunningWorkflowsPerModel() ;
		public TabularData listCompletedWorkflowsPerModel() ;
		public TabularData returnWorkflowQueueInfo() ;
		public TabularData returnWorkflowJobTopicInfo() ;
		public int returnFailedWorkflowCount(String model) ;
		public TabularData returnFailedWorkflowCountPerModel() ;
		public TabularData terminateFailedInstances(boolean restartInstance,boolean dryRun,String model) ;
		public TabularData retryFailedWorkItems(boolean dryRun,String model); 
    }
}

Vidéo

Remarque :

Si vous rencontrez un problème lors de la lecture de la vidéo, rendez-vous à l'adresse : http://youtu.be/aXQgd-Vuqzg

Comment surveiller le flux de travail via JMX

Comment surveiller le flux de travail via JMX

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne