mirror of
https://framagit.org/framasoft/framaspace/argos.git
synced 2025-04-28 18:02:41 +02:00
🎨 — Use a POST request for automatic refresh
This commit is contained in:
parent
8fd45302d2
commit
24e7778fa5
4 changed files with 31 additions and 13 deletions
|
@ -1,9 +1,11 @@
|
||||||
"""Web interface for humans"""
|
"""Web interface for humans"""
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from functools import cmp_to_key
|
from functools import cmp_to_key
|
||||||
|
from typing import Annotated
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Request
|
from fastapi import APIRouter, Cookie, Depends, Form, Request, status
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
@ -23,8 +25,8 @@ SEVERITY_LEVELS = {"ok": 1, "warning": 2, "critical": 3, "unknown": 4}
|
||||||
async def get_severity_counts_view(
|
async def get_severity_counts_view(
|
||||||
request: Request,
|
request: Request,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
refresh: bool = False,
|
auto_refresh_enabled: Annotated[bool, Cookie()] = False,
|
||||||
delay: int = 15,
|
auto_refresh_seconds: Annotated[int, Cookie()] = 15,
|
||||||
):
|
):
|
||||||
"""Shows the number of results per severity"""
|
"""Shows the number of results per severity"""
|
||||||
counts_dict = await queries.get_severity_counts(db)
|
counts_dict = await queries.get_severity_counts(db)
|
||||||
|
@ -37,8 +39,8 @@ async def get_severity_counts_view(
|
||||||
"request": request,
|
"request": request,
|
||||||
"counts_dict": counts_dict,
|
"counts_dict": counts_dict,
|
||||||
"agents": agents,
|
"agents": agents,
|
||||||
"refresh": refresh,
|
"auto_refresh_enabled": auto_refresh_enabled,
|
||||||
"delay": delay,
|
"auto_refresh_seconds": auto_refresh_seconds,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -151,3 +153,18 @@ async def get_agents_view(request: Request, db: Session = Depends(get_db)):
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"agents.html", {"request": request, "last_seen": last_seen}
|
"agents.html", {"request": request, "last_seen": last_seen}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@route.post("/refresh")
|
||||||
|
async def set_refresh_cookies_view(
|
||||||
|
request: Request,
|
||||||
|
auto_refresh_enabled: Annotated[bool, Form()] = False,
|
||||||
|
auto_refresh_seconds: Annotated[int, Form()] = 15,
|
||||||
|
):
|
||||||
|
response = RedirectResponse(
|
||||||
|
request.url_for("get_severity_counts_view"),
|
||||||
|
status_code=status.HTTP_303_SEE_OTHER,
|
||||||
|
)
|
||||||
|
response.set_cookie(key="auto_refresh_enabled", value=auto_refresh_enabled)
|
||||||
|
response.set_cookie(key="auto_refresh_seconds", value=int(auto_refresh_seconds))
|
||||||
|
return response
|
||||||
|
|
|
@ -9,9 +9,9 @@
|
||||||
content="width=device-width, initial-scale=1.0">
|
content="width=device-width, initial-scale=1.0">
|
||||||
<meta http-equiv="X-UA-Compatible"
|
<meta http-equiv="X-UA-Compatible"
|
||||||
content="IE=Edge">
|
content="IE=Edge">
|
||||||
{% if refresh %}
|
{% if auto_refresh_enabled %}
|
||||||
<meta http-equiv="refresh"
|
<meta http-equiv="refresh"
|
||||||
content="{{ delay }}">
|
content="{{ auto_refresh_seconds }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
href="{{ url_for('static', path='/styles.css') }}">
|
href="{{ url_for('static', path='/styles.css') }}">
|
||||||
|
|
|
@ -13,27 +13,27 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<input id="auto-refresh"
|
<input id="auto-refresh"
|
||||||
name="refresh"
|
name="auto_refresh_enabled"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
form="refresh-form"
|
form="refresh-form"
|
||||||
{{ 'checked' if refresh }}>
|
{{ 'checked' if auto_refresh_enabled }}>
|
||||||
<label for="auto-refresh" class="inline-label">Auto-refresh</label>
|
<label for="auto-refresh" class="inline-label">Auto-refresh</label>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label class="inline-label">
|
<label class="inline-label">
|
||||||
Every <input id="refresh-delay"
|
Every <input id="refresh-delay"
|
||||||
class="initial-width"
|
class="initial-width"
|
||||||
name="delay"
|
name="auto_refresh_seconds"
|
||||||
type="number"
|
type="number"
|
||||||
form="refresh-form"
|
form="refresh-form"
|
||||||
min="1"
|
min="1"
|
||||||
value="{{ delay }}"> seconds
|
value="{{ auto_refresh_seconds }}"> seconds
|
||||||
</label>
|
</label>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<form id="refresh-form"
|
<form id="refresh-form"
|
||||||
method="get"
|
method="post"
|
||||||
action="{{ url_for('get_severity_counts_view') }}">
|
action="{{ url_for('set_refresh_cookies_view') }}">
|
||||||
<input type="Submit">
|
<input type="Submit">
|
||||||
</form>
|
</form>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -24,6 +24,7 @@ dependencies = [
|
||||||
"Jinja2>=3.0,<4",
|
"Jinja2>=3.0,<4",
|
||||||
"pydantic[email]>=2.4,<3",
|
"pydantic[email]>=2.4,<3",
|
||||||
"pydantic-settings>=2.0,<3",
|
"pydantic-settings>=2.0,<3",
|
||||||
|
"python-multipart>=0.0.9,<1",
|
||||||
"pyyaml>=6.0,<7",
|
"pyyaml>=6.0,<7",
|
||||||
"pyyaml-include>=1.3,<2",
|
"pyyaml-include>=1.3,<2",
|
||||||
"sqlalchemy[asyncio]>=2.0,<3",
|
"sqlalchemy[asyncio]>=2.0,<3",
|
||||||
|
|
Loading…
Reference in a new issue