misc: added timeout error prompt

This commit is contained in:
Sheen Capadngan
2024-10-04 02:41:21 +08:00
parent 81846d9c67
commit e05f05f9ed
2 changed files with 40 additions and 21 deletions
@@ -1,8 +1,8 @@
import { Knex } from "knex"; import { Knex, KnexTimeoutError } from "knex";
import { TDbClient } from "@app/db"; import { TDbClient } from "@app/db";
import { TableName } from "@app/db/schemas"; import { TableName } from "@app/db/schemas";
import { DatabaseError } from "@app/lib/errors"; import { BadRequestError, DatabaseError } from "@app/lib/errors";
import { ormify, selectAllTableCols } from "@app/lib/knex"; import { ormify, selectAllTableCols } from "@app/lib/knex";
import { logger } from "@app/lib/logger"; import { logger } from "@app/lib/logger";
import { QueueName } from "@app/queue"; import { QueueName } from "@app/queue";
@@ -110,6 +110,13 @@ export const auditLogDALFactory = (db: TDbClient) => {
return docs; return docs;
} catch (error) { } catch (error) {
if (error instanceof KnexTimeoutError) {
throw new BadRequestError({
error,
message: "Failed to fetch audit logs due to timeout. Add more search filters."
});
}
throw new DatabaseError({ error }); throw new DatabaseError({ error });
} }
}; };
+31 -19
View File
@@ -1,5 +1,7 @@
import { useInfiniteQuery, UseInfiniteQueryOptions, useQuery } from "@tanstack/react-query"; import { useInfiniteQuery, UseInfiniteQueryOptions, useQuery } from "@tanstack/react-query";
import { AxiosError } from "axios";
import { createNotification } from "@app/components/notifications";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { Actor, AuditLog, TGetAuditLogsFilter } from "./types"; import { Actor, AuditLog, TGetAuditLogsFilter } from "./types";
@@ -28,27 +30,37 @@ export const useGetAuditLogs = (
return useInfiniteQuery({ return useInfiniteQuery({
queryKey: auditLogKeys.getAuditLogs(projectId, filters), queryKey: auditLogKeys.getAuditLogs(projectId, filters),
queryFn: async ({ pageParam }) => { queryFn: async ({ pageParam }) => {
const { data } = await apiRequest.get<{ auditLogs: AuditLog[] }>( try {
"/api/v1/organization/audit-logs", const { data } = await apiRequest.get<{ auditLogs: AuditLog[] }>(
{ "/api/v1/organization/audit-logs",
params: { {
...filters, params: {
offset: pageParam, ...filters,
startDate: filters?.startDate?.toISOString(), offset: pageParam,
endDate: filters?.endDate?.toISOString(), startDate: filters?.startDate?.toISOString(),
...(filters.eventMetadata && Object.keys(filters.eventMetadata).length endDate: filters?.endDate?.toISOString(),
? { ...(filters.eventMetadata && Object.keys(filters.eventMetadata).length
eventMetadata: Object.entries(filters.eventMetadata) ? {
.map(([key, value]) => `${key}=${value}`) eventMetadata: Object.entries(filters.eventMetadata)
.join(",") .map(([key, value]) => `${key}=${value}`)
} .join(",")
: {}), }
...(filters.eventType?.length ? { eventType: filters.eventType.join(",") } : {}), : {}),
...(projectId ? { projectId } : {}) ...(filters.eventType?.length ? { eventType: filters.eventType.join(",") } : {}),
...(projectId ? { projectId } : {})
}
} }
);
return data.auditLogs;
} catch (error) {
if (error instanceof AxiosError) {
createNotification({
type: "error",
text: error.response?.data.message
});
} }
); return [];
return data.auditLogs; }
}, },
getNextPageParam: (lastPage, pages) => getNextPageParam: (lastPage, pages) =>
lastPage.length !== 0 ? pages.length * filters.limit : undefined, lastPage.length !== 0 ? pages.length * filters.limit : undefined,