TaskManager.py 1.62 KB
from common.models import *

from celery.task.control import revoke
import time
from devices import Telescope, CameraVIS, CameraNIR

def delete_pending_tasks(task_names, terminate=False):
    '''
        Deletes the pending tasks given in task_names, getting their ids in DB.
        Removes them from db.
        :param task_names: array of tasks names to delete 
    '''

    # TODO : il faudra aller plus loin, et dire aux instruments de s'arrĂȘter

    for task_name in task_names:
        tasks = TaskId.objects.filter(task=task_name)
        for task in tasks:
            print("je revoke : ", task.task_id)
            revoke(task.task_id, terminate=terminate)
            task.delete()

        """ The sleep is in case of sequence stopping :
            if it was creating a plan_exec, the creation must be finished before we try to delete it """
        time.sleep(1)

def delete_pending_routine():
    '''
        It is called in case of a routine registered
        It deletes the pending execute_sequence
    '''

    delete_pending_tasks(["execute_sequence"], terminate=False)
    tel = Telescope.TelescopeController()
    tel.do("ABORT")


def delete_pending_alert():
    '''
        It is called in case of an alert registered
        It deletes the pending execute_sequence, and the pending + executing plans
    '''

    delete_pending_tasks(["execute_sequence"], terminate=False)
    delete_pending_tasks(["execute_plan"], terminate=False)

    tel = Telescope.TelescopeController()
    VIScam = CameraVIS.VISCameraController()
    NIRcam = CameraNIR.NIRCameraController()
    tel.do("ABORT")
    VIScam.do("ABORT")
    NIRcam.do("ABORT")