mirror of
https://framagit.org/framasoft/framaspace/argos.git
synced 2025-04-28 18:02:41 +02:00
✨ — Link to reschedule non-ok checks (fix #27)
This commit is contained in:
parent
a8cd9a9581
commit
098575f186
4 changed files with 115 additions and 0 deletions
|
@ -124,6 +124,14 @@ async def get_severity_counts(db: Session) -> dict:
|
||||||
return counts_dict
|
return counts_dict
|
||||||
|
|
||||||
|
|
||||||
|
async def reschedule_all(db: Session):
|
||||||
|
"""Reschedule checks of all non OK tasks ASAP"""
|
||||||
|
db.query(Task) \
|
||||||
|
.filter(Task.severity.in_(['warning', 'critical', 'unknown'])) \
|
||||||
|
.update({Task.next_run: datetime.now() - timedelta(days=1)})
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
|
||||||
async def remove_old_results(db: Session, max_results: int):
|
async def remove_old_results(db: Session, max_results: int):
|
||||||
tasks = db.query(Task).all()
|
tasks = db.query(Task).all()
|
||||||
deleted = 0
|
deleted = 0
|
||||||
|
|
|
@ -67,6 +67,13 @@ async def create_results(
|
||||||
return {"result_ids": [r.id for r in db_results]}
|
return {"result_ids": [r.id for r in db_results]}
|
||||||
|
|
||||||
|
|
||||||
|
@route.post("/reschedule/all")
|
||||||
|
async def reschedule_all(request: Request, db: Session = Depends(get_db)):
|
||||||
|
"""Reschedule checks of all non OK tasks ASAP"""
|
||||||
|
await queries.reschedule_all(db)
|
||||||
|
return {"msg": "Non OK tasks reschuled"}
|
||||||
|
|
||||||
|
|
||||||
@route.get("/stats")
|
@route.get("/stats")
|
||||||
async def get_stats(db: Session = Depends(get_db)):
|
async def get_stats(db: Session = Depends(get_db)):
|
||||||
"""Get tasks statistics"""
|
"""Get tasks statistics"""
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<img src="{{ url_for('static', path='/logo-64.png') }}"
|
<img src="{{ url_for('static', path='/logo-64.png') }}"
|
||||||
|
width="64"
|
||||||
|
height="64"
|
||||||
alt="">
|
alt="">
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -45,11 +47,18 @@
|
||||||
role="button">
|
role="button">
|
||||||
Agents
|
Agents
|
||||||
</a>
|
</a>
|
||||||
|
<a href="#"
|
||||||
|
id="reschedule-all"
|
||||||
|
class="outline"
|
||||||
|
title="Reschedule non-ok checks as soon as possible">
|
||||||
|
🕐
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<main class="container">
|
<main class="container">
|
||||||
|
<dialog id="msg"></dialog>
|
||||||
<div id="header">
|
<div id="header">
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{% endblock title %}
|
{% endblock title %}
|
||||||
|
@ -69,5 +78,21 @@
|
||||||
or
|
or
|
||||||
<a href="{{ url_for('get_severity_counts_view') }}redoc">Redoc</a>
|
<a href="{{ url_for('get_severity_counts_view') }}redoc">Redoc</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
<script>
|
||||||
|
async function rescheduleAll() {
|
||||||
|
const response = await fetch('{{ url_for("reschedule_all") }}', {method: 'POST'});
|
||||||
|
const json = await response.json();
|
||||||
|
const dialog = document.getElementById('msg');
|
||||||
|
dialog.innerText = json.msg;
|
||||||
|
dialog.setAttribute('open', '');
|
||||||
|
setTimeout(() => {
|
||||||
|
dialog.removeAttribute('open');
|
||||||
|
}, 1500);
|
||||||
|
}
|
||||||
|
document.getElementById('reschedule-all').addEventListener('click', event => {
|
||||||
|
event.preventDefault();
|
||||||
|
rescheduleAll();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -123,6 +123,21 @@ async def test_update_from_config_db_updates_existing_tasks(db, empty_config, ta
|
||||||
assert db.query(Task).count() == 1
|
assert db.query(Task).count() == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_reschedule_all(db, ten_tasks, ten_warning_tasks, ten_critical_tasks, ten_ok_tasks):
|
||||||
|
assert db.query(Task).count() == 40
|
||||||
|
assert db.query(Task).filter(Task.severity == "unknown").count() == 10
|
||||||
|
assert db.query(Task).filter(Task.severity == "warning").count() == 10
|
||||||
|
assert db.query(Task).filter(Task.severity == "critical").count() == 10
|
||||||
|
assert db.query(Task).filter(Task.severity == "ok").count() == 10
|
||||||
|
|
||||||
|
one_hour_ago = datetime.now() - timedelta(hours=1)
|
||||||
|
assert db.query(Task).filter(Task.next_run <= one_hour_ago).count() == 0
|
||||||
|
|
||||||
|
await queries.reschedule_all(db)
|
||||||
|
assert db.query(Task).filter(Task.next_run <= one_hour_ago).count() == 30
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def task(db):
|
def task(db):
|
||||||
task = Task(
|
task = Task(
|
||||||
|
@ -215,3 +230,63 @@ def ten_tasks(db):
|
||||||
tasks.append(task)
|
tasks.append(task)
|
||||||
db.commit()
|
db.commit()
|
||||||
return tasks
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def ten_warning_tasks(db):
|
||||||
|
now = datetime.now()
|
||||||
|
tasks = []
|
||||||
|
for i in range(10):
|
||||||
|
task = Task(
|
||||||
|
url="https://www.example.com",
|
||||||
|
domain="example.com",
|
||||||
|
check="body-contains",
|
||||||
|
expected="foo",
|
||||||
|
frequency=1,
|
||||||
|
next_run=now,
|
||||||
|
severity="warning"
|
||||||
|
)
|
||||||
|
db.add(task)
|
||||||
|
tasks.append(task)
|
||||||
|
db.commit()
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def ten_critical_tasks(db):
|
||||||
|
now = datetime.now()
|
||||||
|
tasks = []
|
||||||
|
for i in range(10):
|
||||||
|
task = Task(
|
||||||
|
url="https://www.example.com",
|
||||||
|
domain="example.com",
|
||||||
|
check="body-contains",
|
||||||
|
expected="foo",
|
||||||
|
frequency=1,
|
||||||
|
next_run=now,
|
||||||
|
severity="critical"
|
||||||
|
)
|
||||||
|
db.add(task)
|
||||||
|
tasks.append(task)
|
||||||
|
db.commit()
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def ten_ok_tasks(db):
|
||||||
|
now = datetime.now()
|
||||||
|
tasks = []
|
||||||
|
for i in range(10):
|
||||||
|
task = Task(
|
||||||
|
url="https://www.example.com",
|
||||||
|
domain="example.com",
|
||||||
|
check="body-contains",
|
||||||
|
expected="foo",
|
||||||
|
frequency=1,
|
||||||
|
next_run=now,
|
||||||
|
severity="ok"
|
||||||
|
)
|
||||||
|
db.add(task)
|
||||||
|
tasks.append(task)
|
||||||
|
db.commit()
|
||||||
|
return tasks
|
||||||
|
|
Loading…
Reference in a new issue