intervall
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
from fastapi import APIRouter, Form, HTTPException, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from sqlalchemy import func, select
|
||||
|
||||
from app.auth.admin import require_admin
|
||||
from app.auth.csrf import ensure_csrf_token, validate_csrf
|
||||
from app.db.models import Activity
|
||||
from app.db.repositories import ActivityRepository, SystemLogRepository, UserRepository
|
||||
from app.db.repositories import ActivityRepository, SchedulerSettingsRepository, SystemLogRepository, UserRepository
|
||||
from app.sync.manager import SyncAlreadyRunning
|
||||
from app.web.routes import templates
|
||||
|
||||
@@ -104,13 +104,45 @@ def system_page(request: Request):
|
||||
user_count = len(UserRepository(session).list_all())
|
||||
activity_count = session.scalar(select(func.count()).select_from(Activity)) or 0
|
||||
log_entries = SystemLogRepository(session).list_recent(limit=50)
|
||||
scheduler_settings = SchedulerSettingsRepository(session).get_or_create(
|
||||
default_minutes=settings.sync_interval_minutes
|
||||
)
|
||||
return templates.TemplateResponse(request, "system.html", {
|
||||
"csrf_token": ensure_csrf_token(request),
|
||||
"app_version": APP_VERSION,
|
||||
"sync_interval_minutes": settings.sync_interval_minutes,
|
||||
"last_tick": scheduler.last_tick,
|
||||
"next_tick": scheduler.next_tick,
|
||||
"user_count": user_count,
|
||||
"activity_count": activity_count,
|
||||
"log_entries": log_entries,
|
||||
"scheduler_settings": scheduler_settings,
|
||||
})
|
||||
|
||||
|
||||
@router.post("/system/scheduler-settings")
|
||||
def update_scheduler_settings(
|
||||
request: Request,
|
||||
csrf_token: str = Form(...),
|
||||
day_start_hour: int = Form(...),
|
||||
night_start_hour: int = Form(...),
|
||||
day_interval_minutes: int = Form(...),
|
||||
night_interval_minutes: int = Form(...),
|
||||
):
|
||||
require_admin(request)
|
||||
validate_csrf(request, csrf_token)
|
||||
if not (0 <= day_start_hour <= 23) or not (0 <= night_start_hour <= 23):
|
||||
raise HTTPException(status_code=400, detail="Hours must be between 0 and 23")
|
||||
if day_interval_minutes < 1 or night_interval_minutes < 1:
|
||||
raise HTTPException(status_code=400, detail="Intervals must be at least 1 minute")
|
||||
settings = request.app.state.settings
|
||||
with request.app.state.session_factory() as session:
|
||||
repository = SchedulerSettingsRepository(session)
|
||||
row = repository.get_or_create(default_minutes=settings.sync_interval_minutes)
|
||||
repository.update(
|
||||
row,
|
||||
day_start_hour=day_start_hour,
|
||||
night_start_hour=night_start_hour,
|
||||
day_interval_minutes=day_interval_minutes,
|
||||
night_interval_minutes=night_interval_minutes,
|
||||
)
|
||||
return RedirectResponse("/system", status_code=303)
|
||||
|
||||
Reference in New Issue
Block a user