From a852a0616677f733c20c814233593d6fbb8f98b7 Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Tue, 30 Sep 2025 10:48:57 +0530 Subject: [PATCH] supported running status in contract execution chart (#23611) --- .../ContractExecutionChart.component.tsx | 10 +++++++++ .../ContractExecutionChart.test.tsx | 8 +++++++ .../ui/src/constants/Color.constants.ts | 1 + .../DataContract/DataContractUtils.test.ts | 21 ++++++++++++++++++- .../utils/DataContract/DataContractUtils.ts | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.component.tsx index ff39824ce26..8e88edecf84 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.component.tsx @@ -25,6 +25,7 @@ import { XAxis, } from 'recharts'; import { + BLUE_1, GREEN_4, GREY_100, RED_3, @@ -177,6 +178,15 @@ const ContractExecutionChart = ({ contract }: { contract: DataContract }) => { stackId="single" {...DATA_CONTRACT_EXECUTION_CHART_COMMON_PROPS} /> + + } + dataKey="running" + fill={BLUE_1} + name={t('label.running')} + stackId="single" + {...DATA_CONTRACT_EXECUTION_CHART_COMMON_PROPS} + /> )} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.test.tsx index ae8b8630a0f..001eccc148c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/DataContract/ContractExecutionChart/ContractExecutionChart.test.tsx @@ -183,6 +183,7 @@ jest.mock('react-i18next', () => ({ 'label.success': 'Success', 'label.failed': 'Failed', 'label.aborted': 'Aborted', + 'label.running': 'Running', }; return translations[key] || key; @@ -391,6 +392,9 @@ describe('ContractExecutionChart', () => { expect(await screen.findByTestId('bar-aborted')).toHaveTextContent( 'Aborted' ); + expect(await screen.findByTestId('bar-running')).toHaveTextContent( + 'Running' + ); }); it('should use correct colors for bars', async () => { @@ -409,6 +413,10 @@ describe('ContractExecutionChart', () => { 'data-fill', '#f79009' ); + expect(screen.getByTestId('bar-running')).toHaveAttribute( + 'data-fill', + '#175cd3' + ); }); }); }); diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/Color.constants.ts b/openmetadata-ui/src/main/resources/ui/src/constants/Color.constants.ts index 6d7d1cde07e..2e016e51145 100644 --- a/openmetadata-ui/src/main/resources/ui/src/constants/Color.constants.ts +++ b/openmetadata-ui/src/main/resources/ui/src/constants/Color.constants.ts @@ -30,6 +30,7 @@ export const GRAY_1 = '#A1A1AA'; export const LIGHT_GRAY = '#F1F4F9'; export const INDIGO_1 = '#3538CD'; export const PRIMARY_COLOR = DEFAULT_THEME.primaryColor; +export const BLUE_1 = '#175cd3'; export const BLUE_2 = '#3ca2f4'; export const CHART_BLUE_1 = '#1890FF'; export const RIPTIDE = '#76E9C6'; diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.test.ts b/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.test.ts index 14bb5042165..f04f0002c91 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.test.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.test.ts @@ -85,11 +85,16 @@ describe('DataContractUtils', () => { timestamp: 1234567891000, contractExecutionStatus: ContractExecutionStatus.Aborted, }, + { + id: '4', + timestamp: 1234567891000, + contractExecutionStatus: ContractExecutionStatus.Running, + }, ]; const result = processContractExecutionData(executionData as any); - expect(result).toHaveLength(3); + expect(result).toHaveLength(4); expect(result[0]).toEqual({ name: '1234567890000_0', displayTimestamp: 1234567890000, @@ -98,6 +103,7 @@ describe('DataContractUtils', () => { failed: 0, success: 1, aborted: 0, + running: 0, data: executionData[0], }); expect(result[1]).toEqual({ @@ -108,6 +114,7 @@ describe('DataContractUtils', () => { failed: 1, success: 0, aborted: 0, + running: 0, data: executionData[1], }); expect(result[2]).toEqual({ @@ -118,8 +125,20 @@ describe('DataContractUtils', () => { failed: 0, success: 0, aborted: 1, + running: 0, data: executionData[2], }); + expect(result[3]).toEqual({ + name: '1234567891000_3', + displayTimestamp: 1234567891000, + value: 1, + status: ContractExecutionStatus.Running, + failed: 0, + success: 0, + aborted: 0, + running: 1, + data: executionData[3], + }); }); it('should handle empty execution data', () => { diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.ts index 66c0d39f139..ebd4be8905d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DataContract/DataContractUtils.ts @@ -236,6 +236,7 @@ export const processContractExecutionData = ( failed: status === ContractExecutionStatus.Failed ? 1 : 0, success: status === ContractExecutionStatus.Success ? 1 : 0, aborted: status === ContractExecutionStatus.Aborted ? 1 : 0, + running: status === ContractExecutionStatus.Running ? 1 : 0, data: item, }; });