mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-06-16 21:03:58 +08:00
feat(logs): optimize fetchCompleteHomeLogs for improved pagination and performance
This commit is contained in:
+26
-29
@@ -173,39 +173,36 @@ const fetchCompleteHomeLogs = async (
|
||||
return firstPage;
|
||||
}
|
||||
|
||||
let nextOffset = firstOffset + records.length;
|
||||
const targetCount = Math.min(requestedLimit, Math.max(total - firstOffset, 0));
|
||||
|
||||
while (records.length < targetCount && nextOffset < total) {
|
||||
const remaining = targetCount - records.length;
|
||||
const data = await apiClient.get('/logs', {
|
||||
params: {
|
||||
...params,
|
||||
limit: Math.min(pageLimit, remaining),
|
||||
offset: nextOffset,
|
||||
},
|
||||
timeout: LOGS_TIMEOUT_MS,
|
||||
});
|
||||
|
||||
if (!isRecord(data) || !Array.isArray(data.logs)) {
|
||||
break;
|
||||
}
|
||||
|
||||
const pageRecords = homeRecordsFromPayload(data);
|
||||
if (pageRecords.length === 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
records.push(...pageRecords);
|
||||
nextOffset += pageRecords.length;
|
||||
if (records.length >= targetCount) {
|
||||
return { ...firstPage, logs: records, limit: records.length, offset: firstOffset };
|
||||
}
|
||||
|
||||
return {
|
||||
...firstPage,
|
||||
logs: records,
|
||||
limit: records.length,
|
||||
offset: firstOffset,
|
||||
};
|
||||
const remaining = targetCount - records.length;
|
||||
const baseOffset = firstOffset + records.length;
|
||||
const pageRequests: Array<{ offset: number; limit: number }> = [];
|
||||
let collected = 0;
|
||||
while (collected < remaining && baseOffset + collected < total) {
|
||||
const pageSize = Math.min(pageLimit, remaining - collected);
|
||||
pageRequests.push({ offset: baseOffset + collected, limit: pageSize });
|
||||
collected += pageSize;
|
||||
}
|
||||
|
||||
const pages = await Promise.all(
|
||||
pageRequests.map(async ({ offset, limit }) => {
|
||||
const data = await apiClient.get('/logs', {
|
||||
params: { ...params, limit, offset },
|
||||
timeout: LOGS_TIMEOUT_MS,
|
||||
});
|
||||
if (!isRecord(data) || !Array.isArray(data.logs)) return [];
|
||||
return homeRecordsFromPayload(data);
|
||||
})
|
||||
);
|
||||
|
||||
pages.forEach((pageRecords) => records.push(...pageRecords));
|
||||
|
||||
return { ...firstPage, logs: records, limit: records.length, offset: firstOffset };
|
||||
};
|
||||
|
||||
export const logsApi = {
|
||||
|
||||
Reference in New Issue
Block a user