CLI: Rename 'db.stats' to 'show.devices.stats'

pull/21/head
Fabian P. Schmidt 2015-12-09 03:37:25 +01:00
rodzic 5e01e235cb
commit 27db22d8c8
4 zmienionych plików z 61 dodań i 29 usunięć

Wyświetl plik

@ -64,11 +64,14 @@ available commands:
[gateway] [gateway]
run Run the aprs client. run Run the aprs client.
[logbook] [logbook]
compute Compute takeoffs and landings. compute Compute takeoffs and landings.
show Show a logbook for <airport_name> located at given position. show Show a logbook for <airport_name> located at given position.
[show.devices]
stats Show some stats on registered devices.
[show.receiver] [show.receiver]
hardware_stats Show some statistics of receiver hardware. hardware_stats Show some statistics of receiver hardware.
list_all Show a list of all receivers. list_all Show a list of all receivers.

Wyświetl plik

@ -1,5 +1,6 @@
from .database import manager as database_manager from .database import manager as database_manager
from .showreceiver import manager as show_receiver_manager from .showreceiver import manager as show_receiver_manager
from .showdevices import manager as show_devices_manager
from .logbook import manager as logbook_manager from .logbook import manager as logbook_manager
from manager import Manager from manager import Manager
@ -8,4 +9,5 @@ manager = Manager()
manager.merge(database_manager, namespace='db') manager.merge(database_manager, namespace='db')
manager.merge(show_receiver_manager, namespace='show.receiver') manager.merge(show_receiver_manager, namespace='show.receiver')
manager.merge(show_devices_manager, namespace='show.devices')
manager.merge(logbook_manager, namespace='logbook') manager.merge(logbook_manager, namespace='logbook')

Wyświetl plik

@ -11,6 +11,7 @@ manager = Manager()
@manager.command @manager.command
def init(): def init():
"""Initialize the database.""" """Initialize the database."""
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
print("Done.") print("Done.")
@ -34,31 +35,4 @@ def update_ddb_file():
@manager.command @manager.command
def stats():
"""Show some devices stats."""
sq_nt = session.query(Device.address) \
.filter(and_(Device.tracked == false(), Device.identified == true())) \
.subquery()
sq_ni = session.query(Device.address) \
.filter(and_(Device.tracked == true(), Device.identified == false())) \
.subquery()
sq_ntni = session.query(Device.address) \
.filter(and_(Device.tracked == false(), Device.identified == false())) \
.subquery()
query = session.query(Device.address_origin, func.count(Device.id), func.count(sq_nt.c.address), func.count(sq_ni.c.address), func.count(sq_ntni.c.address)) \
.outerjoin(sq_nt, sq_nt.c.address == Device.address) \
.outerjoin(sq_ni, sq_ni.c.address == Device.address) \
.outerjoin(sq_ntni, sq_ntni.c.address == Device.address) \
.group_by(Device.address_origin)
print('--- Devices ---')
for [address_origin, device_count, nt_count, ni_count, ntni_count] in query.all():
print('{:12s} Total:{:5d} - not tracked:{:3d}, not identified:{:3d}, not tracked & not identified: {:3d}'
.format(AddressOrigin(address_origin).name(),
device_count,
nt_count,
ni_count,
ntni_count))

Wyświetl plik

@ -0,0 +1,53 @@
from ogn.commands.dbutils import engine, session
from ogn.model import AddressOrigin, Device
from sqlalchemy import func, and_, true, false
from manager import Manager
manager = Manager()
def get_devices_stats(session):
sq_nt = session.query(Device.address) \
.filter(and_(Device.tracked == false(), Device.identified == true())) \
.subquery()
sq_ni = session.query(Device.address) \
.filter(and_(Device.tracked == true(), Device.identified == false())) \
.subquery()
sq_ntni = session.query(Device.address) \
.filter(and_(Device.tracked == false(), Device.identified == false())) \
.subquery()
query = session.query(Device.address_origin,
func.count(Device.id),
func.count(sq_nt.c.address),
func.count(sq_ni.c.address),
func.count(sq_ntni.c.address)) \
.outerjoin(sq_nt, sq_nt.c.address == Device.address) \
.outerjoin(sq_ni, sq_ni.c.address == Device.address) \
.outerjoin(sq_ntni, sq_ntni.c.address == Device.address) \
.group_by(Device.address_origin)
stats = {}
for [address_origin, device_count, nt_count, ni_count, ntni_count] in query.all():
origin = AddressOrigin(address_origin).name()
stats[origin] = {'device_count': device_count,
'nt_count': nt_count,
'ni_count': ni_count,
'ntni_count': ntni_count}
return stats
@manager.command
def stats():
"""Show some stats on registered devices."""
print('--- Devices ---')
stats = get_devices_stats(session)
for origin in stats:
print('{:12s} Total:{:5d} - not tracked:{:3d}, not identified:{:3d}, not tracked & not identified: {:3d}'
.format(origin,
stats[origin]['device_count'],
stats[origin]['nt_count'],
stats[origin]['ni_count'],
stats[origin]['ntni_count']))