Pipeline.utils.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { PipelineStatusName } from './Replication.constants'
  2. import { ReplicationPipelineStatusData } from '@/data/replication/pipeline-status-query'
  3. import { PipelineStatusRequestStatus } from '@/state/replication-pipeline-request-status'
  4. export const getStatusName = (
  5. status: ReplicationPipelineStatusData['status'] | undefined
  6. ): PipelineStatusName | undefined => {
  7. if (!status || typeof status !== 'object' || !('name' in status)) return undefined
  8. return normalizePipelineStatusName(status.name)
  9. }
  10. export const normalizePipelineStatusName = (statusName?: string): PipelineStatusName | undefined =>
  11. typeof statusName === 'string' &&
  12. (Object.values(PipelineStatusName) as string[]).includes(statusName)
  13. ? (statusName as PipelineStatusName)
  14. : undefined
  15. export const PIPELINE_ENABLE_ALLOWED_FROM: PipelineStatusName[] = [PipelineStatusName.STOPPED]
  16. export const PIPELINE_DISABLE_ALLOWED_FROM: PipelineStatusName[] = [
  17. PipelineStatusName.STARTED,
  18. PipelineStatusName.FAILED,
  19. ]
  20. export const PIPELINE_ACTIONABLE_STATES: PipelineStatusName[] = [
  21. PipelineStatusName.FAILED,
  22. PipelineStatusName.STARTED,
  23. PipelineStatusName.STOPPED,
  24. ]
  25. export type PipelineDisplayStateKey =
  26. | 'starting'
  27. | 'stopping'
  28. | 'restarting'
  29. | 'failed'
  30. | 'stopped'
  31. | 'running'
  32. | 'unknown'
  33. export type PipelineDisplayType = 'failure' | 'loading' | 'success' | 'idle'
  34. export interface PipelineDisplayState {
  35. key: PipelineDisplayStateKey
  36. label: string
  37. title: string
  38. message: string
  39. badge: string
  40. type: PipelineDisplayType
  41. }
  42. const PIPELINE_DISPLAY_STATES: Record<PipelineDisplayStateKey, PipelineDisplayState> = {
  43. starting: {
  44. key: 'starting',
  45. label: 'Starting',
  46. title: 'Starting pipeline',
  47. message: 'Starting the pipeline. Replication will resume once running.',
  48. badge: 'Starting',
  49. type: 'loading',
  50. },
  51. stopping: {
  52. key: 'stopping',
  53. label: 'Stopping',
  54. title: 'Stopping pipeline',
  55. message: 'Stopping replication. Data transfer will be paused once stopped.',
  56. badge: 'Stopping',
  57. type: 'loading',
  58. },
  59. restarting: {
  60. key: 'restarting',
  61. label: 'Restarting',
  62. title: 'Restarting pipeline',
  63. message: 'Applying settings and restarting the pipeline.',
  64. badge: 'Restarting',
  65. type: 'loading',
  66. },
  67. failed: {
  68. key: 'failed',
  69. label: 'Failed',
  70. title: 'Pipeline failed',
  71. message: 'Replication has encountered an error.',
  72. badge: 'Failed',
  73. type: 'failure',
  74. },
  75. stopped: {
  76. key: 'stopped',
  77. label: 'Stopped',
  78. title: 'Pipeline stopped',
  79. message: 'Replication is paused. Start the pipeline to resume data synchronization.',
  80. badge: 'Stopped',
  81. type: 'idle',
  82. },
  83. running: {
  84. key: 'running',
  85. label: 'Running',
  86. title: 'Pipeline running',
  87. message: 'Replication is active and processing changes.',
  88. badge: 'Running',
  89. type: 'success',
  90. },
  91. unknown: {
  92. key: 'unknown',
  93. label: 'Unknown',
  94. title: 'Pipeline status unknown',
  95. message: 'Unable to determine pipeline status.',
  96. badge: 'Unknown',
  97. type: 'idle',
  98. },
  99. }
  100. export const getPipelineDisplayState = (
  101. requestStatus?: PipelineStatusRequestStatus,
  102. statusName?: PipelineStatusName
  103. ): PipelineDisplayState => {
  104. if (requestStatus === PipelineStatusRequestStatus.RestartRequested) {
  105. return PIPELINE_DISPLAY_STATES.restarting
  106. }
  107. if (requestStatus === PipelineStatusRequestStatus.StartRequested) {
  108. return PIPELINE_DISPLAY_STATES.starting
  109. }
  110. if (requestStatus === PipelineStatusRequestStatus.StopRequested) {
  111. return PIPELINE_DISPLAY_STATES.stopping
  112. }
  113. switch (statusName) {
  114. case PipelineStatusName.STARTING:
  115. return PIPELINE_DISPLAY_STATES.starting
  116. case PipelineStatusName.FAILED:
  117. return PIPELINE_DISPLAY_STATES.failed
  118. case PipelineStatusName.STOPPED:
  119. return PIPELINE_DISPLAY_STATES.stopped
  120. case PipelineStatusName.STARTED:
  121. return PIPELINE_DISPLAY_STATES.running
  122. case PipelineStatusName.STOPPING:
  123. return PIPELINE_DISPLAY_STATES.stopping
  124. case PipelineStatusName.UNKNOWN:
  125. default:
  126. return PIPELINE_DISPLAY_STATES.unknown
  127. }
  128. }