diff --git a/app/main/jinja_filters.py b/app/main/jinja_filters.py index 6cdb960..18712f5 100644 --- a/app/main/jinja_filters.py +++ b/app/main/jinja_filters.py @@ -2,21 +2,10 @@ from app.main import bp from app.model import Airport, Sender, Receiver from flask import url_for -import time import datetime import math -@bp.app_template_filter() -def timestamp_to_status(timestamp): - if datetime.datetime.utcnow() - timestamp < datetime.timedelta(minutes=10): - return 'OK' - elif datetime.datetime.utcnow() - timestamp < datetime.timedelta(hours=1): - return '?' - else: - return 'OFFLINE' - - @bp.app_template_filter() def to_html_link(obj): if isinstance(obj, Airport): diff --git a/app/model/__init__.py b/app/model/__init__.py index 89fe239..e6d6889 100644 --- a/app/model/__init__.py +++ b/app/model/__init__.py @@ -8,6 +8,7 @@ from .sender_position import SenderPosition from .receiver_position import ReceiverPosition from .receiver_status import ReceiverStatus from .receiver import Receiver +from .receiver_state import ReceiverState from .takeoff_landing import TakeoffLanding from .airport import Airport from .logbook import Logbook diff --git a/app/model/receiver.py b/app/model/receiver.py index 45a0a38..5d19bf6 100644 --- a/app/model/receiver.py +++ b/app/model/receiver.py @@ -6,6 +6,7 @@ from .geo import Location from app import db from .airport import Airport +from .receiver_state import ReceiverState class Receiver(db.Model): @@ -44,6 +45,16 @@ class Receiver(db.Model): coords = to_shape(self.location_wkt) return Location(lat=coords.y, lon=coords.x) + @property + def state(self): + import datetime + if datetime.datetime.utcnow() - self.lastseen < datetime.timedelta(minutes=10): + return ReceiverState.OK if len(self.statistics) > 0 else ReceiverState.ZOMBIE + elif datetime.datetime.utcnow() - self.lastseen < datetime.timedelta(hours=1): + return ReceiverState.UNKNOWN + else: + return ReceiverState.OFFLINE + def airports_nearby(self): query = ( db.session.query(Airport, db.func.st_distance_sphere(self.location_wkt, Airport.location_wkt), db.func.st_azimuth(self.location_wkt, Airport.location_wkt)) diff --git a/app/model/receiver_state.py b/app/model/receiver_state.py new file mode 100644 index 0000000..c896396 --- /dev/null +++ b/app/model/receiver_state.py @@ -0,0 +1,9 @@ +import enum + + +class ReceiverState(enum.Enum): + # lower number == more trustworthy + OK = 0 + ZOMBIE = 1 + UNKNOWN = 2 + OFFLINE = 3 diff --git a/app/templates/airport_detail.html b/app/templates/airport_detail.html index 71377f3..dce27ca 100644 --- a/app/templates/airport_detail.html +++ b/app/templates/airport_detail.html @@ -25,11 +25,17 @@ + + + {% for receiver in airport.receivers %} + + + {% endfor %}
NameStatusVersionPlatform
{{ receiver.name }}{{ receiver.state.name }}{{ receiver.version if receiver.version else '-' }}{{ receiver.platform if receiver.platform else '-' }}
@@ -48,7 +54,7 @@ {% for sender in senders %} {{ sender|to_html_link|safe }} - {% if sender.takeoff_landings %}{% set last_action = sender.takeoff_landings|last %}{% if last_action.is_takeoff == db.true() %}↗{% else %}↘{% endif %} @ {{ last_action.timestamp.strftime('%Y-%m-%d %H:%M:%S') }}{% endif %} + {% if sender.takeoff_landings %}{% set last_action = sender.takeoff_landings|last %}{% if last_action.is_takeoff %}↗{% else %}↘{% endif %} @ {{ last_action.timestamp.strftime('%Y-%m-%d %H:%M:%S') }}{% endif %} {% if sender.hardware_version is not none %}{{ sender.hardware_version }}{% else %}-{% endif %} {% if sender.software_version is not none %}{{ sender.software_version }}{% else %}-{% endif %} diff --git a/app/templates/index.html b/app/templates/index.html index a2aa5b2..0cce1fd 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -38,6 +38,7 @@ + Aircraft Airport Time UTC @@ -46,6 +47,8 @@ # Date + Registration + Type Takeoff Landing Takeoff @@ -60,6 +63,8 @@ {{ loop.index }} {% if ns.mydate != entry.reference_timestamp.strftime('%Y-%m-%d') %}{% set ns.mydate = entry.reference_timestamp.strftime('%Y-%m-%d') %}{{ ns.mydate }}{% endif %} + {{ entry.sender|to_html_link|safe }} + {% if entry.sender.infos|length > 0 and entry.sender.infos[0].aircraft|length %}{{ entry.sender.infos[0].aircraft }}{% else %}-{% endif %} {% if entry.takeoff_airport is not none %}{{ entry.takeoff_airport.name }}{% endif %} {% if entry.landing_airport is not none %}{{ entry.landing_airport.name }}{% endif %} {% if entry.takeoff_timestamp is not none %} {{ entry.takeoff_timestamp.strftime('%H:%M') }} {% endif %} diff --git a/app/templates/logbooks.html b/app/templates/logbooks.html index be21a68..839f36d 100644 --- a/app/templates/logbooks.html +++ b/app/templates/logbooks.html @@ -41,7 +41,7 @@ - + diff --git a/app/templates/receiver_detail.html b/app/templates/receiver_detail.html index 44dfded..21df8b2 100644 --- a/app/templates/receiver_detail.html +++ b/app/templates/receiver_detail.html @@ -23,6 +23,7 @@ +
#AircraftRegistration Type Takeoff Landing
Platform:{{ receiver.platform if receiver.platform else '-' }}
First seen:{{ receiver.firstseen }}
Last seen:{{ receiver.lastseen }}
State:{{ receiver.state.name }}
diff --git a/app/templates/receivers.html b/app/templates/receivers.html index 23a8933..ba8c895 100644 --- a/app/templates/receivers.html +++ b/app/templates/receivers.html @@ -39,7 +39,7 @@ {{ receiver|to_html_link|safe }} {{ receiver.airport|to_html_link|safe }} {{ receiver.altitude|int }} m - {{ receiver.lastseen|timestamp_to_status|safe }} + {{ receiver.state.name }} {{ receiver.version if receiver.version else '-' }} {{ receiver.platform if receiver.platform else '-' }}