mirror of
https://framagit.org/framasoft/framaspace/argos.git
synced 2025-04-28 18:02:41 +02:00
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
from collections import defaultdict
|
|
from urllib.parse import urlparse
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from fastapi.templating import Jinja2Templates
|
|
from sqlalchemy.orm import Session
|
|
|
|
from argos.schemas import Config
|
|
from argos.server.models import Result, Task
|
|
from argos.server.routes.dependencies import get_config, get_db
|
|
|
|
route = APIRouter()
|
|
|
|
templates = Jinja2Templates(directory="argos/server/templates")
|
|
|
|
|
|
@route.get("/")
|
|
async def read_tasks(request: Request, db: Session = Depends(get_db)):
|
|
tasks = db.query(Task).order_by(Task.domain).all()
|
|
|
|
domains_severities = defaultdict(list)
|
|
for task in tasks:
|
|
severity = task.severity or "to-process"
|
|
domain = urlparse(task.url).netloc
|
|
domains_severities[domain].append(severity)
|
|
|
|
def _max_severity(severities):
|
|
severity_level = {"ok": 1, "warning": 2, "critical": 3, "to-process": "4"}
|
|
return max(severities, key=severity_level.get)
|
|
|
|
domains = {key: _max_severity(value) for key, value in domains_severities.items()}
|
|
|
|
return templates.TemplateResponse(
|
|
"index.html", {"request": request, "domains": domains}
|
|
)
|
|
|
|
|
|
@route.get("/domain/{domain}")
|
|
async def get_domain_tasks(
|
|
request: Request, domain: str, db: Session = Depends(get_db)
|
|
):
|
|
tasks = db.query(Task).filter(Task.domain.contains(domain)).all()
|
|
return templates.TemplateResponse(
|
|
"domain.html", {"request": request, "domain": domain, "tasks": tasks}
|
|
)
|
|
|
|
|
|
@route.get("/result/{result_id}")
|
|
async def get_result(request: Request, result_id: int, db: Session = Depends(get_db)):
|
|
result = db.query(Result).get(result_id)
|
|
return templates.TemplateResponse(
|
|
"result.html", {"request": request, "result": result}
|
|
)
|
|
|
|
|
|
@route.get("/task/{task_id}/results")
|
|
async def get_task_results(
|
|
request: Request,
|
|
task_id: int,
|
|
db: Session = Depends(get_db),
|
|
config: Config = Depends(get_config),
|
|
):
|
|
results = (
|
|
db.query(Result)
|
|
.filter(Result.task_id == task_id)
|
|
.order_by(Result.submitted_at.desc())
|
|
.all()
|
|
)
|
|
task = db.query(Task).get(task_id)
|
|
description = task.get_check().get_description(config)
|
|
return templates.TemplateResponse(
|
|
"results.html",
|
|
{
|
|
"request": request,
|
|
"results": results,
|
|
"task": task,
|
|
"description": description,
|
|
},
|
|
)
|