diff --git a/ogn/commands/showreceiver.py b/ogn/commands/showreceiver.py index e5f088a..9f210f4 100644 --- a/ogn/commands/showreceiver.py +++ b/ogn/commands/showreceiver.py @@ -1,26 +1,29 @@ from datetime import datetime, timedelta - from sqlalchemy.sql import func from sqlalchemy import distinct, and_ from ogn.model import ReceiverBeacon, Receiver - from ogn.commands.dbutils import session -back_24h = datetime.utcnow() - timedelta(days=1) -receiver_messages_per_24h = 24 * 60 / 5 - from manager import Manager manager = Manager() +receiver_beacons_per_day = 24 * 60 / 5 + @manager.command def list_all(): """Show a list of all receivers.""" - sq = session.query(distinct(ReceiverBeacon.name).label('name'), func.max(ReceiverBeacon.timestamp).label('lastseen'), func.count(ReceiverBeacon.name).label('messages_count')).\ - filter(ReceiverBeacon.timestamp > back_24h).\ - group_by(ReceiverBeacon.name).\ - subquery() + + timestamp_24h_ago = datetime.utcnow() - timedelta(days=1) + + sq = session.query( + distinct(ReceiverBeacon.name).label('name'), + func.max(ReceiverBeacon.timestamp).label('lastseen'), + func.count(ReceiverBeacon.name).label('messages_count')).\ + filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\ + group_by(ReceiverBeacon.name).\ + subquery() query = session.query(Receiver, sq.c.messages_count).\ filter(Receiver.name == sq.c.name).\ @@ -28,14 +31,21 @@ def list_all(): print('--- Receivers ---') for [receiver, messages_count] in query.all(): - print('%9s (%2s): %3d%% avail, %s, %s ' % (receiver.name, receiver.country_code, 100.0*float(messages_count/receiver_messages_per_24h), receiver.version, receiver.platform)) + print('%9s (%2s): %3d%% avail, %s, %s ' % (receiver.name, + receiver.country_code, + 100.0 * float(messages_count / receiver_beacons_per_day), + receiver.version, + receiver.platform)) @manager.command def software_stats(): """Show some statistics of receiver software.""" + + timestamp_24h_ago = datetime.utcnow() - timedelta(days=1) + sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\ - filter(ReceiverBeacon.timestamp > back_24h).\ + filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\ group_by(ReceiverBeacon.name).\ subquery() @@ -52,8 +62,11 @@ def software_stats(): @manager.command def hardware_stats(): """Show some statistics of receiver hardware.""" + + timestamp_24h_ago = datetime.utcnow() - timedelta(days=1) + sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\ - filter(ReceiverBeacon.timestamp > back_24h).\ + filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\ group_by(ReceiverBeacon.name).\ subquery()