pull/56/head
Konstantin Gründger 2016-07-01 07:19:31 +02:00
rodzic 5446ff6ffd
commit 89a3a659ac
3 zmienionych plików z 21 dodań i 57 usunięć

Wyświetl plik

@ -133,7 +133,7 @@ def compute_takeoff_and_landing():
@app.task
def compute_logbook():
def compute_logbook_entries():
logger.info("Compute logbook.")
or_args = [between(TakeoffLanding.timestamp, '2016-06-28 00:00:00', '2016-06-28 23:59:59')]
@ -146,21 +146,21 @@ def compute_logbook():
# make a query with current, previous and next "takeoff_landing" event, so we can find complete flights
sq = app.session.query(
TakeoffLanding.device_id,
func.lag(TakeoffLanding.device_id).over(order_by=wo).label('device_id_prev'),
func.lead(TakeoffLanding.device_id).over(order_by=wo).label('device_id_next'),
TakeoffLanding.timestamp,
func.lag(TakeoffLanding.timestamp).over(order_by=wo).label('timestamp_prev'),
func.lead(TakeoffLanding.timestamp).over(order_by=wo).label('timestamp_next'),
TakeoffLanding.track,
func.lag(TakeoffLanding.track).over(order_by=wo).label('track_prev'),
func.lead(TakeoffLanding.track).over(order_by=wo).label('track_next'),
TakeoffLanding.is_takeoff,
func.lag(TakeoffLanding.is_takeoff).over(order_by=wo).label('is_takeoff_prev'),
func.lead(TakeoffLanding.is_takeoff).over(order_by=wo).label('is_takeoff_next'),
TakeoffLanding.airport_id,
func.lag(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_prev'),
func.lead(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_next')) \
TakeoffLanding.device_id,
func.lag(TakeoffLanding.device_id).over(order_by=wo).label('device_id_prev'),
func.lead(TakeoffLanding.device_id).over(order_by=wo).label('device_id_next'),
TakeoffLanding.timestamp,
func.lag(TakeoffLanding.timestamp).over(order_by=wo).label('timestamp_prev'),
func.lead(TakeoffLanding.timestamp).over(order_by=wo).label('timestamp_next'),
TakeoffLanding.track,
func.lag(TakeoffLanding.track).over(order_by=wo).label('track_prev'),
func.lead(TakeoffLanding.track).over(order_by=wo).label('track_next'),
TakeoffLanding.is_takeoff,
func.lag(TakeoffLanding.is_takeoff).over(order_by=wo).label('is_takeoff_prev'),
func.lead(TakeoffLanding.is_takeoff).over(order_by=wo).label('is_takeoff_next'),
TakeoffLanding.airport_id,
func.lag(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_prev'),
func.lead(TakeoffLanding.airport_id).over(order_by=wo).label('airport_id_next')) \
.filter(*or_args) \
.subquery()
@ -218,6 +218,7 @@ def compute_logbook():
.filter(or_(sq.c.device_id != sq.c.device_id_next,
sq.c.is_takeoff_next == true()))
# update 'incomplete' logbook entries with 'complete flights'
complete_flights = complete_flight_query.subquery()
upd = update(Logbook) \
@ -242,7 +243,7 @@ def compute_logbook():
app.session.commit()
logger.debug("Updated logbook entries: {}".format(counter))
# unite all
# unite all computated flights ('incomplete' and 'complete')
union_query = complete_flight_query.union(
split_start_query,
split_landing_query,
@ -280,31 +281,3 @@ def compute_logbook():
logger.debug("New logbook entries: {}".format(counter))
return counter
@app.task
def compute_altitudes():
logger.info("Compute maximum altitudes.")
logbook_query = app.session.query(Logbook.id, Logbook.device_id, Logbook.takeoff_timestamp, Logbook.landing_timestamp) \
.filter(and_(Logbook.takeoff_airport_id != null(),
Logbook.landing_airport_id != null())) \
.limit(100) \
.subquery()
max_altitude_query = app.session.query(logbook_query.c.id, func.max(AircraftBeacon.altitude).label('max_altitude')) \
.filter(and_(between(AircraftBeacon.timestamp, logbook_query.c.takeoff_timestamp, logbook_query.c.landing_timestamp),
AircraftBeacon.device_id == logbook_query.c.device_id)) \
.group_by(logbook_query.c.id) \
.subquery()
upd = update(Logbook) \
.values({'max_altitude': max_altitude_query.c.max_altitude}) \
.where(Logbook.id == max_altitude_query.c.id)
result = app.session.execute(upd)
counter = result.rowcount
app.session.commit()
logger.debug("Updated logbook entries: {}".format(counter))
return counter

Wyświetl plik

@ -9,7 +9,7 @@ from sqlalchemy.orm import aliased
from ogn.model import Device, DeviceInfo, TakeoffLanding, Airport, Logbook
from ogn.commands.dbutils import session
from ogn.collect.logbook import compute_takeoff_and_landing, compute_logbook, compute_altitudes
from ogn.collect.logbook import compute_takeoff_and_landing, compute_logbook_entries
from manager import Manager
manager = Manager()
@ -28,20 +28,11 @@ def compute_takeoff_landing():
def compute_logbook():
"""Compute logbook."""
print("Compute logbook...")
result = compute_logbook.delay()
result = compute_logbook_entries.delay()
counter = result.get()
print("New logbook entries: {}".format(counter))
@manager.command
def compute_altitudes():
"""Compute maximum altitudes."""
print("Compute maximum altitudes...")
result = compute_altitudes.delay()
counter = result.get()
print("Updated logbook entries: {}".format(counter))
@manager.arg('date', help='date (format: yyyy-mm-dd)')
@manager.command
def show(airport_name, utc_delta_hours=0, date=None):

Wyświetl plik

@ -1,2 +1,2 @@
[flake8]
ignore = E501
ignore = E501, E126