gitscope
← marzneshin / master / dashboard/src/modules/nodes/api/nodes-usage.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/nodes/api/nodes-usage.query.ts · TypeScript
Blame Raw
 1import { useQuery } from "@tanstack/react-query";
 2import { fetch } from "@marzneshin/common/utils";
 3
 4export type UsageMetric = number[];
 5
 6export interface NodesUsageResponse {
 7    usages: Array<UsageMetric>;
 8    total: number;
 9}
10
11export interface NodesUsageQueryOptions {
12    nodeId: number;
13    start: string;
14    end: string;
15}
16
17export type NodesUsageQueryKey = [string, number, string, { start?: string, end?: string }]
18
19export const NodesUsageDefault = {
20    total: 0,
21    usages: []
22}
23
24export async function fetchNodesUsage({ queryKey }: { queryKey: NodesUsageQueryKey }): Promise<NodesUsageResponse> {
25    return await fetch(`/nodes/${queryKey[1]}/usage`, {
26        query: {
27            start: queryKey[3].start,
28            end: queryKey[3].end
29        }
30    }).then((result) => {
31        return result;
32    });
33}
34export const useNodesUsageQuery = ({ nodeId, start, end }: NodesUsageQueryOptions) => {
35    return useQuery({
36        queryKey: ["nodes", nodeId, "usage", { start, end }],
37        queryFn: fetchNodesUsage,
38        refetchInterval: 1000 * 60 * 5, // 60min refresh
39        initialData: NodesUsageDefault
40    })
41}