Entrypoints do not show when they last received an event #393

Closed
opened 2026-10-01 22:06:25 +02:00 by clawbot · 2 comments
Collaborator

Owner's request, #377 (chat, 2026-10-01):

audit the whole app for stupid cases of missing functionality or basic things like this (like the stats panel at the top that i requested).

What is missing: the entrypoint list on the webhook page (templates/source_detail.html) shows each entrypoint's description, URL and active state, but not whether anything is using it. It shows no count of events received and no time of the last one, even though each event records its entrypoint (Event.EntrypointID). With several entrypoints, an operator cannot tell which senders are live before deactivating or deleting one.

Definition of done:

  • Each entrypoint shows when its last event arrived (relative, with the full UTC time on hover), or "never".
  • Each entrypoint shows how many events arrived through it within the webhook's retention period.
  • No full scan per page view: one query, grouped by entrypoint, over an index on the entrypoint and the time received. Pre-1.0, so any new index is added to the schema in place.
  • Tests: two entrypoints with different traffic show their own figures, and an unused one shows "never".

PRIORITY: from the owner's audit request of 1 October (#377), in the tier of #367 to #376.

Model: opus-5-5

Owner's request, https://git.eeqj.de/sneak/webhooker/issues/377 (chat, 2026-10-01): > audit the whole app for stupid cases of missing functionality or basic things like this (like the stats panel at the top that i requested). What is missing: the entrypoint list on the webhook page (`templates/source_detail.html`) shows each entrypoint's description, URL and active state, but not whether anything is using it. It shows no count of events received and no time of the last one, even though each event records its entrypoint (`Event.EntrypointID`). With several entrypoints, an operator cannot tell which senders are live before deactivating or deleting one. Definition of done: - Each entrypoint shows when its last event arrived (relative, with the full UTC time on hover), or "never". - Each entrypoint shows how many events arrived through it within the webhook's retention period. - No full scan per page view: one query, grouped by entrypoint, over an index on the entrypoint and the time received. Pre-1.0, so any new index is added to the schema in place. - Tests: two entrypoints with different traffic show their own figures, and an unused one shows "never". PRIORITY: from the owner's audit request of 1 October (https://git.eeqj.de/sneak/webhooker/issues/377), in the tier of https://git.eeqj.de/sneak/webhooker/issues/367 to https://git.eeqj.de/sneak/webhooker/issues/376. Model: opus-5-5
clawbot self-assigned this 2026-10-01 22:06:25 +02:00
Author
Collaborator

Plan.

  • Each entrypoint in the webhook page's entrypoint list shows when its last event arrived (relative, with the full UTC time on hover), or "never", and how many events arrived through it within the webhook's retention period.
  • One query per page, grouped by entrypoint (entrypoint_id, count, latest received_at), over a new index on (entrypoint_id, received_at) in the per-webhook event database, with deleted_at as #468 placed it. Pre-1.0: the index goes into the schema in place, nothing for older databases. A test checks SQLite's plan for the statement as GORM builds it.
  • Tests: two entrypoints with different traffic show their own figures, an unused one shows "never", and an event older than retention is not counted.
  • Uses the shared styles; stays inside the entrypoint list, beside the Edit control from #464.

Model: opus-5-5

Plan. - Each entrypoint in the webhook page's entrypoint list shows when its last event arrived (relative, with the full UTC time on hover), or "never", and how many events arrived through it within the webhook's retention period. - One query per page, grouped by entrypoint (`entrypoint_id`, count, latest `received_at`), over a new index on `(entrypoint_id, received_at)` in the per-webhook event database, with `deleted_at` as https://git.eeqj.de/sneak/webhooker/pulls/468 placed it. Pre-1.0: the index goes into the schema in place, nothing for older databases. A test checks SQLite's plan for the statement as GORM builds it. - Tests: two entrypoints with different traffic show their own figures, an unused one shows "never", and an event older than retention is not counted. - Uses the shared styles; stays inside the entrypoint list, beside the Edit control from https://git.eeqj.de/sneak/webhooker/pulls/464. Model: opus-5-5
Author
Collaborator

Built in #470. Each entrypoint on the webhook page now shows when its last event arrived (relative, full UTC time on hover) or "never", and how many events arrived through it within the webhook's retention period. Both come from one query per page over a new events index on entrypoint_id, deleted_at, created_at, added to the schema in place.

  • Judgement call: the window starts at the reaper's own retention cutoff, so an entrypoint whose only events are past it but not yet removed by the next retention sweep shows "never" and 0.
  • Judgement call: if the figures cannot be read the page answers 500, as it already does for the recent events.
  • The plan's received_at is the events' created_at; there is no other column.

Model: opus-5-5

Built in https://git.eeqj.de/sneak/webhooker/pulls/470. Each entrypoint on the webhook page now shows when its last event arrived (relative, full UTC time on hover) or "never", and how many events arrived through it within the webhook's retention period. Both come from one query per page over a new events index on `entrypoint_id`, `deleted_at`, `created_at`, added to the schema in place. - Judgement call: the window starts at the reaper's own retention cutoff, so an entrypoint whose only events are past it but not yet removed by the next retention sweep shows "never" and 0. - Judgement call: if the figures cannot be read the page answers 500, as it already does for the recent events. - The plan's `received_at` is the events' `created_at`; there is no other column. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/webhooker#393