https://dev.kronoz.win/r/marzneshin.git
1import { useQuery } from "@tanstack/react-query";
2import { fetch } from "@marzneshin/utils";
3import { UsersQueryFetchKey } from "../..";
4
5type UsageMetric = number[];
6
7interface NodeUsage {
8 node_id: number;
9 node_name: string;
10 usages: Array<UsageMetric>;
11}
12
13export interface UserNodeUsagesResponse {
14 username: string;
15 total: number;
16 node_usages: NodeUsage[];
17}
18
19export interface UserNodeUsagesQueryOptions {
20 username: string;
21 start?: string;
22 end?: string
23}
24
25export type UserNodeUsagesQueryKey = [string, string, { start?: string, end?: string }]
26
27export const UserNodeUsagesDefault = {
28 username: "",
29 node_usages: [],
30 total: 0
31}
32
33export async function fetchUserNodeUsages({ queryKey }: { queryKey: UserNodeUsagesQueryKey }): Promise<UserNodeUsagesResponse> {
34 return await fetch(`/users/${queryKey[1]}/usage`, {
35 query: {
36 start: queryKey[2].start,
37 end: queryKey[2].end
38 }
39 }).then((result) => {
40 return result;
41 });
42}
43
44export const useUserNodeUsagesQuery = ({ username, start, end }: UserNodeUsagesQueryOptions) => {
45 return useQuery({
46 queryKey: [UsersQueryFetchKey, username, { start, end }],
47 queryFn: fetchUserNodeUsages,
48 refetchInterval: 1000 * 60 * 60, // 60min refresh
49 initialData: UserNodeUsagesDefault
50 })
51}