2020-04-05 13:13:46 +00:00
|
|
|
import time
|
|
|
|
import requests
|
|
|
|
from sqlalchemy import func
|
2020-03-27 19:47:41 +00:00
|
|
|
from flask import Blueprint, render_template, flash, request
|
2020-03-26 09:09:44 +00:00
|
|
|
from formity.extensions import db
|
2020-04-05 13:13:46 +00:00
|
|
|
from formity.models import FaceshieldRequest, Status
|
2020-03-26 09:09:44 +00:00
|
|
|
from formity.forms import FaceshieldRequestForm
|
2020-03-26 08:15:59 +00:00
|
|
|
|
|
|
|
bp = Blueprint('main', __name__)
|
2020-03-26 09:09:44 +00:00
|
|
|
|
|
|
|
@bp.route('/', methods=['GET', 'POST'])
|
|
|
|
def index():
|
|
|
|
form = FaceshieldRequestForm()
|
|
|
|
if form.validate_on_submit():
|
2020-03-27 11:41:08 +00:00
|
|
|
fr = FaceshieldRequest(**{
|
2020-03-26 09:09:44 +00:00
|
|
|
k: v
|
|
|
|
for k, v in form.data.items()
|
|
|
|
if hasattr(FaceshieldRequest, k)
|
2020-03-27 11:41:08 +00:00
|
|
|
})
|
|
|
|
fr.ua = request.headers.get('User-Agent')
|
|
|
|
fr.ip = request.remote_addr
|
|
|
|
db.session.add(fr)
|
2020-03-26 09:09:44 +00:00
|
|
|
db.session.commit()
|
2020-03-27 19:44:14 +00:00
|
|
|
|
|
|
|
request_id = 'Z/{:02d}{:02d}/{}'.format(fr.created.month, fr.created.day, fr.id)
|
|
|
|
return render_template('thanks.html', form=form, request_id=request_id)
|
2020-03-26 09:09:44 +00:00
|
|
|
|
|
|
|
return render_template('index.html', form=form)
|
2020-04-05 13:13:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
cache = {}
|
|
|
|
|
|
|
|
def cached_metric_fetch(url, ttl=60):
|
|
|
|
global cache
|
|
|
|
try:
|
|
|
|
if url in cache and time.time() < cache[url][0]:
|
|
|
|
print('cached', url)
|
|
|
|
return cache[url][1]
|
|
|
|
print('fetching', url)
|
|
|
|
resp = requests.get(url)
|
|
|
|
resp.raise_for_status()
|
|
|
|
value = resp.json()['data']['result'][0]['value'][1]
|
|
|
|
cache[url] = (time.time() + ttl, value)
|
|
|
|
return value
|
|
|
|
except Exception as exc:
|
|
|
|
print(exc)
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
@bp.route('/stats')
|
|
|
|
def stats():
|
2020-04-11 12:40:43 +00:00
|
|
|
delivered_data = dict(FaceshieldRequest.query.with_entities(
|
|
|
|
FaceshieldRequest.status,
|
2020-04-05 13:13:46 +00:00
|
|
|
func.sum(FaceshieldRequest.faceshield_full_delivered),
|
2020-04-11 12:40:43 +00:00
|
|
|
).group_by(FaceshieldRequest.status).filter(FaceshieldRequest.handling_orga == 'hswaw'))
|
|
|
|
|
|
|
|
delivered = {
|
|
|
|
group.name: delivered_data.get(group, 0)
|
|
|
|
for group in [Status.fulfilled, Status.shippingpending, Status.pickuppending, Status.intransit]
|
|
|
|
}
|
2020-04-05 13:13:46 +00:00
|
|
|
|
|
|
|
return render_template(
|
|
|
|
'stats.html',
|
|
|
|
sztanca_last_24h=cached_metric_fetch('http://customs.hackerspace.pl/stats/sztancarka-last-24h'),
|
|
|
|
sztanca_ppm=cached_metric_fetch('http://customs.hackerspace.pl/stats/sztancarka-ppm'),
|
2020-04-11 12:40:43 +00:00
|
|
|
delivered=delivered,
|
2020-04-05 13:13:46 +00:00
|
|
|
)
|