ogn-python/ogn/commands/showreceiver.py

68 wiersze
2.5 KiB
Python
Czysty Zwykły widok Historia

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-11 07:08:51 +00:00
from ogn.commands.dbutils import session
2015-11-11 07:08:51 +00:00
back_24h = datetime.utcnow() - timedelta(days=1)
2015-11-15 18:31:58 +00:00
receiver_messages_per_24h = 24 * 60 / 5
2015-11-11 07:08:51 +00:00
from manager import Manager
manager = Manager()
2015-11-11 07:08:51 +00:00
2015-11-15 10:54:01 +00:00
@manager.command
2015-11-15 11:10:20 +00:00
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).\
2015-11-11 07:08:51 +00:00
subquery()
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():
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))
2015-11-11 07:08:51 +00:00
@manager.command
def software_stats():
2015-11-15 10:54:01 +00:00
"""Show some statistics of receiver software."""
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
filter(ReceiverBeacon.timestamp > back_24h).\
group_by(ReceiverBeacon.name).\
2015-11-11 07:08:51 +00:00
subquery()
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))
@manager.command
def hardware_stats():
"""Show some statistics of receiver hardware."""
sq = session.query(ReceiverBeacon.name, func.max(ReceiverBeacon.timestamp).label('lastseen')).\
filter(ReceiverBeacon.timestamp > back_24h).\
group_by(ReceiverBeacon.name).\
2015-11-11 07:08:51 +00:00
subquery()
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))