2
0

System.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { createContext, useEffect, useState, useContext } from 'react';
  2. import { UserService, MilvusService } from '@/http';
  3. import { parseJson, getNode, getSystemConfigs } from '@/utils';
  4. import { MILVUS_NODE_TYPE } from '@/consts';
  5. import { authContext } from '@/context';
  6. import type { SystemContextType } from './Types';
  7. export const systemContext = createContext<SystemContextType>({
  8. data: {},
  9. });
  10. const { Provider } = systemContext;
  11. export const SystemProvider = (props: { children: React.ReactNode }) => {
  12. const { isAuth, isServerless } = useContext(authContext);
  13. const [data, setData] = useState<any>({});
  14. const fetchData = async () => {
  15. try {
  16. // fetch all data
  17. const [metrics, users, roles] = await Promise.all([
  18. MilvusService.getMetrics(),
  19. !isServerless ? UserService.getUsers() : { usernames: [] },
  20. !isServerless ? UserService.getRoles() : { results: [] },
  21. ]);
  22. // parse data
  23. const parsedJson = parseJson(metrics);
  24. // get query nodes
  25. const queryNodes = getNode(
  26. parsedJson.allNodes,
  27. MILVUS_NODE_TYPE.QUERYNODE
  28. );
  29. // get data nodes
  30. const dataNodes = getNode(parsedJson.allNodes, MILVUS_NODE_TYPE.DATANODE);
  31. // get data nodes
  32. const indexNodes = getNode(
  33. parsedJson.allNodes,
  34. MILVUS_NODE_TYPE.INDEXNODE
  35. );
  36. // get root coord
  37. const rootCoord = getNode(
  38. parsedJson.allNodes,
  39. MILVUS_NODE_TYPE.ROOTCOORD
  40. )[0];
  41. // get system config
  42. const systemConfig = getSystemConfigs(parsedJson.workingNodes);
  43. const deployMode = rootCoord.infos.system_info?.deploy_mode;
  44. const systemInfo = rootCoord.infos.system_info;
  45. const data = {
  46. users: users.usernames,
  47. roles: roles.results,
  48. queryNodes,
  49. dataNodes,
  50. indexNodes,
  51. rootCoord,
  52. deployMode,
  53. parsedJson,
  54. systemConfig,
  55. systemInfo,
  56. };
  57. // store other datas
  58. setData(data);
  59. } catch (error) {
  60. // do nothing
  61. console.log('fetch data error', error);
  62. }
  63. };
  64. useEffect(() => {
  65. if (isAuth) {
  66. fetchData();
  67. } else {
  68. setData({});
  69. }
  70. }, [isAuth]);
  71. return (
  72. <Provider
  73. value={{
  74. data,
  75. }}
  76. >
  77. {props.children}
  78. </Provider>
  79. );
  80. };