kopia lustrzana https://github.com/glidernet/ogn-python
Fixed stats about Device and DeviceInfo
rodzic
b80b5d9720
commit
475364fd0c
|
@ -2,6 +2,7 @@ from .database import manager as database_manager
|
||||||
from .showairport import manager as show_airport_manager
|
from .showairport import manager as show_airport_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 .showdevices import manager as show_devices_manager
|
||||||
|
from .showdeviceinfos import manager as show_deviceinfos_manager
|
||||||
from .logbook import manager as logbook_manager
|
from .logbook import manager as logbook_manager
|
||||||
|
|
||||||
from manager import Manager
|
from manager import Manager
|
||||||
|
@ -12,4 +13,5 @@ manager.merge(database_manager, namespace='db')
|
||||||
manager.merge(show_airport_manager, namespace='show.airport')
|
manager.merge(show_airport_manager, namespace='show.airport')
|
||||||
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(show_devices_manager, namespace='show.devices')
|
||||||
|
manager.merge(show_deviceinfos_manager, namespace='show.deviceinfos')
|
||||||
manager.merge(logbook_manager, namespace='logbook')
|
manager.merge(logbook_manager, namespace='logbook')
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
from ogn.commands.dbutils import session
|
||||||
|
from ogn.model import AddressOrigin
|
||||||
|
from sqlalchemy import func, and_, true, false
|
||||||
|
|
||||||
|
from manager import Manager
|
||||||
|
from ogn.model.device_info import DeviceInfo
|
||||||
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
def get_devices_stats(session):
|
||||||
|
sq_default = session.query(DeviceInfo.address) \
|
||||||
|
.filter(and_(DeviceInfo.tracked == true(), DeviceInfo.identified == true())) \
|
||||||
|
.subquery()
|
||||||
|
|
||||||
|
sq_nt = session.query(DeviceInfo.address) \
|
||||||
|
.filter(and_(DeviceInfo.tracked == false(), DeviceInfo.identified == true())) \
|
||||||
|
.subquery()
|
||||||
|
|
||||||
|
sq_ni = session.query(DeviceInfo.address) \
|
||||||
|
.filter(and_(DeviceInfo.tracked == true(), DeviceInfo.identified == false())) \
|
||||||
|
.subquery()
|
||||||
|
|
||||||
|
sq_ntni = session.query(DeviceInfo.address) \
|
||||||
|
.filter(and_(DeviceInfo.tracked == false(), DeviceInfo.identified == false())) \
|
||||||
|
.subquery()
|
||||||
|
|
||||||
|
query = session.query(DeviceInfo.address_origin,
|
||||||
|
func.count(DeviceInfo.id),
|
||||||
|
func.count(sq_default.c.address),
|
||||||
|
func.count(sq_nt.c.address),
|
||||||
|
func.count(sq_ni.c.address),
|
||||||
|
func.count(sq_ntni.c.address)) \
|
||||||
|
.outerjoin(sq_default, sq_default.c.address == DeviceInfo.address) \
|
||||||
|
.outerjoin(sq_nt, sq_nt.c.address == DeviceInfo.address) \
|
||||||
|
.outerjoin(sq_ni, sq_ni.c.address == DeviceInfo.address) \
|
||||||
|
.outerjoin(sq_ntni, sq_ntni.c.address == DeviceInfo.address) \
|
||||||
|
.group_by(DeviceInfo.address_origin)
|
||||||
|
|
||||||
|
stats = {}
|
||||||
|
for [address_origin, device_count, default_count, nt_count, ni_count, ntni_count] in query.all():
|
||||||
|
origin = AddressOrigin(address_origin).name()
|
||||||
|
stats[origin] = {'device_count': device_count,
|
||||||
|
'default_count': default_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} - default:{:3d}, just not tracked:{:3d}, just not identified:{:3d}, not tracked & not identified: {:3d}'
|
||||||
|
.format(origin,
|
||||||
|
stats[origin]['device_count'],
|
||||||
|
stats[origin]['default_count'],
|
||||||
|
stats[origin]['nt_count'],
|
||||||
|
stats[origin]['ni_count'],
|
||||||
|
stats[origin]['ntni_count']))
|
|
@ -1,53 +1,55 @@
|
||||||
from ogn.commands.dbutils import session
|
from ogn.commands.dbutils import session
|
||||||
from ogn.model import AddressOrigin, Device
|
from ogn.model import Device, AircraftType
|
||||||
from sqlalchemy import func, and_, true, false
|
from sqlalchemy import func, and_, true, false
|
||||||
|
|
||||||
from manager import Manager
|
from manager import Manager
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
def get_devices_stats(session):
|
@manager.command
|
||||||
sq_nt = session.query(Device.address) \
|
def aircraft_type_stats():
|
||||||
.filter(and_(Device.tracked == false(), Device.identified == true())) \
|
"""Show stats about aircraft types used by devices."""
|
||||||
.subquery()
|
aircraft_type_query = session.query(Device.aircraft_type,
|
||||||
|
func.count(Device.id)) \
|
||||||
sq_ni = session.query(Device.address) \
|
.group_by(Device.aircraft_type) \
|
||||||
.filter(and_(Device.tracked == true(), Device.identified == false())) \
|
.order_by(func.count(Device.id).desc())
|
||||||
.subquery()
|
print("--- Aircraft types ---")
|
||||||
|
for [aircraft_type, count] in aircraft_type_query.all():
|
||||||
sq_ntni = session.query(Device.address) \
|
at = AircraftType(aircraft_type)
|
||||||
.filter(and_(Device.tracked == false(), Device.identified == false())) \
|
print("{}: {}".format(at.name(), count))
|
||||||
.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
|
@manager.command
|
||||||
def stats():
|
def stealth_stats():
|
||||||
"""Show some stats on registered devices."""
|
"""Show stats about stealth flag set by devices."""
|
||||||
print('--- Devices ---')
|
stealth_query = session.query(Device.stealth,
|
||||||
stats = get_devices_stats(session)
|
func.count(Device.id)) \
|
||||||
for origin in stats:
|
.group_by(Device.stealth) \
|
||||||
print('{:12s} Total:{:5d} - not tracked:{:3d}, not identified:{:3d}, not tracked & not identified: {:3d}'
|
.order_by(func.count(Device.id).desc())
|
||||||
.format(origin,
|
print("--- Stealth ---")
|
||||||
stats[origin]['device_count'],
|
for [is_stealth, count] in stealth_query.all():
|
||||||
stats[origin]['nt_count'],
|
print("{}: {}".format(is_stealth, count))
|
||||||
stats[origin]['ni_count'],
|
|
||||||
stats[origin]['ntni_count']))
|
|
||||||
|
@manager.command
|
||||||
|
def software_stats():
|
||||||
|
"""Show stats about software version used by devices."""
|
||||||
|
software_query = session.query(Device.software_version,
|
||||||
|
func.count(Device.id)) \
|
||||||
|
.group_by(Device.software_version) \
|
||||||
|
.order_by(func.count(Device.id).desc())
|
||||||
|
print("--- Software version ---")
|
||||||
|
for [software_version, count] in software_query.all():
|
||||||
|
print("{}: {}".format(software_version, count))
|
||||||
|
|
||||||
|
|
||||||
|
@manager.command
|
||||||
|
def hardware_stats():
|
||||||
|
"""Show stats about hardware version used by devices."""
|
||||||
|
hardware_query = session.query(Device.hardware_version,
|
||||||
|
func.count(Device.id)) \
|
||||||
|
.group_by(Device.hardware_version) \
|
||||||
|
.order_by(func.count(Device.id).desc())
|
||||||
|
print("\n--- Hardware version ---")
|
||||||
|
for [hardware_version, count] in hardware_query.all():
|
||||||
|
print("{}: {}".format(hardware_version, count))
|
||||||
|
|
Ładowanie…
Reference in New Issue