updated dash

This commit is contained in:
2026-05-17 14:12:06 +00:00
parent 317a7f3f13
commit 72c71bb95d
14 changed files with 369 additions and 93 deletions
+36 -8
View File
@@ -3,6 +3,7 @@ package handlers
import (
"context"
"fmt"
"log"
"net/http"
"strconv"
"strings"
@@ -20,20 +21,32 @@ func NewAlertsHandler(deps Deps) *AlertsHandler {
return &AlertsHandler{deps: deps}
}
const alertsPerPage = 50
// AlertsData is passed to the alerts template.
type AlertsData struct {
PageData
Alerts []crowdsec.Alert
Filter crowdsec.AlertFilter
Alerts []crowdsec.Alert
Filter crowdsec.AlertFilter
Page int
HasNext bool
ShowUpdates bool
}
// List renders the alerts list.
// List renders the paginated alerts list.
func (h *AlertsHandler) List(w http.ResponseWriter, r *http.Request) {
ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second)
defer cancel()
page, _ := strconv.Atoi(r.URL.Query().Get("page"))
if page < 1 {
page = 1
}
showUpdates := r.URL.Query().Get("show_updates") == "1"
filter := crowdsec.AlertFilter{
Limit: 200,
Limit: alertsPerPage + 1,
Offset: (page - 1) * alertsPerPage,
Scenario: r.URL.Query().Get("scenario"),
IP: r.URL.Query().Get("ip"),
Since: r.URL.Query().Get("since"),
@@ -41,19 +54,34 @@ func (h *AlertsHandler) List(w http.ResponseWriter, r *http.Request) {
alerts, err := h.deps.LAPI.ListAlerts(ctx, filter)
if err != nil {
h.deps.Renderer.RenderError(w, http.StatusBadGateway, "failed to fetch alerts")
log.Printf("alerts: LAPI error: %v", err)
pd := NewPageData(r, "Alerts", h.deps.CLIAvailable, h.deps.PollInterval)
if crowdsec.IsForbidden(err) {
pd = pd.WithFlash("error", "Access denied: re-register machine with admin rights: cscli machines delete crowdsec-dashy && cscli machines add crowdsec-dashy -a")
} else {
pd = pd.WithFlash("error", "Failed to fetch alerts from LAPI.")
}
h.deps.Renderer.Render(w, "alerts", AlertsData{PageData: pd})
return
}
hasNext := len(alerts) > alertsPerPage
if hasNext {
alerts = alerts[:alertsPerPage]
}
pd := NewPageData(r, "Alerts", h.deps.CLIAvailable, h.deps.PollInterval)
if f := readFlash(r); f.Message != "" {
pd.Flash = f
}
h.deps.Renderer.Render(w, "alerts", AlertsData{
PageData: pd,
Alerts: alerts,
Filter: filter,
PageData: pd,
Alerts: alerts,
Filter: filter,
Page: page,
HasNext: hasNext,
ShowUpdates: showUpdates,
})
}