majuna/app/portal/__init__.py

77 lines
3 KiB
Python
Raw Normal View History

2022-04-20 16:01:36 +01:00
from datetime import datetime, timedelta, timezone
2022-03-10 14:26:22 +00:00
from flask import Blueprint, render_template, request
from sqlalchemy import desc, or_
2022-03-10 14:26:22 +00:00
2022-04-22 14:01:16 +01:00
from app.models.alarms import Alarm
from app import Origin, Proxy
from app.models.base import Group
from app.portal.list import NewMirrorListForm
from app.portal.automation import bp as automation
from app.portal.bridgeconf import bp as bridgeconf
from app.portal.bridge import bp as bridge
from app.portal.group import bp as group
from app.portal.list import bp as list_
from app.portal.origin import bp as origin
2022-05-04 15:36:36 +01:00
from app.portal.onion import bp as onion
from app.portal.proxy import bp as proxy
2022-03-10 14:26:22 +00:00
portal = Blueprint("portal", __name__, template_folder="templates", static_folder="static")
portal.register_blueprint(automation, url_prefix="/automation")
portal.register_blueprint(bridgeconf, url_prefix="/bridgeconf")
portal.register_blueprint(bridge, url_prefix="/bridge")
portal.register_blueprint(group, url_prefix="/group")
portal.register_blueprint(list_, url_prefix="/list")
portal.register_blueprint(origin, url_prefix="/origin")
2022-05-04 15:36:36 +01:00
portal.register_blueprint(onion, url_prefix="/onion")
portal.register_blueprint(proxy, url_prefix="/proxy")
2022-03-10 14:26:22 +00:00
@portal.app_template_filter("mirror_expiry")
2022-04-22 14:56:59 +01:00
def calculate_mirror_expiry(s: datetime) -> str:
2022-03-10 14:26:22 +00:00
expiry = s + timedelta(days=3)
2022-04-22 14:56:59 +01:00
countdown = expiry - datetime.utcnow()
2022-03-10 14:26:22 +00:00
if countdown.days == 0:
return f"{countdown.seconds // 3600} hours"
return f"{countdown.days} days"
2022-04-20 15:56:09 +01:00
@portal.app_template_filter("format_datetime")
2022-04-22 14:56:59 +01:00
def format_datetime(s: datetime) -> str:
2022-04-20 15:56:09 +01:00
if s is None:
return "Unknown"
return s.strftime("%a, %d %b %Y %H:%M:%S")
2022-03-10 14:26:22 +00:00
@portal.route("/")
def portal_home():
2022-04-21 17:10:38 +01:00
groups = Group.query.order_by(Group.group_name).all()
now = datetime.now(timezone.utc)
2022-04-21 17:14:56 +01:00
proxies = Proxy.query.filter(Proxy.destroyed == None).all()
2022-04-21 17:10:38 +01:00
last24 = len(Proxy.query.filter(Proxy.deprecated > (now - timedelta(days=1))).all())
last72 = len(Proxy.query.filter(Proxy.deprecated > (now - timedelta(days=3))).all())
lastweek = len(Proxy.query.filter(Proxy.deprecated > (now - timedelta(days=7))).all())
2022-05-01 16:23:45 +01:00
return render_template("home.html.j2", section="home", groups=groups, last24=last24, last72=last72,
lastweek=lastweek, proxies=proxies)
2022-03-10 14:26:22 +00:00
@portal.route("/search")
def search():
query = request.args.get("query")
proxies = Proxy.query.filter(or_(Proxy.url.contains(query)), Proxy.destroyed == None).all()
origins = Origin.query.filter(or_(Origin.description.contains(query), Origin.domain_name.contains(query))).all()
return render_template("search.html.j2", section="home", proxies=proxies, origins=origins)
@portal.route('/alarms')
def view_alarms():
2022-05-11 14:26:14 +01:00
one_day_ago = datetime.now(timezone.utc) - timedelta(days=1)
alarms = Alarm.query.filter(Alarm.last_updated >= one_day_ago).order_by(
desc(Alarm.alarm_state), desc(Alarm.state_changed)).all()
return render_template("list.html.j2",
section="alarm",
title="Alarms",
items=alarms)
2022-03-10 14:26:22 +00:00