Gestions des tasks
Tasks
Cette version de la gestion des tasks est disponible Ă partir de la version 2.2.0
Introduction
Les tĂąches (tasks) sont des fonctions qui peuvent ĂȘtre exĂ©cutĂ©es par un utilisateur ou par un planificateur (cron) pour des Ă©vĂšnements rĂ©currents, par exemple tous les jours Ă 18h.
Initialisation d'une tĂąche standard
Dans le fichier de configuration de l'OIP, la propriĂ©tĂ© tasks contient les tĂąches disponibles qui peuvent ĂȘtre exĂ©cutĂ©es grĂące au contrĂŽleur runTask.
// config file
import { baseConfig } from './base.config.mjs';
export default {
...baseConfig,
tasks: {
myTask: myCallback // a standard task
}
}La fonction de rappel sera appelée lors de l'exécution de la tùche.
Initialisation d'une tĂąche de type CRON
De la mĂȘme maniĂšre que pour une tĂąche standard, les tĂąches de type CRON sont Ă dĂ©finir dans l'objet de la propriĂ©tĂ© tasks du fichier de configuration de l'OIP.
// congif file
import { baseConfig } from './base.config.mjs';
export default {
...baseConfig,
tasks: {
myTask: myCallback, // a standard task
myCronTask: { // a CRON task
callback: myCronTaskCallback,
cron: '0 18 * * *' // every day at 18:00
}
}
}Les tùches de type CRON seront exécutées automatiquement à l'horaire spécifiée en valeur de la propriété cron de la tùche. Il n'est pas nécessaire de passer par le contrÎleur runTask pour l'exécution de ce type de tùches.
Exécution d'une tùche
Le contrÎleur runTask est exposé par l'OIP pour exécuter une tùche définie dans le fichier de configuration.
Une tĂąche peut ĂȘtre liĂ©e Ă un projet ou non.
import { runTaskCtrl as runTask } from '@fasstech/oip-core/controllers';
/**
* @param {string} projectId
*/
export const myProcess = async (projectId) => {
const { taskId, taskName } = runTask({
taskName: 'myTask',
projectId,
// metadata est disponible Ă partir de la version 2.4.0 (ou 2.4.0-rc.0)
metadata: {
message: 'hello world!'
}
});
console.log(`Task ${taskId}-${taskName} executed successfully`);
};La propriété taskName passée en paramÚtre au contrÎleur runTask doit correspondre au nom d'une tùche déclarée dans le fichier de configuration de l'OIP.
Mise à jour de l'état d'une tùche
La fonction de rappel d'une tùche est appelée lors de l'exécution de la tùche. L'objet passé en paramÚtre permet de récupérer la propriété taskHandler.
taskHandler permet d'accéder à la fonction updateState. updateState prend en paramÚtre un objet de la forme suivante :
{
state: {
status: string;
statusCode: number;
},
error: string;
metadata: any;
}L'appel à la fonction updateState permet alors de mettre à jour l'état de la tùche courante.
// config file
import { baseConfig } from './base.config.mjs';
import { myTask } from './server/tasks/my-task.mjs';
export default {
...baseConfig,
tasks: {
myTask,
}
}
// my-task.mjs
export const myTask = async ({ taskHandler, metadata }) => {
const updateState = taskHandler.updateState;
console.log('Task started');
await new Promise(res => setTimeout(res, 1500)); // heavy processing
// state update of the current task
updateState({ state: {
status: 'IN_PROGRESS',
statusCode: 21,
metadata
}});
console.log('Task in progress');
await new Promise(res => setTimeout(res, 4200)); // heavy processing
// state update of the current task
updateState({ state: {
status: 'COMPLETED',
statusCode: 42,
metadata: {
message: 'my message'
}
}});
};
// app.mjs
import OIP from '@fasstech/oip-core';
await OIP.start();ContrÎleurs associés à la gestion des tùches
runTaskCtrl
Ce contrÎleur remplace le contrÎleur déprécié runTask
La gestion du paramĂštre metadata n'est disponible qu'Ă partir de la version 2.4.0
ParamĂštres : { taskName, projectId, metadata }
Ce contrÎleur permet d'exécuter une tùche. Si projectId est passé en paramÚtre, la tùche sera liée à un projet.
Si metadata est passĂ© en paramĂštre, metadata est alors reçu en paramĂštre de la callback de la tĂąche et peut ĂȘtre passĂ© Ă la mĂ©thode updateStateâ exposĂ©e par le taskHandlerâ reçu Ă©galement en paramĂštre de la callback pour un enregistrement en base de donnĂ©es. Voir l'exemple de la mise Ă jour de l'Ă©tat d'une tĂąche.
Exemple :
import { runTaskCtrl } from '@fasstech/oip-core/controllers';
const { taskId, taskName } = await runTaskCtrl({
taskName: 'magicTask',
projectId: 'my-project-id',
metadata: {
message: 'hello world!'
}
});
console.log(`Task #${taskId}-${taskName} executed`);getTask
ParamĂštres : { taskName, projectId }
Ce contrÎleur permet de récupérer une tùche. Soit uniquement par { taskName } soit par la paire { taskName, projectId } si la tùche est liée à un projet.
Attention, si la tùche n'est pas trouvée, elle est créée dans la base de données si taskName correspond à une tùche définie dans le fichier de configuration de l'OIP mais ne sera pas exécutée.
Exemple :
import { getTask } from '@fasstech/oip-core/controllers';
const task = await getTask({
taskName: 'magicTask',
projectId: 'my-project-id'
});
console.log(task);getAllTasks
ParamĂštres : { projectId }
Ce contrÎleur permet de récupérer toutes les tùches ou toutes les taches liées à un projet si projectId est passé en paramÚtre.
Exemple :
import { getAllTasks } from '@fasstech/oip-core/controllers';
const tasks = await getAllTasks({});
console.log(tasks);
// or
const tasksFromProject = await getAllTasks({ projectId: 'my-project-id' });
console.log(tasksFromProject);killCronTask
ParamĂštres : { taskName }
Ce contrÎleur permet de stopper et de supprimer en database une tache de type CRON. taskName doit correspondre au nom d'une tùche de type CRON définie dans le fichier de configuration de l'OIP.
Exemple :
import { killCronTask } from '@fasstech/oip-core/controllers';
const killedTaskName = await killCronTask({ taskName: 'magicTask' });
console.log(killedTaskName);killAllCronTask
ParamĂštres : aucun
Ce contrĂŽleur permet de stopper et de supprimer en database toutes les tĂąches de type CRON.
Exemple :
import { killAllCronTask} from '@fasstech/oip-core/controllers';
await killAllCronTask();