reducer.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import {
  2. Action,
  3. BrokersState,
  4. ZooKeeperStatus,
  5. BrokerMetrics,
  6. } from 'redux/interfaces';
  7. import {
  8. ActionType,
  9. } from 'redux/actionType';
  10. export const initialState: BrokersState = {
  11. items: [],
  12. brokerCount: 0,
  13. zooKeeperStatus: ZooKeeperStatus.offline,
  14. activeControllers: 0,
  15. onlinePartitionCount: 0,
  16. offlinePartitionCount: 0,
  17. inSyncReplicasCount: 0,
  18. outOfSyncReplicasCount: 0,
  19. underReplicatedPartitionCount: 0,
  20. diskUsage: [],
  21. };
  22. const updateBrokerSegmentSize = (state: BrokersState, payload: BrokerMetrics) => {
  23. const brokers = state.items;
  24. const { diskUsage } = payload;
  25. const items = brokers.map((broker) => {
  26. const brokerMetrics = diskUsage.find(({ brokerId }) => brokerId === broker.brokerId);
  27. if (brokerMetrics !== undefined) {
  28. return { ...broker, ...brokerMetrics };
  29. }
  30. return broker;
  31. });
  32. return { ...state, items, ...payload };
  33. };
  34. const reducer = (state = initialState, action: Action): BrokersState => {
  35. switch (action.type) {
  36. case ActionType.GET_BROKERS__REQUEST:
  37. return initialState;
  38. case ActionType.GET_BROKERS__SUCCESS:
  39. return {
  40. ...state,
  41. items: action.payload,
  42. };
  43. case ActionType.GET_BROKER_METRICS__SUCCESS:
  44. return updateBrokerSegmentSize(state, action.payload);
  45. default:
  46. return state;
  47. }
  48. };
  49. export default reducer;