kopia lustrzana https://github.com/glidernet/ogn-python
Initial flask+bootstrap+googlemaps try
rodzic
c9b07c4602
commit
ec6221ae8e
|
@ -0,0 +1,111 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from flask import Flask, render_template
|
||||
from flask.ext.script import Manager
|
||||
from flask.ext.bootstrap import Bootstrap
|
||||
from flask.ext.sqlalchemy import SQLAlchemy
|
||||
from flask_nav import Nav
|
||||
from flask_nav.elements import Navbar, View
|
||||
|
||||
import json
|
||||
|
||||
from ogn.model.address_origin import AddressOrigin
|
||||
from ogn.model.flarm import Flarm
|
||||
|
||||
from ogn.db import session
|
||||
|
||||
from sqlalchemy import func, desc, and_
|
||||
from sqlalchemy.sql.expression import label
|
||||
from ogn.model.receiver_beacon import ReceiverBeacon
|
||||
from ogn.model.receiver_device import ReceiverDevice
|
||||
from ogn.model.aircraft_beacon import AircraftBeacon
|
||||
from flask.json import jsonify
|
||||
|
||||
app = Flask(__name__)
|
||||
manager = Manager(app)
|
||||
bootstrap = Bootstrap(app)
|
||||
nav = Nav()
|
||||
nav.init_app(app)
|
||||
|
||||
|
||||
mynavbar = Navbar(
|
||||
'Open Glider Network',
|
||||
View('Home', 'index'),
|
||||
View('Live', 'live'),
|
||||
View('Flarms', 'flarms'),
|
||||
View('Receivers', 'receivers'),
|
||||
View('Statistics', 'statistics'),
|
||||
)
|
||||
|
||||
|
||||
nav.register_element('top', mynavbar)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
@app.route('/live')
|
||||
def live():
|
||||
return render_template('live.html')
|
||||
|
||||
@app.route('/aircraft_beacons')
|
||||
def aircraft_beacons():
|
||||
sq_last = session.query(AircraftBeacon.address, func.max(AircraftBeacon.timestamp).label('lastseen')) \
|
||||
.filter(AircraftBeacon.timestamp > '2015-11-13 15:00:00') \
|
||||
.group_by(AircraftBeacon.address) \
|
||||
.subquery()
|
||||
|
||||
aircraft_beacons_query = session.query(AircraftBeacon.address, AircraftBeacon.latitude, AircraftBeacon.longitude, Flarm.registration, Flarm.aircraft) \
|
||||
.outerjoin(Flarm, AircraftBeacon.address == Flarm.address) \
|
||||
.filter(and_(AircraftBeacon.address == sq_last.c.address, AircraftBeacon.timestamp == sq_last.c.lastseen))
|
||||
|
||||
result = {}
|
||||
for [address, latitude, longitude, registration, aircraft] in aircraft_beacons_query.all():
|
||||
result[address] = {'lat': latitude, 'lng': longitude, 'registration': registration, 'aircraft': aircraft}
|
||||
return(json.dumps({'aircraft_beacons': result}))
|
||||
|
||||
#return(json.dumps(aircraft_beacons_query.all(), ensure_ascii=False))
|
||||
|
||||
|
||||
@app.route('/flarms')
|
||||
def flarms():
|
||||
flarm_query = session.query(Flarm.address, Flarm.aircraft, Flarm.registration, Flarm.competition).\
|
||||
filter(Flarm.address_origin == AddressOrigin.userdefined).\
|
||||
order_by(Flarm.address).all()
|
||||
return render_template('flarms.html', flarms=flarm_query)
|
||||
|
||||
|
||||
@app.route('/receivers')
|
||||
def receivers():
|
||||
back_24h = datetime.utcnow() - timedelta(days=1)
|
||||
receiver_messages_per_24h = 24*60 / 5
|
||||
|
||||
sq_r_beacons = session.query(ReceiverBeacon.name, func.count(ReceiverBeacon.name).label('messages_count')).\
|
||||
filter(ReceiverBeacon.timestamp > back_24h).\
|
||||
group_by(ReceiverBeacon.name).\
|
||||
subquery()
|
||||
|
||||
sq_a_beacons = session.query(AircraftBeacon.receiver_name, func.count(AircraftBeacon.receiver_name).label('beacons_count')).\
|
||||
filter(AircraftBeacon.timestamp > back_24h).\
|
||||
group_by(AircraftBeacon.receiver_name).\
|
||||
subquery()
|
||||
|
||||
receiver_query = session.query(ReceiverDevice.country_code, ReceiverDevice.name, ReceiverDevice.lastseen, label('availability', 100*sq_r_beacons.c.messages_count/receiver_messages_per_24h), ReceiverDevice.version, ReceiverDevice.platform, sq_a_beacons.c.beacons_count).\
|
||||
filter(ReceiverDevice.name == sq_r_beacons.c.name).\
|
||||
filter(ReceiverDevice.name == sq_a_beacons.c.receiver_name).\
|
||||
order_by(desc(sq_a_beacons.c.beacons_count)).all()
|
||||
|
||||
return render_template('receivers.html', receivers=receiver_query)
|
||||
|
||||
|
||||
@app.route('/statistics')
|
||||
def statistics():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=True)
|
||||
#with app.app_context():
|
||||
# aircraft_beacons()
|
|
@ -0,0 +1,37 @@
|
|||
/* Space out content a bit */
|
||||
|
||||
body {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
/* Everything but the jumbotron gets side spacing for mobile first views */
|
||||
|
||||
.header,
|
||||
.marketing,
|
||||
.footer {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
/* Custom page header */
|
||||
|
||||
.header {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
/* Make the masthead heading the same height as the navigation */
|
||||
|
||||
.header h3 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
line-height: 40px;
|
||||
padding-bottom: 19px;
|
||||
}
|
||||
/* Custom page footer */
|
||||
|
||||
.footer {
|
||||
padding-top: 19px;
|
||||
color: #777;
|
||||
border-top: 1px solid #e5e5e5;
|
||||
}
|
||||
|
||||
/* OGN stuff */
|
||||
.under-limit { background-color: red; }
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 42 B |
|
@ -0,0 +1,259 @@
|
|||
.flag {
|
||||
width: 16px;
|
||||
height: 11px;
|
||||
background:url(flags.png) no-repeat
|
||||
}
|
||||
|
||||
.flag.flag-ad {background-position: -16px 0}
|
||||
.flag.flag-ae {background-position: -32px 0}
|
||||
.flag.flag-af {background-position: -48px 0}
|
||||
.flag.flag-ag {background-position: -64px 0}
|
||||
.flag.flag-ai {background-position: -80px 0}
|
||||
.flag.flag-al {background-position: -96px 0}
|
||||
.flag.flag-am {background-position: -112px 0}
|
||||
.flag.flag-an {background-position: -128px 0}
|
||||
.flag.flag-ao {background-position: -144px 0}
|
||||
.flag.flag-ar {background-position: -160px 0}
|
||||
.flag.flag-as {background-position: -176px 0}
|
||||
.flag.flag-at {background-position: -192px 0}
|
||||
.flag.flag-au {background-position: -208px 0}
|
||||
.flag.flag-aw {background-position: -224px 0}
|
||||
.flag.flag-az {background-position: -240px 0}
|
||||
.flag.flag-ba {background-position: 0 -11px}
|
||||
.flag.flag-bb {background-position: -16px -11px}
|
||||
.flag.flag-bd {background-position: -32px -11px}
|
||||
.flag.flag-be {background-position: -48px -11px}
|
||||
.flag.flag-bf {background-position: -64px -11px}
|
||||
.flag.flag-bg {background-position: -80px -11px}
|
||||
.flag.flag-bh {background-position: -96px -11px}
|
||||
.flag.flag-bi {background-position: -112px -11px}
|
||||
.flag.flag-bj {background-position: -128px -11px}
|
||||
.flag.flag-bm {background-position: -144px -11px}
|
||||
.flag.flag-bn {background-position: -160px -11px}
|
||||
.flag.flag-bo {background-position: -176px -11px}
|
||||
.flag.flag-br {background-position: -192px -11px}
|
||||
.flag.flag-bs {background-position: -208px -11px}
|
||||
.flag.flag-bt {background-position: -224px -11px}
|
||||
.flag.flag-bv {background-position: -240px -11px}
|
||||
.flag.flag-bw {background-position: 0 -22px}
|
||||
.flag.flag-by {background-position: -16px -22px}
|
||||
.flag.flag-bz {background-position: -32px -22px}
|
||||
.flag.flag-ca {background-position: -48px -22px}
|
||||
.flag.flag-catalonia {background-position: -64px -22px}
|
||||
.flag.flag-cd {background-position: -80px -22px}
|
||||
.flag.flag-cf {background-position: -96px -22px}
|
||||
.flag.flag-cg {background-position: -112px -22px}
|
||||
.flag.flag-ch {background-position: -128px -22px}
|
||||
.flag.flag-ci {background-position: -144px -22px}
|
||||
.flag.flag-ck {background-position: -160px -22px}
|
||||
.flag.flag-cl {background-position: -176px -22px}
|
||||
.flag.flag-cm {background-position: -192px -22px}
|
||||
.flag.flag-cn {background-position: -208px -22px}
|
||||
.flag.flag-co {background-position: -224px -22px}
|
||||
.flag.flag-cr {background-position: -240px -22px}
|
||||
.flag.flag-cu {background-position: 0 -33px}
|
||||
.flag.flag-cv {background-position: -16px -33px}
|
||||
.flag.flag-cw {background-position: -32px -33px}
|
||||
.flag.flag-cy {background-position: -48px -33px}
|
||||
.flag.flag-cz {background-position: -64px -33px}
|
||||
.flag.flag-de {background-position: -80px -33px}
|
||||
.flag.flag-dj {background-position: -96px -33px}
|
||||
.flag.flag-dk {background-position: -112px -33px}
|
||||
.flag.flag-dm {background-position: -128px -33px}
|
||||
.flag.flag-do {background-position: -144px -33px}
|
||||
.flag.flag-dz {background-position: -160px -33px}
|
||||
.flag.flag-ec {background-position: -176px -33px}
|
||||
.flag.flag-ee {background-position: -192px -33px}
|
||||
.flag.flag-eg {background-position: -208px -33px}
|
||||
.flag.flag-eh {background-position: -224px -33px}
|
||||
.flag.flag-england {background-position: -240px -33px}
|
||||
.flag.flag-er {background-position: 0 -44px}
|
||||
.flag.flag-es {background-position: -16px -44px}
|
||||
.flag.flag-et {background-position: -32px -44px}
|
||||
.flag.flag-eu {background-position: -48px -44px}
|
||||
.flag.flag-fi {background-position: -64px -44px}
|
||||
.flag.flag-fj {background-position: -80px -44px}
|
||||
.flag.flag-fk {background-position: -96px -44px}
|
||||
.flag.flag-fm {background-position: -112px -44px}
|
||||
.flag.flag-fo {background-position: -128px -44px}
|
||||
.flag.flag-fr {background-position: -144px -44px}
|
||||
.flag.flag-ga {background-position: -160px -44px}
|
||||
.flag.flag-gb {background-position: -176px -44px}
|
||||
.flag.flag-gd {background-position: -192px -44px}
|
||||
.flag.flag-ge {background-position: -208px -44px}
|
||||
.flag.flag-gf {background-position: -224px -44px}
|
||||
.flag.flag-gg {background-position: -240px -44px}
|
||||
.flag.flag-gh {background-position: 0 -55px}
|
||||
.flag.flag-gi {background-position: -16px -55px}
|
||||
.flag.flag-gl {background-position: -32px -55px}
|
||||
.flag.flag-gm {background-position: -48px -55px}
|
||||
.flag.flag-gn {background-position: -64px -55px}
|
||||
.flag.flag-gp {background-position: -80px -55px}
|
||||
.flag.flag-gq {background-position: -96px -55px}
|
||||
.flag.flag-gr {background-position: -112px -55px}
|
||||
.flag.flag-gs {background-position: -128px -55px}
|
||||
.flag.flag-gt {background-position: -144px -55px}
|
||||
.flag.flag-gu {background-position: -160px -55px}
|
||||
.flag.flag-gw {background-position: -176px -55px}
|
||||
.flag.flag-gy {background-position: -192px -55px}
|
||||
.flag.flag-hk {background-position: -208px -55px}
|
||||
.flag.flag-hm {background-position: -224px -55px}
|
||||
.flag.flag-hn {background-position: -240px -55px}
|
||||
.flag.flag-hr {background-position: 0 -66px}
|
||||
.flag.flag-ht {background-position: -16px -66px}
|
||||
.flag.flag-hu {background-position: -32px -66px}
|
||||
.flag.flag-ic {background-position: -48px -66px}
|
||||
.flag.flag-id {background-position: -64px -66px}
|
||||
.flag.flag-ie {background-position: -80px -66px}
|
||||
.flag.flag-il {background-position: -96px -66px}
|
||||
.flag.flag-im {background-position: -112px -66px}
|
||||
.flag.flag-in {background-position: -128px -66px}
|
||||
.flag.flag-io {background-position: -144px -66px}
|
||||
.flag.flag-iq {background-position: -160px -66px}
|
||||
.flag.flag-ir {background-position: -176px -66px}
|
||||
.flag.flag-is {background-position: -192px -66px}
|
||||
.flag.flag-it {background-position: -208px -66px}
|
||||
.flag.flag-je {background-position: -224px -66px}
|
||||
.flag.flag-jm {background-position: -240px -66px}
|
||||
.flag.flag-jo {background-position: 0 -77px}
|
||||
.flag.flag-jp {background-position: -16px -77px}
|
||||
.flag.flag-ke {background-position: -32px -77px}
|
||||
.flag.flag-kg {background-position: -48px -77px}
|
||||
.flag.flag-kh {background-position: -64px -77px}
|
||||
.flag.flag-ki {background-position: -80px -77px}
|
||||
.flag.flag-km {background-position: -96px -77px}
|
||||
.flag.flag-kn {background-position: -112px -77px}
|
||||
.flag.flag-kp {background-position: -128px -77px}
|
||||
.flag.flag-kr {background-position: -144px -77px}
|
||||
.flag.flag-kurdistan {background-position: -160px -77px}
|
||||
.flag.flag-kw {background-position: -176px -77px}
|
||||
.flag.flag-ky {background-position: -192px -77px}
|
||||
.flag.flag-kz {background-position: -208px -77px}
|
||||
.flag.flag-la {background-position: -224px -77px}
|
||||
.flag.flag-lb {background-position: -240px -77px}
|
||||
.flag.flag-lc {background-position: 0 -88px}
|
||||
.flag.flag-li {background-position: -16px -88px}
|
||||
.flag.flag-lk {background-position: -32px -88px}
|
||||
.flag.flag-lr {background-position: -48px -88px}
|
||||
.flag.flag-ls {background-position: -64px -88px}
|
||||
.flag.flag-lt {background-position: -80px -88px}
|
||||
.flag.flag-lu {background-position: -96px -88px}
|
||||
.flag.flag-lv {background-position: -112px -88px}
|
||||
.flag.flag-ly {background-position: -128px -88px}
|
||||
.flag.flag-ma {background-position: -144px -88px}
|
||||
.flag.flag-mc {background-position: -160px -88px}
|
||||
.flag.flag-md {background-position: -176px -88px}
|
||||
.flag.flag-me {background-position: -192px -88px}
|
||||
.flag.flag-mg {background-position: -208px -88px}
|
||||
.flag.flag-mh {background-position: -224px -88px}
|
||||
.flag.flag-mk {background-position: -240px -88px}
|
||||
.flag.flag-ml {background-position: 0 -99px}
|
||||
.flag.flag-mm {background-position: -16px -99px}
|
||||
.flag.flag-mn {background-position: -32px -99px}
|
||||
.flag.flag-mo {background-position: -48px -99px}
|
||||
.flag.flag-mp {background-position: -64px -99px}
|
||||
.flag.flag-mq {background-position: -80px -99px}
|
||||
.flag.flag-mr {background-position: -96px -99px}
|
||||
.flag.flag-ms {background-position: -112px -99px}
|
||||
.flag.flag-mt {background-position: -128px -99px}
|
||||
.flag.flag-mu {background-position: -144px -99px}
|
||||
.flag.flag-mv {background-position: -160px -99px}
|
||||
.flag.flag-mw {background-position: -176px -99px}
|
||||
.flag.flag-mx {background-position: -192px -99px}
|
||||
.flag.flag-my {background-position: -208px -99px}
|
||||
.flag.flag-mz {background-position: -224px -99px}
|
||||
.flag.flag-na {background-position: -240px -99px}
|
||||
.flag.flag-nc {background-position: 0 -110px}
|
||||
.flag.flag-ne {background-position: -16px -110px}
|
||||
.flag.flag-nf {background-position: -32px -110px}
|
||||
.flag.flag-ng {background-position: -48px -110px}
|
||||
.flag.flag-ni {background-position: -64px -110px}
|
||||
.flag.flag-nl {background-position: -80px -110px}
|
||||
.flag.flag-no {background-position: -96px -110px}
|
||||
.flag.flag-np {background-position: -112px -110px}
|
||||
.flag.flag-nr {background-position: -128px -110px}
|
||||
.flag.flag-nu {background-position: -144px -110px}
|
||||
.flag.flag-nz {background-position: -160px -110px}
|
||||
.flag.flag-om {background-position: -176px -110px}
|
||||
.flag.flag-pa {background-position: -192px -110px}
|
||||
.flag.flag-pe {background-position: -208px -110px}
|
||||
.flag.flag-pf {background-position: -224px -110px}
|
||||
.flag.flag-pg {background-position: -240px -110px}
|
||||
.flag.flag-ph {background-position: 0 -121px}
|
||||
.flag.flag-pk {background-position: -16px -121px}
|
||||
.flag.flag-pl {background-position: -32px -121px}
|
||||
.flag.flag-pm {background-position: -48px -121px}
|
||||
.flag.flag-pn {background-position: -64px -121px}
|
||||
.flag.flag-pr {background-position: -80px -121px}
|
||||
.flag.flag-ps {background-position: -96px -121px}
|
||||
.flag.flag-pt {background-position: -112px -121px}
|
||||
.flag.flag-pw {background-position: -128px -121px}
|
||||
.flag.flag-py {background-position: -144px -121px}
|
||||
.flag.flag-qa {background-position: -160px -121px}
|
||||
.flag.flag-re {background-position: -176px -121px}
|
||||
.flag.flag-ro {background-position: -192px -121px}
|
||||
.flag.flag-rs {background-position: -208px -121px}
|
||||
.flag.flag-ru {background-position: -224px -121px}
|
||||
.flag.flag-rw {background-position: -240px -121px}
|
||||
.flag.flag-sa {background-position: 0 -132px}
|
||||
.flag.flag-sb {background-position: -16px -132px}
|
||||
.flag.flag-sc {background-position: -32px -132px}
|
||||
.flag.flag-scotland {background-position: -48px -132px}
|
||||
.flag.flag-sd {background-position: -64px -132px}
|
||||
.flag.flag-se {background-position: -80px -132px}
|
||||
.flag.flag-sg {background-position: -96px -132px}
|
||||
.flag.flag-sh {background-position: -112px -132px}
|
||||
.flag.flag-si {background-position: -128px -132px}
|
||||
.flag.flag-sk {background-position: -144px -132px}
|
||||
.flag.flag-sl {background-position: -160px -132px}
|
||||
.flag.flag-sm {background-position: -176px -132px}
|
||||
.flag.flag-sn {background-position: -192px -132px}
|
||||
.flag.flag-so {background-position: -208px -132px}
|
||||
.flag.flag-somaliland {background-position: -224px -132px}
|
||||
.flag.flag-sr {background-position: -240px -132px}
|
||||
.flag.flag-ss {background-position: 0 -143px}
|
||||
.flag.flag-st {background-position: -16px -143px}
|
||||
.flag.flag-sv {background-position: -32px -143px}
|
||||
.flag.flag-sx {background-position: -48px -143px}
|
||||
.flag.flag-sy {background-position: -64px -143px}
|
||||
.flag.flag-sz {background-position: -80px -143px}
|
||||
.flag.flag-tc {background-position: -96px -143px}
|
||||
.flag.flag-td {background-position: -112px -143px}
|
||||
.flag.flag-tf {background-position: -128px -143px}
|
||||
.flag.flag-tg {background-position: -144px -143px}
|
||||
.flag.flag-th {background-position: -160px -143px}
|
||||
.flag.flag-tibet {background-position: -176px -143px}
|
||||
.flag.flag-tj {background-position: -192px -143px}
|
||||
.flag.flag-tk {background-position: -208px -143px}
|
||||
.flag.flag-tl {background-position: -224px -143px}
|
||||
.flag.flag-tm {background-position: -240px -143px}
|
||||
.flag.flag-tn {background-position: 0 -154px}
|
||||
.flag.flag-to {background-position: -16px -154px}
|
||||
.flag.flag-tr {background-position: -32px -154px}
|
||||
.flag.flag-tt {background-position: -48px -154px}
|
||||
.flag.flag-tv {background-position: -64px -154px}
|
||||
.flag.flag-tw {background-position: -80px -154px}
|
||||
.flag.flag-tz {background-position: -96px -154px}
|
||||
.flag.flag-ua {background-position: -112px -154px}
|
||||
.flag.flag-ug {background-position: -128px -154px}
|
||||
.flag.flag-um {background-position: -144px -154px}
|
||||
.flag.flag-us {background-position: -160px -154px}
|
||||
.flag.flag-uy {background-position: -176px -154px}
|
||||
.flag.flag-uz {background-position: -192px -154px}
|
||||
.flag.flag-va {background-position: -208px -154px}
|
||||
.flag.flag-vc {background-position: -224px -154px}
|
||||
.flag.flag-ve {background-position: -240px -154px}
|
||||
.flag.flag-vg {background-position: 0 -165px}
|
||||
.flag.flag-vi {background-position: -16px -165px}
|
||||
.flag.flag-vn {background-position: -32px -165px}
|
||||
.flag.flag-vu {background-position: -48px -165px}
|
||||
.flag.flag-wales {background-position: -64px -165px}
|
||||
.flag.flag-wf {background-position: -80px -165px}
|
||||
.flag.flag-ws {background-position: -96px -165px}
|
||||
.flag.flag-xk {background-position: -112px -165px}
|
||||
.flag.flag-ye {background-position: -128px -165px}
|
||||
.flag.flag-yt {background-position: -144px -165px}
|
||||
.flag.flag-za {background-position: -160px -165px}
|
||||
.flag.flag-zanzibar {background-position: -176px -165px}
|
||||
.flag.flag-zm {background-position: -192px -165px}
|
||||
.flag.flag-zw {background-position: -208px -165px}
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 78 KiB |
|
@ -0,0 +1,14 @@
|
|||
{% extends "bootstrap/base.html" %}
|
||||
|
||||
{% block title %} Open Glider Network{% endblock %}
|
||||
|
||||
{% block navbar %}
|
||||
{{nav.top.render()}}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{{super()}}
|
||||
<div class="footer">
|
||||
Copyright 2015 Konstantin Gründger
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -0,0 +1,24 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Address</th>
|
||||
<th>Aircraft</th>
|
||||
<th>Registration</th>
|
||||
<th>Comp</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for flarm in flarms %}
|
||||
<tr>
|
||||
<td> {{ flarm.address }} </td>
|
||||
<td> {{ flarm.aircraft }} </td>
|
||||
<td> {{ flarm.registration }} </td>
|
||||
<td> {{ flarm.competition }} </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -0,0 +1,5 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
Blablabla
|
||||
{% endblock %}
|
|
@ -0,0 +1,55 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block styles %}
|
||||
{{super()}}
|
||||
<style>
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#map {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="map"></div>
|
||||
<script>
|
||||
|
||||
var map;
|
||||
function initMap() {
|
||||
google.maps.event.addDomListener(window, 'load', function() {
|
||||
var map;
|
||||
var mapOptions = {
|
||||
zoom: 8,
|
||||
center: new google.maps.LatLng(48, 11),
|
||||
mapTypeId: google.maps.MapTypeId.TERRAIN
|
||||
}
|
||||
|
||||
map = new google.maps.Map(document.getElementById('map'), mapOptions);
|
||||
|
||||
$.getJSON('/aircraft_beacons', function(data){
|
||||
$.each(data.aircraft_beacons, function(i, item) {
|
||||
var latlng = new google.maps.LatLng(item.lat,item.lng);
|
||||
var marker = new google.maps.Marker({
|
||||
position: latlng,
|
||||
map: map
|
||||
});
|
||||
if (item.registration === null) {
|
||||
//marker.setIcon('http://maps.google.com/mapfiles/marker_yellow.png');
|
||||
marker.setTitle(i);
|
||||
} else {
|
||||
marker.setIcon('http://maps.google.com/mapfiles/arrow.png');
|
||||
marker.setTitle(item.registration);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCSrHEX6a5Lii_w3Uao-bToYvnfAtX5ivE&signed_in=true&callback=initMap"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||
{% endblock %}
|
|
@ -0,0 +1,39 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block styles %}
|
||||
{{super()}}
|
||||
<!-- Flags for receiver country code -->
|
||||
<link rel="stylesheet" href="{{url_for('static', filename ='css/Base.css', _external = True)}}" />
|
||||
<link rel="stylesheet" href="{{url_for('static', filename ='flags/flags.css', _external = True)}}" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Version</th>
|
||||
<th>Lastseen</th>
|
||||
<th>Availability</th>
|
||||
<th>Beacons count</th>
|
||||
<th>Country</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for receiver in receivers %}
|
||||
<tr>
|
||||
<td> {{ receiver.name }} </td>
|
||||
<td> {{ receiver.version }} </td>
|
||||
<td> {{ receiver.lastseen }} </td>
|
||||
{% if receiver.availability < 80 %}
|
||||
<td class="under-limit"> {{ receiver.availability }} </td>
|
||||
{% else %}
|
||||
<td> {{ receiver.availability }} </td>
|
||||
{% endif %}
|
||||
<td> {{ receiver.beacons_count }} </td>
|
||||
<td> <img src="static/flags/blank.gif" class="flag flag-{{ receiver.country_code }}" alt="{{ receiver.country_code }}" /> </td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock %}
|
Ładowanie…
Reference in New Issue