moncelery.py 2.79 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
# This file is part of CIRCLE Cloud.
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE.  If not, see <http://www.gnu.org/licenses/>.

from celery import Celery
19
from celery.signals import worker_ready
20 21 22 23 24
from datetime import timedelta
from kombu import Queue, Exchange
from os import getenv

HOSTNAME = "localhost"
25
QUEUE_NAME = HOSTNAME + '.monitor'
26 27 28 29 30 31 32 33

celery = Celery('monitor',
                broker=getenv("AMQP_URI"),
                include=['vm.tasks.local_periodic_tasks',
                         'monitor.tasks.local_periodic_tasks',
                         ])

celery.conf.update(
34
    CELERY_RESULT_BACKEND='amqp',
35 36
    CELERY_TASK_RESULT_EXPIRES=300,
    CELERY_QUEUES=(
37
        Queue(QUEUE_NAME, Exchange('monitor', type='direct'),
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
              routing_key="monitor"),
    ),
    CELERYBEAT_SCHEDULE={
        'vm.update_domain_states': {
            'task': 'vm.tasks.local_periodic_tasks.update_domain_states',
            'schedule': timedelta(seconds=10),
            'options': {'queue': 'localhost.monitor'}
        },
        'monitor.measure_response_time': {
            'task': 'monitor.tasks.local_periodic_tasks.'
                    'measure_response_time',
            'schedule': timedelta(seconds=30),
            'options': {'queue': 'localhost.monitor'}
        },
        'monitor.check_celery_queues': {
            'task': 'monitor.tasks.local_periodic_tasks.'
                    'check_celery_queues',
            'schedule': timedelta(seconds=60),
            'options': {'queue': 'localhost.monitor'}
        },
        'monitor.instance_per_template': {
            'task': 'monitor.tasks.local_periodic_tasks.'
                    'instance_per_template',
            'schedule': timedelta(seconds=30),
            'options': {'queue': 'localhost.monitor'}
        },
64 65 66 67 68 69
        'monitor.allocated_memory': {
            'task': 'monitor.tasks.local_periodic_tasks.'
                    'allocated_memory',
            'schedule': timedelta(seconds=30),
            'options': {'queue': 'localhost.monitor'}
        },
70 71 72
    }

)
73 74 75 76 77 78 79


@worker_ready.connect()
def cleanup_tasks(conf=None, **kwargs):
    '''Discard all task and clean up activity.'''
    from vm.models.activity import cleanup
    cleanup(queue_name=QUEUE_NAME)