consumerGroups.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import {
  2. ConsumerGroupsApi,
  3. Configuration,
  4. ConsumerGroupOffsetsResetType,
  5. } from 'generated-sources';
  6. import {
  7. ConsumerGroupID,
  8. PromiseThunkResult,
  9. ClusterName,
  10. FailurePayload,
  11. } from 'redux/interfaces';
  12. import { BASE_PARAMS } from 'lib/constants';
  13. import { getResponse } from 'lib/errorHandling';
  14. import * as actions from 'redux/actions/actions';
  15. const apiClientConf = new Configuration(BASE_PARAMS);
  16. export const consumerGroupsApiClient = new ConsumerGroupsApi(apiClientConf);
  17. export const fetchConsumerGroupsList =
  18. (clusterName: ClusterName): PromiseThunkResult =>
  19. async (dispatch) => {
  20. dispatch(actions.fetchConsumerGroupsAction.request());
  21. try {
  22. const consumerGroups = await consumerGroupsApiClient.getConsumerGroups({
  23. clusterName,
  24. });
  25. dispatch(actions.fetchConsumerGroupsAction.success(consumerGroups));
  26. } catch (e) {
  27. const response = await getResponse(e);
  28. const alert: FailurePayload = {
  29. subject: ['consumer-groups', clusterName].join('-'),
  30. title: `Consumer Gropups`,
  31. response,
  32. };
  33. dispatch(actions.fetchConsumerGroupsAction.failure({ alert }));
  34. }
  35. };
  36. export const fetchConsumerGroupDetails =
  37. (
  38. clusterName: ClusterName,
  39. consumerGroupID: ConsumerGroupID
  40. ): PromiseThunkResult =>
  41. async (dispatch) => {
  42. dispatch(actions.fetchConsumerGroupDetailsAction.request());
  43. try {
  44. const consumerGroupDetails =
  45. await consumerGroupsApiClient.getConsumerGroup({
  46. clusterName,
  47. id: consumerGroupID,
  48. });
  49. dispatch(
  50. actions.fetchConsumerGroupDetailsAction.success({
  51. consumerGroupID,
  52. details: consumerGroupDetails,
  53. })
  54. );
  55. } catch (e) {
  56. const response = await getResponse(e);
  57. const alert: FailurePayload = {
  58. subject: ['consumer-group', consumerGroupID].join('-'),
  59. title: `Consumer Gropup ${consumerGroupID}`,
  60. response,
  61. };
  62. dispatch(actions.fetchConsumerGroupDetailsAction.failure({ alert }));
  63. }
  64. };
  65. export const deleteConsumerGroup =
  66. (
  67. clusterName: ClusterName,
  68. consumerGroupID: ConsumerGroupID
  69. ): PromiseThunkResult =>
  70. async (dispatch) => {
  71. dispatch(actions.deleteConsumerGroupAction.request());
  72. try {
  73. await consumerGroupsApiClient.deleteConsumerGroup({
  74. clusterName,
  75. id: consumerGroupID,
  76. });
  77. dispatch(actions.deleteConsumerGroupAction.success(consumerGroupID));
  78. } catch (e) {
  79. const response = await getResponse(e);
  80. const alert: FailurePayload = {
  81. subject: ['consumer-group', consumerGroupID].join('-'),
  82. title: `Consumer Gropup ${consumerGroupID}`,
  83. response,
  84. };
  85. dispatch(actions.deleteConsumerGroupAction.failure({ alert }));
  86. }
  87. };
  88. export const resetConsumerGroupOffsets =
  89. (
  90. clusterName: ClusterName,
  91. consumerGroupID: ConsumerGroupID,
  92. requestBody: {
  93. topic: string;
  94. resetType: ConsumerGroupOffsetsResetType;
  95. partitionsOffsets?: { offset: string; partition: number }[];
  96. resetToTimestamp?: Date;
  97. partitions: number[];
  98. }
  99. ): PromiseThunkResult =>
  100. async (dispatch) => {
  101. dispatch(actions.resetConsumerGroupOffsetsAction.request());
  102. try {
  103. await consumerGroupsApiClient.resetConsumerGroupOffsets({
  104. clusterName,
  105. id: consumerGroupID,
  106. consumerGroupOffsetsReset: {
  107. topic: requestBody.topic,
  108. resetType: requestBody.resetType,
  109. partitions: requestBody.partitions,
  110. partitionsOffsets: requestBody.partitionsOffsets?.map((offset) => ({
  111. ...offset,
  112. offset: +offset.offset,
  113. })),
  114. resetToTimestamp: requestBody.resetToTimestamp?.getTime(),
  115. },
  116. });
  117. dispatch(actions.resetConsumerGroupOffsetsAction.success());
  118. } catch (e) {
  119. const response = await getResponse(e);
  120. const alert: FailurePayload = {
  121. subject: ['consumer-group', consumerGroupID].join('-'),
  122. title: `Consumer Gropup ${consumerGroupID}`,
  123. response,
  124. };
  125. dispatch(actions.resetConsumerGroupOffsetsAction.failure({ alert }));
  126. }
  127. };