通用血缘链路接口

接入「通用关系图」前端组件、自定义血缘数据源,或调用平台内置 /blood 数据血缘接口时

06-二次开发 / API参考
血缘血缘链路数据血缘lineageblood通用关系图commonRelationDWStandardbackurl控制入口搜索接口详情接口dag上下游view_blood

通用血缘链路接口

本页包含两部分:

  • A. 通用关系图组件协议(/commonRelation:一个可复用的前端组件,通过 backurl 指定后端「控制接口」,按约定协议渲染任意上下游关系图(血缘、依赖、调用链等)。本节描述该组件要求后端实现的接口契约与数据需求。
  • B. 平台内置数据血缘后端(/bloodview_blood.py:平台自带的数据血缘后端实现,为「数据血缘」页面(前端路由 /bloodRelation)提供节点检索、自动补全与节点详情。本节按当前源码核实其真实接口。

说明(已对照源码核实):A、B 是两条不同链路。前端路由中 /commonRelation 指向 CommonPipeline/DWStandard 组件(myapp/frontend/src/routerConfig.tsx:96),而 /bloodRelation 指向 Blood/Blood 组件(routerConfig.tsx:102),二者是不同页面。view_blood.py/blood 接口当前服务于 /bloodRelation,其响应结构与下文 A 节描述的通用协议(dag/layout)并不一致(B 节用 blood 平铺列表 + control,且为 GET 而非 POST)。接入通用组件时请以实际联调为准。


A. 通用关系图组件协议

使用方式

/frontend/commonRelation?backurl=<控制接口地址>

URL 参数 backurl 指定「控制接口」地址,组件首次加载时请求该接口,拿到初始关系图与布局配置。

前端路由 /commonRelationCommonPipeline/DWStandard(“通用关系图”),见 myapp/frontend/src/routerConfig.tsx:96

控制接口(backurl 指向)

返回内容(节选,省略号处为同结构子节点):

{
    "message": "success",
    "status": 0,
    "result": {
        // 控制参数
        "control": {
            "direction": "vertical",          // 排列方向,目前未使用
            "node_ops": ["detail", "explore"]  // 节点可进行的操作,目前未使用
        },
        // 上下游关系图(树形,children 递归)
        "dag": [
            {
                "children": [ /* 子节点,结构同父节点 */ ],
                "color": "#1B813E",            // 节点颜色
                "detail_url": "/workflow_modelview/api/web/node_detail/dev/pipeline/xxx",  // 节点详情查询地址
                "icon": "",                    // 节点图标
                "message": "",                 // 节点消息
                "name": "logic-python-output-0cbb-task0-2131831615"  // 节点名
            }
        ],
        "layout": {
            // 搜索框配置
            "search": {
                "default": [],                 // 默认搜索显示列表
                "prefix": ["type1", "type2"],  // 搜索固定前缀
                "search_url": "",              // 搜索可选值接口
                "submit_url": ""               // 选定节点名后的 dag 链路查询接口
            },
            // 布局详情信息展示
            "detail": [
                [ { "label": "集群", "name": "cluster", "value": "dev" } ]
            ],
            "icon": "",                        // 图标
            "title": "logic-python-output-0cbb",  // 显示标题
            // 右上角菜单按钮
            "right_button": [
                { "label": "Terminate", "url": "/workflow_modelview/api/stop/23" },
                { "label": "pipeline",  "url": "/pipeline_modelview/api/web/2" }
            ]
        }
    }
}

搜索接口(layout.search.search_url

POST 请求 /xx/search,请求体:

{
    "query": "xxx"   // 形如 prefix:search_text
}

返回可选节点列表:

{
    "status": 0,
    "message": "success",
    "result": [
        { "id": "xx", "value": "" }
    ]
}

详情接口(节点的 detail_url

POST 或 GET 请求 /xx/<node_id>,请求体可省略:

{
    "before_num": "2",   // 向上游展开层数
    "after_num":  "2"    // 向下游展开层数
}

返回体(按 tab → group 组织):

{
    "message": "success",
    "status": 0,
    "result": {
        "control": { "width": "700px" },
        "detail": [
            {
                "tabName": "输入输出",
                "bottomButton": [
                    { "text": "在线日志(no)", "url": "/k8s/web/log/dev/pipeline/xxx/main" }
                ],
                "content": [
                    {
                        "groupName": "消息",
                        "groupContent": { "label": "消息", "type": "html", "value": "运行正常" }
                    },
                    {
                        "groupName": "任务详情",
                        "groupContent": { "label": "任务详情", "type": "map", "value": { "log path": "xxx/main.log" } }
                    }
                ]
            },
            { "tabName": "pod信息",   "bottomButton": [], "content": [ /* ... */ ] },
            { "tabName": "结果可视化", "bottomButton": [], "content": [ /* ... */ ] },
            { "tabName": "workflow信息", "bottomButton": [], "content": [ /* ... */ ] }
        ]
    }
}

groupContent.type 取值:html / text / map,前端按类型渲染。

主要数据需求

  1. 各平台节点血缘,以及需要在血缘中展示的属性;
  2. 任务流运行后每个节点的运行结果。

B. 平台内置数据血缘后端 /blood

平台自带的数据血缘后端,源码 myapp/views/view_blood.py,类 Bloodroute_base = "/blood",通过 appbuilder.add_api(Blood) 注册。为「数据血缘」页面(前端路由 /bloodRelationBlood/Blood)提供数据。

数据来源myapp/init/init-blood.json(由 myapp/init/gen_init_blood.py 生成),在 Flask 进程启动时一次性载入到模块级变量,请求路径不再读盘。文件路径可由配置项 BLOOD_JSON_PATH 覆盖(view_blood.py:44);文件读不到不阻断启动,接口降级返回空集。

JSON 结构:node_type_zh(节点类型→中文名)、type_style(类型→{color,shape,platform})、nodes(node_id→节点)、details(node_id→详情)。

B.1 血缘节点搜索 GET /blood/search/node

根据 keywordnode_id 返回相关血缘子图 + 全图 control 配置。源码 view_blood.py:141

查询参数(query string):

参数 说明 默认
keyword(或 name 关键字模糊匹配(命中 node_id / name / platform / node_type / label 任一)
node_id 指定中心节点 id(命中则以它为焦点取子图)
depth_up 向上游展开层数 3
depth_down 向下游展开层数 3

匹配逻辑:优先按 node_id 取子图;否则按 keyword 匹配后取并集;都未命中则降级到默认焦点节点(优先 table_ods_user_log,否则字典首个)。

返回体:

{
    "status": 0,
    "message": "success",
    "result": {
        "blood": [ /* 节点对象平铺列表,按 node_id 排序 */ ],
        "control": {
            "node_ops": ["detail", "explore"],   // detail=查看详情, explore=继续展开上下游
            "direction": "horizontal",            // 整图布局方向
            "platform_color": { "<platform>": "<color>" },  // 平台→颜色(图例)
            "node_type_zh": { "<node_type>": "<中文名>" },   // 节点类型中文名
            "focus_node_id": "<焦点节点 id>",
            "total": 0                            // 节点总数
        }
    }
}

B.2 节点名称自动补全 GET /blood/search/name

供前端输入框自动补全,只在 node_id / name 上做子串匹配(label 不参与,命中更精准)。源码 view_blood.py:199

查询参数:keyword(或 q),limit(默认 20,范围 1–100)。

返回体:

{
    "status": 0,
    "message": "success",
    "result": {
        "options": [
            {
                "node_id": "xxx",
                "name": "xxx",
                "platform": "xxx",
                "node_type": "xxx",
                "node_type_zh": "xxx",
                "value": "xxx",                   // 对齐 antd Select/AutoComplete
                "label": "name (node_type_zh)"
            }
        ],
        "total": 0
    }
}

排序:完全相等 > 起始匹配 > 其他,排序后再按 limit 截断。

B.3 节点详情 GET /blood/show/<node_id>

返回某节点的详情(按 tab/group 组织),并附带 _meta 节点基础信息。源码 view_blood.py:246

  • 节点不存在时返回 status: -1message 形如 node_id [xxx] 不存在或暂无详情(经 i18n 包裹)。
  • 存在时返回 details[node_id] 内容,并注入 _metanode_id / name / platform / node_type / node_type_zh / label
{
    "status": 0,
    "message": "success",
    "result": {
        "_meta": { "node_id": "xxx", "name": "xxx", "platform": "xxx", "node_type": "xxx", "node_type_zh": "xxx", "label": [] }
        // ... 其余为 details 中该节点的 tab/group 结构
    }
}

说明:B 节三个接口均为 GETexpose_api 未指定 methods,默认 GET),与 A 节通用协议中 search/detail 描述的 POST 不同;返回结构也不同(B 用 blood 平铺列表,A 用 dag 树)。接入时以实际源码 myapp/views/view_blood.py 为准。

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki