package fr.openwide.core.jpa.more.business.task.dao;
import java.util.Date;
import java.util.List;
import fr.openwide.core.jpa.business.generic.dao.IGenericEntityDao;
import fr.openwide.core.jpa.more.business.task.model.QueuedTaskHolder;
import fr.openwide.core.jpa.more.business.task.util.TaskStatus;
public interface IQueuedTaskHolderDao extends IGenericEntityDao<Long, QueuedTaskHolder> {
Long count(Date since, TaskStatus... statuses);
Long count(TaskStatus... statuses);
/**
* Récupère en base la tâche suivante à exécuter.
*
* @param taskType type de tâche à récupérer
*
* @return cette tâche, <code>null</code> si aucune tâche à exécuter.
*/
QueuedTaskHolder getNextTaskForExecution(String taskType);
/**
* Renvoi aléatoirement l'une tâche considérée comme bloquée, c'est à dire dont le temps d'exécution est jugé
* trop long. La limite du temps d'exécution est fixée par la propriété 'sitra.tasks.executionTimeLimitInSeconds'
* dans la configuration.
*
* @param taskType type de tâche à récupérer
* @param executionTimeLimitInSeconds le temps d'exécution au-delà duquel la tâche est considrée comme bloquée.
*
* @return l'une des tâches bloquées, <code>null</code> si aucune tâche n'est bloquée.
*/
QueuedTaskHolder getStalledTask(String taskType, int executionTimeLimitInSeconds);
List<QueuedTaskHolder> listConsumable();
List<QueuedTaskHolder> listConsumable(String queueId);
List<String> listTypes();
}