ClusterResourcesContext.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React, { createContext, useContext } from "react";
  2. import {
  3. useClusterResourceLimits,
  4. type ClientLoadBalancerType,
  5. } from "lib/hooks/useClusterResourceLimits";
  6. import { Context } from "./Context";
  7. export type ClusterResources = {
  8. maxCPU: number;
  9. maxRAM: number;
  10. defaultCPU: number;
  11. defaultRAM: number;
  12. clusterContainsGPUNodes: boolean;
  13. clusterIngressIp: string;
  14. loadBalancerType: ClientLoadBalancerType;
  15. maxGPU: number;
  16. };
  17. export const ClusterResourcesContext = createContext<{
  18. currentClusterResources: ClusterResources;
  19. } | null>(null);
  20. export const useClusterResources = (): {
  21. currentClusterResources: ClusterResources;
  22. } => {
  23. const context = useContext(ClusterResourcesContext);
  24. if (context == null) {
  25. throw new Error(
  26. "useClusterResources must be used within a ClusterResourcesContext"
  27. );
  28. }
  29. return context;
  30. };
  31. const ClusterResourcesProvider = ({
  32. children,
  33. }: {
  34. children: JSX.Element;
  35. }): JSX.Element => {
  36. const { currentCluster, currentProject } = useContext(Context);
  37. var {
  38. maxCPU,
  39. maxRAM,
  40. defaultCPU,
  41. defaultRAM,
  42. maxGPU,
  43. clusterContainsGPUNodes,
  44. clusterIngressIp,
  45. loadBalancerType,
  46. } = useClusterResourceLimits({
  47. projectId: currentProject?.id,
  48. clusterId: currentCluster?.id,
  49. clusterStatus: currentCluster?.status,
  50. });
  51. if (currentProject?.sandbox_enabled) {
  52. defaultCPU = 0.1
  53. defaultRAM = 120
  54. maxRAM = 250
  55. maxCPU = 0.2
  56. }
  57. return (
  58. <ClusterResourcesContext.Provider
  59. value={{
  60. currentClusterResources: {
  61. maxCPU,
  62. maxRAM,
  63. defaultCPU,
  64. defaultRAM,
  65. maxGPU,
  66. clusterContainsGPUNodes,
  67. clusterIngressIp,
  68. loadBalancerType,
  69. },
  70. }}
  71. >
  72. {children}
  73. </ClusterResourcesContext.Provider>
  74. );
  75. };
  76. export default ClusterResourcesProvider;