alarms: refactor the alarms subsystem
also include eotk alarms now
This commit is contained in:
parent
a935055083
commit
e2ce24bf3b
17 changed files with 288 additions and 152 deletions
|
@ -1,8 +1,9 @@
|
|||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
from typing import Optional, Union
|
||||
|
||||
from flask import Blueprint, render_template, request
|
||||
from flask.typing import ResponseReturnValue
|
||||
from jinja2 import Markup
|
||||
from sqlalchemy import desc, or_
|
||||
|
||||
from app.models.activity import Activity
|
||||
|
@ -10,6 +11,7 @@ from app.models.alarms import Alarm, AlarmState
|
|||
from app.models.bridges import Bridge
|
||||
from app.models.mirrors import Origin, Proxy
|
||||
from app.models.base import Group
|
||||
from app.models.onions import Eotk
|
||||
from app.portal.automation import bp as automation
|
||||
from app.portal.bridgeconf import bp as bridgeconf
|
||||
from app.portal.bridge import bp as bridge
|
||||
|
@ -50,11 +52,44 @@ def format_datetime(s: Optional[datetime]) -> str:
|
|||
return s.strftime("%a, %d %b %Y %H:%M:%S")
|
||||
|
||||
|
||||
@portal.app_template_filter("describe_brn")
|
||||
def describe_brn(s: str) -> Union[str, Markup]:
|
||||
parts = s.split(":")
|
||||
if parts[3] == "mirror":
|
||||
if parts[5].startswith("origin/"):
|
||||
origin = Origin.query.filter(
|
||||
Origin.domain_name == parts[5][len("origin/"):]
|
||||
).first()
|
||||
if not origin:
|
||||
return s
|
||||
return f"Origin: {origin.domain_name} ({origin.group.group_name})"
|
||||
if parts[5].startswith("proxy/"):
|
||||
proxy = Proxy.query.filter(
|
||||
Proxy.id == int(parts[5][len("proxy/"):])
|
||||
).first()
|
||||
if not proxy:
|
||||
return s
|
||||
return Markup(f"Proxy: {proxy.url}<br>({proxy.origin.group.group_name}: {proxy.origin.domain_name})") # type: ignore
|
||||
if parts[5].startswith("quota/"):
|
||||
if parts[4] == "cloudfront":
|
||||
return f"Quota: CloudFront {parts[5][len('quota/'):]}"
|
||||
if parts[3] == "eotk":
|
||||
if parts[5].startswith("instance/"):
|
||||
eotk = Eotk.query.filter(
|
||||
Eotk.group_id == parts[2],
|
||||
Eotk.region == parts[5][len("instance/"):]
|
||||
).first()
|
||||
if not eotk:
|
||||
return s
|
||||
return f"EOTK Instance: {eotk.group.group_name} in {eotk.provider} {eotk.region}"
|
||||
return s
|
||||
|
||||
|
||||
def total_origins_blocked() -> int:
|
||||
count = 0
|
||||
for o in Origin.query.filter(Origin.destroyed.is_(None)).all():
|
||||
for a in o.alarms:
|
||||
if a.alarm_type.startswith("origin-block-ooni-"):
|
||||
if a.aspect.startswith("origin-block-ooni-"):
|
||||
if a.alarm_state == AlarmState.WARNING:
|
||||
count += 1
|
||||
break
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue