kopia lustrzana https://github.com/glidernet/ogn-python
116 wiersze
3.8 KiB
Python
116 wiersze
3.8 KiB
Python
from flask.cli import AppGroup
|
|
import click
|
|
|
|
from datetime import datetime
|
|
from tqdm import tqdm
|
|
|
|
from ogn_python.commands.database import get_database_days
|
|
|
|
from ogn_python.collect.stats import create_device_stats, create_receiver_stats, create_relation_stats, create_country_stats,\
|
|
update_qualities, update_receivers as update_receivers_command, update_devices as update_devices_command,\
|
|
update_device_stats_jumps
|
|
|
|
from ogn_python.collect.ognrange import create_receiver_coverage
|
|
|
|
from ogn_python import db
|
|
|
|
|
|
user_cli = AppGroup('stats')
|
|
user_cli.help = "Handling of statistical data."
|
|
|
|
|
|
@user_cli.command('create')
|
|
@click.argument('start')
|
|
@click.argument('end')
|
|
def create(start, end):
|
|
"""Create DeviceStats, ReceiverStats and RelationStats."""
|
|
|
|
days = get_database_days(start, end)
|
|
|
|
pbar = tqdm(days)
|
|
for single_date in pbar:
|
|
pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d'))
|
|
result = create_device_stats(session=db.session, date=single_date)
|
|
result = update_device_stats_jumps(session=db.session, date=single_date)
|
|
result = create_receiver_stats(session=db.session, date=single_date)
|
|
result = create_relation_stats(session=db.session, date=single_date)
|
|
result = update_qualities(session=db.session, date=single_date)
|
|
|
|
@user_cli.command('create_country')
|
|
@click.argument('start')
|
|
@click.argument('end')
|
|
def create_country(start, end):
|
|
"""Create CountryStats."""
|
|
|
|
days = get_database_days(start, end)
|
|
|
|
pbar = tqdm(days)
|
|
for single_date in pbar:
|
|
pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d'))
|
|
result = create_country_stats(session=db.session, date=single_date)
|
|
|
|
from ogn_python.model import *
|
|
@user_cli.command('update_devices_name')
|
|
def update_devices_name():
|
|
"""Update Devices name."""
|
|
|
|
device_ids = db.session.query(Device.id).all()
|
|
|
|
for device_id in tqdm(device_ids):
|
|
db.session.execute("update devices d set name = sq.name from ( select * from aircraft_beacons ab where ab.device_id = {} limit 1) sq where d.id = sq.device_id and d.name is null or d.name = 'ICA3D3CC4';".format(device_id[0]))
|
|
db.session.commit()
|
|
|
|
|
|
@user_cli.command('update_receivers')
|
|
def update_receivers():
|
|
"""Update receivers with data from stats."""
|
|
|
|
result = update_receivers_command(session=db.session)
|
|
print(result)
|
|
|
|
|
|
@user_cli.command('update_devices')
|
|
def update_devices():
|
|
"""Update devices with data from stats."""
|
|
|
|
result = update_devices_command(session=db.session)
|
|
print(result)
|
|
|
|
|
|
@user_cli.command('update_mgrs')
|
|
@click.argument('start')
|
|
@click.argument('end')
|
|
def update_mgrs(start, end):
|
|
"""Create location_mgrs_short."""
|
|
|
|
days = get_database_days(start, end)
|
|
|
|
pbar = tqdm(days)
|
|
for single_date in pbar:
|
|
datestr = datetime.strftime(single_date, '%Y-%m-%d')
|
|
pbar.set_description(datestr)
|
|
for pbar2 in tqdm(["{:02d}:{:02d}".format(hh, mm) for hh in range(0, 24) for mm in range(0, 60)]):
|
|
sql = """
|
|
UPDATE aircraft_beacons
|
|
SET location_mgrs_short = left(location_mgrs, 5) || substring(location_mgrs, 6, 2) || substring(location_mgrs, 11, 2)
|
|
WHERE timestamp BETWEEN '{0} {1}:00' and '{0} {1}:59' AND location_mgrs_short IS NULL;
|
|
""".format(datestr, pbar2)
|
|
|
|
#print(sql)
|
|
db.session.execute(sql)
|
|
db.session.commit()
|
|
|
|
|
|
@user_cli.command('create_ognrange')
|
|
@click.argument('start')
|
|
@click.argument('end')
|
|
def create_ognrange(start=None, end=None):
|
|
"""Create stats for Melissas ognrange."""
|
|
|
|
days = get_database_days(start, end)
|
|
|
|
pbar = tqdm(days)
|
|
for single_date in pbar:
|
|
pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d'))
|
|
result = create_receiver_coverage(session=db.session, date=single_date)
|