Give each event its own page and show bodies the same everywhere (closes #369)
check / check (push) Successful in 3m20s
check / check (push) Successful in 3m20s
Each row of the recent events on the webhook page links to the
event's own page, /hook/{id}/events/{eventID}, and expands to show its
body; only the newest starts expanded. The event's page shows its
details, its whole body and every delivery with its attempts.
One renderer, newBodyView with templates/event_body.html, shows a body
in all three places: whole up to 32 KiB, cut there in the lists with a
link to the event's page, JSON pretty-printed, a body of more than 200
lines or 32 KiB in a scrolling box, and a body that is not text left
out beside its download link. A resubmitted copy links to its
original's page.
Model: opus-5-5
This commit is contained in:
@@ -1022,10 +1022,10 @@ func (h *Handlers) HandleSourceLogs() http.HandlerFunc {
|
||||
// view, which renders its target as a blank name.
|
||||
//
|
||||
// This map is historical display only. It is built for the event
|
||||
// log page and reaches nothing but DeliveryView.Target: the
|
||||
// target list on the source detail page, the edit form and the
|
||||
// replay path each resolve targets themselves, and a deleted row
|
||||
// is refused there as before.
|
||||
// log and an event's own page, and reaches nothing but
|
||||
// DeliveryView.Target: the target list on the source detail page,
|
||||
// the edit form and the replay path each resolve targets
|
||||
// themselves, and a deleted row is refused there as before.
|
||||
func (h *Handlers) loadTargetMap(
|
||||
webhookID string,
|
||||
) (map[string]eventLogTarget, error) {
|
||||
@@ -1081,10 +1081,8 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
targetMap map[string]eventLogTarget,
|
||||
page int,
|
||||
) ([]EventLogView, int64, bool) {
|
||||
var result []EventLogView
|
||||
|
||||
if !h.dbMgr.DBExists(webhook.ID) {
|
||||
return result, 0, true
|
||||
return nil, 0, true
|
||||
}
|
||||
|
||||
webhookDB, err := h.dbMgr.GetDB(webhook.ID)
|
||||
@@ -1100,7 +1098,26 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
webhookDB, webhook.ID, page,
|
||||
)
|
||||
|
||||
result = make([]EventLogView, len(rows))
|
||||
result, ok := h.eventLogViews(
|
||||
w, r, webhookDB, webhook.ID, rows, targetMap,
|
||||
)
|
||||
|
||||
return result, totalEvents, ok
|
||||
}
|
||||
|
||||
// eventLogViews projects loaded events for rendering, each with
|
||||
// its deliveries and how many times it has been resubmitted. Like
|
||||
// loadEventsWithDeliveries, it reports false once it has answered
|
||||
// the request with an error.
|
||||
func (h *Handlers) eventLogViews(
|
||||
w http.ResponseWriter,
|
||||
r *http.Request,
|
||||
webhookDB *gorm.DB,
|
||||
webhookID string,
|
||||
rows []eventLogRow,
|
||||
targetMap map[string]eventLogTarget,
|
||||
) ([]EventLogView, bool) {
|
||||
result := make([]EventLogView, len(rows))
|
||||
eventDeliveries := make([][]database.Delivery, len(rows))
|
||||
|
||||
var deliveryIDs []string
|
||||
@@ -1108,7 +1125,7 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
eventIDs := make([]string, len(rows))
|
||||
|
||||
for i := range rows {
|
||||
result[i] = rows[i].view()
|
||||
result[i] = rows[i].view(webhookID)
|
||||
eventIDs[i] = rows[i].ID
|
||||
|
||||
webhookDB.Where(
|
||||
@@ -1130,7 +1147,7 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
w, r, "failed to load delivery attempts", err,
|
||||
)
|
||||
|
||||
return nil, 0, false
|
||||
return nil, false
|
||||
}
|
||||
|
||||
resubmits, err := resubmitCounts(webhookDB, eventIDs)
|
||||
@@ -1139,7 +1156,7 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
w, r, "failed to count event resubmissions", err,
|
||||
)
|
||||
|
||||
return nil, 0, false
|
||||
return nil, false
|
||||
}
|
||||
|
||||
for i := range rows {
|
||||
@@ -1149,7 +1166,7 @@ func (h *Handlers) loadEventsWithDeliveries(
|
||||
result[i].ResubmitCount = resubmits[rows[i].ID]
|
||||
}
|
||||
|
||||
return result, totalEvents, true
|
||||
return result, true
|
||||
}
|
||||
|
||||
// loadEventLogRows reads one page of the event log projection, newest
|
||||
|
||||
Reference in New Issue
Block a user