reducer.ts 1.4 KB

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