diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/canvas/contextMenu.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/canvas/contextMenu.vue index dafd5219c8..56021337b5 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/canvas/contextMenu.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/canvas/contextMenu.vue @@ -35,6 +35,9 @@ {{ $t("Delete") }} + + {{ $t('View log') }} + @@ -72,6 +75,12 @@ }, readOnly () { return this.isDetails + }, + logMenuVisible () { + if (this.dagChart.taskInstances.length > 0) { + return !!this.dagChart.taskInstances.find(taskInstance => taskInstance.taskCode === this.currentTask.code) + } + return true } }, mounted () { @@ -136,6 +145,9 @@ onDelete () { this.dagCanvas.removeNode(this.currentTask.code) }, + showLog () { + this.dagChart.showLogDialog(this.currentTask.code) + }, show (x = 0, y = 0) { this.dagCanvas.lockScroller() this.visible = true diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue index a94395a47b..37b5e10669 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue @@ -25,7 +25,7 @@ :wrapperClosable="false" > -
+
+
@@ -82,6 +89,7 @@ import mStart from '../../projects/pages/definition/pages/list/_source/start.vue' import edgeEditModel from './canvas/edgeEditModel.vue' import mVersions from '../../projects/pages/definition/pages/list/_source/versions.vue' + import mLog from './formModel/log.vue' const DEFAULT_NODE_DATA = { id: null, @@ -99,7 +107,8 @@ mUdp, mStart, edgeEditModel, - mVersions + mVersions, + mLog }, provide () { return { @@ -140,7 +149,11 @@ // the task status refresh timer statusTimer: null, // the process instance id - instanceId: -1 + instanceId: -1, + // log dialog + logDialog: false, + logTaskInstance: null, + taskInstances: [] } }, mounted () { @@ -294,61 +307,63 @@ tasks: tasks, locations: locations }) - }).then((res) => { - if (this.verifyConditions(res.tasks)) { - this.loading(true) - const definitionCode = this.definitionCode - if (definitionCode) { - // Edit - return this[ - this.type === 'instance' ? 'updateInstance' : 'updateDefinition' - ](definitionCode) - .then((res) => { - this.$message({ - message: res.msg, - type: 'success', - offset: 80 - }) - if (this.type === 'instance') { - this.$router.push({ - path: `/projects/${this.projectCode}/instance/list` - }) - } else { - this.$router.push({ - path: `/projects/${this.projectCode}/definition/list` + }) + .then((res) => { + if (this.verifyConditions(res.tasks)) { + this.loading(true) + const definitionCode = this.definitionCode + if (definitionCode) { + // Edit + return this[ + this.type === 'instance' ? 'updateInstance' : 'updateDefinition' + ](definitionCode) + .then((res) => { + this.$message({ + message: res.msg, + type: 'success', + offset: 80 }) - } - }) - .catch((e) => { - this.$message.error(e.msg || '') - }) - .finally((e) => { - this.loading(false) - }) - } else { - // Create - return this.saveDAGchart() - .then((res) => { - this.$message.success(res.msg) - // source @/conf/home/pages/dag/_source/editAffirmModel/index.js - if (sourceType !== 'affirm') { - // Jump process definition - this.$router.push({ name: 'projects-definition-list' }) - } - }) - .catch((e) => { - this.setName('') - this.$message.error(e.msg || '') - }) - .finally((e) => { - this.loading(false) - }) + if (this.type === 'instance') { + this.$router.push({ + path: `/projects/${this.projectCode}/instance/list` + }) + } else { + this.$router.push({ + path: `/projects/${this.projectCode}/definition/list` + }) + } + }) + .catch((e) => { + this.$message.error(e.msg || '') + }) + .finally((e) => { + this.loading(false) + }) + } else { + // Create + return this.saveDAGchart() + .then((res) => { + this.$message.success(res.msg) + // source @/conf/home/pages/dag/_source/editAffirmModel/index.js + if (sourceType !== 'affirm') { + // Jump process definition + this.$router.push({ name: 'projects-definition-list' }) + } + }) + .catch((e) => { + this.setName('') + this.$message.error(e.msg || '') + }) + .finally((e) => { + this.loading(false) + }) + } } - } - }).catch((err) => { - let msg = typeof err === 'string' ? err : (err.msg || '') - this.$message.error(msg) - }) + }) + .catch((err) => { + let msg = typeof err === 'string' ? err : err.msg || '' + this.$message.error(msg) + }) }, verifyConditions (value) { let tasks = value @@ -432,31 +447,35 @@ tasksMap[task.code] = task }) - const headEdges = tasks.filter(task => !preTaskMap[task.code]).map((task) => { - return { - name: '', - preTaskCode: 0, - preTaskVersion: 0, - postTaskCode: task.code, - postTaskVersion: task.version || 0, - // conditionType and conditionParams are reserved - conditionType: 0, - conditionParams: {} - } - }) + const headEdges = tasks + .filter((task) => !preTaskMap[task.code]) + .map((task) => { + return { + name: '', + preTaskCode: 0, + preTaskVersion: 0, + postTaskCode: task.code, + postTaskVersion: task.version || 0, + // conditionType and conditionParams are reserved + conditionType: 0, + conditionParams: {} + } + }) - return edges.map(edge => { - return { - name: edge.label, - preTaskCode: edge.sourceId, - preTaskVersion: tasksMap[edge.sourceId].version || 0, - postTaskCode: edge.targetId, - postTaskVersion: tasksMap[edge.targetId].version || 0, - // conditionType and conditionParams are reserved - conditionType: 0, - conditionParams: {} - } - }).concat(headEdges) + return edges + .map((edge) => { + return { + name: edge.label, + preTaskCode: edge.sourceId, + preTaskVersion: tasksMap[edge.sourceId].version || 0, + postTaskCode: edge.targetId, + postTaskVersion: tasksMap[edge.targetId].version || 0, + // conditionType and conditionParams are reserved + conditionType: 0, + conditionParams: {} + } + }) + .concat(headEdges) }, backfill () { const tasks = this.tasks @@ -479,8 +498,10 @@ }) }, toSubProcess ({ subProcessCode, subInstanceId }) { - const tarIdentifier = this.type === 'instance' ? subInstanceId : subProcessCode - const curIdentifier = this.type === 'instance' ? this.instanceId : this.definitionCode + const tarIdentifier = + this.type === 'instance' ? subInstanceId : subProcessCode + const curIdentifier = + this.type === 'instance' ? this.instanceId : this.definitionCode let subs = [] let olds = this.$route.query.subs if (olds) { @@ -532,6 +553,7 @@ this.$message(this.$t('Refresh status succeeded')) const { taskList } = res.data if (taskList) { + this.taskInstances = taskList taskList.forEach((taskInstance) => { this.$refs.canvas.setNodeStatus({ code: taskInstance.taskCode, @@ -598,42 +620,67 @@ this.switchProcessDefinitionVersion({ version: version, code: processDefinitionCode - }).then(res => { - this.$message.success($t('Switch Version Successfully')) - this.closeVersion() - this.definitionDetails.init() - }).catch(e => { - this.$message.error(e.msg || '') }) + .then((res) => { + this.$message.success($t('Switch Version Successfully')) + this.closeVersion() + this.definitionDetails.init() + }) + .catch((e) => { + this.$message.error(e.msg || '') + }) }, getProcessVersions ({ pageNo, pageSize, processDefinitionCode }) { this.getProcessDefinitionVersionsPage({ pageNo: pageNo, pageSize: pageSize, code: processDefinitionCode - }).then(res => { - this.versionData.processDefinitionVersions = res.data.totalList - this.versionData.total = res.data.total - this.versionData.pageSize = res.data.pageSize - this.versionData.pageNo = res.data.currentPage - }).catch(e => { - this.$message.error(e.msg || '') }) + .then((res) => { + this.versionData.processDefinitionVersions = res.data.totalList + this.versionData.total = res.data.total + this.versionData.pageSize = res.data.pageSize + this.versionData.pageNo = res.data.currentPage + }) + .catch((e) => { + this.$message.error(e.msg || '') + }) }, deleteProcessVersion ({ version, processDefinitionCode }) { this.deleteProcessDefinitionVersion({ version: version, code: processDefinitionCode - }).then(res => { - this.$message.success(res.msg || '') - this.getProcessVersions({ - pageNo: 1, - pageSize: 10, - processDefinitionCode: processDefinitionCode + }) + .then((res) => { + this.$message.success(res.msg || '') + this.getProcessVersions({ + pageNo: 1, + pageSize: 10, + processDefinitionCode: processDefinitionCode + }) + }) + .catch((e) => { + this.$message.error(e.msg || '') }) - }).catch(e => { - this.$message.error(e.msg || '') + }, + /** + * Log dialog + */ + closeLogDialog () { + this.logDialog = false + this.logTaskInstance = null + }, + showLogDialog (taskDefinitionCode) { + const taskInstance = this.taskInstances.find(taskInstance => { + return taskInstance.taskCode === taskDefinitionCode }) + if (taskInstance) { + this.logTaskInstance = { + id: taskInstance.id, + type: taskInstance.taskType + } + this.logDialog = true + } } } } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/log.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/log.vue index b022dfd421..6704237e88 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/log.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/log.vue @@ -94,7 +94,6 @@ type: String, default: 'from' }, - logId: Number, taskInstanceId: { type: Number, default: 0 @@ -172,7 +171,7 @@ */ _downloadLog () { downloadFile('log/download-log', { - taskInstanceId: this.taskInstanceId || this.logId + taskInstanceId: this.taskInstanceId }) }, /** @@ -233,7 +232,7 @@ watch: {}, created () { // Source is a task instance - if (this.source === 'list') { + if (this.source === 'list' || this.source === 'dag') { this.$message.info(`${i18n.$t('Loading Log...')}`) this._ckLog() } @@ -246,7 +245,7 @@ computed: { _rtParam () { return { - taskInstanceId: this.taskInstanceId || this.logId, + taskInstanceId: this.taskInstanceId, skipLineNum: parseInt(`${this.loadingIndex ? this.loadingIndex + '000' : 0}`), limit: parseInt(`${this.loadingIndex ? this.loadingIndex + 1 : 1}000`) } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue index f5c28b150a..84f396caa2 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue @@ -90,7 +90,7 @@ :show-close="false" :visible.sync="logDialog" width="auto"> - + @@ -110,7 +110,7 @@ logDialog: false, item: {}, source: '', - logId: null + taskInstanceId: null } }, props: { @@ -127,10 +127,9 @@ _refreshLog (item) { this.item = item this.source = 'list' - this.logId = item.id + this.taskInstanceId = item.id this.logDialog = true }, - ok () {}, close () { this.logDialog = false },