1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-04 01:18:20 +02:00
unleash.unleash/frontend/src/hooks/api/getters/useFeatureMetrics/useFeatureMetrics.ts
Christopher Kolstad 8a9dc32bad Create hook for fetching featureMetrics (#414)
* Create hook for fetching featureMetrics
2021-10-13 10:20:34 +02:00

58 lines
1.5 KiB
TypeScript

import { formatApiPath } from '../../../../utils/format-path';
import { useEffect, useState } from 'react';
import useSWR, { mutate } from 'swr';
import { IFeatureMetrics } from '../../../../interfaces/featureToggle';
interface IUseFeatureMetricsOptions {
refreshInterval?: number;
revalidateOnFocus?: boolean;
revalidateOnReconnect?: boolean;
revalidateIfStale?: boolean;
revalidateOnMount?: boolean;
}
const emptyMetrics = { lastHourUsage: [], seenApplications: [] };
const useFeatureMetrics = (projectId: string, featureId: string, options: IUseFeatureMetricsOptions = {}) => {
const fetcher = async () => {
const path = formatApiPath(`api/admin/client-metrics/features/${featureId}`);
const res = await fetch(path, {
method: 'GET'
});
if (res.ok) {
return res.json();
} else {
return emptyMetrics;
}
};
const FEATURE_METRICS_CACHE_KEY = `${projectId}_${featureId}_metrics`;
const { data, error } = useSWR<IFeatureMetrics>(
FEATURE_METRICS_CACHE_KEY,
fetcher,
{
...options
}
);
const [loading, setLoading] = useState(!error && !data);
const refetch = () => {
mutate(FEATURE_METRICS_CACHE_KEY);
};
useEffect(() => {
setLoading(!error && !data);
}, [data, error]);
return {
metrics: data || emptyMetrics,
error,
loading,
refetch,
FEATURE_METRICS_CACHE_KEY
};
};
export default useFeatureMetrics;