diff --git a/README.md b/README.md index 2df9b98..23b8dca 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Internally, a HTTP API is exposed, and a job queue is used to distribute the che ## Todo: - [ ] Do not return empty list on / when no results from agents. -- [ ] donner un aperçu rapide de l’état de la supervision. +- [X] donner un aperçu rapide de l’état de la supervision. - [ ] Allow passing a dict to check - [ ] Rename error in unexpected error - [ ] Use background tasks for alerting @@ -29,4 +29,4 @@ Internally, a HTTP API is exposed, and a job queue is used to distribute the che - [ ] Un flag de configuration permet d’ajouter automatiquement un job de vérification de redirection 301 de la version HTTP vers HTTPS - [ ] add an "unknown" severity for check errors - [ ] Add a way to specify the severity of the alerts in the config -- [ ] Add a command to generate new authentication token \ No newline at end of file +- [ ] Add a command to generate new authentication token diff --git a/argos/server/routes/views.py b/argos/server/routes/views.py index cc1cc5e..6880d16 100644 --- a/argos/server/routes/views.py +++ b/argos/server/routes/views.py @@ -7,6 +7,7 @@ from sqlalchemy import desc from sqlalchemy.orm import Session, aliased from argos.schemas import Config +from argos.server import queries from argos.server.models import Result, Task from argos.server.routes.dependencies import get_config, get_db @@ -16,6 +17,25 @@ templates = Jinja2Templates(directory="argos/server/templates") @route.get("/") +async def get_severity_counts(request: Request, db: Session = Depends(get_db)): + """Returns the number of results per severity""" + counts = await queries.get_severity_counts(db) + counts_dict = dict(counts) + for key in ("ok", "warning", "critical"): + counts_dict.setdefault(key, 0) + + agents = db.query(Result.agent_id).distinct().all() + + return templates.TemplateResponse( + "index.html", + { + "request": request, + "counts_dict": counts_dict, + "agents": agents, + }, + ) + +@route.get("/details") async def read_tasks(request: Request, db: Session = Depends(get_db)): tasks = db.query(Task).order_by(Task.domain).all() @@ -46,7 +66,7 @@ async def read_tasks(request: Request, db: Session = Depends(get_db)): agents = db.query(Result.agent_id).distinct().all() return templates.TemplateResponse( - "index.html", + "details.html", { "request": request, "domains": domains, diff --git a/argos/server/static/styles.css b/argos/server/static/styles.css index 5ca62cb..f1d80a8 100644 --- a/argos/server/static/styles.css +++ b/argos/server/static/styles.css @@ -2,4 +2,16 @@ code { white-space: pre-wrap; -} \ No newline at end of file +} + +.grid-index { + font-size: 2rem; +} +.text-center, +.grid-index { + text-align: center; +} +.grid-index article { + margin-top: 0; + margin-bottom: 1rem; +} diff --git a/argos/server/templates/details.html b/argos/server/templates/details.html new file mode 100644 index 0000000..64a2d36 --- /dev/null +++ b/argos/server/templates/details.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% block content %} +
+ {{domains | length}} domains, + {{ total_task_count }} tasks, + {{ agents |length }} agent{% if agents|length > 1 %}s{% endif %} + +
+ +Domain | +Current status | +Last check | +
---|---|---|
+ + {{ domain }} + | + +{% if status == "ok" %}✅ OK {% elif statuts == "warning"%}⚠ Warning{% elif status == "critical"%}❌ Critical{% elif status == "to-process" %}⏱︎ Waiting for the jobs{% endif %} | +{{ last_checks.get(domain) }} | +
- {{domains | length}} domains, - {{ total_task_count }} tasks, - {{ agents |length }} agent{% if agents|length > 1 %}s{% endif %} + {{ agents | length }} agent{% if agents| length > 1 %}s{% endif %} +
++ Details
- -Domain | -Current status | -Last check | -
---|---|---|
- - {{ domain }} - | - -{% if status == "ok" %}✅ OK {% elif statuts == "warning"%}⚠ Warning{% elif status == "critical"%}❌ Critical{% elif status == "to-process" %}⏱︎ Waiting for the jobs{% endif %} | -{{ last_checks.get(domain) }} | -