mirror of
https://github.com/fosrl/pangolin.git
synced 2026-05-25 10:12:35 +00:00
🚧 refactor
This commit is contained in:
@@ -26,7 +26,7 @@ export default function GeneralPage() {
|
|||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
|
||||||
const [rows, setRows] = useState<any[]>([]);
|
const [rows, setRows] = useState<any[]>([]);
|
||||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
const [isRefreshing, startRefreshingTransition] = useTransition();
|
||||||
const [isExporting, startTransition] = useTransition();
|
const [isExporting, startTransition] = useTransition();
|
||||||
|
|
||||||
// Pagination state
|
// Pagination state
|
||||||
@@ -279,7 +279,6 @@ export default function GeneralPage() {
|
|||||||
|
|
||||||
const refreshData = async () => {
|
const refreshData = async () => {
|
||||||
console.log("Data refreshed");
|
console.log("Data refreshed");
|
||||||
setIsRefreshing(true);
|
|
||||||
try {
|
try {
|
||||||
// Refresh data with current date range and pagination
|
// Refresh data with current date range and pagination
|
||||||
await queryDateTime(
|
await queryDateTime(
|
||||||
@@ -294,8 +293,6 @@ export default function GeneralPage() {
|
|||||||
description: t("refreshError"),
|
description: t("refreshError"),
|
||||||
variant: "destructive"
|
variant: "destructive"
|
||||||
});
|
});
|
||||||
} finally {
|
|
||||||
setIsRefreshing(false);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -781,7 +778,7 @@ export default function GeneralPage() {
|
|||||||
title={t("requestLogs")}
|
title={t("requestLogs")}
|
||||||
searchPlaceholder={t("searchLogs")}
|
searchPlaceholder={t("searchLogs")}
|
||||||
searchColumn="host"
|
searchColumn="host"
|
||||||
onRefresh={refreshData}
|
onRefresh={() => startRefreshingTransition(refreshData)}
|
||||||
isRefreshing={isRefreshing}
|
isRefreshing={isRefreshing}
|
||||||
onExport={() => startTransition(exportData)}
|
onExport={() => startTransition(exportData)}
|
||||||
isExporting={isExporting}
|
isExporting={isExporting}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { build } from "@server/build";
|
import { build } from "@server/build";
|
||||||
import type { QueryRequestAnalyticsResponse } from "@server/routers/auditLogs";
|
import type { QueryRequestAnalyticsResponse } from "@server/routers/auditLogs";
|
||||||
|
import type { QueryRequestAuditLogResponse } from "@server/routers/auditLogs/types";
|
||||||
import type { ListClientsResponse } from "@server/routers/client";
|
import type { ListClientsResponse } from "@server/routers/client";
|
||||||
import type {
|
import type {
|
||||||
ListDomainsResponse,
|
ListDomainsResponse,
|
||||||
@@ -529,7 +530,36 @@ export const logAnalyticsFiltersSchema = z.object({
|
|||||||
resourceId: z.coerce.number().optional().catch(undefined)
|
resourceId: z.coerce.number().optional().catch(undefined)
|
||||||
});
|
});
|
||||||
|
|
||||||
export type LogAnalyticsFilters = z.TypeOf<typeof logAnalyticsFiltersSchema>;
|
export type LogAnalyticsFilters = z.output<typeof logAnalyticsFiltersSchema>;
|
||||||
|
|
||||||
|
export const logsFiltersSchema = z.object({
|
||||||
|
timeStart: z
|
||||||
|
.string()
|
||||||
|
.refine((val) => !isNaN(Date.parse(val)), {
|
||||||
|
error: "timeStart must be a valid ISO date string"
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
.catch(undefined),
|
||||||
|
timeEnd: z
|
||||||
|
.string()
|
||||||
|
.refine((val) => !isNaN(Date.parse(val)), {
|
||||||
|
error: "timeEnd must be a valid ISO date string"
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
.catch(undefined),
|
||||||
|
page: z.coerce.number().optional().catch(0).default(0),
|
||||||
|
pageSize: z.coerce.number().optional().catch(20).default(20),
|
||||||
|
resourceId: z.coerce.number().optional().catch(undefined),
|
||||||
|
action: z.string().optional().catch(undefined),
|
||||||
|
host: z.string().optional().catch(undefined),
|
||||||
|
location: z.string().optional().catch(undefined),
|
||||||
|
actor: z.string().optional().catch(undefined),
|
||||||
|
method: z.string().optional().catch(undefined),
|
||||||
|
reason: z.string().optional().catch(undefined),
|
||||||
|
path: z.string().optional().catch(undefined)
|
||||||
|
});
|
||||||
|
|
||||||
|
export type LogFilters = z.output<typeof logsFiltersSchema>;
|
||||||
|
|
||||||
export const logQueries = {
|
export const logQueries = {
|
||||||
requestAnalytics: ({
|
requestAnalytics: ({
|
||||||
@@ -540,7 +570,7 @@ export const logQueries = {
|
|||||||
filters: LogAnalyticsFilters;
|
filters: LogAnalyticsFilters;
|
||||||
}) =>
|
}) =>
|
||||||
queryOptions({
|
queryOptions({
|
||||||
queryKey: ["REQUEST_LOG_ANALYTICS", orgId, filters] as const,
|
queryKey: ["REQUEST_LOGS", orgId, "ANALYTICS", filters] as const,
|
||||||
queryFn: async ({ signal, meta }) => {
|
queryFn: async ({ signal, meta }) => {
|
||||||
const res = await meta!.api.get<
|
const res = await meta!.api.get<
|
||||||
AxiosResponse<QueryRequestAnalyticsResponse>
|
AxiosResponse<QueryRequestAnalyticsResponse>
|
||||||
@@ -556,6 +586,31 @@ export const logQueries = {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
requests: ({ orgId, filters }: { orgId: string; filters: LogFilters }) =>
|
||||||
|
queryOptions({
|
||||||
|
queryKey: ["REQUEST_LOGS", orgId, "ALL", filters] as const,
|
||||||
|
queryFn: async ({ signal, meta }) => {
|
||||||
|
const { page, pageSize, ...rest } = filters;
|
||||||
|
const res = await meta!.api.get<
|
||||||
|
AxiosResponse<QueryRequestAuditLogResponse>
|
||||||
|
>(`/org/${orgId}/logs/request`, {
|
||||||
|
params: {
|
||||||
|
...rest,
|
||||||
|
limit: pageSize,
|
||||||
|
offset: page * pageSize
|
||||||
|
},
|
||||||
|
signal
|
||||||
|
});
|
||||||
|
return res.data.data;
|
||||||
|
},
|
||||||
|
refetchInterval: (query) => {
|
||||||
|
if (query.state.data) {
|
||||||
|
return durationToMs(30, "seconds");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user