diff --git a/colab/plugins/apps.py b/colab/plugins/apps.py index 9d50038..2c11d6b 100644 --- a/colab/plugins/apps.py +++ b/colab/plugins/apps.py @@ -1,6 +1,7 @@ from django.apps import AppConfig +from .utils.data import register_tasks from .utils.signals import connect_signal, register_signal @@ -10,3 +11,5 @@ class PluginAppConfig(AppConfig): def ready(self): register_signal() connect_signal() + + register_tasks() diff --git a/colab/plugins/tasks.py b/colab/plugins/tasks.py new file mode 100644 index 0000000..d813f99 --- /dev/null +++ b/colab/plugins/tasks.py @@ -0,0 +1,11 @@ + +from datetime import timedelta +from celery.decorators import periodic_task + +from .utils import data + + +@periodic_task(run_every=timedelta(minutes=1)) +def import_plugin_data(): + for task in data.TASKS: + task.delay() diff --git a/colab/plugins/utils/data.py b/colab/plugins/utils/data.py new file mode 100644 index 0000000..1162a9a --- /dev/null +++ b/colab/plugins/utils/data.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import importlib + +from django.conf import settings + +from colab.celery import app +from proxy_data_api import ProxyDataAPI + + +TASKS = set() + + +def register_tasks(): + + global TASKS + + for app_name in settings.INSTALLED_APPS: + + try: + module = importlib.import_module('{}.data_api'.format(app_name)) + except ImportError as e: + continue + + for item_name in dir(module): + item = getattr(module, item_name) + if item is ProxyDataAPI: + continue + + if callable(getattr(item, 'fetch_data', None)): + instance = item() + task = app.task(bind=True)(instance.fetch_data) + TASKS.add(task) + + return TASKS + + +def data_import(self): + for task in TASKS: + task.delay() diff --git a/colab/plugins/utils/proxy_data_api.py b/colab/plugins/utils/proxy_data_api.py index 2fabf46..2db39d5 100644 --- a/colab/plugins/utils/proxy_data_api.py +++ b/colab/plugins/utils/proxy_data_api.py @@ -1,6 +1,8 @@ +import abc class ProxyDataAPI(object): + @abc.abstractmethod def fetch_data(self): raise NotImplementedError('fetchData not yet implemented') diff --git a/vagrant/misc/etc/default/celerybeat b/vagrant/misc/etc/default/celerybeat index 9c644e6..9e42e0a 100644 --- a/vagrant/misc/etc/default/celerybeat +++ b/vagrant/misc/etc/default/celerybeat @@ -15,7 +15,7 @@ CELERTBEAT_LOG_FILE="/var/log/celery/beat.log" CELERYBEAT_PID_FILE="/var/run/celery/beat.pid" CELERYBEAT_USER="vagrant" -CELERYBEAT_GROUP="CELERYBEAT_GROUP" +CELERYBEAT_GROUP="vagrant" # If enabled pid and log directories will be created if missing, # and owned by the userid/group configured. diff --git a/vagrant/provision.sh b/vagrant/provision.sh index 729963b..2bc4acf 100755 --- a/vagrant/provision.sh +++ b/vagrant/provision.sh @@ -45,6 +45,9 @@ colab-admin loaddata /vagrant/tests/test_data.json # Init.d Celery files sudo cp $basedir/vagrant/misc/etc/init.d/celery* /etc/init.d/ sudo cp $basedir/vagrant/misc/etc/default/celery* /etc/default/ +sudo service celeryd stop || echo +sudo service celerybeat stop || echo +sleep 2 sudo service celeryd start sudo service celerybeat start -- libgit2 0.21.2