Tâches
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 (e.g. tous les jours à 18h).
Les tâches se configurent via le fichier de configuration de l'OIP.
L'OIP Core fournit dans le module @fasstech/oip-core/task un ensemble de fonctions pour manipuler des tâches.
Initialisation d'une tâche
Dans le fichier de configuration de l'OIP, la propriété tasks spécifie les tâches disponibles.
export default {
tasks: {
// Tâche standard
myTask: myCallback,
// Tâche cron
myCronTask: {
callback: myCronTaskCallback,
cron: '0 18 * * *'
}
}
}La fonction de rappel (callback) sera appelée lors de l'exécution de la tâche.
Exécution d'une tâche
La fonction runTask permet d'exécuter une tâche définie dans le fichier de configuration.
import { runTask } from '@fasstech/oip-core/task';
export const myProcess = async (projectId) => {
runTask({
projectId,
taskName: 'myTask',
metadata: {
message: 'hello world!'
}
});
console.log(`Task ${taskId}-${taskName} executed successfully`);
};Le nom de la tâche passé en paramètre doit correspondre au nom d'une tâche définie dans le fichier de configuration de l'OIP.
Si projectId est passé en paramètre, la tâche sera liée à un projet.
Si metadata est passé en paramètre, cet objet est alors reçu en paramètre de la fonction de rappel de la tâche et peut être passé à la méthode updateState (voir le paragraphe "Mise à jour de l'état d'une tâche").
Mise à jour du statut 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: unknown;
}L'appel à la fonction updateState permet alors de mettre à jour l'état de la tâche courante.
// config file
export default {
tasks: {
task3: async ({ metadata, taskHandler }) => {
await taskHandler.updateState({
metadata,
state: { status: 'ONGOING', statusCode: 42 }
});
}
}
}Récupération d'une tâche
La fonction getTask permet de récupérer une tâche par son nom ; le paramètre projectId est optionnel. Le nom de la tâche passé en paramètre doit correspondre au nom d'une tâche définie dans le fichier de configuration de l'OIP.
La fonction getTasks permet de récupérer un ensemble de tâches ; le paramètre projectId est optionnel.
import { getTask, getTasks } from '@fasstech/oip-core/task';
const task = await getTask({ projectId, taskName: 'taskName' });
const tasks = await getTasks({ projectId });Arrêt d'une tâche
La fonction killTask permet de stopper et de supprimer en base de données une tâche cron.
import { killTask } from '@fasstech/oip-core/task';
await killTask({ taskName: 'taskName' });taskName doit correspondre au nom d'une tâche de type CRON définie dans le fichier de configuration de l'OIP.
Programmation d'une tâche
La fonction scheduleTask permet de programmer l'exécution d'une tâche à une date prédéfinie.
export const scheduleTask: (args: {
taskName: string;
scheduledAt: Date;
metadata?: unknown;
projectId?: string;
}) => Promise<void>;Le taskHandler associé à une tâche programmée possède deux fonctions : complete et reset. La fonction complete permet de déclarer que la tâche programmée a été réalisée avec succès ; cette tâche programmée ne sera plus relancée. La fonction reset permet de déclarer que la tâche programmée a échoué ; cette tâche programmée sera relancée ultérieurement.
La fonction cancelGroupTasks permet d'annuler une liste de tâches rattachées à une entité Project.
export const cancelGroupTasks: (
projectId: string,
taskNames: string[]) => Promise<void>;Exemple
await scheduleTask({
metadata: { foo: 'bar' },
projectId: '2',
taskName: 'myTask',
scheduledAt: DateTime.now()
});