Commit 7ba7f4e6be1ee5ae0b58cec0878af1abfc260363
1 parent
4a4ddcb1
Exists in
master
and in
29 other branches
Importing data asynchronously
Signed-off-by: Sergio Oliveira <sergio@tracy.com.br>
Showing
6 changed files
with
60 additions
and
1 deletions
Show diff stats
colab/plugins/apps.py
| 1 | 1 | |
| 2 | 2 | from django.apps import AppConfig |
| 3 | 3 | |
| 4 | +from .utils.data import register_tasks | |
| 4 | 5 | from .utils.signals import connect_signal, register_signal |
| 5 | 6 | |
| 6 | 7 | |
| ... | ... | @@ -10,3 +11,5 @@ class PluginAppConfig(AppConfig): |
| 10 | 11 | def ready(self): |
| 11 | 12 | register_signal() |
| 12 | 13 | connect_signal() |
| 14 | + | |
| 15 | + register_tasks() | ... | ... |
| ... | ... | @@ -0,0 +1,40 @@ |
| 1 | +#!/usr/bin/env python | |
| 2 | + | |
| 3 | +import importlib | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | + | |
| 7 | +from colab.celery import app | |
| 8 | +from proxy_data_api import ProxyDataAPI | |
| 9 | + | |
| 10 | + | |
| 11 | +TASKS = set() | |
| 12 | + | |
| 13 | + | |
| 14 | +def register_tasks(): | |
| 15 | + | |
| 16 | + global TASKS | |
| 17 | + | |
| 18 | + for app_name in settings.INSTALLED_APPS: | |
| 19 | + | |
| 20 | + try: | |
| 21 | + module = importlib.import_module('{}.data_api'.format(app_name)) | |
| 22 | + except ImportError as e: | |
| 23 | + continue | |
| 24 | + | |
| 25 | + for item_name in dir(module): | |
| 26 | + item = getattr(module, item_name) | |
| 27 | + if item is ProxyDataAPI: | |
| 28 | + continue | |
| 29 | + | |
| 30 | + if callable(getattr(item, 'fetch_data', None)): | |
| 31 | + instance = item() | |
| 32 | + task = app.task(bind=True)(instance.fetch_data) | |
| 33 | + TASKS.add(task) | |
| 34 | + | |
| 35 | + return TASKS | |
| 36 | + | |
| 37 | + | |
| 38 | +def data_import(self): | |
| 39 | + for task in TASKS: | |
| 40 | + task.delay() | ... | ... |
colab/plugins/utils/proxy_data_api.py
vagrant/misc/etc/default/celerybeat
| ... | ... | @@ -15,7 +15,7 @@ CELERTBEAT_LOG_FILE="/var/log/celery/beat.log" |
| 15 | 15 | CELERYBEAT_PID_FILE="/var/run/celery/beat.pid" |
| 16 | 16 | |
| 17 | 17 | CELERYBEAT_USER="vagrant" |
| 18 | -CELERYBEAT_GROUP="CELERYBEAT_GROUP" | |
| 18 | +CELERYBEAT_GROUP="vagrant" | |
| 19 | 19 | |
| 20 | 20 | # If enabled pid and log directories will be created if missing, |
| 21 | 21 | # and owned by the userid/group configured. | ... | ... |
vagrant/provision.sh
| ... | ... | @@ -45,6 +45,9 @@ colab-admin loaddata /vagrant/tests/test_data.json |
| 45 | 45 | # Init.d Celery files |
| 46 | 46 | sudo cp $basedir/vagrant/misc/etc/init.d/celery* /etc/init.d/ |
| 47 | 47 | sudo cp $basedir/vagrant/misc/etc/default/celery* /etc/default/ |
| 48 | +sudo service celeryd stop || echo | |
| 49 | +sudo service celerybeat stop || echo | |
| 50 | +sleep 2 | |
| 48 | 51 | sudo service celeryd start |
| 49 | 52 | sudo service celerybeat start |
| 50 | 53 | ... | ... |