brokersSlice.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { BrokersApi, ClustersApi, Configuration } from 'generated-sources';
  2. import { BrokersState, ClusterName, RootState } from 'redux/interfaces';
  3. import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
  4. import { BASE_PARAMS } from 'lib/constants';
  5. const apiClientConf = new Configuration(BASE_PARAMS);
  6. export const brokersApiClient = new BrokersApi(apiClientConf);
  7. export const clustersApiClient = new ClustersApi(apiClientConf);
  8. export const fetchBrokers = createAsyncThunk(
  9. 'brokers/fetchBrokers',
  10. (clusterName: ClusterName) => brokersApiClient.getBrokers({ clusterName })
  11. );
  12. export const fetchClusterStats = createAsyncThunk(
  13. 'brokers/fetchClusterStats',
  14. (clusterName: ClusterName) =>
  15. clustersApiClient.getClusterStats({ clusterName })
  16. );
  17. export const initialState: BrokersState = {
  18. items: [],
  19. brokerCount: 0,
  20. activeControllers: 0,
  21. onlinePartitionCount: 0,
  22. offlinePartitionCount: 0,
  23. inSyncReplicasCount: 0,
  24. outOfSyncReplicasCount: 0,
  25. underReplicatedPartitionCount: 0,
  26. diskUsage: [],
  27. };
  28. export const brokersSlice = createSlice({
  29. name: 'brokers',
  30. initialState,
  31. reducers: {},
  32. extraReducers: (builder) => {
  33. builder.addCase(fetchBrokers.pending, () => initialState);
  34. builder.addCase(fetchBrokers.fulfilled, (state, { payload }) => ({
  35. ...state,
  36. items: payload,
  37. }));
  38. builder.addCase(fetchClusterStats.fulfilled, (state, { payload }) => ({
  39. ...state,
  40. ...payload,
  41. }));
  42. },
  43. });
  44. export const selectStats = (state: RootState) => state.brokers;
  45. export default brokersSlice.reducer;