dolphinscheduler节点二次开发需要改动的部分

dolphinscheduler节点二次开发需要改动的部分

前端

  1. dolphinscheduler-ui/public/images/task-icons/目录下新增两个节点的logo图片,一个为激活状态的一个为非激活状态的,如下。

  1. 修改文件dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts

    • 给TaskType新增可取的类型,如下

    • 给TASK_TYPES_MAP增加新节点的映射信息,如下

    修改完成之后,新节点的名字就会在dolphin组件的侧边栏显示出来啦。

  2. 修改文件dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss

    • .draggable样式下的.sidebar-icon样式中分别添加图标激活和没激活的路径。取名规范必须为.icon-后面接先前在TASK_TYPES_MAP中新增的内容的小写。

    修改完成之后,新节点的logo就会在dolphin组件的侧边栏显示出来啦。

  3. 在目录dolphinscheduler-ui/src/views/projects/task/components/node/fields下新增节点字段的ts文件

    如下所示:期间需要新增国际化文件中的字段信息。

    /** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**    http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
    import {useI18n} from 'vue-i18n'
    import {useCustomParams, useResources} from '.'
    import type {IJsonItem} from '../types'
    import { ref, onMounted, watch } from 'vue'export function useEmailSender(model: { [field: string]: any }): IJsonItem[] {const otherStatementSpan = ref(22)const {t} = useI18n()return [{type: 'input',field: 'subject',name: t('project.node.email_sender_subject')},{type: 'editor',field: 'messageTemplate',name: t('project.node.email_sender_message_template'),},{type: 'multi-input',field: 'emails',name: t('project.node.email_sender_emails'),span: otherStatementSpan,props: {placeholder: t('project.node.email_sender_emails'),type: 'textarea',autosize: { minRows: 1 }}},useResources(),...useCustomParams({model, field: 'localParams', isSimple: false})]
    }
    
  4. 在目录dolphinscheduler-ui/src/views/projects/task/components/node/tasks下新增节点字段的ts文件

    如下所示:

    /** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**    http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import { reactive } from 'vue'
    import * as Fields from '../fields/index'
    import type { IJsonItem, INodeData } from '../types'
    import { ITaskData } from '../types'export function useEmailSender({projectCode,from = 0,readonly,data
    }: {projectCode: numberfrom?: numberreadonly?: booleandata?: ITaskData
    }) {const model = reactive({name: '',taskType: 'EMAIL_SENDER',flag: 'YES',description: '',timeoutFlag: false,timeoutNotifyStrategy: ['WARN'],localParams: [],environmentCode: null,failRetryInterval: 1,failRetryTimes: 0,workerGroup: 'default',delayTime: 0,timeout: 30,messageTemplate: '',emails: [],subject: ''} as INodeData)return {json: [Fields.useName(from),...Fields.useTaskDefinition({ projectCode, from, readonly, data, model }),Fields.useRunFlag(),Fields.useDescription(),Fields.useTaskPriority(),Fields.useWorkerGroup(),Fields.useEnvironmentName(model, !data?.id),...Fields.useTaskGroup(model, projectCode),...Fields.useFailed(),Fields.useDelayTime(model),...Fields.useTimeoutAlarm(model),...Fields.useEmailSender(model),Fields.usePreTasks()] as IJsonItem[],model}
    }
    

    ps: 这里存在不容易察觉到的细节,尤其注意。

这个地方一定要跟着改,不然页面上显示的字段,还是之前复制的那个节点的字段。

  1. 修改文件dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts

    新增一个export导出就好了

  2. 修改文件dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts

    新增一个映射关系,如下:

    前面这个部分必须和第二步时候的TASK_TYPES_MAP这个map中的alias一致。

  3. 修改文件dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts

    formatParams方法中增加新增节点的表单赋值代码,不加的话,页面上填的值,提交执行的时候,后端是拿不到的。

    如下所示:

  4. 修改文件dolphinscheduler-ui/src/views/projects/task/components/node/types.ts

    在这个文件中添加,我们在5步时候新增的字段在interface ITaskParams这个实体里面添加就好了。

至此,前端基本上改的就差不多了,下面是后端。


后端

  1. 在目录dolphinscheduler-task-plugin/dolphinscheduler-task-patsnap/src/main/java/org/apache/dolphinscheduler/plugin/task下新增节点对应的文件夹。

  2. 新增类XXXParameters继承CustomBaseParameters

    注意点如下:

    • 如果其中有字段的内容可能是占位符,运行时需要替换,可以标上@ReplacePlaceholders这个注解,目前这个注解支持String类型和List类型的字段的占位符自动替换。
    • 一定要重写checkParameters这个方法,不然到时候填完表单信息保存的时候会报错,节点信息无效的。
  3. 新增类XXXChannel继承 CustomBaseChannel

    重写一下createTask和parseParameters方法。

  4. 新增类XXXChannelFactory,需要继承CustomBaseChannelFactory

    重写getNamecreate方法。

    getName的内容必须和前端第二步中改的TASK_TYPES_MAP中的alias的名字一致。

  5. 新增类XXXTask继承CustomBaseTask

    需要重写方法handlePatsnapTask,这个节点想做什么事情,都在这个方法里面实现。

    注意点如下:

    • 节点正常运行完成之后一定要加setExitStatusCode(TaskConstants.EXIT_CODE_SUCCESS);这行代码,告知节点运行success
    • 节点运行异常一定要执行setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);这行代码。
    • 运行完成之后需要调用releaseResource();来释放资源。
    • 如果想要实现取消逻辑,需要重写方法cancel,前端点击取消的时候,会执行到这个方法里面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战:加密传输数据解密

前言 下面将分享一些实际的渗透测试经验,帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主,技巧为辅,进入逆向的大门。 技巧 开局先讲一下技巧,掌握好了技巧,方便逆向的时候可以更加快速的找到关键…

HCIE之BGP基础概念(一)

BGP 一、BGP的基本概述二、BGP分类三、BGP的工作原理BGP报文类型:BGP状态机: 四、BGP对等体之间的交互原则解决BGP路由黑洞方法: 五、路由反射器路由反射规则路由反射器下防环联邦 六、BGP属性特点优选协议首选值(PrefVal&#xf…

PHP编程实践:实际商品价格数据采集

引言 在电子商务领域,对商品价格进行数据采集和对比是一项常见的需求。本文将介绍如何使用PHP编程语言实现对1688和淘宝商品价格数据的采集和对比,帮助读者了解实际的编程实践过程。 一、数据采集原理 数据采集是指从互联网上获取数据的过程&#xff…

【前端web入门第一天】01 开发环境、HTML基本语法文本标签

文章目录: 1. 准备开发环境 1.1 vs Code基本使用 2.HTML文本标签 2.1 标签语法2.2 HTML基本骨架2.3 标签的关系2.4 注释2.5 标题标签2.6 段落标签2.7 换行与水平线标签2.8 文本格式化标签 1. 准备开发环境 VSCode与谷歌浏览器离线版,安装包评论区自提. VSCode默认安装位置:C…

3、非数值型的分类变量

非数值型的分类变量 有很多非数字的数据,这里介绍如何使用它来进行机器学习。 在本教程中,您将了解什么是分类变量,以及处理此类数据的三种方法。 本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2 提取码:uDzP 文章目录 1、简介2、三种方法的使用1…

书生·浦语大模型实战营-学习笔记5

LMDeploy 大模型量化部署实践 大模型部署背景 LMDeploy简介 轻量化、推理引擎、服务 核心功能-量化 显存消耗变少了 大语言模型是典型的访存密集型任务,因为它是decoder-by-decoder 先把数据量化为INT4存起来,算的时候会反量化为FP16 AWQ算法&a…

Angular组件(一) 分割面板ShrinkSplitter

Angular组件(一) 分割面板ShrinkSplitter 前言 分割面板在日常开发中经常使用,可将一片区域,分割为可以拖拽整宽度或高度的两部分区域。模仿iview的分割面板组件,用angular实现该功能,支持拖拽和[(ngModel)]双向绑定的方式控制区…

Docker容器引擎(2)

目录 一.批量删除镜像,容器 二.Docker 网络实现原理 随机映射端口(从32768开始) 访问自己: 在10服务器上配置路由转发: 指定映射端口: 查看容器的输出和日志信息: 将宿主机目标|文件挂载…

RabbitMQ中交换机的应用及原理,案例的实现

目录 一、介绍 1. 概述 2. 作用及优势 3. 工作原理 二、交换机Exchange 1. Direct 2. Topic 3. Fanout 三、代码案例 消费者代码 1. 直连direct 生产者代码 测试 2. 主题topic 生产者代码 测试 3. 扇形fanout 生产者代码 测试 每篇一获 一、介绍 1. …

Vue的生命周期方法

beforeCreate 在实例初始化之后,数据观测(data observe)和 event/watcher 事件配置之前被调用。在当前阶段 data、methods、computed 以及 watch 上的数据和方法都不能被访问。 created 实例已经创建完成之后被调用。在这一步,实…

【JavaEE进阶】 MyBatis使用注解实现增删改查

文章目录 🍃前言🌴传递参数🎋增(Insert)🚩返回主键 🎄删(Delete)🌲改(Update)🌳查(Select)🚩起别名🚩结果映射🚩开启驼峰命名(推荐使用) ⭕总结 &#x1f343…

[UI5 常用控件] 01.Text

文章目录 前言1. 普通文本2. 长文本:3. 设置最大显示行数 ( maxLines3 )4. 单行显示 ( wrappingfalse )5. 显示空白符 ( renderWhitespacetrue )6. 使用 - 连接单词:只适用于英文 ( wrappingTypeHyphenated )7. 空白时使用 - 代替 ( emptyIndicatorModeOn )8. JSON数…

2024年需要重点关注的15种计算机病毒

2024年,计算机病毒威胁变得愈发多元化和复杂化。涉及勒索病毒、二维码病毒、挖矿木马等15种类型,这些病毒从数据勒索到系统入侵,对全球网络安全构成严峻挑战。 2024年,计算机病毒威胁变得愈发多元化和复杂化。涉及勒索病毒、二维码…

【网络安全】常见的网络威胁有哪些?

随着互联网的快速发展,网络安全问题日益凸显。常见的网络威胁包括病毒、木马、恶意软件等。这些威胁不仅会影响计算机的安全运行,还会窃取用户的个人信息,造成巨大的损失。因此,我们需要采取一些措施来保护自己的网络安全。 常见的…

android 图片添加水印

android 图片添加水印 本文主要讲下android 中如何给图片添加水印. 在Android中给图片添加水印可以使用Bitmap、Matrix和Canvas类的方法来实现. private Bitmap addWater() {// 加载原始图片Bitmap sourceBitmap BitmapFactory.decodeResource(getResources(), R.mipmap.sou…

Vue+OpenLayers7:OpenLayers7地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 本章讲解OpenLayers7地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系等配置。 前言 OpenLayers7地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置…

启动mitmproxy报错 ImportError: cannot import name ‘url_quote‘ from ‘werkzeug.urls‘

报错截图 ImportError: cannot import name url_quote from werkzeug.urls (d:\soft\python\python38\lib\site-packages\werkzeug\urls.py) 原因是Werkzeug版本不兼容导致 解决方法 pip install Werkzeug2.2.2

大数据学习之Flink算子、了解(Source)源算子(基础篇二)

Source源算子(基础篇二) 目录 Source源算子(基础篇二) 二、源算子(source) 1. 准备工作 2.从集合中读取数据 可以使用代码中的fromCollection()方法直接读取列表 也可以使用代码中的fromElements()方…

北斗短报文DTU 北斗通信DTU无线数传终端

北斗是我国自主建设的卫星导航系统,被广泛应用于全球定位、导航和时间同步等领域。随着物联网的迅猛发展,北斗短报文DTU作为物联网连接的关键技术,成为了各行各业的热门话题。 ** 一、北斗短报文DTU的概念与特点 **   北斗短报文DTU(Data…

二叉树知识

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 二、二叉树初始知识 题目 源于做的一道牛课题 若一颗完全二叉树中某节点无左孩子,则该节点是 A、高度为1的节点 B、高度为2的节点…