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: number
      from?: number
      readonly?: boolean
      data?: 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,前端点击取消的时候,会执行到这个方法里面。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS高级技巧导读

1,精灵图 1.1 为什么需要精灵图? 目的:为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度 核心原理:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了 1.2 精灵…

centos7.9安装redmine5.1.1

前提: 安装mysql并新建数据库--教程太多了此步骤省略; 用sqlyog连上mysql创建数据库redmine; 1.下载redmine-5.1.1.tar.gz,上传到/usr/local/software目录下; 2.解压 cd /usr/local/software tar -zxvf redmine-5.…

JavaScript进阶:WebAPIs重点知识整理2

目录 1 对节点的相关操作 1.1 查找节点 1.1.1 查找节点的父节点 1.1.2 查找节点的子节点 1.1.3 查找节点的兄弟节点 1.2 新增节点(先创建,后追加) 1.3 克隆节点 1.4 删除节点 2 M 端(移动端)事件 3 JS清空表…

uniapp使用uni-forms表单校验无效

查看是否写了name属性,且name属性的属性值得和下面v-model绑定的一致,否则校验不生效 官网

C#string字符串相关面试题

C#字符串(string)是什么类型 C#中的字符串是一种引用类型,属于.NET Framework中的System.String类。在C#中,字符串是不可变的,也就是说,一旦被创建,就不能再被修改。这意味着对于任何字符串的操…

2024年可能会用到的几个地图可视化模板

前言 在数字化的过程中,数据可视化变得越来越重要。用户喜欢通过酷炫的视觉效果和直观的数据展示来理解数据。可视化地图组件是数据可视化的重要组成部分。这些地图组件提供多样化的效果,能够更好地展示数据的关系和地理分布,直观地将数据与…

JUC-CAS

1. CAS概述 CAS(Compare ans swap/set) 比较并交换,实现并发的一种底层技术。它将预期的值和内存中的值比较,如果相同,就更新内存中的值。如果不匹配,一直重试(自旋)。Java.util.concurrent.atomic包下的原…

二叉树

目录 1翻转二叉树 2对称二叉树 3二叉树的深度 最大深度 最小深度 4二叉树的结点数量 完全二叉树的结点数量 5平衡二叉树 6 中序 后序求前序 二叉树结构体如下: struct freenode {int data;struct freenode *lchild, *rchild;//左孩子 右孩子 }T; 1翻转二…

基于springboot+vue的在线商城系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

大数据处理,Pandas与SQL高效读写大型数据集

大家好,使用Pandas和SQL高效地从数据库中读取、处理和写入大型数据集,以实现最佳性能和内存管理,这是十分重要的。 处理大型数据集往往是一项挑战,特别是在涉及到从数据库读取和写入数据时。将整个数据集加载到内存中的传统方法可…

【第十六课】哈希表(acwing-840模拟散列表 / 拉链法 / 开放寻址法 / c++代码 )

目录 前言 哈希表思想 拉链法 开放寻址法 acwing-840模拟散列表 拉链法代码如下 开放寻址法代码 前言 我对哈希表的印象就是:感觉可以类比数组,像数组的下标和该下标所对的元素之间的关系一样,就是比如ha[0]1,那么我下标为…

mask transformer相关论文阅读

前面讲了mask-transformer对医学图像分割任务是非常适用的。本文就是总结一些近期看过的mask-transformer方面的论文。 因为不知道mask transformer是什么就看了一些论文。后来得出结论,应该就是生成mask的transformer就是mask transformer。 DETR 很多这些论文都…

机器学习 | 掌握Matplotlib的可视化图表操作

Matplotlib是python的一个数据可视化库,用于创建静态、动态和交互式图表。它可以制作多种类型的图表,如折线图、散点图、柱状图、饼图、直方图、3D 图形等。以渐进、交互式方式实现数据可视化。当然博主也不能面面俱到的讲解到所有内容,详情请…

新特性Record最全用法总结---动力节点总结

目录 0、有用的新特性 一、Record 1.1、Record的介绍: 1.2、Record的声明: 1.3、Record的创建: 1.4、Record使用举例: 1.5、Record-实例方法、静态方法 1.6、Record-三类构造方法 1.6.1、紧凑型构造、定制构造方法&#…

MySQL的启动与连接

一、启动MySQL服务 方式一:进入计算机管理界面,点击【服务】,找到【MYSQL80】,右键开启即可 方式二:以管理员身份打开powershell, 输入命令net start MYSQL80. 二、连接MySQL服务 进入MySQL的安装目录中的bin目录&a…

【jetson笔记】torchaudio报错

原因是因为pip安装的包与jetson不兼容导致 自己安装或者cmake编译也会报错 需要拉取官方配置好的docker镜像 拉取docker镜像 具体容器可以看官网,按照自己需求拉取即可 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 如果其他包不需要只需要torc…

Supplier 惰性调用和 Future#get 同步等待调用结合

📖一、背景介绍 关于任务异步执行,两个点不可避免:异步结果和异步回调。 而在我的工程中有这样一段代码:使用 CompletableFuture 进行封装,可以异步执行,异步回调,通过 get() 等待异步任务的结…

ArcEngine添加点要素、线要素、面要素及学习总结

基于C#的ArcEngine二次开发教程(13):点、线、面要素的绘制_arcengine onmousedown-CSDN博客 https://www.cnblogs.com/cannel/p/11074343.html ArcEngine绘制点、线、多边形、矩形、圆形、椭圆的代码_arcengine 开发 生成矩形-CSDN博客 https…

《数学之友》期刊投稿方式投稿邮箱

《数学之友》是国家新闻出版总署批准的正规期刊,设置的栏目主要有:数学教育、教材研究、教学研究、数学建模、思想方法、数学学习、解题探索、CAI专题、复习考试、错例剖析等。从解题技巧方法、数学问题的溯源探微释疑到新课程背景下的教改教法教案&…

Qt事件处理,提升组件类

1.相关说明 1.提升组件QLabel的类&#xff0c;以实现双击功能 2.监控键盘事件&#xff0c;实现上下左右移动 3.鼠标点击获取坐标 2.相关界面 3.相关代码和操作 自定义类TMyLabel&#xff0c;父类为QLabel tmylabel.h #ifndef TMYLABEL_H #define TMYLABEL_H #include <QL…