按发生时间倒序展示客户端埋点

调整事件查询排序及分页游标,保留入库时间快照隔离。
同步后台说明、定向测试和技术文档。
This commit is contained in:
2026-09-22 12:48:49 +00:00
parent fe19a2c4db
commit e07b12daf9
6 changed files with 28 additions and 24 deletions
+8 -5
View File
@@ -160,6 +160,7 @@ async function verify(url, serviceToken, outsiderToken) {
),
);
const first = batch([event(), event(), event()]);
first.events[0].event_time = '2026-09-21T12:01:00.123Z';
assert.deepEqual(ok(await upload(first)), {
acknowledged_batch_ids: [first.batch_id],
event_count: 3,
@@ -207,6 +208,7 @@ async function verify(url, serviceToken, outsiderToken) {
const page1 = await list({ limit: 2 });
assert(page1.nextCursor);
const late = batch([event()]);
late.events[0].event_time = '2026-09-21T11:00:00.123Z';
ok(await upload(late));
const seen = [...page1.entries];
let cursor = page1.nextCursor;
@@ -225,17 +227,18 @@ async function verify(url, serviceToken, outsiderToken) {
const previous = seen[index - 1];
const current = seen[index];
assert(
previous.receivedAt > current.receivedAt ||
(previous.receivedAt === current.receivedAt &&
previous.eventTime > current.eventTime ||
(previous.eventTime === current.eventTime &&
previous.eventId > current.eventId),
'Stable receipt/event ID descending order',
'Stable event time/event ID descending order',
);
}
const refreshed = await list();
assert.equal(refreshed.entries.length, 5);
assert.equal(refreshed.entries[0].eventId, late.events[0].event_id);
assert.equal(refreshed.entries[0].eventId, first.events[0].event_id);
assert.equal(refreshed.entries.at(-1).eventId, late.events[0].event_id);
assert.equal(refreshed.entries[0].projectId, null);
assert.equal(refreshed.entries[0].eventTime, '2026-09-21T12:00:00.123Z');
assert.equal(refreshed.entries[0].eventTime, '2026-09-21T12:01:00.123Z');
for (const [name, input] of [
['upload_agc_analytics_batch', first],
['list_agc_tracking_events', {}],