2015-11-11 07:08:51 +00:00
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from sqlalchemy.sql import func
|
|
|
|
from sqlalchemy import distinct, and_
|
|
|
|
|
2015-11-16 19:09:26 +00:00
|
|
|
from ogn.model import ReceiverBeacon, Receiver
|
2015-11-15 09:31:35 +00:00
|
|
|
from ogn.commands.dbutils import session
|
2015-11-15 08:10:46 +00:00
|
|
|
|
|
|
|
from manager import Manager
|
|
|
|
manager = Manager()
|
2015-11-11 07:08:51 +00:00
|
|
|
|
2015-11-29 20:23:25 +00:00
|
|
|
receiver_beacons_per_day = 24 * 60 / 5
|
|
|
|
|
2015-11-15 10:54:01 +00:00
|
|
|
|
2015-11-15 08:10:46 +00:00
|
|
|
@manager.command
|
2015-11-15 11:10:20 +00:00
|
|
|
def list_all():
|
2015-11-15 08:10:46 +00:00
|
|
|
"""Show a list of all receivers."""
|
2015-11-29 20:23:25 +00:00
|
|
|
|
|
|
|
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
|
|
|
|
|
2015-11-29 20:37:41 +00:00
|
|
|
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()
|
2015-11-11 07:08:51 +00:00
|
|
|
|
2015-11-16 19:09:26 +00:00
|
|
|
query = session.query(Receiver, sq.c.messages_count).\
|
|
|
|
filter(Receiver.name == sq.c.name).\
|
|
|
|
order_by(Receiver.name)
|
2015-11-11 07:08:51 +00:00
|
|
|
|
|
|
|
print('--- Receivers ---')
|
|
|
|
for [receiver, messages_count] in query.all():
|
2015-11-29 20:23:25 +00:00
|
|
|
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))
|
2015-11-11 07:08:51 +00:00
|
|
|
|
|
|
|
|
2015-11-15 08:10:46 +00:00
|
|
|
@manager.command
|
|
|
|
def software_stats():
|
2015-11-15 10:54:01 +00:00
|
|
|
"""Show some statistics of receiver software."""
|
2015-11-29 20:23:25 +00:00
|
|
|
|
|
|
|
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
|
|
|
|
|
2015-11-11 17:43:39 +00:00
|
|
|
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
|
2015-11-29 20:23:25 +00:00
|
|
|
filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\
|
2015-11-11 17:43:39 +00:00
|
|
|
group_by(ReceiverBeacon.name).\
|
2015-11-11 07:08:51 +00:00
|
|
|
subquery()
|
|
|
|
|
2015-11-11 17:43:39 +00:00
|
|
|
versions = session.query(distinct(ReceiverBeacon.version), func.count(ReceiverBeacon.version)).\
|
|
|
|
filter(and_(ReceiverBeacon.name == sq.c.name, ReceiverBeacon.timestamp == sq.c.lastseen)).\
|
|
|
|
group_by(ReceiverBeacon.version).\
|
|
|
|
order_by(ReceiverBeacon.version)
|
2015-11-11 07:08:51 +00:00
|
|
|
|
2015-11-15 10:54:01 +00:00
|
|
|
print('--- Versions ---')
|
2015-11-11 07:08:51 +00:00
|
|
|
for [version, count] in versions.all():
|
|
|
|
print('%5s: %s' % (version, count))
|
|
|
|
|
|
|
|
|
2015-11-15 08:10:46 +00:00
|
|
|
@manager.command
|
|
|
|
def hardware_stats():
|
|
|
|
"""Show some statistics of receiver hardware."""
|
2015-11-29 20:23:25 +00:00
|
|
|
|
|
|
|
timestamp_24h_ago = datetime.utcnow() - timedelta(days=1)
|
|
|
|
|
2015-11-11 17:43:39 +00:00
|
|
|
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
|
2015-11-29 20:23:25 +00:00
|
|
|
filter(ReceiverBeacon.timestamp > timestamp_24h_ago).\
|
2015-11-11 17:43:39 +00:00
|
|
|
group_by(ReceiverBeacon.name).\
|
2015-11-11 07:08:51 +00:00
|
|
|
subquery()
|
|
|
|
|
2015-11-11 17:43:39 +00:00
|
|
|
platforms = session.query(distinct(ReceiverBeacon.platform), func.count(ReceiverBeacon.platform)).\
|
|
|
|
filter(and_(ReceiverBeacon.name == sq.c.name, ReceiverBeacon.timestamp == sq.c.lastseen)).\
|
|
|
|
group_by(ReceiverBeacon.platform).\
|
|
|
|
order_by(ReceiverBeacon.platform)
|
2015-11-11 07:08:51 +00:00
|
|
|
|
2015-11-15 10:54:01 +00:00
|
|
|
print('--- Platforms ---')
|
2015-11-11 07:08:51 +00:00
|
|
|
for [platform, count] in platforms.all():
|
|
|
|
print('%7s: %s' % (platform, count))
|