Skip to content

Commit 469cc4f

Browse files
authored
fix(ui): make data process instance visible in container in V2& fix model/modelgroup names (#12513)
1 parent d2b0e57 commit 469cc4f

File tree

11 files changed

+142
-21
lines changed

11 files changed

+142
-21
lines changed

datahub-web-react/src/app/entity/mlModel/MLModelEntity.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ export class MLModelEntity implements Entity<MlModel> {
143143
getLineageVizConfig = (entity: MlModel) => {
144144
return {
145145
urn: entity.urn,
146-
name: entity.name,
146+
// eslint-disable-next-line @typescript-eslint/dot-notation
147+
name: entity.properties?.['propertiesName'] || entity.name,
147148
type: EntityType.Mlmodel,
148149
icon: entity.platform?.properties?.logoUrl || undefined,
149150
platform: entity.platform,

datahub-web-react/src/app/entity/mlModel/profile/MLModelGroupsTab.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ export default function MLModelGroupsTab() {
2424
title: 'Group',
2525
dataIndex: 'name',
2626
render: (name, record) => {
27-
return <Link href={entityRegistry.getEntityUrl(EntityType.MlmodelGroup, record.urn)}>{name}</Link>;
27+
return (
28+
<Link href={entityRegistry.getEntityUrl(EntityType.MlmodelGroup, record.urn)}>
29+
{record.properties?.name || name}
30+
</Link>
31+
);
2832
},
2933
},
3034
{

datahub-web-react/src/app/entity/mlModelGroup/MLModelGroupEntity.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ export class MLModelGroupEntity implements Entity<MlModelGroup> {
131131
getLineageVizConfig = (entity: MlModelGroup) => {
132132
return {
133133
urn: entity.urn,
134-
name: entity.name,
134+
// eslint-disable-next-line @typescript-eslint/dot-notation
135+
name: entity.properties?.['propertiesName'] || entity.name,
135136
type: EntityType.MlmodelGroup,
136137
icon: entity.platform?.properties?.logoUrl || undefined,
137138
platform: entity.platform,

datahub-web-react/src/app/entityV2/dataProcessInstance/DataProcessInstanceEntity.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { GenericEntityProperties } from '@app/entity/shared/types';
2+
import { Entity as GraphQLEntity } from '@types';
23
import { globalEntityRegistryV2 } from '@app/EntityRegistryProvider';
34
import { Entity, EntityCapabilityType, IconStyleType, PreviewType } from '@app/entityV2/Entity';
45
import { EntityProfile } from '@app/entityV2/shared/containers/profile/EntityProfile';
@@ -11,24 +12,21 @@ import { getDataProduct } from '@app/entityV2/shared/utils';
1112
import { GetDataProcessInstanceQuery, useGetDataProcessInstanceQuery } from '@graphql/dataProcessInstance.generated';
1213
import { ArrowsClockwise } from 'phosphor-react';
1314
import React from 'react';
14-
import { DataProcessInstance, Entity as GeneratedEntity, EntityType, SearchResult } from '../../../types.generated';
15+
import { DataProcessInstance, EntityType, SearchResult } from '../../../types.generated';
1516
import Preview from './preview/Preview';
17+
import DataProcessInstanceSummary from './profile/DataProcessInstanceSummary';
1618

17-
const getParentEntities = (data: DataProcessInstance): GeneratedEntity[] => {
19+
const getParentEntities = (data: DataProcessInstance): GraphQLEntity[] => {
1820
const parentEntity = data?.relationships?.relationships?.find(
1921
(rel) => rel.type === 'InstanceOf' && rel.entity?.type === EntityType.DataJob,
2022
);
2123

22-
if (!parentEntity?.entity) return [];
24+
if (!parentEntity || !parentEntity.entity) {
25+
return [];
26+
}
2327

24-
// Convert to GeneratedEntity
25-
return [
26-
{
27-
type: parentEntity.entity.type,
28-
urn: (parentEntity.entity as any).urn, // Make sure urn exists
29-
relationships: (parentEntity.entity as any).relationships,
30-
},
31-
];
28+
// First cast to unknown, then to Entity with proper type
29+
return [parentEntity.entity];
3230
};
3331

3432
/**
@@ -85,6 +83,10 @@ export class DataProcessInstanceEntity implements Entity<DataProcessInstance> {
8583
new Set([EntityMenuItems.UPDATE_DEPRECATION, EntityMenuItems.RAISE_INCIDENT, EntityMenuItems.SHARE])
8684
}
8785
tabs={[
86+
{
87+
name: 'Summary',
88+
component: DataProcessInstanceSummary,
89+
},
8890
{
8991
name: 'Lineage',
9092
component: LineageTab,
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import React from 'react';
2+
import styled from 'styled-components';
3+
import { Space, Table, Typography } from 'antd';
4+
import { formatDetailedDuration } from '@src/app/shared/time/timeUtils';
5+
import { capitalize } from 'lodash';
6+
import moment from 'moment';
7+
import { MlHyperParam, MlMetric, DataProcessInstanceRunResultType } from '../../../../types.generated';
8+
import { useBaseEntity } from '../../../entity/shared/EntityContext';
9+
import { InfoItem } from '../../shared/components/styled/InfoItem';
10+
import { GetDataProcessInstanceQuery } from '../../../../graphql/dataProcessInstance.generated';
11+
import { Pill } from '../../../../alchemy-components/components/Pills';
12+
13+
const TabContent = styled.div`
14+
padding: 16px;
15+
`;
16+
17+
const InfoItemContainer = styled.div<{ justifyContent }>`
18+
display: flex;
19+
position: relative;
20+
justify-content: ${(props) => props.justifyContent};
21+
padding: 0px 2px;
22+
`;
23+
24+
const InfoItemContent = styled.div`
25+
padding-top: 8px;
26+
width: 100px;
27+
`;
28+
29+
const propertyTableColumns = [
30+
{
31+
title: 'Name',
32+
dataIndex: 'name',
33+
width: 450,
34+
},
35+
{
36+
title: 'Value',
37+
dataIndex: 'value',
38+
},
39+
];
40+
41+
export default function DataProcessInstanceSummary() {
42+
const baseEntity = useBaseEntity<GetDataProcessInstanceQuery>();
43+
const dpi = baseEntity?.dataProcessInstance;
44+
45+
const formatStatus = (state) => {
46+
if (!state || state.length === 0) return '-';
47+
const result = state[0]?.result?.resultType;
48+
const statusColor = result === DataProcessInstanceRunResultType.Success ? 'green' : 'red';
49+
return <Pill label={capitalize(result)} colorScheme={statusColor} clickable={false} />;
50+
};
51+
52+
const formatDuration = (state) => {
53+
if (!state || state.length === 0) return '-';
54+
return formatDetailedDuration(state[0]?.durationMillis);
55+
};
56+
57+
return (
58+
<TabContent>
59+
<Space direction="vertical" style={{ width: '100%' }} size="large">
60+
<Typography.Title level={3}>Details</Typography.Title>
61+
<InfoItemContainer justifyContent="left">
62+
<InfoItem title="Created At">
63+
<InfoItemContent>
64+
{dpi?.properties?.created?.time
65+
? moment(dpi.properties.created.time).format('YYYY-MM-DD HH:mm:ss')
66+
: '-'}
67+
</InfoItemContent>
68+
</InfoItem>
69+
<InfoItem title="Status">
70+
<InfoItemContent>{formatStatus(dpi?.state)}</InfoItemContent>
71+
</InfoItem>
72+
<InfoItem title="Duration">
73+
<InfoItemContent>{formatDuration(dpi?.state)}</InfoItemContent>
74+
</InfoItem>
75+
<InfoItem title="Run ID">
76+
<InfoItemContent>{dpi?.mlTrainingRunProperties?.id}</InfoItemContent>
77+
</InfoItem>
78+
<InfoItem title="Created By">
79+
<InfoItemContent>{dpi?.properties?.created?.actor}</InfoItemContent>
80+
</InfoItem>
81+
</InfoItemContainer>
82+
<InfoItemContainer justifyContent="left">
83+
<InfoItem title="Artifacts Location">
84+
<InfoItemContent>{dpi?.mlTrainingRunProperties?.outputUrls}</InfoItemContent>
85+
</InfoItem>
86+
</InfoItemContainer>
87+
<Typography.Title level={3}>Training Metrics</Typography.Title>
88+
<Table
89+
pagination={false}
90+
columns={propertyTableColumns}
91+
dataSource={dpi?.mlTrainingRunProperties?.trainingMetrics as MlMetric[]}
92+
/>
93+
<Typography.Title level={3}>Hyper Parameters</Typography.Title>
94+
<Table
95+
pagination={false}
96+
columns={propertyTableColumns}
97+
dataSource={dpi?.mlTrainingRunProperties?.hyperParams as MlHyperParam[]}
98+
/>
99+
</Space>
100+
</TabContent>
101+
);
102+
}

datahub-web-react/src/app/entityV2/mlModel/MLModelEntity.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ export class MLModelEntity implements Entity<MlModel> {
192192
getLineageVizConfig = (entity: MlModel) => {
193193
return {
194194
urn: entity.urn,
195-
name: entity.name,
195+
// eslint-disable-next-line @typescript-eslint/dot-notation
196+
name: entity.properties?.['propertiesName'] || entity.name,
196197
type: EntityType.Mlmodel,
197198
icon: entity.platform?.properties?.logoUrl || undefined,
198199
platform: entity.platform,
@@ -201,7 +202,7 @@ export class MLModelEntity implements Entity<MlModel> {
201202
};
202203

203204
displayName = (data: MlModel) => {
204-
return data.name || data.urn;
205+
return data.properties?.name || data.name || data.urn;
205206
};
206207

207208
getGenericEntityProperties = (mlModel: MlModel) => {

datahub-web-react/src/app/entityV2/mlModel/preview/Preview.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export const Preview = ({
3131
return (
3232
<DefaultPreviewCard
3333
url={entityRegistry.getEntityUrl(EntityType.Mlmodel, model.urn)}
34-
name={model.name || ''}
34+
// eslint-disable-next-line @typescript-eslint/dot-notation
35+
name={model?.properties?.['propertiesName'] || model?.name || ''}
3536
urn={model.urn}
3637
data={data}
3738
description={model.description || ''}

datahub-web-react/src/app/entityV2/mlModel/profile/MLModelGroupsTab.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ export default function MLModelGroupsTab() {
2424
title: 'Group',
2525
dataIndex: 'name',
2626
render: (name, record) => {
27-
return <Link href={entityRegistry.getEntityUrl(EntityType.MlmodelGroup, record.urn)}>{name}</Link>;
27+
return (
28+
<Link href={entityRegistry.getEntityUrl(EntityType.MlmodelGroup, record.urn)}>
29+
{record.properties?.name || name}
30+
</Link>
31+
);
2832
},
2933
},
3034
{

datahub-web-react/src/app/entityV2/mlModelGroup/MLModelGroupEntity.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export class MLModelGroupEntity implements Entity<MlModelGroup> {
175175
getLineageVizConfig = (entity: MlModelGroup) => {
176176
return {
177177
urn: entity.urn,
178-
name: entity.name,
178+
// eslint-disable-next-line @typescript-eslint/dot-notation
179+
name: entity.properties?.['propertiesName'] || entity.name,
179180
type: EntityType.MlmodelGroup,
180181
icon: entity.platform?.properties?.logoUrl || undefined,
181182
platform: entity.platform,
@@ -184,7 +185,7 @@ export class MLModelGroupEntity implements Entity<MlModelGroup> {
184185
};
185186

186187
displayName = (data: MlModelGroup) => {
187-
return data.name || data.urn;
188+
return data.properties?.name || data.name || data.urn;
188189
};
189190

190191
getGenericEntityProperties = (mlModelGroup: MlModelGroup) => {

datahub-web-react/src/app/entityV2/mlModelGroup/preview/Preview.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ export const Preview = ({
3030
return (
3131
<DefaultPreviewCard
3232
url={entityRegistry.getEntityUrl(EntityType.MlmodelGroup, group.urn)}
33-
name={group?.name || ''}
33+
// eslint-disable-next-line @typescript-eslint/dot-notation
34+
name={group?.properties?.['propertiesName'] || group?.name || ''}
3435
urn={group.urn}
3536
data={data}
3637
platformInstanceId={group.dataPlatformInstance?.instanceId}

0 commit comments

Comments
 (0)