updated dash
This commit is contained in:
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user