CLI: Remove celery dependency for simple tasks

Only `logbook.compute` still requires a running celery backend.

The celery tasks 'update_ddb_from_*' were renamed to
'database.import_ddb' and 'database.import_file'.
pull/21/head
Fabian P. Schmidt 2015-12-09 03:41:58 +01:00
rodzic 27db22d8c8
commit b3e1f7b0a7
6 zmienionych plików z 61 dodań i 73 usunięć

Wyświetl plik

@ -58,9 +58,9 @@ optional arguments:
available commands:
[db]
import_ddb Import registered devices from the DDB.
import_file Import registered devices from local file.
init Initialize the database.
update_ddb_file Update devices with data from local file.
update_ddb_ogn Update devices with data from ogn.
[gateway]
run Run the aprs client.
@ -78,7 +78,7 @@ available commands:
software_stats Show some statistics of receiver software.
```
The task server must be running for `db.updateddb`.
Only the command `logbook.compute` requires a running task server (celery) at the moment.
## TODO
- [x] Write celery backend and add task 'fetchddb'
@ -95,9 +95,13 @@ The task server must be running for `db.updateddb`.
- [ ] Introduce scheduled tasks with 'celery beat' (eg. updateddb)
### Scheduled tasks
- ogn.collect.fetchddb (generate Flarm table)
- ogn.collect.receiver (generate Receiver table)
- ogn.collect.logbook (generate TakeoffLanding table)
- ogn.collect.database
- import_ddb - Import registered devices from the ddb
- import_file - Import registered devices from a local file
- ogn.collect.receiver
- populate - generate Receiver table (not implemented)
- ogn.collect.logbook
- compute - generate TakeoffLanding table
## How to use virtualenv
```

Wyświetl plik

@ -1,5 +1,3 @@
from __future__ import absolute_import
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
@ -9,7 +7,7 @@ from celery.signals import worker_init, worker_shutdown
app = Celery('ogn.collect',
broker='redis://localhost:6379/0',
backend='redis://localhost:6379/0',
include=["ogn.collect.fetchddb", "ogn.collect.logbook"])
include=["ogn.collect.database", "ogn.collect.logbook"])
DB_URI = 'sqlite:///beacons.db'

Wyświetl plik

@ -0,0 +1,35 @@
from ogn.model import Device
from celery.utils.log import get_task_logger
from ogn.collect.celery import app
logger = get_task_logger(__name__)
def update_devices(session, origin, devices):
session.query(Device) \
.filter(Device.address_origin == origin) \
.delete()
session.bulk_save_objects(devices)
session.commit()
return len(devices)
@app.task
def import_ddb():
"""Import registered devices from the DDB."""
logger.info("Import registered devices fom the DDB...")
counter = update_devices(app.session, AddressOrigin.ogn_ddb, get_ddb())
logger.info("Imported %i devices." % counter)
@app.task
def import_file(path='tests/custom_ddb.txt'):
"""Import registered devices from a local file."""
logger.info("Import registered devices from '{}'...".format(path))
counter = update_devices(app.session, AddressOrigin.user_defined, get_ddb(path))
logger.info("Imported %i devices." % counter)

Wyświetl plik

@ -1,43 +0,0 @@
from __future__ import absolute_import
from celery.utils.log import get_task_logger
from ogn.collect.celery import app
from ogn.model import AddressOrigin, Device
from ogn.utils import get_ddb
logger = get_task_logger(__name__)
@app.task
def update_ddb_from_ogn():
logger.info("Update ddb data from ogn.")
app.session.query(Device) \
.filter(Device.address_origin == AddressOrigin.ogn_ddb) \
.delete()
devices = get_ddb()
logger.debug("New Devices: %s" % str(devices))
app.session.bulk_save_objects(devices)
app.session.commit()
return len(devices)
@app.task
def update_ddb_from_file():
logger.info("Import ddb data from file.")
app.session.query(Device) \
.filter(Device.address_origin == AddressOrigin.userdefined) \
.delete()
devices = get_ddb('ogn/custom_ddb.txt')
logger.debug("New Devices: %s" % str(devices))
app.session.bulk_save_objects(devices)
app.session.commit()
return len(devices)

Wyświetl plik

@ -1,5 +1,3 @@
from __future__ import absolute_import
from datetime import datetime, timedelta
from celery.utils.log import get_task_logger

Wyświetl plik

@ -1,8 +1,7 @@
from sqlalchemy import func, and_, true, false
from ogn.model import Base, AddressOrigin, Device
from ogn.collect.fetchddb import update_ddb_from_ogn, update_ddb_from_file
from ogn.commands.dbutils import engine, session
from ogn.model import Base, AddressOrigin
from ogn.utils import get_ddb
from ogn.collect.database import update_devices
from manager import Manager
manager = Manager()
@ -17,22 +16,19 @@ def init():
@manager.command
def update_ddb_ogn():
"""Update devices with data from ogn."""
print("Updating ddb data...")
result = update_ddb_from_ogn.delay()
counter = result.get()
def import_ddb():
"""Import registered devices from the DDB."""
print("Import registered devices fom the DDB...")
counter = update_devices(session, AddressOrigin.ogn_ddb, get_ddb())
print("Imported %i devices." % counter)
@manager.command
def update_ddb_file():
"""Update devices with data from local file."""
print("Updating ddb data...")
result = update_ddb_from_file.delay()
counter = result.get()
def import_file(path='tests/custom_ddb.txt'):
"""Import registered devices from a local file."""
# (flushes previously manually imported entries)
print("Import registered devices from '{}'...".format(path))
counter = update_devices(session, AddressOrigin.user_defined, get_ddb(path))
print("Imported %i devices." % counter)
@manager.command