mirror of https://github.com/portainer/portainer
73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { useAuthorizations } from '@/react/hooks/useUser';
|
|
import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
|
|
import { getSafeValue } from '@/react/kubernetes/utils';
|
|
import { useCurrentEnvironment } from '@/react/hooks/useCurrentEnvironment';
|
|
|
|
import {
|
|
useClusterResourceLimitsQuery,
|
|
useClusterResourceReservationQuery,
|
|
useClusterResourceUsageQuery,
|
|
} from './queries';
|
|
|
|
export function useClusterResourceReservationData() {
|
|
const { data: environment } = useCurrentEnvironment();
|
|
const environmentId = useEnvironmentId();
|
|
|
|
// Check if server metrics is enabled
|
|
const serverMetricsEnabled =
|
|
environment?.Kubernetes?.Configuration?.UseServerMetrics || false;
|
|
|
|
// User needs to have K8sClusterNodeR authorization to view resource usage data
|
|
const { authorized: hasK8sClusterNodeR } = useAuthorizations(
|
|
['K8sClusterNodeR'],
|
|
undefined,
|
|
true
|
|
);
|
|
|
|
// Get resource limits for the cluster
|
|
const { data: resourceLimits, isLoading: isResourceLimitLoading } =
|
|
useClusterResourceLimitsQuery(environmentId);
|
|
|
|
// Get resource reservation info for the cluster
|
|
const {
|
|
data: resourceReservation,
|
|
isFetching: isResourceReservationLoading,
|
|
} = useClusterResourceReservationQuery(
|
|
environmentId,
|
|
resourceLimits?.nodes || []
|
|
);
|
|
|
|
// Get resource usage info for the cluster
|
|
const {
|
|
data: resourceUsage,
|
|
isFetching: isResourceUsageLoading,
|
|
isError: isResourceUsageError,
|
|
} = useClusterResourceUsageQuery(
|
|
environmentId,
|
|
serverMetricsEnabled,
|
|
hasK8sClusterNodeR,
|
|
resourceLimits?.nodes || []
|
|
);
|
|
|
|
return {
|
|
memoryLimit: getSafeValue(resourceLimits?.memoryLimit || 0),
|
|
cpuLimit: getSafeValue(resourceLimits?.cpuLimit || 0),
|
|
displayResourceUsage: hasK8sClusterNodeR && serverMetricsEnabled,
|
|
resourceUsage: {
|
|
cpu: getSafeValue(resourceUsage?.cpu || 0),
|
|
memory: getSafeValue(resourceUsage?.memory || 0),
|
|
},
|
|
resourceReservation: {
|
|
cpu: getSafeValue(resourceReservation?.cpu || 0),
|
|
memory: getSafeValue(resourceReservation?.memory || 0),
|
|
},
|
|
isLoading:
|
|
isResourceLimitLoading ||
|
|
isResourceReservationLoading ||
|
|
isResourceUsageLoading,
|
|
// Display warning if server metrics isn't responding but should be
|
|
displayWarning:
|
|
hasK8sClusterNodeR && serverMetricsEnabled && isResourceUsageError,
|
|
};
|
|
}
|