Skip to content

Commit

Permalink
Bug pr jobhistory field null (DataLinkDC#756)
Browse files Browse the repository at this point in the history
* fix:dlink平台详情查看信息对象兼容为null问题

* job history null

* fix:blink域名问题

* } add

* dlink文件问题

* superfluous dir remove

Co-authored-by: songshilian <songshilian@qiangungun.com>
  • Loading branch information
mydq and songshilian authored Jul 22, 2022
1 parent d301cdd commit 713aab4
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 100 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import com.dlink.utils.JSONUtil;
import com.fasterxml.jackson.databind.JsonNode;

import java.util.Objects;

/**
* JobHistoryServiceImpl
*
Expand Down Expand Up @@ -92,7 +94,8 @@ public JobHistory refreshJobHistory(Integer id, String jobManagerHost, String jo
try {
JsonNode jobInfo = FlinkAPI.build(jobManagerHost).getJobInfo(jobId);
if(jobInfo.has(FlinkRestResultConstant.ERRORS)){
return jobHistory;
final JobHistory dbHistory = getById(id);
return Objects.isNull(dbHistory) ? jobHistory : dbHistory;
}
JsonNode exception = FlinkAPI.build(jobManagerHost).getException(jobId);
JsonNode checkPoints = FlinkAPI.build(jobManagerHost).getCheckPoints(jobId);
Expand Down
68 changes: 40 additions & 28 deletions dlink-web/src/pages/DevOps/JobInfo/CheckPoints/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ const CheckPoints = (props: any) => {
const {job} = props;
const actionRef = useRef<ActionType>();

const JsonParseObject = (item : any ) =>{
return JSON.parse(JSON.stringify(item))
const JsonParseObject = (item: any) => {
return JSON.parse(JSON.stringify(item))
}


Expand All @@ -57,9 +57,11 @@ const CheckPoints = (props: any) => {

return (
<>
{JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/> :
<Descriptions bordered size="small" column={1}>
<Descriptions.Item label="CheckPoint Counts">
<Tag color="blue" title={"Total"} >
<Tag color="blue" title={"Total"}>
<RocketOutlined/> Total: {counts.total}
</Tag>
<Tag color="red" title={"Failed"}>
Expand All @@ -78,27 +80,27 @@ const CheckPoints = (props: any) => {

<Descriptions.Item label="Latest Completed CheckPoint">
<Tag color="green" title={"Latest Completed CheckPoint"}>
{latest.completed === null ? 'None' :
{latest.completed === null ? 'None' :
JsonParseObject(latest.completed).external_path
}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="Latest Failed CheckPoint">
{latest.failed === null ?
<Tag color="red" title={"Latest Failed CheckPoint"}>
{'None'}
</Tag> :
<Tag color="red" title={"Latest Failed CheckPoint"}>
{'None'}
</Tag> :
<>
<Tag color="red" title={"Latest Failed CheckPoint"}>
{"id: " + JsonParseObject(latest.failed).id}
</Tag>
<Tag color="red" title={"Latest Failed CheckPoint"}>
{ "Fail Time: " + moment(JsonParseObject(latest.failed).failure_timestamp).format('YYYY-MM-DD HH:mm:ss')}
</Tag>
{"Fail Time: " + moment(JsonParseObject(latest.failed).failure_timestamp).format('YYYY-MM-DD HH:mm:ss')}
</Tag>
<Tag color="red" title={"Latest Failed CheckPoint"}>
{"Cause: " + JsonParseObject(latest.failed).failure_message}
</Tag>
</Tag>
</>
}
</Descriptions.Item>
Expand All @@ -118,12 +120,12 @@ const CheckPoints = (props: any) => {
</Tag>
</Descriptions.Item>
</Descriptions>
}
</>
)
}


const getSummary = (checkpoints : any) => {
const getSummary = (checkpoints: any) => {

let end_to_end_duration = JsonParseObject(JsonParseObject(checkpoints.summary)).end_to_end_duration
let state_size = JsonParseObject(JsonParseObject(checkpoints.summary)).state_size
Expand All @@ -133,6 +135,8 @@ const CheckPoints = (props: any) => {

return (
<>
{JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/> :
<Descriptions bordered size="small" column={1}>
<Descriptions.Item label="End to End Duration">
<Tag color="blue" title={"Max"}>
Expand Down Expand Up @@ -194,6 +198,7 @@ const CheckPoints = (props: any) => {
</Tag>
</Descriptions.Item>
</Descriptions>
}
</>
)
}
Expand All @@ -219,7 +224,7 @@ const CheckPoints = (props: any) => {
});
}

const getHistory = (checkpoints : any) => {
const getHistory = (checkpoints: any) => {

const checkPointsList: CheckPointsDetailInfo[] = [];
checkpoints?.history?.forEach((entity: CheckPointsDetailInfo) => {
Expand Down Expand Up @@ -299,7 +304,7 @@ const CheckPoints = (props: any) => {
render: (dom, entity) => {
return <>
{entity.status === 'COMPLETED' ?
<Button onClick={() => recoveryCheckPoint(entity)}>此处恢复</Button> : undefined}
<Button onClick={() => recoveryCheckPoint(entity)}>此处恢复</Button> : undefined}
</>
},
},
Expand Down Expand Up @@ -330,10 +335,12 @@ const CheckPoints = (props: any) => {
}


const getConfiguration = (checkpointsConfig : any) => {
const getConfiguration = (checkpointsConfig: any) => {
let checkpointsConfigInfo = JsonParseObject(checkpointsConfig)
return (
<>
{JSON.stringify(job?.jobHistory?.checkpointsConfig).includes("errors") ?
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/> :
<Descriptions bordered size="small" column={1}>
<Descriptions.Item label="Checkpointing Mode">
<Tag color="blue" title={"Checkpointing Mode"}>
Expand All @@ -343,19 +350,19 @@ const CheckPoints = (props: any) => {

<Descriptions.Item label="Checkpoint Storage">
<Tag color="blue" title={"Checkpoint Storage"}>
{checkpointsConfigInfo.checkpoint_storage ? checkpointsConfigInfo.checkpoint_storage : 'Disabled'}
{checkpointsConfigInfo.checkpoint_storage ? checkpointsConfigInfo.checkpoint_storage : 'Disabled'}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="State Backend">
<Tag color="blue" title={"State Backend"}>
{checkpointsConfigInfo.state_backend ? checkpointsConfigInfo.state_backend : 'Disabled'}
{checkpointsConfigInfo.state_backend ? checkpointsConfigInfo.state_backend : 'Disabled'}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="Interval">
<Tag color="blue" title={"Interval"}>
{checkpointsConfigInfo.interval }
{checkpointsConfigInfo.interval}
</Tag>
</Descriptions.Item>

Expand All @@ -379,7 +386,7 @@ const CheckPoints = (props: any) => {

<Descriptions.Item label="Unaligned Checkpoints ">
<Tag color="blue" title={"Unaligned Checkpoints"}>
{checkpointsConfigInfo.unaligned_checkpoints ? 'Enabled' : 'Disabled'}
{checkpointsConfigInfo.unaligned_checkpoints ? 'Enabled' : 'Disabled'}
</Tag>
</Descriptions.Item>

Expand All @@ -391,7 +398,7 @@ const CheckPoints = (props: any) => {
{JsonParseObject(checkpointsConfigInfo.externalization).enabled && (
<Descriptions.Item label="Delete On Cancellation">
<Tag color="blue" title={"Delete On Cancellation"}>
{ JsonParseObject(checkpointsConfigInfo.externalization).delete_on_cancellation ? 'Enabled' : 'Disabled'}
{JsonParseObject(checkpointsConfigInfo.externalization).delete_on_cancellation ? 'Enabled' : 'Disabled'}
</Tag>
</Descriptions.Item>
)}
Expand All @@ -403,6 +410,7 @@ const CheckPoints = (props: any) => {
</Tag>
</Descriptions.Item>
</Descriptions>
}
</>
)
}
Expand Down Expand Up @@ -454,7 +462,11 @@ const CheckPoints = (props: any) => {
<ProTable<SavePointTableListItem>
columns={columns}
style={{width: '100%'}}
request={(params, sorter, filter) => queryData(url, {taskId: job?.instance.taskId, ...params, sorter, filter})}
request={(params, sorter, filter) => queryData(url, {
taskId: job?.instance.taskId, ...params,
sorter,
filter
})}
actionRef={actionRef}
rowKey="id"
pagination={{
Expand All @@ -468,11 +480,12 @@ const CheckPoints = (props: any) => {
}

return (<>
{(job?.jobHistory?.checkpoints || job?.jobHistory?.checkpointsConfig) &&
<Tabs defaultActiveKey="overview" size="small" tabPosition="top" style={{
border: "1px solid #f0f0f0",
}}>
<TabPane tab={<span>&nbsp; Overview &nbsp;</span>} key="overview">
{ !JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
{!JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
getOverview(JsonParseObject(job?.jobHistory?.checkpoints)) :
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>}
</TabPane>
Expand All @@ -482,24 +495,23 @@ const CheckPoints = (props: any) => {
</TabPane>

<TabPane tab={<span>&nbsp; Summary &nbsp;</span>} key="summary">
{ !JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
{!JSON.stringify(job?.jobHistory?.checkpoints).includes("errors") ?
getSummary(JsonParseObject(job?.jobHistory?.checkpoints)) :
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>
}
</TabPane>

<TabPane tab={<span>&nbsp; Configuration &nbsp;</span>} key="configuration">
{ !JSON.stringify(job?.jobHistory?.checkpointsConfig).includes("errors") ?
{!JSON.stringify(job?.jobHistory?.checkpointsConfig).includes("errors") ?
getConfiguration(JsonParseObject(job?.jobHistory?.checkpointsConfig)) :
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>
}
</TabPane>

<TabPane tab={<span>&nbsp; SavePoint &nbsp;</span>} key="savepoint">
{getSavePoint()}
</TabPane>
</Tabs>
{getSavePoint()}
</TabPane>
</Tabs>}
</>)
};

export default CheckPoints;
139 changes: 71 additions & 68 deletions dlink-web/src/pages/DevOps/JobInfo/Config/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,78 +26,81 @@ const {Text, Link} = Typography;
const Config = (props: any) => {

const {job} = props;

return (<>
<>
<Descriptions bordered size="small" title={"Dinky Job Configuration"}>
<Descriptions.Item label="执行模式">{job?.history?.type ? (
<Tag color="blue" key={job?.history?.type}>
<RocketOutlined/> {job?.history?.type}
</Tag>
) : undefined}
</Descriptions.Item>
<Descriptions.Item label="集群实例">
{job?.cluster?.alias ? <Link>{job?.cluster?.alias}</Link> : '-'}
</Descriptions.Item>
<Descriptions.Item label="集群配置">
{job?.clusterConfiguration?.alias ? <Link>{job?.clusterConfiguration?.alias}</Link> : '-'}
</Descriptions.Item>
<Descriptions.Item label="共享会话">
{job?.history?.session ? <Link>{job?.history?.session}</Link> : '禁用'}
</Descriptions.Item>
<Descriptions.Item label="片段机制">{job?.history?.config.useSqlFragment ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="语句集">{job?.history?.config.useStatementSet ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="任务类型">{job?.history?.config.isJarTask ? 'Jar' : 'FlinkSQL'}</Descriptions.Item>
<Descriptions.Item label="批模式">{job?.history?.config.useBatchModel ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="CheckPoint">{job?.history?.config.checkpoint}</Descriptions.Item>
<Descriptions.Item label="SavePoint机制">
{job?.history?.config.savePointStrategy == 'NONE' ? '禁用' :
job?.history?.config.savePointStrategy == 'LATEST' ? '最近一次' :
job?.history?.config.savePointStrategy == 'EARLIEST' ? '最早一次' :
job?.history?.config.savePointStrategy == 'CUSTOM' ? '指定一次' : '禁用'}
</Descriptions.Item>
<Descriptions.Item label="SavePoint" span={2}>{job?.history?.config.savePointPath}</Descriptions.Item>
{job?.jar ? <>
<Descriptions.Item label="Jar 路径">{job?.jar?.path}</Descriptions.Item>
<Descriptions.Item label="Jar 主类">{job?.jar?.mainClass}</Descriptions.Item>
<Descriptions.Item label="Jar 入参">{job?.jar?.paras}</Descriptions.Item>
</> : undefined}
</Descriptions>
</>
<br/><br/>
<>
{ ! JSON.stringify(job?.jobHistory?.config).includes("errors") &&
<Descriptions bordered size="small" title={"Flink Job Configuration"}>
<Descriptions.Item label="Execution Mode">
<Tag color="blue" title={"Execution Mode"}>
{job?.jobHistory?.config['execution-config']['execution-mode']}
</Tag>
</Descriptions.Item>
<Descriptions.Item label="Restart Strategy">
<Tag color="blue" title={"Restart Strategy"}>
{job?.jobHistory?.config['execution-config']['restart-strategy']}
</Tag>
</Descriptions.Item>
{
job?.jobHistory?.config && <>
<>
<Descriptions bordered size="small" title={"Dinky Job Configuration"}>
<Descriptions.Item label="执行模式">{job?.history?.type ? (
<Tag color="blue" key={job?.history?.type}>
<RocketOutlined/> {job?.history?.type}
</Tag>
) : undefined}
</Descriptions.Item>
<Descriptions.Item label="集群实例">
{job?.cluster?.alias ? <Link>{job?.cluster?.alias}</Link> : '-'}
</Descriptions.Item>
<Descriptions.Item label="集群配置">
{job?.clusterConfiguration?.alias ? <Link>{job?.clusterConfiguration?.alias}</Link> : '-'}
</Descriptions.Item>
<Descriptions.Item label="共享会话">
{job?.history?.session ? <Link>{job?.history?.session}</Link> : '禁用'}
</Descriptions.Item>
<Descriptions.Item label="片段机制">{job?.history?.config.useSqlFragment ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="语句集">{job?.history?.config.useStatementSet ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="任务类型">{job?.history?.config.isJarTask ? 'Jar' : 'FlinkSQL'}</Descriptions.Item>
<Descriptions.Item label="批模式">{job?.history?.config.useBatchModel ? '启用' : '禁用'}</Descriptions.Item>
<Descriptions.Item label="CheckPoint">{job?.history?.config.checkpoint}</Descriptions.Item>
<Descriptions.Item label="SavePoint机制">
{job?.history?.config.savePointStrategy == 'NONE' ? '禁用' :
job?.history?.config.savePointStrategy == 'LATEST' ? '最近一次' :
job?.history?.config.savePointStrategy == 'EARLIEST' ? '最早一次' :
job?.history?.config.savePointStrategy == 'CUSTOM' ? '指定一次' : '禁用'}
</Descriptions.Item>
<Descriptions.Item label="SavePoint" span={2}>{job?.history?.config.savePointPath}</Descriptions.Item>
{job?.jar ? <>
<Descriptions.Item label="Jar 路径">{job?.jar?.path}</Descriptions.Item>
<Descriptions.Item label="Jar 主类">{job?.jar?.mainClass}</Descriptions.Item>
<Descriptions.Item label="Jar 入参">{job?.jar?.paras}</Descriptions.Item>
</> : undefined}
</Descriptions>
</>
<br/><br/>
<>
{!JSON.stringify(job?.jobHistory?.config).includes("errors") &&
<Descriptions bordered size="small" title={"Flink Job Configuration"}>
<Descriptions.Item label="Execution Mode">
<Tag color="blue" title={"Execution Mode"}>
{job?.jobHistory?.config['execution-config']['execution-mode']}
</Tag>
</Descriptions.Item>
<Descriptions.Item label="Restart Strategy">
<Tag color="blue" title={"Restart Strategy"}>
{job?.jobHistory?.config['execution-config']['restart-strategy']}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="Job Parallelism">
<Tag color="blue" title={"Job Parallelism"}>
{job?.jobHistory?.config['execution-config']['job-parallelism']}
</Tag>
</Descriptions.Item>
<Descriptions.Item label="Job Parallelism">
<Tag color="blue" title={"Job Parallelism"}>
{job?.jobHistory?.config['execution-config']['job-parallelism']}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="Object Reuse Mode">
<Tag color="blue" title={"Object Reuse Mode"}>
{job?.jobHistory?.config['execution-config']['object-reuse-mode'].toString()}
</Tag>
</Descriptions.Item>
<Descriptions.Item label="Object Reuse Mode">
<Tag color="blue" title={"Object Reuse Mode"}>
{job?.jobHistory?.config['execution-config']['object-reuse-mode'].toString()}
</Tag>
</Descriptions.Item>

<Descriptions.Item label="Flink User Configuration" span={3}>
<Text
code>{JSON.stringify(job?.jobHistory?.config['execution-config']['user-config'])}</Text>
</Descriptions.Item>
</Descriptions>
}
</>
<Descriptions.Item label="Flink User Configuration" span={3}>
<Text
code>{JSON.stringify(job?.jobHistory?.config['execution-config']['user-config'])}</Text>
</Descriptions.Item>
</Descriptions>
}
</>
</>
}
</>)
};

Expand Down
Loading

0 comments on commit 713aab4

Please sign in to comment.