Skip to content

Delivery Log

The delivery log records every notification attempt ChannelWatch makes. You can see which notifications succeeded, which are retrying, and which hit the circuit breaker — all from the web UI without digging through log files.

Open the web UI at http://your-server-ip:8501 and go to Notifications > Delivery Log.

The log table shows one row per delivery attempt with these columns:

ColumnDescription
TimeWhen the attempt was made
DVRWhich DVR server triggered the alert
ChannelThe notification channel (Discord, Telegram, email, etc.)
Event typeThe alert type (Channel Watching, Recording Events, etc.)
Statussent, retry, failed, or circuit_open
RetriesHow many attempts were made before the final status
ErrorThe error message on failure (empty on success)

Use the filter bar at the top of the log to narrow results by:

  • DVR — show only notifications from a specific DVR server
  • Channel — show only a specific notification provider
  • Status — filter to sent, retry, failed, or circuit_open
  • Time range — last hour, last 24 hours, last 7 days, or a custom range

When a notification fails to deliver, ChannelWatch retries automatically using exponential backoff. The retry schedule per channel is:

AttemptDelay before retry
1st retry2 seconds
2nd retry4 seconds
3rd retry8 seconds
4th retry16 seconds
5th retry32 seconds

After 5 failed attempts, the channel’s circuit breaker opens. No further retries are made until the circuit closes.

Retries are tracked per (DVR, channel) pair. A failure on your Discord channel does not affect Telegram delivery.

The circuit breaker protects against repeated failures hammering a provider that is down or misconfigured.

How it works:

  1. After 5 consecutive failures on a (DVR, channel) pair, the circuit opens.
  2. While open, ChannelWatch skips delivery attempts for that pair and logs the status as circuit_open.
  3. After 5 minutes, the circuit closes automatically and delivery resumes.
  4. If the next attempt succeeds, the failure counter resets. If it fails again, the counter increments toward the next open threshold.

The circuit breaker state is visible in the delivery log. Rows with status circuit_open indicate the channel was skipped because the breaker was open at that moment.

The delivery log keeps records for 30 days. Entries older than 30 days are pruned automatically by the nightly retention job. You cannot extend this window in v1.0.

If you need a longer audit trail, use the CSV export button at the top of the log page to download a snapshot before records age out.

StatusMeaning
sentNotification delivered successfully on the first attempt or after retries
retryDelivery failed; a retry is scheduled
failedAll retry attempts exhausted; notification was not delivered
circuit_openDelivery skipped because the circuit breaker was open for this channel

Check the error column for the specific failure reason. Common causes:

  • Invalid credentials — webhook URL deleted, API token revoked, or bot removed from the channel. Update the provider settings under Settings > Notifications.
  • Network unreachable — the ChannelWatch container cannot reach the notification service. Verify DNS resolution and outbound connectivity from the container.
  • Rate limited — the provider rejected requests due to too many messages in a short window. The circuit breaker will reopen after 5 minutes.

If the circuit opens, closes, and opens again repeatedly, the underlying delivery problem has not been resolved. Fix the root cause (credentials, network, provider configuration) rather than waiting for the circuit to cycle.

The delivery log only records attempts made after v1.0 is running. If you just upgraded from v0.7, the log starts fresh. Trigger a test notification from Diagnostics > Alert Tests to confirm delivery is working and create the first log entry.