https://dev.kronoz.win/r/marzneshin.git
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}