From 93ac44e574fc5f01fc93a7af6718f86633143d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Tue, 1 Dec 2015 23:04:13 +0100 Subject: [PATCH] Devices stats --- ogn/commands/database.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/ogn/commands/database.py b/ogn/commands/database.py index 2935b9c..8d3f212 100644 --- a/ogn/commands/database.py +++ b/ogn/commands/database.py @@ -1,6 +1,8 @@ -from ogn.model import Base +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 +from ogn.commands.dbutils import engine, session from manager import Manager manager = Manager() @@ -29,3 +31,34 @@ def update_ddb_file(): result = update_ddb_from_file.delay() counter = result.get() print("Imported %i devices." % counter) + + +@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))