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 @@
Name |
+ Status |
+ Version |
+ Platform |
{% for receiver in airport.receivers %}
{{ receiver.name }} |
+ {{ receiver.state.name }} |
+ {{ receiver.version if receiver.version else '-' }} |
+ {{ receiver.platform if receiver.platform else '-' }} |
{% endfor %}
@@ -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 @@
# |
- Aircraft |
+ Registration |
Type |
Takeoff |
Landing |
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 @@
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 '-' }} |