kopia lustrzana https://github.com/glidernet/ogn-python
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
rodzic
27db22d8c8
commit
b3e1f7b0a7
18
README.md
18
README.md
|
@ -58,10 +58,10 @@ 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
|
||||
```
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -1,5 +1,3 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from celery.utils.log import get_task_logger
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue