mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
feat(logs): populate send log detail and fix dedup re-claim condition
- dispatch: attach per-send detail (title/url/description/match/provider) so the admin log view shows message context, not just a bare ok flag - idempotency: compare dedup expiry against claimed_at instead of the new expires_at so non-expired duplicates are rejected and expired keys re-claim
This commit is contained in:
parent
c6198e855f
commit
c955db03c3
3 changed files with 14 additions and 2 deletions
|
|
@ -6,6 +6,7 @@ import { log } from "../lib/log";
|
|||
import { loadTranslations, t as translate, type Translations } from "../lib/i18n";
|
||||
import type { SendRecord } from "../lib/send-log";
|
||||
import { recordSendBatch } from "../lib/send-log-batch";
|
||||
import { explainRoute } from "../config/schema";
|
||||
import { messageTracker } from "../lib/message-tracker";
|
||||
import {
|
||||
loadGroups,
|
||||
|
|
@ -176,6 +177,15 @@ export async function dispatchEvent(
|
|||
message.mentionRoleIds = route.discordRoleIds;
|
||||
}
|
||||
|
||||
const detail: Record<string, unknown> = {
|
||||
title: message.title,
|
||||
url: message.url,
|
||||
description: message.description?.slice(0, 500),
|
||||
match: explainRoute(route),
|
||||
provider: event.provider,
|
||||
installationId: event.installationId,
|
||||
};
|
||||
|
||||
for (const target of targets) {
|
||||
const targetStr =
|
||||
target.platform === "telegram"
|
||||
|
|
@ -196,6 +206,7 @@ export async function dispatchEvent(
|
|||
deliveryId: string | undefined;
|
||||
actor: string | undefined;
|
||||
action: string | undefined;
|
||||
detail: Record<string, unknown>;
|
||||
} = {
|
||||
ts: Date.now(),
|
||||
routeId: route.id,
|
||||
|
|
@ -206,6 +217,7 @@ export async function dispatchEvent(
|
|||
deliveryId: event.deliveryId,
|
||||
actor: (event.payload.sender as { login?: string } | undefined)?.login,
|
||||
action: event.payload.action as string | undefined,
|
||||
detail,
|
||||
};
|
||||
|
||||
const started = Date.now();
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ export function d1IdempotencyStore(db: D1Database): IdempotencyStore {
|
|||
`INSERT INTO dedup_keys (key, claimed_at, expires_at) VALUES (?, ?, ?)
|
||||
ON CONFLICT(key) DO UPDATE SET
|
||||
claimed_at = excluded.claimed_at, expires_at = excluded.expires_at
|
||||
WHERE dedup_keys.expires_at < excluded.expires_at`,
|
||||
WHERE dedup_keys.expires_at < excluded.claimed_at`,
|
||||
)
|
||||
.bind(key, now, now + ttlSeconds * 1000)
|
||||
.run();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue