diff --git a/.gitignore b/.gitignore index b8385bcc5b..c65c2f1cb5 100644 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,15 @@ ENV/ # PyCharm project settings .idea -.vscode/launch.json +# Frontend project lib file static/pipeline/node_modules/ node_modules/ +webpack_cache + +# OS generate file +.DS_Store + + +# Editor setting file +.vscode/ diff --git a/app.yml b/app.yml index 8ea57fd915..b17f7da627 100644 --- a/app.yml +++ b/app.yml @@ -4,7 +4,7 @@ app_name: 标准运维 is_use_celery: True author: 蓝鲸智云 introduction: 标准运维是通过一套成熟稳定的任务调度引擎,把在多系统间的工作整合到一个流程,助力运维实现跨系统调度自动化的SaaS应用。 -version: 3.3.9 +version: 3.3.13 category: 运维工具 language_support: 中文 desktop: diff --git a/blueapps/account/components/bk_token/models.py b/blueapps/account/components/bk_token/models.py index 4f0a1ac02b..6a37e2248b 100644 --- a/blueapps/account/components/bk_token/models.py +++ b/blueapps/account/components/bk_token/models.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/patch/settings_open_saas.py b/blueapps/patch/settings_open_saas.py index 1fc275db15..e37b1c8fdc 100644 --- a/blueapps/patch/settings_open_saas.py +++ b/blueapps/patch/settings_open_saas.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/patch/settings_paas_services.py b/blueapps/patch/settings_paas_services.py index eed2e8c15a..d34016b720 100644 --- a/blueapps/patch/settings_paas_services.py +++ b/blueapps/patch/settings_paas_services.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/template/context_processors.py b/blueapps/template/context_processors.py index 0cc4146ac4..8be19e8cf0 100644 --- a/blueapps/template/context_processors.py +++ b/blueapps/template/context_processors.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/config/default.py b/config/default.py index b69c3cafb7..9783a30c7d 100644 --- a/config/default.py +++ b/config/default.py @@ -57,7 +57,7 @@ 'gcloud.periodictask', 'pipeline', 'pipeline.component_framework', - 'pipeline.variables', + 'pipeline.variable_framework', 'pipeline.engine', 'pipeline.log', 'pipeline.contrib.statistics', diff --git a/config/prod.py b/config/prod.py index 3c246bf5a5..e1938c6f90 100644 --- a/config/prod.py +++ b/config/prod.py @@ -31,11 +31,11 @@ # 正式环境数据库可以在这里配置 -# 默认 default 请不要修改,如果使用了外部数据库,请联系【蓝鲸助手】授权 -# DATABASES.update( +# USE FOLLOWING SQL TO CREATE THE DATABASE NAMED APP_CODE +# SQL: CREATE DATABASE `bk_sops` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +# DATABASES = ( # { -# # 外部数据库授权,请联系 【蓝鲸助手】 -# 'external_db': { +# 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME': '', # 外部数据库名 # 'USER': '', # 外部数据库用户 diff --git a/config/stag.py b/config/stag.py index 75f2acb069..251302d06c 100644 --- a/config/stag.py +++ b/config/stag.py @@ -31,11 +31,11 @@ # 预发布环境数据库可以在这里配置 -# 默认 default 请不要修改,如果使用了外部数据库,请联系【蓝鲸助手】授权 -# DATABASES.update( +# USE FOLLOWING SQL TO CREATE THE DATABASE NAMED APP_CODE +# SQL: CREATE DATABASE `bk_sops` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +# DATABASES = ( # { -# # 外部数据库授权,请联系 【蓝鲸助手】 -# 'external_db': { +# 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME': '', # 外部数据库名 # 'USER': '', # 外部数据库用户 diff --git a/config/urls_custom.py b/config/urls_custom.py index 785d07473e..318c2742f5 100644 --- a/config/urls_custom.py +++ b/config/urls_custom.py @@ -26,6 +26,7 @@ url(r'^function/', include('gcloud.contrib.function.urls')), url(r'^audit/', include('gcloud.contrib.audit.urls')), url(r'^pipeline/', include('pipeline_plugins.components.urls')), + url(r'^pipeline/', include('pipeline_plugins.variables.urls')), url(r'^analysis/', include('gcloud.contrib.analysis.urls')), url(r'^periodictask/', include('gcloud.periodictask.urls')), ] diff --git a/django_signal_valve/admin.py b/django_signal_valve/admin.py index 5faafda763..f43259a283 100644 --- a/django_signal_valve/admin.py +++ b/django_signal_valve/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/docs/apidoc/en/create_periodic_task.md b/docs/apidoc/en/create_periodic_task.md new file mode 100644 index 0000000000..fddff3938c --- /dev/null +++ b/docs/apidoc/en/create_periodic_task.md @@ -0,0 +1,308 @@ +### Functional description + +Create a periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| template_id | string | YES | ID of template which used to create task | +| bk_biz_id | string | YES | business ID | +| name | string | YES | name of task | +| cron | dict | YES | crontab dict | +| flow_type | string | NO | flow type,common: common flow,common_func:functional flow | +| constants | dict | NO | global variables,details are described below | + +#### constants.KEY + +constant KEY, the format is like ${key} + +#### constants.VALUE + +constant value + +#### cron + + | Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | NO | minute, default value is * | +| hour | string | NO | hour, default value is * | +| day_of_week | string | NO | day of week, default value is * | +| day_of_month | string | NO | day of month, default value is * | +| month_of_year | string | NO | month of year, default value is * | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "template_id": "1", + "bk_biz_id": "2", + "name": "from api 3", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, + "constants": {"${bk_timing}": "100"}, + "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "pause", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "time", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "step1", + "name": "pause", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "step1", + "name": "time", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | +| form | dict | form dict for the task | +| pipeline_tree | dict | flow tree for the task | + + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global variables| + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/create_task.md b/docs/apidoc/en/create_task.md index 08e00e5960..100bb35403 100644 --- a/docs/apidoc/en/create_task.md +++ b/docs/apidoc/en/create_task.md @@ -18,9 +18,11 @@ Create a task with a flow template |---------------|------------|--------|------------------| | bk_biz_id | string | YES | the business ID | | template_id | string | YES | the flow template ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | | name | string | YES | Task name | | flow_type | string | NO | flow type,common: common flow,common_func:functional flow | | constants | dict | NO | global variables,details are described below | +| exclude_task_nodes_id | list | NO | nodes id not be executed, which are set ignore in flow | #### constants.KEY @@ -32,7 +34,7 @@ constant value, the type of value should be same with data from API[get_template ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -49,16 +51,163 @@ constant value, the type of value should be same with data from API[get_template ### Return Result Example -```python +``` { "result": true, "data": { - "task_id": 10 + "task_id": 10, + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } } } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -66,8 +215,39 @@ constant value, the type of value should be same with data from API[get_template | data | dict | data returned when result is true, details are described below | | message | string | error message returned when result is false | -#### data 说明 +#### data | Field | Type | Description | |-----------|----------|-----------| | task_id | int | the task instance ID | +| task_url | str | task instance url | +| pipeline_tree | dict | task pipeline tree | + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global | + +#### data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_periodic_task_info.md b/docs/apidoc/en/get_periodic_task_info.md new file mode 100644 index 0000000000..56604887f3 --- /dev/null +++ b/docs/apidoc/en/get_periodic_task_info.md @@ -0,0 +1,283 @@ +### Functional description + +Query periodic task detail + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | + + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task": "8" +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "pause", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "time", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "step1", + "name": "pause", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "step1", + "name": "time", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | +| form | dict | form dict for the task | +| pipeline_tree | dict | flow tree for the task | + + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global variables| + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_periodic_task_list.md b/docs/apidoc/en/get_periodic_task_list.md new file mode 100644 index 0000000000..9c683e88d1 --- /dev/null +++ b/docs/apidoc/en/get_periodic_task_list.md @@ -0,0 +1,91 @@ +### Functional description + +Query periodic task for business + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | business ID | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2" +} +``` + +### Return Result Example + +``` +{ + "data": [ + { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 1, + "name": "from api 3", + "creator": "admin", + "last_run_at": "2018-11-28 15:57:01 +0900", + "enabled": false, + "id": 11, + "template_id": "2" + }, + { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 1", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 6, + "template_id": "2" + }, + { + "cron": "*/5 * * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 4, + "template_id": "2" + } + ], + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | diff --git a/docs/apidoc/en/get_task_detail.md b/docs/apidoc/en/get_task_detail.md new file mode 100644 index 0000000000..4f728400e2 --- /dev/null +++ b/docs/apidoc/en/get_task_detail.md @@ -0,0 +1,339 @@ +### Functional description + +Query a task execution details + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10" +} +``` + +### Return Result Example + +``` +{ + "data": { + "creator": "admin", + "outputs": [ + { + "value": "1", + "key": "${job_script_type}", + "name": "type" + }, + { + "value": "127.0.0.1", + "key": "${IP}", + "name": "IP" + }, + { + "value": "0", + "key": "${EXIT}", + "name": "EXIT" + } + ], + "start_time": "2019-01-17 04:13:08", + "business_id": 2, + "create_time": "2019-01-17 04:13:03", + "business_name": "blueking", + "id": 10, + "constants": { + "${IP}": { + "source_tag": "var_ip_picker.ip_picker", + "source_info": {}, + "name": "IP", + "index": 2, + "custom_type": "ip", + "value": { + "var_ip_custom_value": "127.0.0.1", + "var_ip_method": "custom", + "var_ip_tree": [] + }, + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${IP}", + "desc": "", + "validation": "", + "is_meta": false + }, + "${job_script_type}": { + "source_tag": "job_fast_execute_script.job_script_type", + "source_info": { + "node554316ea019a341f8c28cc6a7da9": [ + "job_script_type" + ] + }, + "name": "type", + "index": 0, + "custom_type": "", + "value": "1", + "show_type": "show", + "source_type": "component_inputs", + "key": "${job_script_type}", + "validation": "", + "desc": "" + }, + "${EXIT}": { + "source_tag": "", + "source_info": {}, + "name": "EXIT", + "index": 1, + "custom_type": "input", + "value": "0", + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${EXIT}", + "validation": "^.+$", + "desc": "" + } + }, + "create_method": "app", + "elapsed_time": 7, + "ex_data": "", + "instance_name": "job_20190117121300", + "end_time": "2019-01-17 04:13:15", + "executor": "admin", + "template_id": "266", + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + + +#### data + +| Field | Type | Description | +|-----------|----------|-----------| +| id | int | the unique ID of task | +| name | string | the name of task | +| business_id | int | the business ID | +| business_name | string | the business name | +| template_id | int | the ID of flow used to create task | +| create_time | string | datetime when this task created | +| create_method | string | method how this task created | +| start_time | string | start time | +| finish_time | string | finish time | +| elapsed_time | int | elapsed time(seconds) | +| creator | string | person who created this task | +| executor | string | person who executed this task | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info of this task,details are described below | +| task_url | str | task instance url | +| pipeline_tree | dict | task pipeline tree | + +#### data.constants.KEY + +KEY, the format is like ${key} + + +#### data.constants.VALUE +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | + + +#### data.outputs[] +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| name | string | name of output variable | +| value | string、int、bool、dict、list | value | +| key | string | KEY | +| preset | bool | where to display in Standard Plugins | + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global | diff --git a/docs/apidoc/en/get_task_node_detail.md b/docs/apidoc/en/get_task_node_detail.md new file mode 100644 index 0000000000..ed6058caf6 --- /dev/null +++ b/docs/apidoc/en/get_task_node_detail.md @@ -0,0 +1,138 @@ +### Functional description + +Query a task node execution details + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | +| node_id | string | YES | the node ID of task | +| component_code| string | NO | the code of Standard Plugin, this field is required when query a Standard Plugin node | +| subprocess_stack| string | NO | stack of SubProcess, format is json | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd" + "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", + "component_code": "job_fast_execute_script", +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "inputs": { + "job_account": "root", + "job_script_timeout": "", + "job_script_source": "manual", + "job_script_list_public": "", + "job_content": "echo 0\nexit 0", + "job_script_type": "1", + "job_script_param": "", + "job_script_list_general": "", + "job_ip_list": "127.0.0.1" + }, + "retry": 0, + "name": "", + "finish_time": "2019-01-17 22:02:46 +0800", + "skip": false, + "start_time": "2019-01-17 22:02:37 +0800", + "children": {}, + "histories": [], + "ex_data": null, + "elapsed_time": 9, + "outputs": [ + { + "value": 407584, + "name": "task ID", + "key": "job_inst_id" + }, + { + "value": "", + "name": "link", + "key": "job_inst_url" + }, + { + "value": true, + "name": "result", + "key": "_result" + } + ], + "state": "FINISHED", + "version": "23ac8c29f62b3337aafcf1f538d277f8", + "error_ignorable": false, + "id": "node0df0431f8f553925af01a94854bd", + "loop": 1 + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +|-----------|----------|-----------| +| id | string | the unique ID of node | +| start_time | string | start time of last execution | +| finish_time | string | finish time of last execution | +| elapsed_time | int | elapsed time of last execution | +| state | string | execution status,CREATED,RUNNING,FAILED,NODE_SUSPENDED,SUSPENDED | +| skip | bool | skipped manually | +| retry | int | retry times | +| inputs | dict | inputs parameters, format is key:value | +| outputs | list | outputs info of this node,details are described below | +| ex_data | string | failure detail of this node,format is json or HTML、string | +| histories | list | retry records, details are described below | + +#### data.outputs[] +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| name | string | name of output variable | +| value | string、int、bool、dict、list | value | +| key | string | KEY | +| preset | bool | where to display in Standard Plugins | + + +#### data.histories[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_time | string | start time | +| finish_time | string | finish time | +| elapsed_time | int | elapsed time | +| state | string | execution status,CREATED,RUNNING,FAILED,NODE_SUSPENDED,SUSPENDED | +| skip | bool | skipped manually | +| retry | int | retry times | +| inputs | dict | inputs parameters, format is key:value | +| outputs | list | outputs info of this node,details are described below | +| ex_data | string | failure detail of this node,format is json or HTML、string | +| histories | list | retry records, details are described below | diff --git a/docs/apidoc/en/get_task_status.md b/docs/apidoc/en/get_task_status.md index 7cfddd8ec6..5496eba9fd 100644 --- a/docs/apidoc/en/get_task_status.md +++ b/docs/apidoc/en/get_task_status.md @@ -21,7 +21,7 @@ Query a task or task node execution status ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ Query a task or task node execution status ### Return Result Example -```python +``` { "result": true, "data": { @@ -76,7 +76,7 @@ Query a task or task node execution status } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -95,6 +95,7 @@ Query a task or task node execution status | start_time | string | start time | | finish_time| string | finish time | | children | dict | task detail of children nodes, details are described below | +| name | string | node name | #### data.state diff --git a/docs/apidoc/en/get_template_info.md b/docs/apidoc/en/get_template_info.md index 80ea2edcd7..f5f5b11d3a 100644 --- a/docs/apidoc/en/get_template_info.md +++ b/docs/apidoc/en/get_template_info.md @@ -18,22 +18,24 @@ Query individual flow template details of the business |---------------|------------|--------|---------------| | bk_biz_id | string | YES | the business ID | | template_id | string | YES | the task ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", "bk_biz_id": "1", - "template_id": "30" + "template_id": "30", + "template_source": "business", } ``` ### Return Result Example -```python +``` { "result": true, "data": { @@ -183,7 +185,7 @@ Query individual flow template details of the business } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -224,7 +226,7 @@ Query individual flow template details of the business |-----------|----------|-----------| | start_event | dict | start node | | end_event | dict | end node | -| activities | dict | task node(atoms or subprocess)info | +| activities | dict | task node(standard plugins or subprocess)info | | gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | | flows | dict | sequenceFlow(the line between nodes)info | | constants | dict | global variables, details are described below | @@ -244,5 +246,5 @@ KEY, the format is like ${key} | desc | string | description | | source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | | custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | -| source_tag | string | source tag and atom info, which is not empty when source_type is component_inputs or component_outputs | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | | source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_template_list.md b/docs/apidoc/en/get_template_list.md index 941d604346..a37c5d6480 100644 --- a/docs/apidoc/en/get_template_list.md +++ b/docs/apidoc/en/get_template_list.md @@ -17,21 +17,23 @@ Query flow templates list of the business | Field | Type | Required | Description | |---------------|------------|--------|-------------------| | bk_biz_id | string | YES | the business ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", - "bk_biz_id": "2" + "bk_biz_id": "2", + "template_source": "business", } ``` ### Return Result Example -```python +``` { "result": true, "data": [ @@ -72,7 +74,7 @@ Query flow templates list of the business } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/en/modify_constants_for_periodic_task.md b/docs/apidoc/en/modify_constants_for_periodic_task.md new file mode 100644 index 0000000000..4090ecc03b --- /dev/null +++ b/docs/apidoc/en/modify_constants_for_periodic_task.md @@ -0,0 +1,94 @@ +### Functional description + +modify global parameters for periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| constants | dict | NO | global variables,details are described below | + +#### constants.KEY + +constant KEY, the format is like ${key} + +#### constants.VALUE + +constant value + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "constants": {"${bk_timing}": "100"}, +} +``` + +### Return Result Example + +``` +{ + "data": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "custom_type": "", + "index": 0, + "value": "15", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data.KEY + +KEY, the format is like ${key} + +#### data.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/modify_cron_for_periodic_task.md b/docs/apidoc/en/modify_cron_for_periodic_task.md new file mode 100644 index 0000000000..9ee3d26016 --- /dev/null +++ b/docs/apidoc/en/modify_cron_for_periodic_task.md @@ -0,0 +1,69 @@ +### Functional description + +modify crontab for periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| cron | dict | YES | crontab dict | + +#### cron + + | Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | NO | minute, default value is * | +| hour | string | NO | hour, default value is * | +| day_of_week | string | NO | day of week, default value is * | +| day_of_month | string | NO | day of month, default value is * | +| month_of_year | string | NO | month of year, default value is * | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, +} +``` + +### Return Result Example + +``` +{ + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | diff --git a/docs/apidoc/en/node_callback.md b/docs/apidoc/en/node_callback.md new file mode 100644 index 0000000000..67afef99af --- /dev/null +++ b/docs/apidoc/en/node_callback.md @@ -0,0 +1,55 @@ +### Functional description + +callback specific node + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | +| node_id | string | YES | node id | +| callback_data | dict | NO | callback data | | + +### Request Parameters Example + +``` +import requests +kwargs = { + "app_code": "app_code", + "app_secret": "app_secret", + "access_token": "access_token", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd", + "callback_data": {"data": "data"}, +} +response = requests.get("http://{stageVariables.domain}/apigw/node_callback/10/2/", kwargs) +result = response.json() +``` + +### Return Result Example + +``` +{ + "message": "success", + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| result | bool | true or false, indicate success or failure | +| message | string | error message returned when result is false | diff --git a/docs/apidoc/en/operate_task.md b/docs/apidoc/en/operate_task.md index 613192e203..3e30de484f 100644 --- a/docs/apidoc/en/operate_task.md +++ b/docs/apidoc/en/operate_task.md @@ -31,7 +31,7 @@ Task actions such as start, pause, resume, revoke, etc. ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -44,14 +44,14 @@ Task actions such as start, pause, resume, revoke, etc. ### Return Result Example -```python +``` { "result": true, "data": {} } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/en/query_task_count.md b/docs/apidoc/en/query_task_count.md index 0891168604..9fe235cfc8 100644 --- a/docs/apidoc/en/query_task_count.md +++ b/docs/apidoc/en/query_task_count.md @@ -74,7 +74,7 @@ Query task instance classification statistics } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -89,7 +89,7 @@ Query task instance classification statistics | total | int | total number of tasks obtained by filter criteria | | groups | list | sort statistic details by filter criteria | -#### data.groups +#### data.groups[] | Field | Type | Description | |-----------|----------|-----------| | code | string | classification statistic type coding | diff --git a/docs/apidoc/en/set_periodic_task_enabled.md b/docs/apidoc/en/set_periodic_task_enabled.md new file mode 100644 index 0000000000..e60a219e41 --- /dev/null +++ b/docs/apidoc/en/set_periodic_task_enabled.md @@ -0,0 +1,60 @@ +### Functional description + +modify task activation status + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| enabled | bool | NO | whether the task is activate, default value is false | + + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "enabled": false +} +``` + +### Return Result Example + +``` +{ + "data": { + "enabled": false + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| enabled | bool | whether the task is activate | diff --git a/docs/apidoc/en/start_task.md b/docs/apidoc/en/start_task.md index 46c4d55ded..ff303d9a9b 100644 --- a/docs/apidoc/en/start_task.md +++ b/docs/apidoc/en/start_task.md @@ -21,7 +21,7 @@ Start a task ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,14 +33,14 @@ Start a task ### Return Result Example -```python +``` { "result": true, "data": {} } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/readme.md b/docs/apidoc/readme.md index 279967a238..7a811ef690 100644 --- a/docs/apidoc/readme.md +++ b/docs/apidoc/readme.md @@ -6,18 +6,35 @@ ## 文档说明 -- [查询业务下的模板列表](zh_hans/get_template_list.md) +- [查询模板列表](zh_hans/get_template_list.md) [(English Documents Available)](en/get_template_list.md) -- [查询业务下的单个模板详情](zh_hans/get_template_info.md) +- [查询单个模板详情](zh_hans/get_template_info.md) [(English Documents Available)](en/get_template_info.md) -- [通过流程模板创建任务](zh_hans/create_task.md) +- [通过流程模板新建任务](zh_hans/create_task.md) [(English Documents Available)](en/create_task.md) - [开始执行任务](zh_hans/start_task.md) [(English Documents Available)](en/start_task.md) - [操作任务](zh_hans/operate_task.md) [(English Documents Available)](en/operate_task.md) +- [回调任务节点](zh_hans/node_callback.md) +[(English Documents Available)](en/node_callback.md) - [查询任务或任务节点执行状态](zh_hans/get_task_status.md) [(English Documents Available)](en/get_task_status.md) +- [查询任务执行详情](zh_hans/get_task_detail.md) +[(English Documents Available)](en/get_task_detail.md) +- [查询任务节点执行详情](zh_hans/get_task_node_detail.md) +[(English Documents Available)](en/get_task_node_detail.md) - [查询任务分类统计总数](zh_hans/query_task_count.md) [(English Documents Available)](en/query_task_count.md) - +- [查询业务下的周期任务列表](zh_hans/get_periodic_task_list.md) +[(English Documents Available)](en/get_periodic_task_list.md) +- [查询业务下的某个周期任务详情](zh_hans/get_periodic_task_info.md) +[(English Documents Available)](en/get_periodic_task_info.md) +- [通过流程模板新建周期任务](zh_hans/create_periodic_task.md) +[(English Documents Available)](en/create_periodic_task.md) +- [设置周期任务是否激活](zh_hans/set_periodic_task_enabled.md) +[(English Documents Available)](en/set_periodic_task_enabled.md) +- [修改周期任务的调度策略](zh_hans/modify_cron_for_periodic_task.md) +[(English Documents Available)](en/modify_cron_for_periodic_task.md) +- [修改周期任务的全局参数](zh_hans/modify_constants_for_periodic_task.md) +[(English Documents Available)](en/modify_constants_for_periodic_task.md) diff --git a/docs/apidoc/zh_hans/create_periodic_task.md b/docs/apidoc/zh_hans/create_periodic_task.md new file mode 100644 index 0000000000..00c44c526c --- /dev/null +++ b/docs/apidoc/zh_hans/create_periodic_task.md @@ -0,0 +1,267 @@ +### 功能描述 + +创建周期任务 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| template_id | string | 是 | 用于创建任务的模板ID | +| bk_biz_id | string | 是 | 任务所属业务ID | +| name | string | 是 | 要创建的周期任务名称 | +| cron | dict | 是 | 要创建的周期任务调度策略 | +| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | +| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | + +#### constants.KEY + +变量 KEY,${key} 格式 + +#### constants.VALUE + +变量值 + +#### cron + + | 参数名称 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | 否 | 分,默认为 * | +| hour | string | 否 | 时,默认为 * | +| day_of_week | string | 否 | 一周内的某些天,默认为 * | +| day_of_month | string | 否 | 一个月中的某些天,默认为 * | +| month_of_year | string | 否 | 一年中的某些月份,默认为 * | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "template_id": "1", + "bk_biz_id": "2", + "name": "from api 3", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, + "constants": {"${bk_timing}": "100"}, + "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 3", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "100", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "定时", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "node375320830be9c46cd89f4069857d" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "100", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "步骤1", + "name": "定时", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": false, + "id": 11, + "template_id": 2 + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务 ID | +| template_id | string | 用于创建该任务的模板 ID | +| form | dict | 该周期任务的参数表单对象 | +| pipeline_tree | dict | 该周期任务的实例树 | + +#### data.pipeline_tree + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/create_task.md b/docs/apidoc/zh_hans/create_task.md index f974f6b155..572621dfea 100644 --- a/docs/apidoc/zh_hans/create_task.md +++ b/docs/apidoc/zh_hans/create_task.md @@ -18,9 +18,11 @@ |---------------|------------|--------|------------------| | bk_biz_id | string | 是 | 模板所属业务ID | | template_id | string | 是 | 模板ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | | name | string | 是 | 任务名称 | | flow_type | string | 否 | 任务流程类型,common: 常规流程,common_func:职能化流程 | | constants | dict | 否 | 任务全局参数,详细信息见下面说明 | +| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | #### constants.KEY @@ -32,7 +34,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -49,11 +51,158 @@ ### 返回结果示例 -```python +``` { "result": true, "data": { - "task_id": 10 + "task_id": 10, + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } } } ``` @@ -66,8 +215,39 @@ | data | dict | result=true 时成功数据,详细信息请见下面说明 | | message | string | result=false 时错误信息 | -#### data 说明 +#### data | 字段 | 类型 | 描述 | |-----------|----------|-----------| | task_id | int | 任务实例ID | +| task_url | str | 任务实例链接 | +| pipeline_tree | dict | 任务实例树 | + +#### data.pipeline_tree + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_periodic_task_info.md b/docs/apidoc/zh_hans/get_periodic_task_info.md new file mode 100644 index 0000000000..09c9efd22e --- /dev/null +++ b/docs/apidoc/zh_hans/get_periodic_task_info.md @@ -0,0 +1,280 @@ +### 功能描述 + +查询某个周期任务的详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8" +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "定时2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "定时", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "步骤1", + "name": "定时", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务 ID | +| template_id | string | 用于创建该任务的模板 ID | +| form | dict | 该周期任务的参数表单对象 | +| pipeline_tree | dict | 该周期任务的实例树 | + +#### data.pipeline_tree +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_periodic_task_list.md b/docs/apidoc/zh_hans/get_periodic_task_list.md new file mode 100644 index 0000000000..75a55e3e2a --- /dev/null +++ b/docs/apidoc/zh_hans/get_periodic_task_list.md @@ -0,0 +1,91 @@ +### 功能描述 + +查询某个业务下所有的周期任务 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 任务所属业务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2" +} +``` + +### 返回结果示例 + +``` +{ + "data": [ + { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 1, + "name": "from api 3", + "creator": "admin", + "last_run_at": "2018-11-28 15:57:01 +0900", + "enabled": false, + "id": 11, + "template_id": "2" + }, + { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 1", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 6, + "template_id": "2" + }, + { + "cron": "*/5 * * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "定时", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 4, + "template_id": "2" + } + ], + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务ID | +| template_id | string | 用于创建该任务的模板ID | diff --git a/docs/apidoc/zh_hans/get_task_detail.md b/docs/apidoc/zh_hans/get_task_detail.md new file mode 100644 index 0000000000..099618b8e4 --- /dev/null +++ b/docs/apidoc/zh_hans/get_task_detail.md @@ -0,0 +1,338 @@ +### 功能描述 + +查询任务执行详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10" +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "creator": "admin", + "outputs": [ + { + "value": "1", + "key": "${job_script_type}", + "name": "脚本类型" + }, + { + "value": "127.0.0.1", + "key": "${IP}", + "name": "IP" + }, + { + "value": "0", + "key": "${EXIT}", + "name": "EXIT" + } + ], + "start_time": "2019-01-17 04:13:08", + "business_id": 2, + "create_time": "2019-01-17 04:13:03", + "business_name": "蓝鲸", + "id": 10, + "constants": { + "${IP}": { + "source_tag": "var_ip_picker.ip_picker", + "source_info": {}, + "name": "IP", + "index": 2, + "custom_type": "ip", + "value": { + "var_ip_custom_value": "127.0.0.1", + "var_ip_method": "custom", + "var_ip_tree": [] + }, + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${IP}", + "desc": "", + "validation": "", + "is_meta": false + }, + "${job_script_type}": { + "source_tag": "job_fast_execute_script.job_script_type", + "source_info": { + "node554316ea019a341f8c28cc6a7da9": [ + "job_script_type" + ] + }, + "name": "脚本类型", + "index": 0, + "custom_type": "", + "value": "1", + "show_type": "show", + "source_type": "component_inputs", + "key": "${job_script_type}", + "validation": "", + "desc": "" + }, + "${EXIT}": { + "source_tag": "", + "source_info": {}, + "name": "EXIT", + "index": 1, + "custom_type": "input", + "value": "0", + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${EXIT}", + "validation": "^.+$", + "desc": "" + } + }, + "create_method": "app", + "elapsed_time": 7, + "ex_data": "", + "instance_name": "job输出变量测试_20190117121300", + "end_time": "2019-01-17 04:13:15", + "executor": "admin", + "template_id": "266", + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| result | bool | true/false 查询成功与否 | +| data | dict | result=true 时返回数据,详细信息见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| id | int | 任务 ID,即 task_id | +| name | string | 任务名称 | +| business_id | int | 所属业务 ID | +| business_name | string | 所属业务名称 | +| template_id | int | 创建任务所用的流程模板 ID | +| create_time | string | 任务创建时间 | +| create_method | string | 任务创建方式 | +| start_time | string | 任务执行时间 | +| finish_time | string | 任务完成时间 | +| elapsed_time | int | 任务执行耗时(秒) | +| creator | string | 任务创建人 | +| executor | string | 任务执行人 | +| constants | dict | 输入的全局变量,详情见下面说明 | +| outputs | list | 任务输出参数,详情见下面说明 | +| task_url | str | 任务实例链接 | +| pipeline_tree | dict | 任务实例树 | + +#### data.constants.KEY + +全局变量 KEY,${key} 格式 + + +#### data.constants.VALUE +| 字段 | 类型 | 描述 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | + + +#### data.outputs[] +| 字段 | 类型 | 描述 | +| ------------ | ---------- | ------------------------------ | +| name | string | 输出参数名称 | +| value | string、int、bool、dict、list | 输出参数值 | +| key | string | 输出参数 KEY | +| preset | bool | 是否是标准插件定义中预设输出变量 | + +#### data.pipeline_tree + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | diff --git a/docs/apidoc/zh_hans/get_task_node_detail.md b/docs/apidoc/zh_hans/get_task_node_detail.md new file mode 100644 index 0000000000..28d0bfcc8b --- /dev/null +++ b/docs/apidoc/zh_hans/get_task_node_detail.md @@ -0,0 +1,138 @@ +### 功能描述 + +查询任务节点执行详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | +| node_id | string | 是 | 节点 ID | +| component_code| string | 否 | 标准插件编码,请求标准插件执行详情必填 | +| subprocess_stack| string | 否 | 子流程堆栈,json 格式的列表 | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd" + "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", + "component_code": "job_fast_execute_script", +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "inputs": { + "job_account": "root", + "job_script_timeout": "", + "job_script_source": "manual", + "job_script_list_public": "", + "job_content": "echo 0\nexit 0", + "job_script_type": "1", + "job_script_param": "", + "job_script_list_general": "", + "job_ip_list": "127.0.0.1" + }, + "retry": 0, + "name": "", + "finish_time": "2019-01-17 22:02:46 +0800", + "skip": false, + "start_time": "2019-01-17 22:02:37 +0800", + "children": {}, + "histories": [], + "ex_data": null, + "elapsed_time": 9, + "outputs": [ + { + "value": 407584, + "name": "JOB任务ID", + "key": "job_inst_id" + }, + { + "value": "", + "name": "JOB任务链接", + "key": "job_inst_url" + }, + { + "value": true, + "name": "执行结果", + "key": "_result" + } + ], + "state": "FINISHED", + "version": "23ac8c29f62b3337aafcf1f538d277f8", + "error_ignorable": false, + "id": "node0df0431f8f553925af01a94854bd", + "loop": 1 + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| result | bool | true/false 查询成功与否 | +| data | dict | result=true 时返回数据,详细信息见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| id | string | 节点 ID | +| start_time | string | 最后一次执行开始时间 | +| finish_time | string | 最后一次执行结束时间 | +| elapsed_time | int | 最后一次执行耗时,单位秒 | +| state | string | 最后一次执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | +| skip | bool | 是否手动跳过 | +| retry | int | 重试次数 | +| inputs | dict | 输入参数,key:value格式 | +| outputs | list | 输出参数,详情见下面说明 | +| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | +| histories | list | 重试记录详情,详情见下面说明 | + +#### outputs[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| name | string | 输出字段 | +| value | string、int、bool、dict、list | 输出参数值 | +| key | string | 输出参数 KEY | +| preset | bool | 是否是标准插件定义中预设输出变量 | + + +#### histories[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_time | string | 执行开始时间 | +| finish_time | string | 执行结束时间 | +| elapsed_time | int | 执行耗时 | +| state | string | 执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | +| skip | bool | 是否手动跳过 | +| retry | int | 重试次数 | +| histories | list | 重试记录详情,详情见下面说明 | +| inputs | dict | 输入参数,key:value格式 | +| outputs | dict | 输出参数,key:value格式 | +| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | diff --git a/docs/apidoc/zh_hans/get_task_status.md b/docs/apidoc/zh_hans/get_task_status.md index 01895a96c4..283b18ed81 100644 --- a/docs/apidoc/zh_hans/get_task_status.md +++ b/docs/apidoc/zh_hans/get_task_status.md @@ -21,7 +21,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": { @@ -95,6 +95,7 @@ | start_time | string | 任务或节点执行开始时间 | | finish_time | string | 任务或节点执行结束时间 | | children | dict | 任务节点执行详情,详细信息见下面说明 | +| name | string | 节点名称 | #### data.state @@ -108,7 +109,7 @@ | FINISHED | 已完成 | #### data.children.KEY -任务节点 执行态ID +任务节点执行态ID #### data.children.VALUE 同 data 格式 diff --git a/docs/apidoc/zh_hans/get_template_info.md b/docs/apidoc/zh_hans/get_template_info.md index 49e6d38cfa..71b84be657 100644 --- a/docs/apidoc/zh_hans/get_template_info.md +++ b/docs/apidoc/zh_hans/get_template_info.md @@ -18,22 +18,24 @@ |---------------|------------|--------|---------------| | bk_biz_id | string | 是 | 模板所属业务ID | | template_id | string | 是 | 模板ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", "bk_biz_id": "1", - "template_id": "30" + "template_id": "30", + "template_source": "business", } ``` ### 返回结果示例 -```python +``` { "result": true, "data": { @@ -224,7 +226,7 @@ |-----------|----------|-----------| | start_event | dict | 开始节点信息 | | end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(原子和子流程)信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | | gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | | flows | dict | 顺序流(节点连线)信息 | | constants | dict | 全局变量信息,详情见下面 | @@ -242,7 +244,7 @@ | name | string | 变量名字 | | index | int | 变量在模板中的显示顺序 | | desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从原子输入参数勾选,component_outputs:从原子输出结果中勾选 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | | custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs或component_outputs 时有效,变量的来源原子 | +| source_tag | string | source_type=component_inputs或component_outputs 时有效,变量的来源标准插件 | | source_info | dict | source_type=component_inputs或component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_template_list.md b/docs/apidoc/zh_hans/get_template_list.md index 88285d37ac..f7f72d4d8b 100644 --- a/docs/apidoc/zh_hans/get_template_list.md +++ b/docs/apidoc/zh_hans/get_template_list.md @@ -17,21 +17,23 @@ | 字段 | 类型 | 必选 | 描述 | |---------------|------------|--------|-------------------| | bk_biz_id | string | 是 | 模板所属业务ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", - "bk_biz_id": "2" + "bk_biz_id": "2", + "template_source": "business", } ``` ### 返回结果示例 -```python +``` { "result": true, "data": [ diff --git a/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md b/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md new file mode 100644 index 0000000000..f530435751 --- /dev/null +++ b/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md @@ -0,0 +1,93 @@ +### 功能描述 + +修改周期任务的全局参数 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | +| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | + +#### constants.KEY + +变量 KEY,${key} 格式 + +#### constants.VALUE + +变量值 + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "constants": {"${bk_timing}": "100"}, +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "custom_type": "", + "index": 0, + "value": "15", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data.KEY +全局变量 KEY,${key} 格式 + +#### data.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md b/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md new file mode 100644 index 0000000000..eebb2ed5be --- /dev/null +++ b/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md @@ -0,0 +1,69 @@ +### 功能描述 + +修改周期任务的调度策略 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | +| cron | dict | 否 | 调度策略对象 | + +#### cron + + | 参数名称 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | 否 | 分,默认为 * | +| hour | string | 否 | 时,默认为 * | +| day_of_week | string | 否 | 一周内的某些天,默认为 * | +| day_of_month | string | 否 | 一个月中的某些天,默认为 * | +| month_of_year | string | 否 | 一年中的某些月份,默认为 * | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)" + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 调度策略表达式 | diff --git a/docs/apidoc/zh_hans/node_callback.md b/docs/apidoc/zh_hans/node_callback.md new file mode 100644 index 0000000000..e494e7d2f3 --- /dev/null +++ b/docs/apidoc/zh_hans/node_callback.md @@ -0,0 +1,55 @@ +### 功能描述 + +回调指定的节点 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | +| node_id | string | 是 | 节点 ID | +| callback_data | dict | 否 | 回调数据 | | + +### 请求参数示例 + +``` +import requests +kwargs = { + "app_code": "app_code", + "app_secret": "app_secret", + "access_token": "access_token", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd", + "callback_data": {"data": "data"}, +} +response = requests.get("http://{stageVariables.domain}/apigw/node_callback/10/2/", kwargs) +result = response.json() +``` + +### 返回结果示例 + +``` +{ + "message": "success", + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 成功与否 | +| message | string | result=false 时错误信息 | diff --git a/docs/apidoc/zh_hans/operate_task.md b/docs/apidoc/zh_hans/operate_task.md index 16ef1360fe..b928479624 100644 --- a/docs/apidoc/zh_hans/operate_task.md +++ b/docs/apidoc/zh_hans/operate_task.md @@ -31,7 +31,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -44,7 +44,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": {} diff --git a/docs/apidoc/zh_hans/query_task_count.md b/docs/apidoc/zh_hans/query_task_count.md index 15ea07e8a2..2050e3bf02 100644 --- a/docs/apidoc/zh_hans/query_task_count.md +++ b/docs/apidoc/zh_hans/query_task_count.md @@ -89,7 +89,7 @@ | total | int | 按照过滤条件获取的任务总数 | | groups | list | 按照过滤条件分类分类统计详情 | -#### data.groups +#### data.groups[] | 字段 | 类型 | 描述 | |-----------|----------|-----------| | code | string | 分类统计类型编码 | diff --git a/docs/apidoc/zh_hans/set_periodic_task_enabled.md b/docs/apidoc/zh_hans/set_periodic_task_enabled.md new file mode 100644 index 0000000000..c36c975026 --- /dev/null +++ b/docs/apidoc/zh_hans/set_periodic_task_enabled.md @@ -0,0 +1,59 @@ +### 功能描述 + +设置某个周期任务是否激活 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 任务所属业务ID | +| enabled | bool | 否 | 该周期任务是否激活,不传则为 false | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "enabled": false +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "enabled": false + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| enabled | bool | 当前周期任务是否已经激活 | diff --git a/docs/apidoc/zh_hans/start_task.md b/docs/apidoc/zh_hans/start_task.md index f2faf83009..90c922f26a 100644 --- a/docs/apidoc/zh_hans/start_task.md +++ b/docs/apidoc/zh_hans/start_task.md @@ -21,7 +21,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": {} diff --git a/docs/install/dev_deploy.md b/docs/install/dev_deploy.md index 1988260a45..f956ee9c03 100644 --- a/docs/install/dev_deploy.md +++ b/docs/install/dev_deploy.md @@ -78,13 +78,13 @@ python manage.py createcachetable django_cache ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` @@ -98,8 +98,8 @@ python manage.py collectstatic --noinput 前端资源文件需要单独拷贝收集,执行如下命令 ```bash rm -rf static/dev static/images -mv pipeline/blueflow/static/dev static/ -mv pipeline/blueflow/static/images static/ +mv frontend/desktop/static/dev static/ +mv frontend/desktop/static/images static/ ``` diff --git a/docs/install/dev_web.md b/docs/install/dev_web.md index b43df34125..b0921e2e77 100644 --- a/docs/install/dev_web.md +++ b/docs/install/dev_web.md @@ -4,22 +4,22 @@ 标准运维前端是用 vue 框架开发的,在本地开发时需要先安装 node.js,直接去官网下载软件并安装即可,地址为:https://nodejs.org/en/。 ## 安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装。 +进入 frontend/desktop/,执行以下命令安装。 ```bash npm install ``` ## 修改配置文件 -把 pipeline/blueflow/ 中的所有文件中的 {BK_PAAS_HOST} 换成你部署的蓝鲸社区版地址,如果你的应用 ID 修改过,请把所有文件中的 bk_sops 改成你的新应用 ID。 +把 frontend/desktop/ 中的所有文件中的 {BK_PAAS_HOST} 换成你部署的蓝鲸社区版地址,如果你的应用 ID 修改过,请把所有文件中的 bk_sops 改成你的新应用 ID。 ## 启动前端工程 -进入 bk_sops/src/pipeline/blueflow/,执行以下命令运行前端工程。默认启动的是 9000 端口,然后通过 http://dev.{BK_PAAS_HOST}:9000/ 访问前端应用,此时后端请求会自动转发到你启动的 django 工程,即 8000 端口。 +进入 bk_sops/src/frontend/desktop/,执行以下命令运行前端工程。默认启动的是 9000 端口,然后通过 http://dev.{BK_PAAS_HOST}:9000/ 访问前端应用,此时后端请求会自动转发到你启动的 django 工程,即 8000 端口。 ```bash npm run dev ``` ## 开发后打包 -前端开发完成后,正式发布前需要先打包。还是在 pipeline/blueflow/ 目录下,执行如下命令打包,会自动在当前目录下生成 static/dist/ 目录,即打包好的前端资源。 +前端开发完成后,正式发布前需要先打包。还是在 frontend/desktop/ 目录下,执行如下命令打包,会自动在当前目录下生成 static/dist/ 目录,即打包好的前端资源。 ```bash npm run build -- --SITE_URL="/o/bk_sops" --STATIC_ENV="open/prod" @@ -29,6 +29,6 @@ npm run build -- --SITE_URL="/o/bk_sops" --STATIC_ENV="open/prod" 前端打包后,需要在工程目录下运行如下命令收集静态资源到 static 下。 ```bash rm -rf static/open static/images -mv pipeline/blueflow/static/open static/ -mv pipeline/blueflow/static/images static/ +mv frontend/desktop/static/open static/ +mv frontend/desktop/static/images static/ ``` \ No newline at end of file diff --git a/docs/install/source_code_deploy.md b/docs/install/source_code_deploy.md index 642c80e5d4..273cef4356 100644 --- a/docs/install/source_code_deploy.md +++ b/docs/install/source_code_deploy.md @@ -6,13 +6,13 @@ ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` @@ -33,7 +33,7 @@ python manage.py collectstatic --noinput ## 开通 API 白名单 -手动在你部署的蓝鲸社区版的中控机执行如下命令,开通标准运维访问蓝鲸PaaS平台API网关的白名单,以便标准运维原子可以正常调用 API。 +手动在你部署的蓝鲸社区版的中控机执行如下命令,开通标准运维访问蓝鲸PaaS平台API网关的白名单,以便标准插件可以正常调用 API。 ```bash source /data/install/utils.fc add_app_token bk-sops-ce "$(_app_token bk-sops-ce)" "标准运维定制版" @@ -72,7 +72,7 @@ add_app_token bk-sops-ce "$(_app_token bk-sops-ce)" "标准运维定制版" 按照前面的步骤操作后,你已经在蓝鲸社区版 PaaS 上创建了一个标准运维的定制版本,如果功能测试正常(请主要测试流程模板创建、任务执行、任务操作等核心功能),那么你可以选择下架官方标准运维应用,并用定制版本替换。 1) 如果需要保留官方标准运维应用的所有数据,你需要修改数据库配置 -获取你部署的蓝鲸社区版平台的数据库账号密码,以及官方标准运维应用的数据库名,默认测试环境是 bk_sops_bkt,正式环境是 bk_sops。修改代码的 conf/settings_testing.py 和 conf/settings_production.py,分别修改为上面获取的官方标准运维应用的数据库信息。 +获取你部署的蓝鲸社区版平台的数据库账号密码,以及官方标准运维应用的数据库名,默认测试环境是 bk_sops_bkt,正式环境是 bk_sops。修改代码的 config/stag.py 和 config/prod.py,分别修改为上面获取的官方标准运维应用的数据库信息。 ```python DATABASES = { 'default': { diff --git a/docs/install/upload_pack_deploy.md b/docs/install/upload_pack_deploy.md index d931dd3983..79cdfca90a 100644 --- a/docs/install/upload_pack_deploy.md +++ b/docs/install/upload_pack_deploy.md @@ -10,13 +10,13 @@ ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` diff --git a/docs/overview/architecture.md b/docs/overview/architecture.md index 4d95b1396a..968ad8141a 100644 --- a/docs/overview/architecture.md +++ b/docs/overview/architecture.md @@ -5,10 +5,10 @@ 这是标准运维的逻辑架构图,可以分为四层: - API 网关层 -主要负责通过API网关和第三方平台进行交互,标准运维原子的实际执行就是通过这一层把请求分发给依赖的系统。 +主要负责通过API网关和第三方平台进行交互,标准运维插件的实际执行就是通过这一层把请求分发给依赖的系统。 - 流程引擎层 -负责解析上层的任务实例,映射节点原子对应的服务,并通过底层的蓝鲸API网关调用其他系统的API(如配置平台的创建集群,作业平台的快速执行脚本等),流程引擎还包括了具体的任务执行引擎和流程控制、上下文管理等模块。 +负责解析上层的任务实例,映射节点插件对应的服务,并通过底层的蓝鲸API网关调用其他系统的API(如配置平台的创建集群,作业平台的快速执行脚本等),流程引擎还包括了具体的任务执行引擎和流程控制、上下文管理等模块。 - 任务管理层 -主要对应标准运维的任务编排和任务控制功能,任务编排包含基础单元原子框架和原子展示层,任务控制包括创建任务实例的模板校验和参数校验,以及任务实例执行时给用户提供的操作接口如暂停、继续、撤销任务等。 +主要对应标准运维的任务编排和任务控制功能,任务编排包含基础单元插件框架和插件展示层,任务控制包括创建任务实例的模板校验和参数校验,以及任务实例执行时给用户提供的操作接口如暂停、继续、撤销任务等。 - 接入层 包含权限控制、API接口和数据统计等。 \ No newline at end of file diff --git a/docs/overview/code_structure.md b/docs/overview/code_structure.md index 0e99f7b5d7..c915c049af 100644 --- a/docs/overview/code_structure.md +++ b/docs/overview/code_structure.md @@ -6,21 +6,15 @@ - framework - 蓝鲸基于 django 框架的二次封装架构,主要提供 saas 运营在蓝鲸 paas 上的基础配置和服务。 + 蓝鲸基于 django 框架的二次封装架构,主要提供 SaaS 运营在蓝鲸 PaaS 上的基础配置和服务。 - conf:工程各部署环境配置,如本地环境、测试环境、正式环境。 + config:工程各部署环境配置,如本地环境、测试环境、正式环境,以及路由配置。 - common:主要是一些公共函数。 + blueapps:新版开发框架核心模块,包括蓝鲸统一登录、鉴权、中间件和公共函数。 - blueapps:也是一些公共函数,单独作为一个模块主要是为了向后兼容新版开发框架。 + packages:蓝鲸 API Gateway SDK,包括配置平台、作业平台等提供的API。 - bk_api:蓝鲸 paas 提供的 API。 - - blueking:蓝鲸 API Gateway SDK,包括配置平台、作业平台等提供的API。 - - account:蓝鲸统一登录和鉴权。 - -- pipeline +- pipeline、pipeline_web、pipeline_plugins 自研的流程引擎框架,主要包含任务流程编排页面和任务流程执行服务。 @@ -38,11 +32,15 @@ validators:数据校验,如环状结构检测和数据合法性校验。 - components:原子框架和原子定义。 + component_framework:插件框架和插件定义。 variables:全局变量定义。 contrib:扩展功能,如数据统计和前端 API。 + + pipeline_web:前端数据适配层,支持前端画布生成的流程数据。 + + pipeline_plugins:标准运维官方插件库和全局自定义变量。 - gcloud @@ -68,9 +66,9 @@ 前端资源,包括 webpack 配置和静态资源。 - pipeline.blueflow:主要包括流程编排 pipeline/blueflow 模块,该模块是基于 vue 实现的。 + frontend:主要包括流程编排 desktop 模块,该模块是基于 vue 实现的。 - static:原子 components 和变量 variables 的前端定义文件,都放在各自模块的 static 目录下。 + static:插件 components 和变量 variables 的前端定义文件,都放在各自模块的 static 目录下。 templates:包含首页和 django admin 需要的页面。 diff --git a/docs/overview/usecase.md b/docs/overview/usecase.md index 07f23293ca..6ec76f1ccd 100644 --- a/docs/overview/usecase.md +++ b/docs/overview/usecase.md @@ -1,4 +1,4 @@ # 使用场景 -标准运维主要用于运维场景,如业务发布、变更、开区、扩缩容、故障处理等执行类操作;通过接入自定义原子,对接企业内其他系统,如单据系统、 +标准运维主要用于运维场景,如业务发布、变更、开区、扩缩容、故障处理等执行类操作;通过接入自定义插件,对接企业内其他系统,如单据系统、 版本管理系统等,也能应用到监控告警、配置管理、开发工具、企业IT、办公应用等场景。 \ No newline at end of file diff --git a/docs/release.md b/docs/release.md index 702d25099c..6faae2e14c 100644 --- a/docs/release.md +++ b/docs/release.md @@ -259,4 +259,23 @@ - 修复用户在没登录过标准运维的情况下无法调用 API 接口的问题 # 3.3.9 -# todo +- bug fix + - 修复周期任务在固定月份和日期时 beat 进程退出的问题 + - 修复任务节点失败后重试时如果参数填写出错,会导致无法通过修改参数再次重试的问题 + - 修复职能化认领页面点击认领按钮页面会重新刷新的问题 + - 修复任务节点执行时间超过一天后耗时计算不正确的问题 + +# 3.3.10 +- bug fix + - 修复获取任务流程状态接口 API 返回的节点名与实际节点名不符的问题 + +# 3.3.11 +- bug fix + - 修复在 API 中调用 ESB 获取用户信息异常的问题 + +# 3.3.12 +- bug fix + - 修复在 get_task_status API 返回的 elapsed_time 为 Float 的问题 + +# 3.3.13 +- todo \ No newline at end of file diff --git a/docs/resource/img/code_structure.png b/docs/resource/img/code_structure.png index 41583be737..cb91be68cc 100644 Binary files a/docs/resource/img/code_structure.png and b/docs/resource/img/code_structure.png differ diff --git a/docs/wiki/faq.md b/docs/wiki/faq.md index 9225a67358..11fd6717ff 100644 --- a/docs/wiki/faq.md +++ b/docs/wiki/faq.md @@ -1,8 +1,8 @@ -### 标准运维原子支持用户接入企业内IT系统吗? -> 支持,接入方式请参考“附录3:原子开发”。 +### 标准运维插件支持用户接入企业内IT系统吗? +> 支持,接入方式请参考“附录3:标准插件开发”。 ### 标准运维点击开始执行任务后报错:taskflow[id=1] get status error: node(nodee37e20…c7fb131) does not exist, may have not by executed,并且在任务列表中查看任务状态是“未知”,可能是什么原因? > 标准运维执行引擎依赖于蓝鲸的RabbitMQ服务和App启动的celery进程,请登录服务器确认服务已启动并正常运行,可以查看App的celery.log日志文件帮助定位问题原因。 -### 标准运维能执行任务,但是原子节点报错:Trackback…TypeError:int() argument must be a string or a number,not ‘NoneType’,可能是什么原因? -> 标准运维任务流程的执行状态和原子输入、输出等信息缓存依赖Redis服务,所以首次部署请务必按照“标准运维部署文档”,配置Redis环境变量后重新部署。 +### 标准运维能执行任务,但是插件节点报错:Trackback…TypeError:int() argument must be a string or a number,not ‘NoneType’,可能是什么原因? +> 标准运维任务流程的执行状态和插件输入、输出等信息缓存依赖Redis服务,所以首次部署请务必按照“标准运维部署文档”,配置Redis环境变量后重新部署。 diff --git a/docs/wiki/home.md b/docs/wiki/home.md index 10a7180534..4b928385c7 100644 --- a/docs/wiki/home.md +++ b/docs/wiki/home.md @@ -2,7 +2,7 @@ # 标准运维,一套成熟稳定的流程编排调度引擎! ## 导读 ->标准运维是腾讯蓝鲸体系中的一款SaaS产品,它助力运维实现跨系统的调度自动化。通过一套成熟稳定的流程编排调度引擎,基于蓝鲸PaaS平台的API网关服务对接企业内部各个系统API的能力,把在多系统间切换的工作模式整合到一个流程中,不仅可以将腾讯蓝鲸智云体系内的服务(如:配置平台、作业平台、通知服务等)进行整合,而且提供了自定义原子开发能力,让用户可以将自己企业内独有的系统接入并整合,实现一键自动化调度。 +>标准运维是腾讯蓝鲸体系中的一款SaaS产品,它助力运维实现跨系统的调度自动化。通过一套成熟稳定的流程编排调度引擎,基于蓝鲸PaaS平台的API网关服务对接企业内部各个系统API的能力,把在多系统间切换的工作模式整合到一个流程中,不仅可以将腾讯蓝鲸智云体系内的服务(如:配置平台、作业平台、通知服务等)进行整合,而且提供了自定义插件开发能力,让用户可以将自己企业内独有的系统接入并整合,实现一键自动化调度。 ![](https://github.com/Tencent/bk-sops/blob/master/docs/wiki/img/wiki_product.png) ## 功能特性 diff --git a/docs/wiki/img/wiki_blueking.png b/docs/wiki/img/wiki_blueking.png index e33835d591..66f1769d7a 100644 Binary files a/docs/wiki/img/wiki_blueking.png and b/docs/wiki/img/wiki_blueking.png differ diff --git a/docs/wiki/version-guideline.md b/docs/wiki/version-guideline.md index 4044a2acc0..073c3a53c3 100644 --- a/docs/wiki/version-guideline.md +++ b/docs/wiki/version-guideline.md @@ -6,7 +6,7 @@ * 第一段: 3代表整个标准运维的大版本,目前是3。只有在标准运维进行大的版本调整时才会变更。 * 第二段: - 1代表一个版本迭代周期,该周期内包含大的结构调整或者依赖的蓝鲸原子平台需要升级。当迭代周期向前演进时会进行调整。 + 1代表一个版本迭代周期,该周期内包含大的结构调整或者依赖的蓝鲸插件平台需要升级。当迭代周期向前演进时会进行调整。 * 第三段: 32代表当前的迭代周期,包含了一个特性、多个bugfix等内容。随着开发节奏不定期进行调整。一般为1~3周的周期。 * pre-release-type: diff --git a/pipeline/blueflow/.babelrc b/frontend/desktop/.babelrc similarity index 100% rename from pipeline/blueflow/.babelrc rename to frontend/desktop/.babelrc diff --git a/pipeline/blueflow/.editorconfig b/frontend/desktop/.editorconfig similarity index 100% rename from pipeline/blueflow/.editorconfig rename to frontend/desktop/.editorconfig diff --git a/pipeline/blueflow/.eslintignore b/frontend/desktop/.eslintignore similarity index 100% rename from pipeline/blueflow/.eslintignore rename to frontend/desktop/.eslintignore diff --git a/frontend/desktop/.eslintrc.js b/frontend/desktop/.eslintrc.js new file mode 100644 index 0000000000..41c827c69c --- /dev/null +++ b/frontend/desktop/.eslintrc.js @@ -0,0 +1,489 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + }, + extends: [ + 'plugin:vue/recommended', + 'standard' + ], + // required to lint *.vue files + plugins: [ + 'vue' + ], + globals: { + // value 为 true 允许被重写,为 false 不允许被重写 + NODE_ENV: true, + SITE_URL: true, + gettext: true, + getCookie: true, + $: true + }, + // add your custom rules hered + rules: { + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/array-bracket-spacing.md + 'vue/array-bracket-spacing': ['error', 'never'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/arrow-spacing.md + 'vue/arrow-spacing': ['error', {'before': true, 'after': true}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/attribute-hyphenation.md + 'vue/attribute-hyphenation': ['error', 'always'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/attributes-order.md + // 属性顺序,不限制 + 'vue/attributes-order': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/block-spacing.md + 'vue/block-spacing': ['error', 'always'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/brace-style.md + 'vue/brace-style': ['error', '1tbs', {'allowSingleLine': false}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/camelcase.md + // 后端数据字段经常不是驼峰,所以不限制 properties,也不限制解构 + // 'vue/camelcase': ['error', {'properties': 'never', 'ignoreDestructuring': true}], + // @todo: 驼峰问题统一修改 + 'vue/camelcase': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/comma-dangle.md + // 禁止使用拖尾逗号,如 {demo: 'test',} + 'vue/comma-dangle': ['error', 'never'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/comment-directive.md + // vue 文件 template 中允许 eslint-disable eslint-enable eslint-disable-line eslint-disable-next-line + // 行内注释启用/禁用某些规则,配置为 1 即允许 + 'vue/comment-directive': 1, + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/component-name-in-template-casing.md + // 组件 html 标签的形式,连字符形式,所有 html 标签均会检测,如引入第三方不可避免,可通过 ignores 配置,支持正则,不限制 + 'vue/component-name-in-template-casing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/dot-location.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/794 合入 + // 'vue/dot-location': ['error', 'property'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/eqeqeq.md + 'vue/eqeqeq': ['error', 'always', {'null': 'ignore'}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-closing-bracket-newline.md + // 单行写法不需要换行,多行需要,不限制 + 'vue/html-closing-bracket-newline': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-closing-bracket-spacing.md + 'vue/html-closing-bracket-spacing': ['error', { + 'startTag': 'never', + 'endTag': 'never', + 'selfClosingTag': 'always' + }], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-end-tags.md + 'vue/html-end-tags': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-indent.md + 'vue/html-indent': ['error', 4, { + 'attribute': 1, + 'baseIndent': 1, + 'closeBracket': 0, + 'alignAttributesVertically': false, + 'ignores': [] + }], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-quotes.md + 'vue/html-quotes': ['error', 'double'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-self-closing.md + // html tag 是否自闭和,不限制 + 'vue/html-self-closing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/jsx-uses-vars.md + // 当变量在 `JSX` 中被使用了,那么 eslint 就不会报出 `no-unused-vars` 的错误。需要开启 eslint no-unused-vars 规则才适用 + 'vue/jsx-uses-vars': 1, + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/key-spacing.md + 'vue/key-spacing': ['error', {'beforeColon': false, 'afterColon': true}], + + // 关键字周围空格一致性,在关键字前后保留空格,如 if () else {} + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/keyword-spacing.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/795 合入 + // 'vue/keyword-spacing': ['error', {'before': true, 'after': true}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/match-component-file-name.md + // 组件名称属性与其文件名匹配,不限制 + 'vue/match-component-file-name': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/max-attributes-per-line.md + // 每行属性的最大个数,不限制 + 'vue/max-attributes-per-line': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/multiline-html-element-content-newline.md + // 在多行元素的内容前后需要换行符,不限制 + 'vue/multiline-html-element-content-newline': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/mustache-interpolation-spacing.md + // template 中 {{var}},不限制 + 'vue/mustache-interpolation-spacing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/name-property-casing.md + 'vue/name-property-casing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-async-in-computed-properties.md + 'vue/no-async-in-computed-properties': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-boolean-default.md + 'vue/no-boolean-default': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-confusing-v-for-v-if.md + 'vue/no-confusing-v-for-v-if': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-dupe-keys.md + // 二级属性名禁止重复 + 'vue/no-dupe-keys': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-duplicate-attributes.md + // 禁止 html 元素中出现重复的属性 + 'vue/no-duplicate-attributes': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-empty-pattern.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/798 合入 + // 禁止解构中出现空 {} 或 [] + // 'vue/no-empty-pattern': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-multi-spaces.md + // 删除 html 标签中连续多个不用于缩进的空格 + 'vue/no-multi-spaces': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-parsing-error.md + // 禁止语法错误 + 'vue/no-parsing-error': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-reserved-keys.md + // 禁止使用保留字 + 'vue/no-reserved-keys': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-restricted-syntax.md + // 禁止使用特定的语法 + 'vue/no-restricted-syntax': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-shared-component-data.md + // data 属性必须是函数 + 'vue/no-shared-component-data': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-side-effects-in-computed-properties.md + // 禁止在计算属性对属性进行修改,不限制 + 'vue/no-side-effects-in-computed-properties': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-spaces-around-equal-signs-in-attribute.md + 'vue/no-spaces-around-equal-signs-in-attribute': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-template-key.md + // 禁止在 - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue b/frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue similarity index 65% rename from pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue rename to frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue index 7c2592472a..c4296edeed 100644 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue +++ b/frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue @@ -18,28 +18,29 @@ :class="[ 'node-type-item', `common-icon-node-${item.type}`, - {'node-type-has-sub': isNodeTypeHasSub(item.type)}, - {'node-source': !isNodeTypeHasSub(item.type)}, - {'active-node-type' : activeNodeType === item.type && showNodeList}, - {'startpoint-unavailable':item.type === 'startpoint' ? isDisableStartPoint : false}, - {'endpoint-unavailable':item.type === 'endpoint' ? isDisableEndPoint : false} + { 'node-type-has-sub': isNodeTypeHasSub(item.type) }, + { 'node-source': !isNodeTypeHasSub(item.type) }, + { 'active-node-type': activeNodeType === item.type && showNodeList }, + { 'startpoint-unavailable': item.type === 'startpoint' ? isDisableStartPoint : false }, + { 'endpoint-unavailable': item.type === 'endpoint' ? isDisableEndPoint : false } ]" :data-type="item.type" v-bktooltips.right="item.name" @click.stop="onSelectNode(item.type)"> - +
{{i18n[item.type]}} - +
-
- +
+
- +
@@ -51,7 +52,7 @@ class="collapse-panel"> diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue b/frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue similarity index 92% rename from pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue rename to frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue index 28806a3f6d..3cb6ec6710 100644 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue +++ b/frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue @@ -14,10 +14,10 @@
- - diff --git a/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue b/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue new file mode 100644 index 0000000000..9eced1c0b3 --- /dev/null +++ b/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue @@ -0,0 +1,217 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + diff --git a/frontend/desktop/src/components/common/PipelineCanvas/index.vue b/frontend/desktop/src/components/common/PipelineCanvas/index.vue new file mode 100644 index 0000000000..ef5c09d847 --- /dev/null +++ b/frontend/desktop/src/components/common/PipelineCanvas/index.vue @@ -0,0 +1,681 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/FormGroup.vue b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue new file mode 100644 index 0000000000..bb17335d29 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue @@ -0,0 +1,226 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/FormItem.vue b/frontend/desktop/src/components/common/RenderForm/FormItem.vue new file mode 100644 index 0000000000..39ce300ccc --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/FormItem.vue @@ -0,0 +1,365 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue similarity index 64% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue index 86bd693e80..35a1cec48b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue @@ -26,97 +26,97 @@ {{i18n.notEmpty}}
- - + +
- - - - diff --git a/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue new file mode 100644 index 0000000000..ff8d681387 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue @@ -0,0 +1,198 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue similarity index 65% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue index 0f95519136..2e191a0db1 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue @@ -16,41 +16,41 @@ class="search-input" :placeholder="placeholder" v-model="keyword" - @input="onInputChange"/> + @input="onInputChange" />
- - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue similarity index 54% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue index 7de225feb4..a1bb8337da 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue @@ -20,7 +20,7 @@ - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue similarity index 64% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue index 3d16a99689..1c52577770 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue @@ -15,9 +15,9 @@
- + {{selector.name}}
@@ -26,62 +26,62 @@ v-show="activeSelector === 'ip'" ref="ip" :editable="editable" - :staticIpList="staticIpList" - :staticIps="staticIps" + :static-ip-list="staticIpList" + :static-ips="staticIps" @change="onStaticIpChange"> - - diff --git a/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue new file mode 100644 index 0000000000..4614c36435 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue @@ -0,0 +1,361 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue similarity index 59% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue index d6db856267..1d1796af5b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue @@ -38,11 +38,11 @@ - {{item.bk_host_name}} + {{item.cloud[0] && item.cloud[0].bk_inst_name}} {{item.bk_host_innerip}} {{item.agent ? 'Agent' + i18n.normal : 'Agent' + i18n.error}} @@ -69,112 +69,112 @@ diff --git a/frontend/desktop/src/components/common/RenderForm/RenderForm.vue b/frontend/desktop/src/components/common/RenderForm/RenderForm.vue new file mode 100644 index 0000000000..9a8ec623b6 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/RenderForm.vue @@ -0,0 +1,273 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/formMixins.js b/frontend/desktop/src/components/common/RenderForm/formMixins.js similarity index 97% rename from pipeline/blueflow/src/components/common/RenderForm/formMixins.js rename to frontend/desktop/src/components/common/RenderForm/formMixins.js index be44e4dc78..b731a87258 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/formMixins.js +++ b/frontend/desktop/src/components/common/RenderForm/formMixins.js @@ -42,7 +42,8 @@ const COMMON_ATTRS = { default: true }, formMode: { - type: Boolean + type: Boolean, + default: true }, parentValue: { type: [String, Number, Boolean, Array, Object] @@ -133,7 +134,7 @@ export function getFormMixins (attrs = {}) { this._tag_init && this._tag_init() // 组件插入到 DOM 后, 在父父组件上发布该 Tag 组件的 init 事件,触发标准插件配置项里监听的函数 - this.$nextTick(()=>{ + this.$nextTick(() => { this.$parent.$parent.$emit(`${this.tagCode}_init`, this.value) }) }, @@ -141,7 +142,7 @@ export function getFormMixins (attrs = {}) { updateForm (val) { const fieldsArr = [this.tagCode] this.$emit('change', fieldsArr, val) - this.$nextTick(()=> { + this.$nextTick(() => { this.onChange() this.validate() }) @@ -223,8 +224,12 @@ export function getFormMixins (attrs = {}) { this.$emit('onShow') }, hide () { + this.changeHook(false) this.$emit('onHide') }, + changeHook (val) { + this.$parent.onHookForm(val) + }, // 获取 form 项实例 get_form_instance () { return this.$parent diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue similarity index 58% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue index e686cef762..013a8cedac 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue @@ -23,53 +23,53 @@ diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue similarity index 70% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue index 01fbd441ae..d20669498b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue @@ -26,36 +26,36 @@ - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue similarity index 54% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue index 8e9ff5eda6..cacfb745a5 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue @@ -40,100 +40,100 @@ - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue similarity index 67% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue index 993d95f6b4..e72e52029b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue @@ -24,37 +24,37 @@ diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue new file mode 100644 index 0000000000..fc56fe15e5 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue @@ -0,0 +1,50 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue new file mode 100644 index 0000000000..a3796c6867 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue @@ -0,0 +1,102 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue similarity index 62% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue index d5d7b91729..4aa806838e 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue @@ -23,48 +23,48 @@ diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagText.vue similarity index 75% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagText.vue index cf6145e586..9f4aaed790 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagText.vue @@ -15,20 +15,18 @@ - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue similarity index 65% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue index 47acee870f..853b392abb 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue @@ -14,10 +14,9 @@ @@ -25,39 +24,39 @@ - - - diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue new file mode 100644 index 0000000000..87390cf38b --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue @@ -0,0 +1,193 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue new file mode 100644 index 0000000000..3ab53e8278 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue @@ -0,0 +1,153 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + diff --git a/pipeline/blueflow/src/components/common/base/BaseCheckbox.vue b/frontend/desktop/src/components/common/base/BaseCheckbox.vue similarity index 77% rename from pipeline/blueflow/src/components/common/base/BaseCheckbox.vue rename to frontend/desktop/src/components/common/base/BaseCheckbox.vue index b37472205a..f7d861881e 100644 --- a/pipeline/blueflow/src/components/common/base/BaseCheckbox.vue +++ b/frontend/desktop/src/components/common/base/BaseCheckbox.vue @@ -11,33 +11,33 @@ */ - - diff --git a/pipeline/blueflow/src/components/common/base/BaseSearch.vue b/frontend/desktop/src/components/common/base/BaseSearch.vue similarity index 79% rename from pipeline/blueflow/src/components/common/base/BaseSearch.vue rename to frontend/desktop/src/components/common/base/BaseSearch.vue index 6b896c4369..2de3df221d 100644 --- a/pipeline/blueflow/src/components/common/base/BaseSearch.vue +++ b/frontend/desktop/src/components/common/base/BaseSearch.vue @@ -18,35 +18,35 @@
- + - diff --git a/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue b/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue new file mode 100644 index 0000000000..0cadfa430b --- /dev/null +++ b/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue @@ -0,0 +1,359 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + + + diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode401.vue b/frontend/desktop/src/components/common/modal/ErrorCode401.vue similarity index 73% rename from pipeline/blueflow/src/components/common/modal/ErrorCode401.vue rename to frontend/desktop/src/components/common/modal/ErrorCode401.vue index c5f3d8c0b5..3cbbc3bb26 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode401.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode401.vue @@ -16,23 +16,23 @@ - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode405.vue b/frontend/desktop/src/components/common/modal/ErrorCode405.vue similarity index 64% rename from pipeline/blueflow/src/components/common/modal/ErrorCode405.vue rename to frontend/desktop/src/components/common/modal/ErrorCode405.vue index ebed9c8288..34c593074f 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode405.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode405.vue @@ -27,29 +27,29 @@ - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode406.vue b/frontend/desktop/src/components/common/modal/ErrorCode406.vue similarity index 65% rename from pipeline/blueflow/src/components/common/modal/ErrorCode406.vue rename to frontend/desktop/src/components/common/modal/ErrorCode406.vue index 927b79ff11..046970e2b0 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode406.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode406.vue @@ -25,27 +25,27 @@ - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode407.vue b/frontend/desktop/src/components/common/modal/ErrorCode407.vue similarity index 73% rename from pipeline/blueflow/src/components/common/modal/ErrorCode407.vue rename to frontend/desktop/src/components/common/modal/ErrorCode407.vue index 94693ea565..8e2727cb8d 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode407.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode407.vue @@ -19,19 +19,19 @@ - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode500.vue b/frontend/desktop/src/components/common/modal/ErrorCode500.vue similarity index 76% rename from pipeline/blueflow/src/components/common/modal/ErrorCode500.vue rename to frontend/desktop/src/components/common/modal/ErrorCode500.vue index bf8cad489b..bf3a357134 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode500.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode500.vue @@ -17,19 +17,19 @@ - diff --git a/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue b/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue new file mode 100644 index 0000000000..70180d7a27 --- /dev/null +++ b/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue @@ -0,0 +1,110 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/modal/UserLoginModal.vue b/frontend/desktop/src/components/common/modal/UserLoginModal.vue similarity index 81% rename from pipeline/blueflow/src/components/common/modal/UserLoginModal.vue rename to frontend/desktop/src/components/common/modal/UserLoginModal.vue index 7326d3ddb3..046391a01d 100644 --- a/pipeline/blueflow/src/components/common/modal/UserLoginModal.vue +++ b/frontend/desktop/src/components/common/modal/UserLoginModal.vue @@ -32,23 +32,22 @@ - diff --git a/pipeline/blueflow/src/components/layout/BizSelector.vue b/frontend/desktop/src/components/layout/BizSelector.vue similarity index 53% rename from pipeline/blueflow/src/components/layout/BizSelector.vue rename to frontend/desktop/src/components/layout/BizSelector.vue index 6989de5fa3..aa02dae709 100644 --- a/pipeline/blueflow/src/components/layout/BizSelector.vue +++ b/frontend/desktop/src/components/layout/BizSelector.vue @@ -11,24 +11,24 @@ */ - diff --git a/pipeline/blueflow/src/components/layout/CopyrightFooter.vue b/frontend/desktop/src/components/layout/CopyrightFooter.vue similarity index 75% rename from pipeline/blueflow/src/components/layout/CopyrightFooter.vue rename to frontend/desktop/src/components/layout/CopyrightFooter.vue index 2de9e0b3b2..8d5306a348 100644 --- a/pipeline/blueflow/src/components/layout/CopyrightFooter.vue +++ b/frontend/desktop/src/components/layout/CopyrightFooter.vue @@ -23,28 +23,28 @@ - diff --git a/frontend/desktop/src/components/layout/Navigator.vue b/frontend/desktop/src/components/layout/Navigator.vue new file mode 100644 index 0000000000..e3c62094fa --- /dev/null +++ b/frontend/desktop/src/components/layout/Navigator.vue @@ -0,0 +1,422 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/components/layout/NotFoundComponent.vue b/frontend/desktop/src/components/layout/NotFoundComponent.vue similarity index 63% rename from pipeline/blueflow/src/components/layout/NotFoundComponent.vue rename to frontend/desktop/src/components/layout/NotFoundComponent.vue index 7f2513af0d..9c80c7d06d 100644 --- a/pipeline/blueflow/src/components/layout/NotFoundComponent.vue +++ b/frontend/desktop/src/components/layout/NotFoundComponent.vue @@ -10,31 +10,31 @@ * specific language governing permissions and limitations under the License. */ diff --git a/pipeline/blueflow/src/components/tags/TagTestDatetime.vue b/frontend/desktop/src/components/tags/TagTestDatetime.vue similarity index 71% rename from pipeline/blueflow/src/components/tags/TagTestDatetime.vue rename to frontend/desktop/src/components/tags/TagTestDatetime.vue index e03569300e..f7f631807e 100644 --- a/pipeline/blueflow/src/components/tags/TagTestDatetime.vue +++ b/frontend/desktop/src/components/tags/TagTestDatetime.vue @@ -25,29 +25,29 @@ - - diff --git a/pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue b/frontend/desktop/src/pages/appmaker/AppEditDialog.vue similarity index 54% rename from pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue rename to frontend/desktop/src/pages/appmaker/AppEditDialog.vue index a40ba2b7f7..7020fee355 100644 --- a/pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue +++ b/frontend/desktop/src/pages/appmaker/AppEditDialog.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ - diff --git a/frontend/desktop/src/pages/appmaker/index.vue b/frontend/desktop/src/pages/appmaker/index.vue new file mode 100644 index 0000000000..9f0dba97e4 --- /dev/null +++ b/frontend/desktop/src/pages/appmaker/index.vue @@ -0,0 +1,468 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/audit/index.vue b/frontend/desktop/src/pages/audit/index.vue new file mode 100644 index 0000000000..5ce75f1010 --- /dev/null +++ b/frontend/desktop/src/pages/audit/index.vue @@ -0,0 +1,713 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/config/index.vue b/frontend/desktop/src/pages/config/index.vue similarity index 57% rename from pipeline/blueflow/src/pages/config/index.vue rename to frontend/desktop/src/pages/config/index.vue index 97e2f45434..3f09916a36 100644 --- a/pipeline/blueflow/src/pages/config/index.vue +++ b/frontend/desktop/src/pages/config/index.vue @@ -13,11 +13,11 @@

{{i18n.title}}

-
+
- +
@@ -50,85 +50,85 @@
- - diff --git a/pipeline/blueflow/src/pages/error/index.vue b/frontend/desktop/src/pages/error/index.vue similarity index 53% rename from pipeline/blueflow/src/pages/error/index.vue rename to frontend/desktop/src/pages/error/index.vue index 2923e1a3e2..0af71ab789 100644 --- a/pipeline/blueflow/src/pages/error/index.vue +++ b/frontend/desktop/src/pages/error/index.vue @@ -18,41 +18,41 @@
diff --git a/pipeline/blueflow/src/pages/home/HomeSummary.vue b/frontend/desktop/src/pages/home/HomeSummary.vue similarity index 92% rename from pipeline/blueflow/src/pages/home/HomeSummary.vue rename to frontend/desktop/src/pages/home/HomeSummary.vue index 6366f2d20b..4a399fc5e3 100644 --- a/pipeline/blueflow/src/pages/home/HomeSummary.vue +++ b/frontend/desktop/src/pages/home/HomeSummary.vue @@ -81,23 +81,23 @@
- diff --git a/pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue b/frontend/desktop/src/pages/home/SelectTemplateDialog.vue similarity index 72% rename from pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue rename to frontend/desktop/src/pages/home/SelectTemplateDialog.vue index d2542f0a3a..9938f99a2e 100644 --- a/pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue +++ b/frontend/desktop/src/pages/home/SelectTemplateDialog.vue @@ -23,10 +23,10 @@
+ v-bkloading="{ isLoading: submitting || selectTemplateLoading, opacity: 1 }">
@@ -46,7 +46,7 @@ v-for="item in group.list" :key="item.id" @click="onSelectTemplate(item)"> - + {{item.name}} @@ -60,7 +60,7 @@ :key="item.id" @click="onSelectTemplate(item)" class="template-item"> - + {{item.name}} @@ -106,106 +106,105 @@ - diff --git a/pipeline/blueflow/src/pages/home/TaskFeeds.vue b/frontend/desktop/src/pages/home/TaskFeeds.vue similarity index 54% rename from pipeline/blueflow/src/pages/home/TaskFeeds.vue rename to frontend/desktop/src/pages/home/TaskFeeds.vue index e31c8e984f..84ac66d937 100644 --- a/pipeline/blueflow/src/pages/home/TaskFeeds.vue +++ b/frontend/desktop/src/pages/home/TaskFeeds.vue @@ -13,9 +13,9 @@

{{i18n.feeds}}

{{i18n.viewMore}} -
+
    -
  • +
  • @@ -46,115 +46,115 @@
- - diff --git a/frontend/desktop/src/pages/home/TaskPercentChart.vue b/frontend/desktop/src/pages/home/TaskPercentChart.vue new file mode 100644 index 0000000000..9b97580784 --- /dev/null +++ b/frontend/desktop/src/pages/home/TaskPercentChart.vue @@ -0,0 +1,85 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/home/index.vue b/frontend/desktop/src/pages/home/index.vue new file mode 100644 index 0000000000..de38d6dfb8 --- /dev/null +++ b/frontend/desktop/src/pages/home/index.vue @@ -0,0 +1,290 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue b/frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue similarity index 62% rename from pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue rename to frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue index b93aa0c95f..0c6b836d05 100644 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue +++ b/frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue @@ -19,39 +19,38 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeletePeriodicConfrim" @cancel="onDeletePeriodicCancel"> -
+
{{deleteInfo}}
- diff --git a/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue b/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue new file mode 100644 index 0000000000..11aa638ea0 --- /dev/null +++ b/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue @@ -0,0 +1,242 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue b/frontend/desktop/src/pages/periodic/PeriodicList/index.vue similarity index 60% rename from pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue rename to frontend/desktop/src/pages/periodic/PeriodicList/index.vue index 7e7113e6f4..c5b1783d6c 100644 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue +++ b/frontend/desktop/src/pages/periodic/PeriodicList/index.vue @@ -15,7 +15,7 @@ @@ -24,7 +24,7 @@
{{i18n.creator}} - +
{{i18n.enabled}} @@ -46,7 +46,7 @@
- +
@@ -76,19 +76,19 @@ @@ -133,15 +133,15 @@ :loading="modifyDialogLoading" :constants="constants" :cron="selectedCron" - :taskId="selectedPeriodicId" - :isModifyDialogShow="isModifyDialogShow" + :task-id="selectedPeriodicId" + :is-modify-dialog-show="isModifyDialogShow" @onModifyPeriodicConfirm="onModifyPeriodicConfirm" @onModifyPeriodicCancel="onModifyPeriodicCancel"> @@ -150,232 +150,228 @@ diff --git a/frontend/desktop/src/pages/statistics/Instance/index.vue b/frontend/desktop/src/pages/statistics/Instance/index.vue new file mode 100644 index 0000000000..7789a4244b --- /dev/null +++ b/frontend/desktop/src/pages/statistics/Instance/index.vue @@ -0,0 +1,854 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + diff --git a/frontend/desktop/src/pages/statistics/Template/index.vue b/frontend/desktop/src/pages/statistics/Template/index.vue new file mode 100644 index 0000000000..7473eb20a7 --- /dev/null +++ b/frontend/desktop/src/pages/statistics/Template/index.vue @@ -0,0 +1,689 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue b/frontend/desktop/src/pages/statistics/dataStatistics/index.vue similarity index 66% rename from pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue rename to frontend/desktop/src/pages/statistics/dataStatistics/index.vue index bafc9a1aa0..2ef5959f6b 100644 --- a/pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue +++ b/frontend/desktop/src/pages/statistics/dataStatistics/index.vue @@ -17,70 +17,70 @@

{{dimension.name || dimension.time}}

+ :class="[dimension.value ? 'chart-statistics-chart' : 'chart-statistics-normal']" + :style="{ width: `${dimension.value ? dealProcess(dimension.value, totalValue) : 0.3}%` }">
{{dimension.value}} / {{getPercentage(dimension.value)}}%
- - diff --git a/pipeline/blueflow/src/pages/task/NodePreview.vue b/frontend/desktop/src/pages/task/NodePreview.vue similarity index 67% rename from pipeline/blueflow/src/pages/task/NodePreview.vue rename to frontend/desktop/src/pages/task/NodePreview.vue index 7889f7424a..32fa276533 100644 --- a/pipeline/blueflow/src/pages/task/NodePreview.vue +++ b/frontend/desktop/src/pages/task/NodePreview.vue @@ -14,10 +14,10 @@
-
+
diff --git a/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue b/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue new file mode 100644 index 0000000000..830730f998 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue @@ -0,0 +1,994 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/task/TaskCreate/index.vue b/frontend/desktop/src/pages/task/TaskCreate/index.vue new file mode 100644 index 0000000000..896c56c451 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskCreate/index.vue @@ -0,0 +1,179 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue similarity index 54% rename from pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue rename to frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue index 29b85203f8..6b33fb5042 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ diff --git a/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue b/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue new file mode 100644 index 0000000000..e9e8026bd0 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue @@ -0,0 +1,186 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue b/frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue similarity index 69% rename from pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue rename to frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue index 87e4c208d7..824eb5dfd1 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue @@ -19,15 +19,15 @@ }" @click.stop="onSelectNode(item, true)"> - + {{item.name}} @@ -36,49 +36,49 @@ - - diff --git a/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue b/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue new file mode 100644 index 0000000000..ecfc28126d --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue @@ -0,0 +1,187 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue b/frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue similarity index 55% rename from pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue rename to frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue index 708eca2fa6..9e5fe64d5a 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue @@ -11,7 +11,7 @@ */ + diff --git a/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue b/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue new file mode 100644 index 0000000000..18d51bf83e --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue @@ -0,0 +1,196 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/task/TaskExecute/index.vue b/frontend/desktop/src/pages/task/TaskExecute/index.vue new file mode 100644 index 0000000000..8d1bb96047 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/index.vue @@ -0,0 +1,138 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue b/frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue similarity index 69% rename from pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue rename to frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue index 1869b708f8..752c383b47 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue @@ -27,25 +27,25 @@ diff --git a/pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue b/frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue similarity index 61% rename from pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue rename to frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue index 2368fd1351..a574d88e4d 100644 --- a/pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue +++ b/frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue @@ -20,7 +20,7 @@ @confirm="onConfirm" @cancel="onCancel">
-
+
@@ -37,45 +37,45 @@ - diff --git a/pipeline/blueflow/src/pages/task/TaskList/index.vue b/frontend/desktop/src/pages/task/TaskList/index.vue similarity index 50% rename from pipeline/blueflow/src/pages/task/TaskList/index.vue rename to frontend/desktop/src/pages/task/TaskList/index.vue index 3c4e248cae..5a8e68154a 100644 --- a/pipeline/blueflow/src/pages/task/TaskList/index.vue +++ b/frontend/desktop/src/pages/task/TaskList/index.vue @@ -15,7 +15,7 @@ @@ -65,15 +65,15 @@
{{i18n.creator}} - +
{{i18n.executor}} - +
{{i18n.status}} -
-
ID{{item.creator}} {{ item.total_run_count }} - - {{item.enabled? i18n.start: i18n.pause}} + + {{item.enabled ? i18n.start : i18n.pause}} - {{!item.enabled? i18n.start: i18n.pause}} + {{!item.enabled ? i18n.start : i18n.pause}} {{ i18n.edit }} @@ -110,7 +110,7 @@
-
+
+
@@ -133,7 +133,7 @@ @@ -153,8 +153,8 @@ @@ -169,395 +169,393 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeleteConfirm" @cancel="onDeleteCancel"> -
+
{{i18n.deleleTip + '"' + theDeleteTaskName + '"?'}}
diff --git a/pipeline/blueflow/src/pages/task/TaskStep.vue b/frontend/desktop/src/pages/task/TaskStep.vue similarity index 66% rename from pipeline/blueflow/src/pages/task/TaskStep.vue rename to frontend/desktop/src/pages/task/TaskStep.vue index 28079bd3e5..117185008b 100644 --- a/pipeline/blueflow/src/pages/task/TaskStep.vue +++ b/frontend/desktop/src/pages/task/TaskStep.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ - diff --git a/pipeline/blueflow/src/pages/task/index.vue b/frontend/desktop/src/pages/task/index.vue similarity index 90% rename from pipeline/blueflow/src/pages/task/index.vue rename to frontend/desktop/src/pages/task/index.vue index adbebd58cc..25a08c5b89 100644 --- a/pipeline/blueflow/src/pages/task/index.vue +++ b/frontend/desktop/src/pages/task/index.vue @@ -13,8 +13,8 @@ diff --git a/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue new file mode 100644 index 0000000000..5acaa7f109 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue @@ -0,0 +1,1246 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue b/frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue similarity index 56% rename from pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue rename to frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue index 90673b3c25..d30fb159a2 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue @@ -35,7 +35,7 @@
- +
@@ -46,7 +46,7 @@ + v-validate="variableNameRule" /> {{ errors.first('variableName') }} @@ -56,7 +56,7 @@ + v-validate="variableKeyRule" /> {{ errors.first('variableKey') }} @@ -66,115 +66,114 @@ - diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue new file mode 100644 index 0000000000..1a8a16e2e7 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue @@ -0,0 +1,567 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + + diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue new file mode 100644 index 0000000000..87f5b536c5 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue @@ -0,0 +1,324 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue similarity index 51% rename from pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue rename to frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue index 505dded312..eb6eb4fb94 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue new file mode 100644 index 0000000000..729f914975 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue @@ -0,0 +1,556 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + +© 2019 GitHub, Inc. +Terms +Privacy +Security +Status +Help +Contact GitHub +Pricing +API +Training +Blog +About diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue similarity index 62% rename from pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue rename to frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue index fe7305b18f..e83df2ba26 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue @@ -23,7 +23,7 @@ @@ -31,37 +31,37 @@ - - diff --git a/frontend/desktop/src/pages/template/TemplateEdit/index.vue b/frontend/desktop/src/pages/template/TemplateEdit/index.vue new file mode 100644 index 0000000000..d8fc8f5ff5 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/index.vue @@ -0,0 +1,936 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue b/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue new file mode 100644 index 0000000000..64e8a68334 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue @@ -0,0 +1,178 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue b/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue new file mode 100644 index 0000000000..1109654a41 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue @@ -0,0 +1,529 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue b/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue new file mode 100644 index 0000000000..87019c75b8 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue @@ -0,0 +1,546 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ + + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateList/index.vue b/frontend/desktop/src/pages/template/TemplateList/index.vue similarity index 53% rename from pipeline/blueflow/src/pages/template/TemplateList/index.vue rename to frontend/desktop/src/pages/template/TemplateList/index.vue index dbfb65d200..6a993093c4 100644 --- a/pipeline/blueflow/src/pages/template/TemplateList/index.vue +++ b/frontend/desktop/src/pages/template/TemplateList/index.vue @@ -41,7 +41,7 @@ @@ -90,7 +90,7 @@
{{i18n.creator}} - +
{{i18n.query}} @@ -99,7 +99,7 @@
-
+
ID
-
+
@@ -113,7 +113,7 @@ - + - @@ -141,10 +141,10 @@ class="create-template-btn" :to="getEditTemplateUrl(item.id)"> {{ i18n.edit }} - - - - + - + @@ -218,16 +218,16 @@ - @@ -241,14 +241,14 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeleteConfirm" @cancel="onDeleteCancel"> -
+
{{i18n.deleleTip + '"' + deleteTemplateName + '"' + '?' }}
- diff --git a/pipeline/blueflow/src/pages/template/index.vue b/frontend/desktop/src/pages/template/index.vue similarity index 90% rename from pipeline/blueflow/src/pages/template/index.vue rename to frontend/desktop/src/pages/template/index.vue index adbebd58cc..25a08c5b89 100644 --- a/pipeline/blueflow/src/pages/template/index.vue +++ b/frontend/desktop/src/pages/template/index.vue @@ -13,8 +13,8 @@ diff --git a/pipeline/blueflow/src/routers/index.js b/frontend/desktop/src/routers/index.js similarity index 98% rename from pipeline/blueflow/src/routers/index.js rename to frontend/desktop/src/routers/index.js index 925d41d3a4..9b51262519 100644 --- a/pipeline/blueflow/src/routers/index.js +++ b/frontend/desktop/src/routers/index.js @@ -22,7 +22,7 @@ const Template = () => import('@/pages/template/index.vue') const TemplateEdit = () => import('@/pages/template/TemplateEdit/index.vue') const TemplateList = () => import('@/pages/template/TemplateList/index.vue') -const Task = () => import( '@/pages/task/index.vue') +const Task = () => import('@/pages/task/index.vue') const TaskList = () => import('@/pages/task/TaskList/index.vue') const TaskCreate = () => import('@/pages/task/TaskCreate/index.vue') const TaskExecute = () => import('@/pages/task/TaskExecute/index.vue') @@ -261,9 +261,9 @@ const routers = new VueRouter({ ] }) -routers.beforeEach ((to, from, next) => { +routers.beforeEach((to, from, next) => { // 生产环境 404 页面头部导航跳转统一设置为首页 - if (process.env.NODE_ENV === "production" && to.name === 'notFoundPage') { + if (process.env.NODE_ENV === 'production' && to.name === 'notFoundPage') { store.commit('setNotFoundPage', true) } else { store.commit('setNotFoundPage', false) @@ -275,5 +275,4 @@ routers.beforeEach ((to, from, next) => { next() }) - export default routers diff --git a/pipeline/blueflow/src/scss/analysis.scss b/frontend/desktop/src/scss/analysis.scss similarity index 100% rename from pipeline/blueflow/src/scss/analysis.scss rename to frontend/desktop/src/scss/analysis.scss diff --git a/pipeline/blueflow/src/scss/animation/.gitkeep b/frontend/desktop/src/scss/animation/.gitkeep similarity index 100% rename from pipeline/blueflow/src/scss/animation/.gitkeep rename to frontend/desktop/src/scss/animation/.gitkeep diff --git a/pipeline/blueflow/src/scss/animation/collapse.scss b/frontend/desktop/src/scss/animation/collapse.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/collapse.scss rename to frontend/desktop/src/scss/animation/collapse.scss diff --git a/pipeline/blueflow/src/scss/animation/make-transitions.scss b/frontend/desktop/src/scss/animation/make-transitions.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/make-transitions.scss rename to frontend/desktop/src/scss/animation/make-transitions.scss diff --git a/pipeline/blueflow/src/scss/animation/operate.scss b/frontend/desktop/src/scss/animation/operate.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/operate.scss rename to frontend/desktop/src/scss/animation/operate.scss diff --git a/pipeline/blueflow/src/scss/animation/slide.scss b/frontend/desktop/src/scss/animation/slide.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/slide.scss rename to frontend/desktop/src/scss/animation/slide.scss diff --git a/pipeline/blueflow/src/scss/app.scss b/frontend/desktop/src/scss/app.scss similarity index 100% rename from pipeline/blueflow/src/scss/app.scss rename to frontend/desktop/src/scss/app.scss diff --git a/pipeline/blueflow/src/scss/button.scss b/frontend/desktop/src/scss/button.scss similarity index 100% rename from pipeline/blueflow/src/scss/button.scss rename to frontend/desktop/src/scss/button.scss diff --git a/pipeline/blueflow/src/scss/common.scss b/frontend/desktop/src/scss/common.scss similarity index 83% rename from pipeline/blueflow/src/scss/common.scss rename to frontend/desktop/src/scss/common.scss index 29a1bcecbd..0f1acc7e47 100644 --- a/pipeline/blueflow/src/scss/common.scss +++ b/frontend/desktop/src/scss/common.scss @@ -96,9 +96,11 @@ color: #ff5757; } -// 覆盖原始弹窗按钮宽度 +// 弹窗按钮 .bk-dialog-wrapper .bk-dialog-footer .bk-dialog-outer button { width: 90px; + height: 32px; + line-height: 30px; } .common-warning-tip { display: inline-block; @@ -116,8 +118,11 @@ white-space: nowrap; text-overflow: ellipsis; } -// 表单下拉框高度统一 +// 表单下拉框 .bk-selector-wrapper { + .bk-selector-icon { + top: 10px; + } .bk-selector-icon.clear-icon { top: 7px; } @@ -126,3 +131,22 @@ line-height: 32px; } } +// 列表分页 +.panagation { + .bk-page .page-item { + float: none; + } + .bk-page .page-item.cur-page { + background: #3c96ff; + } + .bk-page .page-item .page-button { + padding: 0 7px; + } + .bk-page .page-item.disabled .page-button { + padding: 0 5px; + color: #737987; + &:hover { + color: #737987; + } + } +} diff --git a/pipeline/blueflow/src/scss/config.scss b/frontend/desktop/src/scss/config.scss similarity index 100% rename from pipeline/blueflow/src/scss/config.scss rename to frontend/desktop/src/scss/config.scss diff --git a/pipeline/blueflow/src/scss/datastatistics/datastatistics.scss b/frontend/desktop/src/scss/datastatistics/datastatistics.scss similarity index 100% rename from pipeline/blueflow/src/scss/datastatistics/datastatistics.scss rename to frontend/desktop/src/scss/datastatistics/datastatistics.scss diff --git a/pipeline/blueflow/src/scss/iconfont.scss b/frontend/desktop/src/scss/iconfont.scss similarity index 100% rename from pipeline/blueflow/src/scss/iconfont.scss rename to frontend/desktop/src/scss/iconfont.scss diff --git a/pipeline/blueflow/src/scss/mixins/clearfix.scss b/frontend/desktop/src/scss/mixins/clearfix.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/clearfix.scss rename to frontend/desktop/src/scss/mixins/clearfix.scss diff --git a/pipeline/blueflow/src/scss/mixins/multiLineEllipsis.scss b/frontend/desktop/src/scss/mixins/multiLineEllipsis.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/multiLineEllipsis.scss rename to frontend/desktop/src/scss/mixins/multiLineEllipsis.scss diff --git a/pipeline/blueflow/src/scss/mixins/scrollbar.scss b/frontend/desktop/src/scss/mixins/scrollbar.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/scrollbar.scss rename to frontend/desktop/src/scss/mixins/scrollbar.scss diff --git a/pipeline/blueflow/src/scss/reset.scss b/frontend/desktop/src/scss/reset.scss similarity index 100% rename from pipeline/blueflow/src/scss/reset.scss rename to frontend/desktop/src/scss/reset.scss diff --git a/pipeline/blueflow/src/store/index.js b/frontend/desktop/src/store/index.js similarity index 80% rename from pipeline/blueflow/src/store/index.js rename to frontend/desktop/src/store/index.js index 5b1cd65baf..9f6ea47738 100644 --- a/pipeline/blueflow/src/store/index.js +++ b/frontend/desktop/src/store/index.js @@ -12,7 +12,7 @@ import Vue from 'vue' import Vuex from 'vuex' import modules from './modules/index.js' -import api from "@/api" +import api from '@/api' Vue.use(Vuex) @@ -52,7 +52,8 @@ const store = new Vuex.Store({ isSuperUser: window.IS_SUPERUSER === 1, v1_import_flag: window.IMPORT_V1_FLAG, rsa_pub_key: window.RSA_PUB_KEY, - businessTimezone: window.BUSINESS_TIMEZONE + businessTimezone: window.BUSINESS_TIMEZONE, + allBusinessList: [] }, mutations: { setAppId (state, id) { @@ -73,36 +74,43 @@ const store = new Vuex.Store({ setNotFoundPage (state, val) { state.notFoundPage = val }, - setCategorys (state,data) { + setCategorys (state, data) { state.categorys = data }, - setSingleAtomList (state,data) { + setSingleAtomList (state, data) { state.components = data }, setBusinessTimezone (state, data) { state.businessTimezone = data + }, + setAllBusinessList (state, data) { + state.allBusinessList = data } }, actions: { - getBizList ({commit}) { - api.getBizList().then(response => { - commit('setBizList', response.data.objects) + getBizList ({ commit }, isAll) { + api.getBizList(isAll).then(response => { + if (isAll) { + commit('setAllBusinessList', response.data.objects) + } else { + commit('setBizList', response.data.objects) + } }) }, - changeDefaultBiz ({commit}, ccId) { + changeDefaultBiz ({ commit }, ccId) { return api.changeDefaultBiz(ccId).then(response => response.data) }, - getCategorys ({commit}) { + getCategorys ({ commit }) { api.getCategorys().then(response => { commit('setCategorys', response.data.data) }) }, - getSingleAtomList ({commit}) { + getSingleAtomList ({ commit }) { api.getSingleAtomList().then(response => { commit('setSingleAtomList', response.data.objects) }) }, - getBusinessTimezone ({commit}) { + getBusinessTimezone ({ commit }) { api.getBusinessTimezone().then(response => { const data = response.data if (data.time_zone === undefined) { @@ -110,16 +118,15 @@ const store = new Vuex.Store({ } else { commit('setBusinessTimezone', data.time_zone) } - }) }, - getHostInCC ({commmit}, fields) { + getHostInCC ({ commmit }, fields) { return api.loadHostInCC(fields).then(response => response.data) }, - getTopoTreeInCC ({commmit}) { + getTopoTreeInCC ({ commmit }) { return api.loadTopoTreeInCC().then(response => response.data) }, - getTopoModelInCC ({commit}) { + getTopoModelInCC ({ commit }) { return api.loadTopoModelInCC().then(response => response.data) } }, diff --git a/pipeline/blueflow/src/store/modules/appmaker.js b/frontend/desktop/src/store/modules/appmaker.js similarity index 78% rename from pipeline/blueflow/src/store/modules/appmaker.js rename to frontend/desktop/src/store/modules/appmaker.js index 6cc3493d76..228388a061 100644 --- a/pipeline/blueflow/src/store/modules/appmaker.js +++ b/frontend/desktop/src/store/modules/appmaker.js @@ -18,25 +18,25 @@ const appmaker = { mutations: { }, actions: { - loadAppmakerSummary ({commit}, data) { + loadAppmakerSummary ({ commit }, data) { return api.loadAppmakerSummary(data).then(response => response.data) }, - loadAppmakerDetail ({commit}, id) { + loadAppmakerDetail ({ commit }, id) { return api.loadAppmakerDetail(id).then(response => response.data) }, - appmakerEdit ({commit}, data) { + appmakerEdit ({ commit }, data) { return api.appmakerEdit(data).then(response => response.data) }, - appmakerDelete ({commit}, id) { + appmakerDelete ({ commit }, id) { return api.appmakerDelete(id).then(response => response.data) }, - queryAppmakerData ({commit}, data) { + queryAppmakerData ({ commit }, data) { return api.queryAppmaker(data).then(response => response.data) }, - loadAppmaker ({commit}) { - return api.loadAppmaker().then(response => response.data) + loadAppmaker ({ commit }, data) { + return api.loadAppmaker(data).then(response => response.data) } } } -export default appmaker \ No newline at end of file +export default appmaker diff --git a/pipeline/blueflow/src/store/modules/atomForm.js b/frontend/desktop/src/store/modules/atomForm.js similarity index 81% rename from pipeline/blueflow/src/store/modules/atomForm.js rename to frontend/desktop/src/store/modules/atomForm.js index 802eae0a74..b0463952bc 100644 --- a/pipeline/blueflow/src/store/modules/atomForm.js +++ b/frontend/desktop/src/store/modules/atomForm.js @@ -11,13 +11,6 @@ */ import Vue from 'vue' import api from '@/api/index.js' -import { debug } from 'util' - -const VAR_TYPE = { - 'var_ip_picker': 'variable', - 'password': 'variable', - 'select': 'variable' -} const META_FORM_TYPE = { 'select': 'select_meta' @@ -36,7 +29,7 @@ const atomForm = { state.fetching = status }, setAtomForm (state, payload) { - let atomType = payload.isMeta ? META_FORM_TYPE[payload.atomType] : payload.atomType + const atomType = payload.isMeta ? META_FORM_TYPE[payload.atomType] : payload.atomType Vue.set(state.form, atomType, payload.data) }, setAtomConfig (state, payload) { @@ -53,16 +46,16 @@ const atomForm = { } }, actions: { - loadAtomConfig ({commit, state}, payload) { - const { atomType, isMeta } = payload - const atomClassify = VAR_TYPE[atomType] || 'component' + loadAtomConfig ({ commit, state }, payload) { + const { atomType, classify, isMeta } = payload + const atomClassify = classify || 'component' return api.$getAtomForm(atomType, atomClassify, isMeta || 0).then( response => response.data ).catch(e => { Promise.reject(e) }) }, - loadSubflowConfig ({commit}, payload) { + loadSubflowConfig ({ commit }, payload) { const { templateId, version, common } = payload return api.getFormByTemplateId(templateId, version, common).then( response => response.data @@ -71,4 +64,4 @@ const atomForm = { } } -export default atomForm \ No newline at end of file +export default atomForm diff --git a/pipeline/blueflow/src/store/modules/atomList.js b/frontend/desktop/src/store/modules/atomList.js similarity index 91% rename from pipeline/blueflow/src/store/modules/atomList.js rename to frontend/desktop/src/store/modules/atomList.js index be0e8aa68b..323e6da97c 100644 --- a/pipeline/blueflow/src/store/modules/atomList.js +++ b/frontend/desktop/src/store/modules/atomList.js @@ -19,10 +19,10 @@ const atomList = { searchAtomResult: [] }, mutations: { - setSingleAtom (state, data){ + setSingleAtom (state, data) { state.singleAtom = [...data] }, - setSubAtom (state, data){ + setSubAtom (state, data) { state.subAtom = [...data] }, searchAtom (state, payload) { @@ -38,13 +38,13 @@ const atomList = { } }, actions: { - loadSingleAtomList ({commit}) { + loadSingleAtomList ({ commit }) { return api.getSingleAtomList().then(response => response.data.objects) }, - loadSubAtomList ({commit}, data) { + loadSubAtomList ({ commit }, data) { return api.getSubAtomList(data).then(response => response.data.objects) }, - queryAtomData ({commit}, data) { + queryAtomData ({ commit }, data) { return api.queryAtom(data).then(response => response.data) } }, @@ -75,4 +75,4 @@ const atomList = { } } -export default atomList \ No newline at end of file +export default atomList diff --git a/pipeline/blueflow/src/store/modules/audit.js b/frontend/desktop/src/store/modules/audit.js similarity index 91% rename from pipeline/blueflow/src/store/modules/audit.js rename to frontend/desktop/src/store/modules/audit.js index 252e0b70f7..afde6b870a 100644 --- a/pipeline/blueflow/src/store/modules/audit.js +++ b/frontend/desktop/src/store/modules/audit.js @@ -9,7 +9,6 @@ * 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 Vue from 'vue' import api from '@/api/index.js' const auditTask = { @@ -19,7 +18,7 @@ const auditTask = { mutations: { }, actions: { - loadAuditTaskList ({commit}, data) { + loadAuditTaskList ({ commit }, data) { return api.loadAuditTaskList(data).then( response => response.data ) @@ -27,4 +26,4 @@ const auditTask = { } } -export default auditTask \ No newline at end of file +export default auditTask diff --git a/pipeline/blueflow/src/store/modules/config.js b/frontend/desktop/src/store/modules/config.js similarity index 93% rename from pipeline/blueflow/src/store/modules/config.js rename to frontend/desktop/src/store/modules/config.js index ae432d09bb..cc5077226d 100644 --- a/pipeline/blueflow/src/store/modules/config.js +++ b/frontend/desktop/src/store/modules/config.js @@ -14,7 +14,7 @@ import api from '@/api/index.js' const config = { namespaced: true, actions: { - configBizExecutor ({commit}, data) { + configBizExecutor ({ commit }, data) { return api.configBizExecutor(data).then(response => response.data) }, loadBizConfig () { @@ -25,4 +25,4 @@ const config = { } } -export default config \ No newline at end of file +export default config diff --git a/pipeline/blueflow/src/store/modules/function.js b/frontend/desktop/src/store/modules/function.js similarity index 86% rename from pipeline/blueflow/src/store/modules/function.js rename to frontend/desktop/src/store/modules/function.js index 895e04d31e..02908474ed 100644 --- a/pipeline/blueflow/src/store/modules/function.js +++ b/frontend/desktop/src/store/modules/function.js @@ -9,7 +9,6 @@ * 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 Vue from 'vue' import api from '@/api/index.js' const functionTask = { @@ -19,17 +18,17 @@ const functionTask = { mutations: { }, actions: { - loadFunctionTaskList ({commit}, data) { + loadFunctionTaskList ({ commit }, data) { return api.getFunctionTaskList(data).then( response => response.data ) }, - loadFunctionBusinessList ({commit}) { + loadFunctionBusinessList ({ commit }) { return api.loadFunctionBusinessList().then( response => response.data ) }, - loadFunctionTemplateList ({commit},cc_id) { + loadFunctionTemplateList ({ commit }, cc_id) { return api.loadFunctionTemplateList(cc_id).then( response => response.data ) @@ -37,4 +36,4 @@ const functionTask = { } } -export default functionTask \ No newline at end of file +export default functionTask diff --git a/pipeline/blueflow/src/store/modules/index.js b/frontend/desktop/src/store/modules/index.js similarity index 100% rename from pipeline/blueflow/src/store/modules/index.js rename to frontend/desktop/src/store/modules/index.js diff --git a/pipeline/blueflow/src/store/modules/periodic.js b/frontend/desktop/src/store/modules/periodic.js similarity index 77% rename from pipeline/blueflow/src/store/modules/periodic.js rename to frontend/desktop/src/store/modules/periodic.js index 91d138808e..f95efd8182 100644 --- a/pipeline/blueflow/src/store/modules/periodic.js +++ b/frontend/desktop/src/store/modules/periodic.js @@ -9,37 +9,35 @@ * 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 api from "@/api/index.js" -import tools from '@/utils/tools.js' +import api from '@/api/index.js' const periodic = { namespaced: true, - mutations: { - }, + mutations: {}, actions: { - loadPeriodicList ({commit}, data) { + loadPeriodicList ({ commit }, data) { return api.getPeriodicList(data).then(response => response.data) }, - createPeriodic ({state},data) { + createPeriodic ({ state }, data) { return api.createPeriodic(data).then(response => response.data) }, - setPeriodicEnable ({commit}, data) { + setPeriodicEnable ({ commit }, data) { return api.setPeriodicEnable(data).then(response => response.data) }, - modifyPeriodicCron ({commit}, data) { + modifyPeriodicCron ({ commit }, data) { return api.modifyPeriodicCron(data).then(response => response.data) }, - getPeriodic ({commit}, data) { + getPeriodic ({ commit }, data) { return api.getPeriodic(data).then(response => response.data) }, - modifyPeriodicConstants ({commit}, data) { + modifyPeriodicConstants ({ commit }, data) { return api.modifyPeriodicConstants(data).then(response => response.data) }, - deletePeriodic ({commit}, taskId) { + deletePeriodic ({ commit }, taskId) { return api.deletePeriodic(taskId).then(response => response.data) } }, getters: {} } -export default periodic \ No newline at end of file +export default periodic diff --git a/pipeline/blueflow/src/store/modules/task.js b/frontend/desktop/src/store/modules/task.js similarity index 70% rename from pipeline/blueflow/src/store/modules/task.js rename to frontend/desktop/src/store/modules/task.js index 78490d9439..4f0841aeb5 100644 --- a/pipeline/blueflow/src/store/modules/task.js +++ b/frontend/desktop/src/store/modules/task.js @@ -22,89 +22,89 @@ const task = { } }, actions: { - loadTaskScheme ({commit}, payload) { - const { cc_id, template_id} = payload - return api.getTaskScheme({cc_id, template_id}).then(response => response.data.objects) + loadTaskScheme ({ commit }, payload) { + const { cc_id, template_id } = payload + return api.getTaskScheme({ cc_id, template_id }).then(response => response.data.objects) }, - createTaskScheme ({commit}, payload) { + createTaskScheme ({ commit }, payload) { return api.createTaskScheme(payload).then(response => response.data) }, - deleteTaskScheme ({commit}, schemeId) { + deleteTaskScheme ({ commit }, schemeId) { return api.deleteTaskScheme(schemeId).then(response => response.data) }, - getSchemeDetail ({commit}, schemeId) { + getSchemeDetail ({ commit }, schemeId) { return api.getSchemeDetail(schemeId).then(response => response.data) }, - loadPreviewNodeData ({commit}, payload) { + loadPreviewNodeData ({ commit }, payload) { return api.getPreviewNodeData(payload).then(response => response.data) }, - createTask ({commit}, data) { + createTask ({ commit }, data) { return api.createTask(data).then(response => response.data) }, - getTaskInstanceData ({commit}, instance_id) { + getTaskInstanceData ({ commit }, instance_id) { return api.getTaskInstanceData(instance_id).then(response => response.data) }, - claimFuncTask ({commit}, data) { + claimFuncTask ({ commit }, data) { return api.claimFuncTask(data).then(response => response.data) }, - getInstanceStatus ({commit}, data) { + getInstanceStatus ({ commit }, data) { return api.getInstanceStatus(data).then(response => response.data) }, - instanceStart ({commit}, instance_id) { + instanceStart ({ commit }, instance_id) { return api.instanceStart(instance_id).then(response => response.data) }, - instancePause ({commit}, instance_id) { + instancePause ({ commit }, instance_id) { return api.instancePause(instance_id).then(response => response.data) }, - subInstancePause ({commit}, data) { + subInstancePause ({ commit }, data) { return api.subInstancePause(data).then(response => response.data) }, - instanceResume ({commit}, instance_id) { + instanceResume ({ commit }, instance_id) { return api.instanceResume(instance_id).then(response => response.data) }, - subInstanceResume ({commit}, data) { + subInstanceResume ({ commit }, data) { return api.subInstanceResume(data).then(response => response.data) }, - instanceRevoke ({commit}, instance_id) { + instanceRevoke ({ commit }, instance_id) { return api.instanceRevoke(instance_id).then(response => response.data) }, - instanceModifyParams ({commit}, data) { + instanceModifyParams ({ commit }, data) { return api.instanceModifyParams(data).then(response => response.data) }, - getNodeActDetail ({commit}, data) { + getNodeActDetail ({ commit }, data) { return api.getNodeActDetail(data).then(response => response.data) }, - getNodeActInfo ({commit}, data) { + getNodeActInfo ({ commit }, data) { return api.getNodeActInfo(data).then(response => response.data) }, - instanceRetry ({commit}, data) { + instanceRetry ({ commit }, data) { return api.instanceRetry(data).then(response => response.data) }, - setSleepNode ({commit}, data) { + setSleepNode ({ commit }, data) { return api.setSleepNode(data).then(response => response.data) }, - instanceNodeSkip ({commit}, data) { + instanceNodeSkip ({ commit }, data) { return api.instanceNodeSkip(data).then(response => response.data) }, - skipExclusiveGateway ({commit}, data) { + skipExclusiveGateway ({ commit }, data) { return api.instanceBranchSkip(data).then(response => response.data) }, - pauseNodeResume ({commit}, data) { + pauseNodeResume ({ commit }, data) { return api.pauseNodeResume(data).then(response => response.data) }, loadAppmakerSummary () { return api.loadAppmakerSummary().then(response => response.data) }, - loadTaskCount ({commit}, params) { + loadTaskCount ({ commit }, params) { return api.loadTaskCount(params).then(response => response.data) }, - queryInstanceData ({commit}, data) { + queryInstanceData ({ commit }, data) { return api.queryInstance(data).then(response => response.data) }, - loadCreateMethod ({commit}) { + loadCreateMethod ({ commit }) { return api.loadCreateMethod().then(response => response.data) }, - getJobInstanceLog ({commit}, data) { + getJobInstanceLog ({ commit }, data) { return api.getJobInstanceLog(data).then(response => response.data) } } diff --git a/pipeline/blueflow/src/store/modules/taskList.js b/frontend/desktop/src/store/modules/taskList.js similarity index 87% rename from pipeline/blueflow/src/store/modules/taskList.js rename to frontend/desktop/src/store/modules/taskList.js index ef8703cc32..7acb8681b7 100644 --- a/pipeline/blueflow/src/store/modules/taskList.js +++ b/frontend/desktop/src/store/modules/taskList.js @@ -9,7 +9,7 @@ * 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 api from "@/api/index.js" +import api from '@/api/index.js' const taskList = { namespaced: true, @@ -22,17 +22,17 @@ const taskList = { } }, actions: { - loadTaskList ({commit}, data) { + loadTaskList ({ commit }, data) { return api.getTaskList(data).then(response => response.data) }, - deleteTask ({commit}, task_id) { + deleteTask ({ commit }, task_id) { return api.deleteTask(task_id).then(response => response.data.objects) }, - cloneTask ({commit}, data) { + cloneTask ({ commit }, data) { return api.cloneTask(data).then(response => response.data) } }, getters: {} } -export default taskList \ No newline at end of file +export default taskList diff --git a/pipeline/blueflow/src/store/modules/template.js b/frontend/desktop/src/store/modules/template.js similarity index 92% rename from pipeline/blueflow/src/store/modules/template.js rename to frontend/desktop/src/store/modules/template.js index 58d598b96a..59680dcf26 100644 --- a/pipeline/blueflow/src/store/modules/template.js +++ b/frontend/desktop/src/store/modules/template.js @@ -47,7 +47,6 @@ function generateInitLocation () { type: 'endpoint' } ] - } // 默认流程模板,activities 字段 function generateInitActivities (location, line) { @@ -174,8 +173,8 @@ const template = { setSubprocessUpdated (state, subflow) { state.subprocess_info.details.some(item => { if ( - subflow.template_id === item.template_id && - subflow.subprocess_node_id === item.subprocess_node_id + subflow.template_id === item.template_id + && subflow.subprocess_node_id === item.subprocess_node_id ) { item.expired = false subflow.version && (item.version = subflow.version) @@ -204,7 +203,7 @@ const template = { pipelineTreeOrder.forEach(key => { let val = pipelineData[key] - if (key !== 'constants'){ + if (key !== 'constants') { val = nodeFilter.convertInvalidIdData(key, val) // convert old invalid data =_=! } if (key === 'location') { @@ -226,7 +225,6 @@ const template = { } state[key] = val }) - }, setBusinessBaseInfo (state, data) { state.businessBaseInfo = data @@ -256,7 +254,7 @@ const template = { // 重置模板数据 resetTemplateData (state) { state.name = '' - state.activities = {} + state.activities = {} state.end_event = {} state.flows = {} state.gateways = {} @@ -287,7 +285,7 @@ const template = { const constant = state.constants[key] const { source_info } = constant - for (let id in source_info) { + for (const id in source_info) { if (state.activities[id]) { source_info[id].forEach(item => { let data @@ -310,7 +308,7 @@ const template = { }, // 配置全局变量 source_info 字段 setVariableSourceInfo (state, payload) { - const {type, id, key, tagCode} = payload + const { type, id, key, tagCode } = payload const constant = state.constants[key] if (!constant) return const sourceInfo = constant.source_info @@ -325,7 +323,7 @@ const template = { Vue.delete(sourceInfo, id) } else { let atomIndex - sourceInfo[id].some((item, index)=> { + sourceInfo[id].some((item, index) => { if (item === tagCode) { atomIndex = index return true @@ -337,7 +335,7 @@ const template = { }, // 配置分支网关条件 setBranchCondition (state, condition) { - const {id, nodeId, name} = condition + const { id, nodeId, name } = condition state.gateways[nodeId]['conditions'][id].evaluate = name }, // 节点增加、删除、编辑操作,数据更新 @@ -364,7 +362,7 @@ const template = { }, // 节点拖动,位置更新 setLocationXY (state, location) { - const {id, x, y} = location + const { id, x, y } = location state.location.some(item => { if (item.id === id) { item.x = x @@ -376,13 +374,11 @@ const template = { // 增加、删除节点连线操作,更新模板各相关字段数据 setLine (state, payload) { const { type, line } = payload - let lineIndex const isLineExist = state.line.some((item, index) => { if ( - item.source.id === line.source.id && - item.target.id === line.target.id + item.source.id === line.source.id + && item.target.id === line.target.id ) { - lineIndex = index return true } }) @@ -428,8 +424,8 @@ const template = { state.line.push(newLine) } else if (type === 'delete') { // async activities、flows、gateways、start_event、end_event let deletedLine - for (let item in state.flows) { - const flow = state.flows[item] + for (const item in state.flows) { + const flow = state.flows[item] if (flow.source === line.source.id && flow.target === line.target.id) { deletedLine = Object.assign({}, flow) } @@ -444,7 +440,9 @@ const template = { if (state.gateways[sourceNode]) { const gatewayNode = state.gateways[sourceNode] if (Array.isArray(gatewayNode.outgoing)) { - gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { return item !== deletedLine.id}) + gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { + return item !== deletedLine.id + }) if (gatewayNode.type === ATOM_TYPE_DICT['branchgateway']) { const conditions = gatewayNode.conditions conditions[deletedLine.id] && Vue.delete(conditions, deletedLine.id) @@ -456,7 +454,9 @@ const template = { if (state.gateways[targetNode]) { const gatewayNode = state.gateways[targetNode] if (Array.isArray(gatewayNode.incoming)) { - gatewayNode.incoming = gatewayNode.incoming.filter(item => { return item !== deletedLine.id}) + gatewayNode.incoming = gatewayNode.incoming.filter(item => { + return item !== deletedLine.id + }) } else { gatewayNode.incoming = '' } @@ -477,13 +477,13 @@ const template = { }, error_ignorable: false, id: location.id, - incoming: "", + incoming: '', loop: null, name: location.name, optional: false, - outgoing: "", + outgoing: '', stage_name: gettext('步骤1'), - type: "ServiceActivity", + type: 'ServiceActivity', can_retry: true, isSkipped: true } @@ -492,15 +492,15 @@ const template = { constants: {}, hooked_constants: [], id: location.id, - incoming: "", + incoming: '', loop: null, name: location.name, optional: false, - outgoing: "", + outgoing: '', stage_name: gettext('步骤1'), template_id: location.atomId, version: location.atomVersion, - type: "SubProcess" + type: 'SubProcess' } } } @@ -530,7 +530,9 @@ const template = { if (state.gateways[sourceNode]) { const gatewayNode = state.gateways[sourceNode] if (Array.isArray(gatewayNode.outgoing)) { - gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { return item !== line}) + gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { + return item !== line + }) if (gatewayNode.type === ATOM_TYPE_DICT['branchgateway']) { const conditions = gatewayNode.conditions conditions[line] && Vue.delete(conditions, line) @@ -542,7 +544,9 @@ const template = { if (state.gateways[targetNode]) { const gatewayNode = state.gateways[targetNode] if (Array.isArray(gatewayNode.incoming)) { - gatewayNode.incoming = gatewayNode.incoming.filter(item => { return item !== line}) + gatewayNode.incoming = gatewayNode.incoming.filter(item => { + return item !== line + }) } else { gatewayNode.incoming = '' } @@ -550,7 +554,7 @@ const template = { Vue.delete(state.flows, line) } }) - for (let cKey in state.constants) { + for (const cKey in state.constants) { const constant = state.constants[cKey] const sourceInfo = constant.source_info @@ -603,7 +607,6 @@ const template = { return item !== line }) } - } if (sourceGateway && sourceNode !== location.id) { if (typeof sourceGateway.outgoing === 'string') { @@ -630,16 +633,16 @@ const template = { if (!state.start_event.id) { state.start_event = { id: location.id, - incoming: "", + incoming: '', name: location.name, - outgoing: "", - type: "EmptyStartEvent" + outgoing: '', + type: 'EmptyStartEvent' } } } else if (type === 'delete') { let targetNode let lineId - for (let item in state.flows){ + for (const item in state.flows) { if (state.flows[item].source === location.id) { targetNode = state.flows[item].target lineId = state.flows[item].id @@ -668,16 +671,16 @@ const template = { if (!state.end_event.id) { state.end_event = { id: location.id, - incoming: "", + incoming: '', name: location.name, - outgoing: "", - type: "EmptyEndEvent" + outgoing: '', + type: 'EmptyEndEvent' } } } else if (type === 'delete') { let sourceNode let lineId - for (let item in state.flows){ + for (const item in state.flows) { if (state.flows[item].target === location.id) { sourceNode = state.flows[item].source lineId = state.flows[item].id @@ -717,7 +720,7 @@ const template = { // 修改state中的模板数据 replaceTemplate (state, template) { if (template !== undefined) { - for (let prop in template) { + for (const prop in template) { state[prop] = template[prop] } } @@ -725,7 +728,7 @@ const template = { // 修改lines和locations replaceLineAndLocation (state, payload) { // 需要做一次深层拷贝 - const {lines, locations} = tools.deepClone(payload) + const { lines, locations } = tools.deepClone(payload) state.line = lines state.location = locations } @@ -734,11 +737,14 @@ const template = { loadBusinessBaseInfo () { return api.getBusinessBaseInfo().then(response => response.data) }, - loadTemplateData ({commit}, data) { + loadTemplateData ({ commit }, data) { return api.getTemplateData(data).then(response => response.data) }, + loadCustomVarCollection () { + return api.getCustomVarCollection().then(response => response.data.objects) + }, // 保存模板数据 - saveTemplateData ({state}, {templateId, ccId, common}) { + saveTemplateData ({ state }, { templateId, ccId, common }) { const { activities, constants, end_event, flows, gateways, line, location, outputs, start_event, notify_receivers, notify_type, time_out, category } = state @@ -756,8 +762,15 @@ const template = { }) // 完整的画布数据 const fullCanvasData = JSON.stringify({ - activities, constants, end_event, flows, gateways, line, - location: pureLocation, outputs, start_event + activities, + constants, + end_event, + flows, + gateways, + line, + location: pureLocation, + outputs, + start_event }) const data = { ccId, @@ -775,20 +788,20 @@ const template = { }) }, // 收藏模板,批量操作 - templateCollectSelect ({commit}, list) { + templateCollectSelect ({ commit }, list) { return api.templateCollectSelect(list).then(response => response.data) }, // 删除收藏模板,单个删除 - templateCollectDelete ({commit}, id) { + templateCollectDelete ({ commit }, id) { return api.templateCollectDelete(id).then(response => response.data) }, - queryTemplateData ({commit}, data) { + queryTemplateData ({ commit }, data) { return api.queryTemplate(data).then(response => response.data) }, - loadTemplateSummary ({commit}, data) { + loadTemplateSummary ({ commit }, data) { return api.loadTemplateSummary(data).then(response => response.data) }, - loadTemplateCollectList ({commit}) { + loadTemplateCollectList ({ commit }) { return api.loadTemplateCollectList().then(response => response.data) } }, diff --git a/pipeline/blueflow/src/store/modules/templateList.js b/frontend/desktop/src/store/modules/templateList.js similarity index 70% rename from pipeline/blueflow/src/store/modules/templateList.js rename to frontend/desktop/src/store/modules/templateList.js index 332ff892ee..4ece5eb12c 100644 --- a/pipeline/blueflow/src/store/modules/templateList.js +++ b/frontend/desktop/src/store/modules/templateList.js @@ -9,45 +9,51 @@ * 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 api from "@/api" +import api from '@/api' const templateList = { namespaced: true, state: { - templateListData: [] + templateListData: [], + commonTemplateData: [] }, mutations: { - setTemplateListData (state, data) { - state.templateListData = data + setTemplateListData (state, payload) { + const { list, isCommon } = payload + if (isCommon) { + state.commonTemplateData = list + } else { + state.templateListData = list + } } }, actions: { - loadTemplateList ({commit}, data) { + loadTemplateList ({ commit }, data) { return api.getTemplateList(data).then(response => response.data) }, - deleteTemplate ({commit}, template_id) { + deleteTemplate ({ commit }, template_id) { return api.deleteTemplate(template_id).then(response => response.data.objects) }, getBizPerson () { return api.getBizPerson().then(response => response.data) }, - getTemplatePersons ({commit}, data) { + getTemplatePersons ({ commit }, data) { return api.getTemplatePersons(data).then(response => response.data) }, - saveTemplatePersons ({commit}, data) { + saveTemplatePersons ({ commit }, data) { return api.saveTemplatePersons(data).then(response => response.data) }, - templateUploadCheck ({commit}, data) { + templateUploadCheck ({ commit }, data) { return api.templateUploadCheck(data).then(response => response.data) }, - templateImport ({commit}, data) { + templateImport ({ commit }, data) { return api.templateImport(data).then(response => response.data) }, - templateExport ({commit}, data) { + templateExport ({ commit }, data) { return api.templateExport(data).then(response => response.data) } }, getters: {} } -export default templateList \ No newline at end of file +export default templateList diff --git a/pipeline/blueflow/src/utils/atomFilter.js b/frontend/desktop/src/utils/atomFilter.js similarity index 97% rename from pipeline/blueflow/src/utils/atomFilter.js rename to frontend/desktop/src/utils/atomFilter.js index 5df984e964..3d9e86dd99 100644 --- a/pipeline/blueflow/src/utils/atomFilter.js +++ b/frontend/desktop/src/utils/atomFilter.js @@ -14,7 +14,7 @@ import tools from './tools.js' const atomFilter = { formFilter (tag_code, config) { let formConfig - if (tag_code && config){ + if (tag_code && config) { config.some(item => { if (item.tag_code === tag_code) { formConfig = item @@ -33,7 +33,7 @@ const atomFilter = { return formConfig }, getFormItemDefaultValue (config) { - let value = {} + const value = {} config.forEach(item => { if (item.type === 'combine') { value[item.tag_code] = this.getFormItemDefaultValue(item.attrs.children) @@ -77,7 +77,6 @@ const atomFilter = { break default: val = '' - } } @@ -89,4 +88,4 @@ const atomFilter = { } } -export default atomFilter \ No newline at end of file +export default atomFilter diff --git a/pipeline/blueflow/src/utils/bus.js b/frontend/desktop/src/utils/bus.js similarity index 97% rename from pipeline/blueflow/src/utils/bus.js rename to frontend/desktop/src/utils/bus.js index 8a8dbdc453..4aa4fe1766 100644 --- a/pipeline/blueflow/src/utils/bus.js +++ b/frontend/desktop/src/utils/bus.js @@ -13,4 +13,4 @@ import Vue from 'vue' const bus = new Vue() -export default bus \ No newline at end of file +export default bus diff --git a/pipeline/blueflow/src/utils/checkDataType.js b/frontend/desktop/src/utils/checkDataType.js similarity index 99% rename from pipeline/blueflow/src/utils/checkDataType.js rename to frontend/desktop/src/utils/checkDataType.js index e3790ad939..129b29729b 100644 --- a/pipeline/blueflow/src/utils/checkDataType.js +++ b/frontend/desktop/src/utils/checkDataType.js @@ -12,4 +12,4 @@ export function checkDataType (data) { const typeString = Object.prototype.toString.call(data) return typeString.slice(8, -1) -} \ No newline at end of file +} diff --git a/pipeline/blueflow/src/utils/dom.js b/frontend/desktop/src/utils/dom.js similarity index 85% rename from pipeline/blueflow/src/utils/dom.js rename to frontend/desktop/src/utils/dom.js index 6e439b8018..2ad52417f9 100644 --- a/pipeline/blueflow/src/utils/dom.js +++ b/frontend/desktop/src/utils/dom.js @@ -11,15 +11,17 @@ */ const dom = { nodeContains: function (root, el) { - if (root.compareDocumentPosition) + if (root.compareDocumentPosition) { return root === el || !!(root.compareDocumentPosition(el) & 16) - if (root.contains && el.nodeType === 1){ + } + if (root.contains && el.nodeType === 1) { return root.contains(el) && root !== el } - while ((el = el.parentNode)) + while ((el = el.parentNode)) { if (el === root) return true + } return false } } -export default dom \ No newline at end of file +export default dom diff --git a/pipeline/blueflow/src/utils/draft.js b/frontend/desktop/src/utils/draft.js similarity index 73% rename from pipeline/blueflow/src/utils/draft.js rename to frontend/desktop/src/utils/draft.js index fc1ad44118..57d08bd1f2 100644 --- a/pipeline/blueflow/src/utils/draft.js +++ b/frontend/desktop/src/utils/draft.js @@ -21,8 +21,8 @@ const draft = { let index = 0 while (remainingLocalStorageSize < minDraftLength) { // 大小不足96KB时清除一部分本地缓存 从最早创建的本地缓存开始删除 - let key = localStorage.key(index++) - let keyArray = key.split('_') + const key = localStorage.key(index++) + const keyArray = key.split('_') if (keyArray.length !== 4) { continue } @@ -30,19 +30,19 @@ const draft = { remainingLocalStorageSize = 1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length } // 当前时间戳 - let timestamp = new Date().getTime() + const timestamp = new Date().getTime() // 当前年月日时分秒时间 - let localTime = moment.unix(timestamp / 1000).format('YYYY-MM-DD HH:mm:ss') + const localTime = moment.unix(timestamp / 1000).format('YYYY-MM-DD HH:mm:ss') // 数据 - let descriptionData = {'time': localTime , 'message': message} + const descriptionData = { 'time': localTime, 'message': message } // 存储数据 - let key = [username, ccId, templateId, timestamp].join('_') + const key = [username, ccId, templateId, timestamp].join('_') // 超过50个本地缓存需要进行删除 let draftNumber = 0 - let localStorageLength = localStorage.length + const localStorageLength = localStorage.length const regex = this.getKeyRegex(username, ccId, templateId) - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) // 获取key字段的所有切割信息 if (regex.test(key)) { draftNumber++ @@ -52,7 +52,7 @@ const draft = { } } try { - localStorage[key] = JSON.stringify({'template': templateData , 'description': descriptionData}) + localStorage[key] = JSON.stringify({ 'template': templateData, 'description': descriptionData }) } catch (e) { // 用户浏览器不支持localStorage } @@ -69,19 +69,19 @@ const draft = { // 用于替换第一次创建模板id为 uuid 的id draftReplace (username, ccId, templateId, templateUUID) { const regex = this.getKeyRegex(username, ccId, templateUUID) - for (let key in localStorage) { + for (const key in localStorage) { // 获取key字段的所有切割信息 - let keyArray = key.split('_') + const keyArray = key.split('_') // 切割完的长度应该为4且原先的模板id uuid 时才需要使用 // username重复的几率比较大放置最后判断 if (regex.test(key)) { // 原先的模板数据 - let draftData = localStorage[key] + const draftData = localStorage[key] // 将原先信息删除 localStorage.removeItem(key) keyArray[2] = templateId // 重新创建key值 - let newKey = keyArray.join('_') + const newKey = keyArray.join('_') localStorage[newKey] = draftData } } @@ -89,12 +89,12 @@ const draft = { // 获取当前本地缓存 getDraftArray (username, ccId, templateId) { const regex = this.getKeyRegex(username, ccId, templateId) - let draftArray = [] - let localStorageLength = localStorage.length - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + const draftArray = [] + const localStorageLength = localStorage.length + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) if (regex.test(key)) { - draftArray.push({'key': key,'data': JSON.parse(localStorage[key])}) + draftArray.push({ 'key': key, 'data': JSON.parse(localStorage[key]) }) } } return draftArray @@ -102,9 +102,9 @@ const draft = { // 删除没有template_id 的模板 deleteAllDraftByUUID (username, ccId, uuid) { const regex = this.getKeyRegex(username, ccId, uuid) - let localStorageLength = localStorage.length - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + const localStorageLength = localStorage.length + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) // uuid 需要加上""变为字符串 if (regex.test(key)) { localStorage.removeItem(key) @@ -114,26 +114,26 @@ const draft = { // 复制并替换本地缓存(模板克隆时使用) copyAndReplaceDraft (username, ccId, templateId, uuid) { const regex = this.getKeyRegex(username, ccId, templateId) - for (let key in localStorage) { + for (const key in localStorage) { // 获取key字段的所有切割信息 - let keyArray = key.split('_') + const keyArray = key.split('_') if (regex.test(key)) { // 原先的模板数据 - let draftData = localStorage[key] + const draftData = localStorage[key] keyArray[2] = uuid // 重新创建key值并进行创建 - let newKey = keyArray.join('_') + const newKey = keyArray.join('_') localStorage[newKey] = draftData } } }, // 获取最近的一个本地缓存 getLastDraft (username, ccId, templateId) { - let localStorageLength = localStorage.length + const localStorageLength = localStorage.length // 动态生成正则表达式 const regex = this.getKeyRegex(username, ccId, templateId) - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) if (regex.test(key)) { return localStorage[key] } @@ -145,4 +145,4 @@ const draft = { } } -export default draft \ No newline at end of file +export default draft diff --git a/pipeline/blueflow/src/utils/errorHandler.js b/frontend/desktop/src/utils/errorHandler.js similarity index 100% rename from pipeline/blueflow/src/utils/errorHandler.js rename to frontend/desktop/src/utils/errorHandler.js diff --git a/pipeline/blueflow/src/utils/formatPosition.js b/frontend/desktop/src/utils/formatPosition.js similarity index 87% rename from pipeline/blueflow/src/utils/formatPosition.js rename to frontend/desktop/src/utils/formatPosition.js index 5ffbb03715..d3625ab948 100644 --- a/pipeline/blueflow/src/utils/formatPosition.js +++ b/frontend/desktop/src/utils/formatPosition.js @@ -9,6 +9,8 @@ * 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 tools from '@/utils/tools.js' + const gatewayShiftX = 210 // 起始位置 const startPointX = 40 @@ -75,17 +77,15 @@ let nowTier = -1 // 用于计算线段比例 let nextLineNodeY = 0 -import tools from '@/utils/tools.js' - const formatPositionUtils = { formatPosition (oldLines, oldLocations) { lastLocations = oldLocations lines = oldLines overBorderLine = [] // 分组信息 - for (let line of lines) { - let sourceId = line.source.id - let targetId = line.target.id + for (const line of lines) { + const sourceId = line.source.id + const targetId = line.target.id if (group[sourceId]) { group[sourceId].push(targetId) } else { @@ -93,19 +93,17 @@ const formatPositionUtils = { } } // 循环旧节点 - for (let location of oldLocations) { - let type = location['type'] + for (const location of oldLocations) { + const type = location['type'] if (type === 'startpoint') { // 用于放置至最开始 lastPoint = location nowId = location.id - } - else if (type === 'endpoint') { + } else if (type === 'endpoint') { // 用于放置至最后 endPoint = location - } - else { - let locationId = location.id + } else { + const locationId = location.id // 添加进入循环数组 newLocations[locationId] = location // 获取一一对应的网关关系 @@ -113,24 +111,24 @@ const formatPositionUtils = { gatewayCycleList[locationId] = {} gatewayCycleExecute[locationId] = {} // 递归获得分支或并行网关执行序列 - let [gatewayRecursionList] = this.recursionGateway(gatewayStack, locationId, oldLocations) - for (let x in gatewayRecursionList) { - for (let y in gatewayRecursionList[x]) { - let nodeId = gatewayRecursionList[x][y] + const [gatewayRecursionList] = this.recursionGateway(gatewayStack, locationId, oldLocations) + for (const x in gatewayRecursionList) { + for (const y in gatewayRecursionList[x]) { + const nodeId = gatewayRecursionList[x][y] gatewayCycleList[locationId][nodeId] = oldLocations.find(location => location.id === nodeId) } // 用于控制递归继续执行序列 // 需要减去最后的多余的结束节点数量 - gatewayCycleExecute[locationId][x] = gatewayRecursionList[x].length - 1 + gatewayCycleExecute[locationId][x] = gatewayRecursionList[x].length - 1 } } } } // 清除多余的locations中的相关节点 - for (let x in gatewayCycleList){ - for (let y in gatewayCycleList[x]) { - for (let z in gatewayCycleList[x][y]){ - let id = gatewayCycleList[x][y][z] + for (const x in gatewayCycleList) { + for (const y in gatewayCycleList[x]) { + for (const z in gatewayCycleList[x][y]) { + const id = gatewayCycleList[x][y][z] if (newLocations[id] === undefined) { continue } @@ -141,7 +139,7 @@ const formatPositionUtils = { // 重新赋值节点位置 locations = [] // 先添加起始节点 - let locationJson = tools.deepClone(lastPoint) + const locationJson = tools.deepClone(lastPoint) // 绘制开始节点 locationJson['x'] = startPointX locationJson['y'] = startPointY @@ -153,7 +151,7 @@ const formatPositionUtils = { // 结束节点最后绘制 this.computeAndDrawNode(endPoint) // 需要重新赋值全局变量 防止第二次点击编排按钮时出现问题 - const result = {'lines': lines, 'locations': locations, 'overBorderLine': overBorderLine} + const result = { 'lines': lines, 'locations': locations, 'overBorderLine': overBorderLine } this.initData() return result }, @@ -166,22 +164,22 @@ const formatPositionUtils = { */ recursionGateway (gatewayStack, locationId, oldLocations, tier = 0) { // 全部分支递归分支数组 - let gatewayRecursionList = [] + const gatewayRecursionList = [] // 获取网关的执行序列 - let groupLocationList = group[locationId] + const groupLocationList = group[locationId] // 某一条分支的递归数组 let recursionList = [] // 当前id let findId = null - for (let locationIndex in groupLocationList) { + for (const locationIndex in groupLocationList) { gatewayStack.push(locationId) // 获得网关的第一个节点 findId = groupLocationList[locationIndex] while (true) { // 获取节点 - let findLocation = oldLocations.find(location => location.id === findId) - let findType = findLocation['type'] + const findLocation = oldLocations.find(location => location.id === findId) + const findType = findLocation['type'] if (findType === 'convergegateway') { // 继续进行下一条分支 只有最后一次需要执行下面的逻辑 if (locationIndex + 1 !== groupLocationList.length) { @@ -189,16 +187,14 @@ const formatPositionUtils = { recursionList.push(findId) break } - } - else if (findType === 'parallelgateway' || findType === 'branchgateway') { + } else if (findType === 'parallelgateway' || findType === 'branchgateway') { tier++ recursionList.push(findId) // 进行递归 获取网关中最后节点 - let result = this.recursionGateway(gatewayStack, findId, oldLocations, tier) + const result = this.recursionGateway(gatewayStack, findId, oldLocations, tier) // 需要传递网关最后的节点 findId = result[1] - } - else { + } else { recursionList.push(findId) } // 继续找下一个节点 @@ -216,24 +212,26 @@ const formatPositionUtils = { * @param {*} newLastNodeX 当前x值 * @param {*} newLastNodeY 当前y值 */ - recursionData (newLocations, newLastNodeX = null , newLastNodeY = null) { + recursionData (newLocations, newLastNodeX = null, newLastNodeY = null) { // 循环执行节点 - for (let i in newLocations) { + /* eslint-disable */ + for (const i in newLocations) { + /* eslint-enable */ // 某个节点的下一个执行序列 - let lastList = group[nowId] + const lastList = group[nowId] // 出现undefined或空节点即可结束 if (lastList === undefined || newLocations[lastList[0]] === undefined) { break } // 上一个Id - let lastId = nowId + const lastId = nowId if (newLastNodeX === null) { newLastNodeX = lastNodeX } if (newLastNodeY === null) { newLastNodeY = lastNodeY } - let executeLength = lastList.length + const executeLength = lastList.length for (let executeNodeIndex = 0; executeNodeIndex < executeLength; executeNodeIndex++) { nowId = lastList[executeNodeIndex] let location = newLocations[nowId] @@ -298,18 +296,18 @@ const formatPositionUtils = { } // 绘制汇聚网关 if (executeNodeIndex + 1 === executeLength && executeNodeIndex > 0) { - let location = newLocations[gatewayGroup[lastId]] + const location = newLocations[gatewayGroup[lastId]] // 存储层级及最大高度 // 获得最大的X位置 const nowTierMaxWidth = convergegatewayMaxWidthTier[nowTier] - if (nowTierMaxWidth){ + if (nowTierMaxWidth) { convergegatewayMaxWidthTier[nowTier] = nowTierMaxWidth } else { convergegatewayMaxWidthTier[nowTier] = lastNodeX } const [resultNodeX] = this.computeAndDrawNode(location, executeLength, 0, convergegatewayMaxWidthTier[nowTier], newLastNodeY) - if (nowTierMaxWidth){ - convergegatewayMaxWidthTier[nowTier] = Math.max(resultNodeX, nowTierMaxWidth) + if (nowTierMaxWidth) { + convergegatewayMaxWidthTier[nowTier] = Math.max(resultNodeX, nowTierMaxWidth) } else { convergegatewayMaxWidthTier[nowTier] = resultNodeX } @@ -333,14 +331,14 @@ const formatPositionUtils = { * @param {*} gatewayIndex 节点所处网关节点的inex * @param {*} gatewayCycleExecuteLength 网关执行序列长度 */ - computeAndDrawNode (location, executeLength = null, executeNodeIndex = 0, newLastNodeX = null , newLastNodeY = null, gatewayIndex = 0, gatewayCycleExecuteLength = 0) { + computeAndDrawNode (location, executeLength = null, executeNodeIndex = 0, newLastNodeX = null, newLastNodeY = null, gatewayIndex = 0, gatewayCycleExecuteLength = 0) { if (location === undefined) { // 空节点不需要继续 return } // 拷贝一份location用于替换x,y值 - let locationJson = tools.deepClone(location) - let type = location['type'] + const locationJson = tools.deepClone(location) + const type = location['type'] if (type === 'tasknode' || type === 'subflow') { // 是否是在网关中的节点 let gatewayFlag = null @@ -352,15 +350,15 @@ const formatPositionUtils = { } // 在网关当中 if (gatewayFlag) { - let nodeY = newLastNodeY - deviationY + const nodeY = newLastNodeY - deviationY newLastNodeX += shiftX * 1.2 locationJson['x'] = newLastNodeX locationJson['y'] = nodeY locations.push(locationJson) gatewayShiftYList.push(nodeY + deviationY) - let sourceLine = lines.find(line => line.target.id === location.id) - let targetLine = lines.find(line => line.source.id === location.id) + const sourceLine = lines.find(line => line.target.id === location.id) + const targetLine = lines.find(line => line.source.id === location.id) // 入线模式尾箭头为左入 sourceLine.target.arrow = 'Left' if (executeNodeIndex === 0) { @@ -373,7 +371,7 @@ const formatPositionUtils = { // 网关第N行(N>2)第一个节点 sourceLine.source.arrow = 'Bottom' targetLine.source.arrow = 'Right' - if ( gatewayCycleExecuteLength === 1) { + if (gatewayCycleExecuteLength === 1) { // 只有一个节点 连线需要接到汇聚网关下方 targetLine.target.arrow = 'Bottom' } else { @@ -422,13 +420,13 @@ const formatPositionUtils = { // 添加网关信号 用于重置Y轴值 resetGatewayList.push(true) // 修改输出的箭头方向 - let targetLine = lines.find(line => line.target.id === location.id) + const targetLine = lines.find(line => line.target.id === location.id) targetLine.target.arrow = 'Left' if (executeNodeIndex === 0) { targetLine.source.arrow = 'Right' } else { // 上一个节点的type - const {type: lastNodeType} = this.getPreviousPoint(location.id) + const { type: lastNodeType } = this.getPreviousPoint(location.id) if (lastNodeType === 'parallelgateway' || lastNodeType === 'branchgateway') { targetLine.source.arrow = 'Bottom' } else { @@ -470,7 +468,7 @@ const formatPositionUtils = { newLastNodeX = lastNodeX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else { newLastNodeX += shiftX * 1.5 locationJson['x'] = newLastNodeX @@ -486,9 +484,9 @@ const formatPositionUtils = { locationJson['x'] = lastNodeX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else { - lastNodeX += shiftX / 1.2 + lastNodeX += shiftX / 1.2 locationJson['x'] = lastNodeX } locationJson['y'] = lastNodeY @@ -511,14 +509,13 @@ const formatPositionUtils = { delete convergegatewayMaxWidthTier[nowTier] nowTier-- return [lastNodeX, null] - } else if (type === 'convergegateway') { resetGatewayList.pop() // 更换分支网关连接线段箭头 const sourceLine = lines.find(line => line.target.id === location.id) const targetLine = lines.find(line => line.source.id === location.id) targetLine.source.arrow = 'Right' - if (lastLocations.find(location => sourceLine.source.id === location.id).type === 'convergegateway'){ + if (lastLocations.find(location => sourceLine.source.id === location.id).type === 'convergegateway') { // 设置连接分支网关的线在左部 sourceLine.target.arrow = 'Left' } @@ -541,17 +538,16 @@ const formatPositionUtils = { } else { return [lastNodeX, lastNodeY] } - } - else if (type === 'endpoint') { + } else if (type === 'endpoint') { // 需要切换箭头 - let line = lines.find(line => line.target.id === location.id) + const line = lines.find(line => line.target.id === location.id) line.target.arrow = 'Left' line.source.arrow = 'Right' if (isStartPoint) { lastNodeX = startPointX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else if (lastPointType === 'tasknode' || lastPointType === 'subflow' || lastPointType === 'startpoint') { // 结束节点前是个标准插件节点需要增加1.5倍距离 lastNodeX += shiftX * 1.5 @@ -562,7 +558,6 @@ const formatPositionUtils = { locationJson['x'] = lastNodeX locationJson['y'] = lastNodeY locations.push(locationJson) - return } }, isOverBorder () { @@ -629,12 +624,12 @@ const formatPositionUtils = { }, isLocationAllNode (locations) { const typeList = ['startpoint', 'endpoint', 'tasknode', 'subflow'] - return locations.every((location) =>{ + return locations.every((location) => { return typeList.includes(location.type) }) }, - addOverBorderLine ({source, target}) { - overBorderLine.push({'source': source, 'target': target ,'midpoint': Number(gatewayShiftY / nextLineNodeY).toFixed(2)}) + addOverBorderLine ({ source, target }) { + overBorderLine.push({ 'source': source, 'target': target, 'midpoint': Number(gatewayShiftY / nextLineNodeY).toFixed(2) }) gatewayShiftY = 0 } } diff --git a/pipeline/blueflow/src/utils/i18n.js b/frontend/desktop/src/utils/i18n.js similarity index 100% rename from pipeline/blueflow/src/utils/i18n.js rename to frontend/desktop/src/utils/i18n.js diff --git a/pipeline/blueflow/src/utils/nodeFilter.js b/frontend/desktop/src/utils/nodeFilter.js similarity index 88% rename from pipeline/blueflow/src/utils/nodeFilter.js rename to frontend/desktop/src/utils/nodeFilter.js index 4007c9df0d..a482e510c8 100644 --- a/pipeline/blueflow/src/utils/nodeFilter.js +++ b/frontend/desktop/src/utils/nodeFilter.js @@ -42,20 +42,22 @@ const nodeFilter = { case 'activities': case 'flows': case 'gateways': - for (let key in primaryData) { + for (const key in primaryData) { const newKey = this.getNewValidId(key) newData[newKey] = primaryData[key] keysOfIdRelated.forEach(item => { - let val = newData[newKey][item] - if (val != undefined && val !== '') { + const val = newData[newKey][item] + if (val !== undefined && val !== '') { if (typeof val === 'string') { newData[newKey][item] = this.getNewValidId(val) } else if (Array.isArray(val)) { - newData[newKey][item] = val.map(v => {return this.getNewValidId(v)}) + newData[newKey][item] = val.map(v => { + return this.getNewValidId(v) + }) } if (item === 'conditions') { const newVal = {} - for (let conditionId in val) { + for (const conditionId in val) { const newConditionId = this.getNewValidId(conditionId) newVal[newConditionId] = val[conditionId] newVal[newConditionId].tag = newVal[newConditionId].tag.split('_').map((id, index) => { @@ -68,18 +70,16 @@ const nodeFilter = { }) } return newData - break case 'end_event': case 'start_event': newData = Object.assign({}, primaryData) keysOfIdRelated.forEach(item => { - let val = newData[item] - if (val != undefined && val !== '') { + const val = newData[item] + if (val !== undefined && val !== '') { newData[item] = this.getNewValidId(val) } }) return newData - break case 'line': newData = [...primaryData] newData.forEach((item, index) => { @@ -88,19 +88,16 @@ const nodeFilter = { item.target.id = this.getNewValidId(item.target.id) }) return newData - break case 'location': newData = [...primaryData] newData.forEach((item) => { item.id = this.getNewValidId(item.id) }) return newData - break default: return primaryData - break } } } -export default nodeFilter \ No newline at end of file +export default nodeFilter diff --git a/pipeline/blueflow/src/utils/tools.js b/frontend/desktop/src/utils/tools.js similarity index 98% rename from pipeline/blueflow/src/utils/tools.js rename to frontend/desktop/src/utils/tools.js index dc9c9c6e11..ae93541395 100644 --- a/pipeline/blueflow/src/utils/tools.js +++ b/frontend/desktop/src/utils/tools.js @@ -22,8 +22,8 @@ const tools = { let timer return function () { - let context = this - let args = arguments + const context = this + const args = arguments clearTimeout(timer) @@ -54,7 +54,6 @@ const tools = { last = now fn.apply(context, args) }, threshhold) - } else { last = now fn.apply(context, args) diff --git a/pipeline/blueflow/src/utils/uuid.js b/frontend/desktop/src/utils/uuid.js similarity index 99% rename from pipeline/blueflow/src/utils/uuid.js rename to frontend/desktop/src/utils/uuid.js index 929f99396c..3b660db022 100644 --- a/pipeline/blueflow/src/utils/uuid.js +++ b/frontend/desktop/src/utils/uuid.js @@ -21,4 +21,4 @@ export function uuid () { id += random4() } return id -} \ No newline at end of file +} diff --git a/pipeline/blueflow/src/utils/validatePipeline.js b/frontend/desktop/src/utils/validatePipeline.js similarity index 77% rename from pipeline/blueflow/src/utils/validatePipeline.js rename to frontend/desktop/src/utils/validatePipeline.js index 9cfc990154..2375cb0f4d 100644 --- a/pipeline/blueflow/src/utils/validatePipeline.js +++ b/frontend/desktop/src/utils/validatePipeline.js @@ -11,17 +11,16 @@ */ import { NODE_DICT } from '@/constants/index.js' - const NODE_RULE = { - "startpoint": { + 'startpoint': { min_in: 0, max_in: 0, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "branchgateway", "parallelgateway", "endpoint", "subflow"], + allowed_out: ['tasknode', 'branchgateway', 'parallelgateway', 'endpoint', 'subflow'], unique: true }, - "endpoint": { + 'endpoint': { min_in: 1, max_in: 1, min_out: 0, @@ -29,44 +28,44 @@ const NODE_RULE = { allowed_out: [], unique: true }, - "tasknode": { + 'tasknode': { min_in: 1, max_in: 1, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway", "endpoint"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway', 'endpoint'], unique: false }, - "branchgateway": { + 'branchgateway': { min_in: 1, max_in: 1, min_out: 2, max_out: 1000, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway'], unique: false }, - "parallelgateway": { + 'parallelgateway': { min_in: 1, max_in: 1, min_out: 2, max_out: 1000, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway'], unique: false }, - "convergegateway": { + 'convergegateway': { min_in: 2, max_in: 1000, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway", "endpoint"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway', 'endpoint'], unique: false }, - "subflow": { + 'subflow': { min_in: 1, max_in: 1, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "endpoint", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'endpoint', 'convergegateway'], unique: false } } @@ -94,19 +93,19 @@ const validatePipeline = { let isLoop = false if (sourceRule.max_out === 0) { - const i18n_text = gettext("只能添加输入连线") + const i18n_text = gettext('只能添加输入连线') const message = `${NODE_DICT[sourceNode.type]}${i18n_text}` return this.getMessage(false, message) } if (targetRule.max_in === 0) { - const i18n_text = gettext("只能添加输出连线") + const i18n_text = gettext('只能添加输出连线') const message = `${NODE_DICT[targetNode.type]}${i18n_text}` return this.getMessage(false, message) } if (sourceRule.allowed_out.indexOf(targetNode.type) === -1) { - const i18n_text = gettext("不能连接") + const i18n_text = gettext('不能连接') const message = `${NODE_DICT[sourceNode.type]}${i18n_text}${NODE_DICT[targetNode.type]}` return this.getMessage(false, message) } @@ -126,22 +125,22 @@ const validatePipeline = { }) if (isLoop) { - const message = gettext("相同节点不能回连") + const message = gettext('相同节点不能回连') return this.getMessage(false, message) } if (isSameLine) { - const message = gettext("重复添加连线") + const message = gettext('重复添加连线') return this.getMessage(false, message) } else { - const i18n_text1 = gettext("已达到") + const i18n_text1 = gettext('已达到') if (sourceLinesLinked >= sourceRule.max_out) { - const i18n_text2 = gettext("最大输出连线条数") + const i18n_text2 = gettext('最大输出连线条数') const message = `${i18n_text1}${NODE_DICT[sourceNode.type]}${i18n_text2}` return this.getMessage(false, message) } if (targetLinesLinked >= targetRule.max_in) { - const i18n_text2 = gettext("最大输入连线条数") + const i18n_text2 = gettext('最大输入连线条数') const message = `${i18n_text1}${NODE_DICT[targetNode.type]}${i18n_text2}` return this.getMessage(false, message) } @@ -151,9 +150,11 @@ const validatePipeline = { isLocationValid (loc, data) { const rule = NODE_RULE[loc.type] if (rule.unique) { // 节点唯一性 - const isLocationOverMount = data.some(item => { return item.type === loc.type && item.id !== loc.id}) + const isLocationOverMount = data.some(item => { + return item.type === loc.type && item.id !== loc.id + }) if (isLocationOverMount) { - const i18n_text = gettext("在模板中只能添加一个") + const i18n_text = gettext('在模板中只能添加一个') const message = `${NODE_DICT[loc.type]}${i18n_text}` return this.getMessage(false, message) } @@ -185,21 +186,21 @@ const validatePipeline = { subflow += 1 } data.lines.forEach(line => { - if (line.source.id == loc.id) { + if (line.source.id === loc.id) { targetLinesLinked += 1 } if (line.target.id === loc.id) { sourceLinesLinked += 1 } }) - const i18n_text1 = gettext("至少需要") + const i18n_text1 = gettext('至少需要') if (sourceLinesLinked < rule.min_in) { - const i18n_text2 = gettext("条输入连线") + const i18n_text2 = gettext('条输入连线') message = `${name}${i18n_text1}${rule.min_in}${i18n_text2}` return false } if (targetLinesLinked < rule.min_out) { - const i18n_text2 = gettext("条输出连线") + const i18n_text2 = gettext('条输出连线') message = `${name}${i18n_text1}${rule.min_out}${i18n_text2}` return false } @@ -211,12 +212,12 @@ const validatePipeline = { } if ((tasknode + subflow) === 0) { - message = gettext("请添加任务节点") + message = gettext('请添加任务节点') return this.getMessage(false, message) } if (branchAndParallelGateways !== convergegateways) { - message = gettext("并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用") + message = gettext('并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用') return this.getMessage(false, message) } diff --git a/gcloud/apigw/api_doc.md b/gcloud/apigw/api_doc.md deleted file mode 100644 index e05c1353dd..0000000000 --- a/gcloud/apigw/api_doc.md +++ /dev/null @@ -1,2124 +0,0 @@ -# API DOC - -请通过 APIGW 或者 ESB 访问 - -## get_template_list - -### 功能描述 -查询业务下的模板列表 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | - -### 返回结果说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | list | result=true时模板列表,详细信息见下面说明 | -| message | string | result=false时错误信息 | - -#### data[] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| bk_biz_id | string | 业务ID | -| bk_biz_name | string | 业务名称 | -| id | int | 模板ID | -| name | string | 模板名称 | -| category | string | 模板分类,分类信息见下面说明 | -| creator | string | 模板创建人 | -| create_time | string | 模板创建时间 | -| editor | string 或者 null | 模板编辑人 | -| edit_time | string | 模板最新编辑时间 | - -#### data[][category] 说明 -``` -CATEGORY = { - "OpsTools": u"运维工具", - "MonitorAlarm": u"监控告警", - "ConfManage": u"配置管理", - "DevTools": u"开发工具", - "EnterpriseIT": u"企业IT", - "OfficeApp": u"办公应用", - "Other": u"其它", -} -``` - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_template_list/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2" -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": [ - { - "category": "Other", - "edit_time": "2018-04-23 17:30:48 +0800", - "create_time": "2018-04-23 17:26:40 +0800", - "name": "testname", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 32, - "editor": "admin" - }, - { - "category": "Other", - "edit_time": "2018-04-19 12:04:42 +0800", - "create_time": "2018-04-19 12:04:42 +0800", - "name": "new201804191218", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 31, - "editor": null - }, - { - "category": "Other", - "edit_time": "2018-04-18 17:09:39 +0800", - "create_time": "2018-04-16 21:43:15 +0800", - "name": "new20180416213944", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 30, - "editor": "admin" - }, - ] -} -``` - -## get_template_info - -### 功能描述 -查询业务下的单个模板详情 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_id | string | 是 | 模板ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时模板详情,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| bk_biz_id | string | 业务ID | -| bk_biz_name | string | 业务名称 | -| id | int | 模板ID | -| name | string | 模板名称 | -| category | string | 模板分类,分类信息见下面说明 | -| creator | string | 模板创建人 | -| create_time | string | 模板创建时间 | -| editor | string 或者 null | 模板编辑人 | -| edit_time | string | 模板最新编辑时间 | -| pipeline_tree | dict | 模板任务树信息,详细信息见下面说明 | - -##### data[category] 说明 -``` -CATEGORY = { - "OpsTools": u"运维工具", - "MonitorAlarm": u"监控告警", - "ConfManage": u"配置管理", - "DevTools": u"开发工具", - "EnterpriseIT": u"企业IT", - "OfficeApp": u"办公应用", - "Other": u"其它", -} -``` - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs|component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs|component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_template_list/30/1/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "1", - "template_id": "30", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "category": "Other", - "edit_time": "2018-04-27 16:24:24 +0800", - "create_time": "2018-04-16 21:43:15 +0800", - "name": "new20180416213944", - "bk_biz_id": "2", - "creator": "admin", - "pipeline_tree": { - "activities": { - "631b6576cc5dfbdcaa4f510ce88a7e67": { - "outgoing": "44ab36ebf4cf119edaf2d20401da87e4", - "incoming": "fb2f3a8b533ca5c67e2440b4164f7632", - "name": "node_1", - "error_ignorable": false, - "component": { - "code": "job_fast_execute_script", - "data": { - "account": { - "hook": false, - "value": "root" - }, - "ip_list": { - "hook": false, - "value": "127.0.0.1" - }, - "script_timeout": { - "hook": true, - "value": "${script_timeout}" - }, - "content": { - "hook": false, - "value": "${content}" - }, - "script_param": { - "hook": false, - "value": "${params}" - }, - "script_type": { - "hook": true, - "value": "${script_type}" - } - } - }, - "optional": false, - "type": "ServiceActivity", - "id": "631b6576cc5dfbdcaa4f510ce88a7e67", - "loop": null - } - }, - "end_event": { - "type": "EmptyEndEvent", - "outgoing": "", - "incoming": "44ab36ebf4cf119edaf2d20401da87e4", - "id": "60c81e383d048d8a3c574d3436e1b82c", - "name": "" - }, - "outputs": [], - "flows": { - "fb2f3a8b533ca5c67e2440b4164f7632": { - "is_default": false, - "source": "48afea1016ab70ee37179fa0eb1e1a14", - "id": "fb2f3a8b533ca5c67e2440b4164f7632", - "target": "631b6576cc5dfbdcaa4f510ce88a7e67" - }, - "44ab36ebf4cf119edaf2d20401da87e4": { - "is_default": false, - "source": "631b6576cc5dfbdcaa4f510ce88a7e67", - "id": "44ab36ebf4cf119edaf2d20401da87e4", - "target": "60c81e383d048d8a3c574d3436e1b82c" - } - }, - "start_event": { - "type": "EmptyStartEvent", - "outgoing": "fb2f3a8b533ca5c67e2440b4164f7632", - "incoming": "", - "id": "48afea1016ab70ee37179fa0eb1e1a14", - "name": "" - }, - "constants": { - "${script_type}": { - "source_tag": "job_fast_execute_script.script_type", - "source_info": { - "631b6576cc5dfbdcaa4f510ce88a7e67": [ - "script_type" - ] - }, - "name": "script type", - "index": 0, - "custom_type": "radio", - "value": "4", - "show_type": "show", - "source_type": "component_inputs", - "key": "${script_type}", - "validation": "^.*$", - "desc": "" - }, - "${content}": { - "source_tag": "", - "source_info": {}, - "name": "content", - "index": 2, - "custom_type": "textarea", - "value": "", - "show_type": "show", - "source_type": "custom", - "key": "${content}", - "desc": "" - }, - "${script_timeout}": { - "source_tag": "job_fast_execute_script.script_timeout", - "source_info": { - "631b6576cc5dfbdcaa4f510ce88a7e67": [ - "script_timeout" - ] - }, - "name": "timeout", - "index": 1, - "custom_type": "input", - "value": "", - "show_type": "show", - "source_type": "component_inputs", - "key": "${script_timeout}", - "validation": "^.*$", - "desc": "" - }, - "${params}": { - "source_tag": "", - "source_info": {}, - "name": "params", - "index": 3, - "custom_type": "input", - "value": "", - "show_type": "show", - "source_type": "custom", - "key": "${params}", - "desc": "" - } - }, - "gateways": {} - }, - "bk_biz_name": "blueking", - "id": 30, - "editor": "admin" - }, -} -``` - -## create_task - -### 功能描述 -通过流程模板创建任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_id | string | 是 | 模板ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | -| name | string | 是 | 任务名称 | -| flow_type | string | 否 | 任务流程类型,common: 常规流程,common_func:职能化流程 | -| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | -| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | - -##### constants 说明 -KEY:变量 KEY,${key} 格式 - -VALUE:变量值,value 的类型和从模板获取的全局变量中 value 类型保持一致 - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| task_id | int | 任务实例 ID | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "name": "tasktest", - "flow_type": "common", - "constants": { - "${content}": "echo 1", - "${params}": "", - "${script_timeout}": 20 - } -} -response = requests.post("http://{stageVariables.domain}/apigw/create_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "name": "tasktest", - "flow_type": "common", - "constants": { - "${content}": "echo 1", - "${params}": "", - "${script_timeout}": 20 - } -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "1", - "template_id": "30", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "task_id": 10 - } -} -``` - -## start_task - -### 功能描述 -开始执行任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务ID | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 任务是否执行 | -| data | dict | result=true 时成功返回数据 | -| message | string | result=false 时错误信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.post("http://{stageVariables.domain}/apigw/start_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": "Success" -} -``` - -## operate_task - -### 功能描述 -操作任务,如开始、暂停、继续、终止等 - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务ID | -| action | string | 是 | 操作类型 | - -##### action 说明 -``` -CATEGORY = { - "start": u"开始任务" # 等效于调用 start_task 接口 - "pause": u"暂停任务,任务处于执行状态时调用" - "resume": u"继续任务,任务处于暂停状态时调用" - "revoke": u"终止任务" -} -``` - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时返回数据 | -| message | string | result=false 时错误信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "action": "start" -} -response = requests.post("http://{stageVariables.domain}/apigw/operate_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "action": "start" -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": "Success" -} -``` - -## get_task_status - -### 功能描述 -查询任务或任务节点执行状态 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务或节点ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| state | string | 任务或节点状态,详细信息见下面说明 | -| id | string | 任务或节点执行态ID,不等于 task_id | -| skip | bool | 是否跳过执行 | -| retry | int | 重试和跳过总次数 | -| start_time | string | 任务或节点执行开始时间 | -| finish_time | string | 任务或节点执行结束时间 | -| children | dict | 任务节点执行详情,详细信息见下面说明 | - - -##### data[state] 说明 -```python -STATE = { - "CREATED": u"未执行" - "RUNNING": u"执行中" - "FAILED": u"失败" - "SUSPENDED": u"暂停" - "REVOKED": u"已撤销" - "FINISHED": u"已完成" -} -``` - -##### data[children] 说明 - -KEY: -任务节点 执行态ID - -VALUE: -同 data 格式 - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_status/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_status(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "retry": 0, - "name": "", - "finish_time": "", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": { - "62d4784e20483f1585149ce90ed954c9": { - "retry": 0, - "name": "", - "finish_time": "2018-04-26 16:08:34 +0800", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": {}, - "state": "FINISHED", - "version": "7447cc2801b630f497768493c02fb488", - "id": "62d4784e20483f1585149ce90ed954c9", - "loop": 1 - }, - "e8b128dff46637368b9b1bd921abc14e": { - "retry": 0, - "name": "", - "finish_time": "2018-04-26 16:08:46 +0800", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": {}, - "state": "FAILED", - "version": "914d35fe7d143c2186e6d3532870b37d", - "id": "e8b128dff46637368b9b1bd921abc14e", - "loop": 1 - } - }, - "state": "FAILED", - "version": "", - "id": "5a1622f9f43e3429acb604e18dbd100a", - "loop": 1 - } -} -``` - - -## get_task_detail - -### 资源描述 -查询任务执行详情 - -### 输入参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务 ID | -| task_id | string | 是 | 任务 ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| id | int | 任务 ID,即 task_id | -| name | string | 任务名称 | -| business_id | int | 所属业务 ID | -| business_name | string | 所属业务名称 | -| template_id | int | 创建任务所用的流程模板 ID | -| create_time | string | 任务创建时间 | -| create_method | string | 任务创建方式 | -| start_time | string | 任务执行时间 | -| finish_time | string | 任务完成时间 | -| elapsed_time | int | 任务执行耗时(秒) | -| creator | string | 任务创建人 | -| executor | string | 任务执行人 | -| constants | dict | 输入的全局变量,详情见下面说明 | -| outputs | list | 任务输出参数,详情见下面说明 | - -###### data[constants] 说明 -KEY: -全局变量 KEY,${key} 格式 - -VALUE: -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - -###### data[outputs][] 说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| name | string | 输出字段 | -| value | string、int、bool、dict、list | 输出参数值 | -| key | string | 输出参数 KEY | -| preset | bool | 是否是标准插件定义中预设输出变量 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_detail/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_detail(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "creator": "admin", - "outputs": [ - { - "value": "1", - "key": "${job_script_type}", - "name": "脚本类型" - }, - { - "value": "127.0.0.1", - "key": "${IP}", - "name": "IP" - }, - { - "value": "0", - "key": "${EXIT}", - "name": "EXIT" - } - ], - "start_time": "2019-01-17 04:13:08", - "business_id": 2, - "create_time": "2019-01-17 04:13:03", - "business_name": "蓝鲸", - "id": 10, - "constants": { - "${IP}": { - "source_tag": "var_ip_picker.ip_picker", - "source_info": {}, - "name": "IP", - "index": 2, - "custom_type": "ip", - "value": { - "var_ip_custom_value": "127.0.0.1", - "var_ip_method": "custom", - "var_ip_tree": [] - }, - "show_type": "show", - "source_type": "custom", - "validator": [], - "key": "${IP}", - "desc": "", - "validation": "", - "is_meta": false - }, - "${job_script_type}": { - "source_tag": "job_fast_execute_script.job_script_type", - "source_info": { - "node554316ea019a341f8c28cc6a7da9": [ - "job_script_type" - ] - }, - "name": "脚本类型", - "index": 0, - "custom_type": "", - "value": "1", - "show_type": "show", - "source_type": "component_inputs", - "key": "${job_script_type}", - "validation": "", - "desc": "" - }, - "${EXIT}": { - "source_tag": "", - "source_info": {}, - "name": "EXIT", - "index": 1, - "custom_type": "input", - "value": "0", - "show_type": "show", - "source_type": "custom", - "validator": [], - "key": "${EXIT}", - "validation": "^.+$", - "desc": "" - } - }, - "create_method": "app", - "elapsed_time": 7, - "ex_data": "", - "instance_name": "job输出变量测试_20190117121300", - "end_time": "2019-01-17 04:13:15", - "executor": "admin", - "template_id": "266" - }, - "result": true -} -``` - - -## get_task_node_detail - -### 资源描述 -查询任务节点执行详情 - -### 输入参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 所属业务ID | -| task_id | string | 是 | 任务ID | -| act_id | string | 是 | 节点 ID | -| component_code| string | 否 | 标准插件编码,请求标准插件执行详情必填 | -| subprocess_stack| string | 否 | 子流程堆栈,json 格式的列表 | - -### 返回结果说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 成功与否 | -| data | dict | result=true 时返回数据,详情见下面说明 | -| message | string | result=false 时错误信息 | - -#### data说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| id | string | 节点 ID | -| start_time | string | 最后一次执行开始时间 | -| finish_time | string | 最后一次执行结束时间 | -| elapsed_time | int | 最后一次执行耗时,单位秒 | -| state | string | 最后一次执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | -| skip | bool | 是否手动跳过 | -| retry | int | 重试次数 | -| inputs | dict | 输入参数,key:value格式 | -| outputs | list | 输出参数,详情见下面说明 | -| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | -| histories | list | 重试记录详情,详情见下面说明 | - -##### outputs[]说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| name | string | 输出字段 | -| value | string、int、bool、dict、list | 输出参数值 | -| key | string | 输出参数 KEY | -| preset | bool | 是否是标准插件定义中预设输出变量 | - - -##### histories[]说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_time | string | 执行开始时间 | -| finish_time | string | 执行结束时间 | -| elapsed_time | int | 执行耗时 | -| state | string | 执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | -| skip | bool | 是否手动跳过 | -| retry | int | 重试次数 | -| histories | list | 重试记录详情,详情见下面说明 | -| inputs | dict | 输入参数,key:value格式 | -| outputs | dict | 输出参数,key:value格式 | -| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "bk_biz_id": "2", - "task_id": "10", - "node_id": "node0df0431f8f553925af01a94854bd" - "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", - "component_code": "job_fast_execute_script", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_node_detail/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "node_id": "node0df0431f8f553925af01a94854bd" - "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", - "component_code": "job_fast_execute_script", -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_node_detail(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "inputs": { - "job_account": "root", - "job_script_timeout": "", - "job_script_source": "manual", - "job_script_list_public": "", - "job_content": "echo 0\nexit 0", - "job_script_type": "1", - "job_script_param": "", - "job_script_list_general": "", - "job_ip_list": "127.0.0.1" - }, - "retry": 0, - "name": "", - "finish_time": "2019-01-17 22:02:46 +0800", - "skip": false, - "start_time": "2019-01-17 22:02:37 +0800", - "children": {}, - "histories": [], - "ex_data": null, - "elapsed_time": 9, - "outputs": [ - { - "value": 407584, - "name": "JOB任务ID", - "key": "job_inst_id" - }, - { - "value": "", - "name": "JOB任务链接", - "key": "job_inst_url" - }, - { - "value": true, - "name": "执行结果", - "key": "_result" - } - ], - "state": "FINISHED", - "version": "23ac8c29f62b3337aafcf1f538d277f8", - "error_ignorable": false, - "id": "node0df0431f8f553925af01a94854bd", - "loop": 1 - }, - "result": true -} -``` - - -## query_task_count - -### 功能描述 -查询任务实例分类统计总数 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| group_by | string | 是 | 分类统计维度,status:按任务状态(未执行、执行中、已完成)统计,category:按照任务类型统计,flow_type:按照流程类型统计,create_method:按照创建方式 | -| conditions | dict | 否 | 任务过滤条件 | - - -##### conditions 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| template_id | string | 创建任务的模板ID | -| name | string | 任务名称 | -| creator | string | 创建人 | -| create_time__gte | string | 任务创建时间起始时间 | -| create_time__lte | string | 任务创建时间截止时间 | -| executor | string | 执行人 | -| start_time__gte | string | 任务执行时间起始时间 | -| start_time__lte | string | 任务执行时间截止时间 | -| is_started | bool | 任务是否启动 | -| is_finished | bool | 任务是否完成 | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| total | int | 按照过滤条件获取的任务总数 | -| groups | list | 按照过滤条件分类分类统计详情 | - -##### groups[] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| code | string | 分类统计类型编码 | -| name | string | 分类统计类型名称 | -| value | string | 当前分类任务数量 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "conditions": {"create_time__lte": "2018-07-12 10:00:00", "is_started": True}, - "group_by": "flow_type" -} -response = requests.post("http://{stageVariables.domain}/apigw/query_task_count/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "conditions": {"create_time__lte": "2018-07-12 10:00:00", "is_started": True}, - "group_by": "flow_type" -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", -} -result = client.api.query_task_count(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "total": 180, - "groups": [ - { - "code": "common", - "name": "默认任务流程", - "value": 166 - }, - { - "code": "common_func", - "name": "职能化任务流程", - "value": 14 - } - ] - }, - "result": true -} -``` - - -## get_periodic_task_list - -### 功能描述 -获取某个业务下所有的周期任务 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务ID | -| template_id | string | 用于创建该任务的模板ID | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_periodic_task_list/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", -} -result = client.api.get_periodic_task_list(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": [ - { - "cron": "*/1 15 * * * (m/h/d/dM/MY)", - "total_run_count": 1, - "name": "from api 3", - "creator": "admin", - "last_run_at": "2018-11-28 15:57:01 +0900", - "enabled": false, - "id": 11, - "template_id": "2" - }, - { - "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "from api 1", - "creator": "admin", - "last_run_at": "", - "enabled": false, - "id": 6, - "template_id": "2" - }, - { - "cron": "*/5 * * * * (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "定时", - "creator": "admin", - "last_run_at": "", - "enabled": false, - "id": 4, - "template_id": "2" - } - ], - "result": true -} -``` - - -## get_periodic_task_info - -### 功能描述 -获取某个周期任务的详情 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务 ID | -| template_id | string | 用于创建该任务的模板 ID | -| form | dict | 该周期任务的参数表达对象 | -| pipeline_tree | dict | 该周期任务的实例树 | - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[form], data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_periodic_task_info/8/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "task_id": "8", - "bk_biz_id": "2", -} -result = client.api.get_periodic_task_info(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "定时2", - "form": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "2", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "creator": "admin", - "pipeline_tree": { - "activities": { - "nodea5c396a3ef0f9f3cd7d4d7695f78": { - "outgoing": "linef69b59d165fb8c0061b46588c515", - "incoming": "linecf7b7f10c87187a88b72c5f91177", - "name": "暂停", - "error_ignorable": false, - "component": { - "code": "pause_node", - "data": {} - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "loop": {} - }, - "node76393dcfedcf73dbc726f1c4786d": { - "outgoing": "linecf7b7f10c87187a88b72c5f91177", - "incoming": "linecd597f19606c1455d661f71a582d", - "name": "定时", - "error_ignorable": false, - "component": { - "code": "sleep_timer", - "data": { - "bk_timing": { - "hook": true, - "value": "${bk_timing}" - } - } - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "node76393dcfedcf73dbc726f1c4786d", - "loop": {} - } - }, - "end_event": { - "incoming": "linef69b59d165fb8c0061b46588c515", - "outgoing": "", - "type": "EmptyEndEvent", - "id": "node375320830be9c46cd89f4069857d", - "name": "" - }, - "outputs": [], - "flows": { - "linef69b59d165fb8c0061b46588c515": { - "is_default": false, - "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "id": "linef69b59d165fb8c0061b46588c515", - "target": "node375320830be9c46cd89f4069857d" - }, - "linecd597f19606c1455d661f71a582d": { - "is_default": false, - "source": "node4e87796ddd76b0d59337b08f385d", - "id": "linecd597f19606c1455d661f71a582d", - "target": "node76393dcfedcf73dbc726f1c4786d" - }, - "linecf7b7f10c87187a88b72c5f91177": { - "is_default": false, - "source": "node76393dcfedcf73dbc726f1c4786d", - "id": "linecf7b7f10c87187a88b72c5f91177", - "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" - } - }, - "gateways": {}, - "line": [ - { - "source": { - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "arrow": "Right" - }, - "target": { - "id": "node375320830be9c46cd89f4069857d", - "arrow": "Left" - }, - "id": "linef69b59d165fb8c0061b46588c515" - }, - { - "source": { - "id": "node4e87796ddd76b0d59337b08f385d", - "arrow": "Right" - }, - "id": "linecd597f19606c1455d661f71a582d", - "target": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Left" - } - }, - { - "source": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Right" - }, - "target": { - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "arrow": "Left" - }, - "id": "linecf7b7f10c87187a88b72c5f91177" - } - ], - "start_event": { - "incoming": "", - "outgoing": "linecd597f19606c1455d661f71a582d", - "type": "EmptyStartEvent", - "id": "node4e87796ddd76b0d59337b08f385d", - "name": "" - }, - "constants": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "2", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "location": [ - { - "stage_name": "步骤1", - "name": "暂停", - "y": 133, - "x": 631, - "type": "tasknode", - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" - }, - { - "y": 150, - "x": 80, - "type": "startpoint", - "id": "node4e87796ddd76b0d59337b08f385d" - }, - { - "y": 149, - "x": 1092, - "type": "endpoint", - "id": "node375320830be9c46cd89f4069857d" - }, - { - "stage_name": "步骤1", - "name": "定时", - "y": 133, - "x": 300, - "type": "tasknode", - "id": "node76393dcfedcf73dbc726f1c4786d" - } - ] - }, - "last_run_at": "", - "enabled": true, - "id": 5, - "template_id": "2" - }, - "result": true -} -``` - -## create_periodic_task - -### 功能描述 -创建一个周期任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| template_id | string | 是 | 用于创建周期任务的模板ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| name | string | 是 | 要创建的周期任务名称 | -| cron | dict | 是 | 要创建的周期任务调度策略 | -| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | -| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | - -##### constants 说明 -KEY:变量 KEY,${key} 格式 - -VALUE:变量值 - -#### cron 说明 - - | 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| minute | string | 否 | 分,默认为 * | -| hour | string | 否 | 时,默认为 * | -| day_of_week | string | 否 | 一周内的某些天,默认为 * | -| day_of_month | string | 否 | 一个月中的某些天,默认为 * | -| month_of_year | string | 否 | 一年中的某些月份,默认为 * | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务 ID | -| template_id | string | 用于创建该任务的模板 ID | -| form | dict | 该周期任务的参数表达对象 | -| pipeline_tree | dict | 该周期任务的实例树 | - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[form], data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs|component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs|component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "name": "from api 3", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, - "constants": {"${bk_timing}": "100"}, - "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] -} -response = requests.get("http://{stageVariables.domain}/apigw/create_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "name": "from api 3", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, - "constants": {"${bk_timing}": "100"}, - "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] -} -# 路径参数 -path_kwargs = { - "template_id": "1", - "bk_biz_id": "2", -} -result = client.api.create_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "cron": "*/1 15 * * * (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "from api 3", - "form": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "100", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "creator": "admin", - "pipeline_tree": { - "activities": { - "node76393dcfedcf73dbc726f1c4786d": { - "outgoing": "linecf7b7f10c87187a88b72c5f91177", - "incoming": "linecd597f19606c1455d661f71a582d", - "name": "定时", - "error_ignorable": false, - "component": { - "code": "sleep_timer", - "data": { - "bk_timing": { - "hook": true, - "value": "${bk_timing}" - } - } - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "node76393dcfedcf73dbc726f1c4786d", - "loop": {} - } - }, - "end_event": { - "incoming": "linecf7b7f10c87187a88b72c5f91177", - "outgoing": "", - "type": "EmptyEndEvent", - "id": "node375320830be9c46cd89f4069857d", - "name": "" - }, - "outputs": [], - "flows": { - "linecd597f19606c1455d661f71a582d": { - "is_default": false, - "source": "node4e87796ddd76b0d59337b08f385d", - "id": "linecd597f19606c1455d661f71a582d", - "target": "node76393dcfedcf73dbc726f1c4786d" - }, - "linecf7b7f10c87187a88b72c5f91177": { - "is_default": false, - "source": "node76393dcfedcf73dbc726f1c4786d", - "id": "linecf7b7f10c87187a88b72c5f91177", - "target": "node375320830be9c46cd89f4069857d" - } - }, - "gateways": {}, - "line": [ - { - "source": { - "id": "node4e87796ddd76b0d59337b08f385d", - "arrow": "Right" - }, - "id": "linecd597f19606c1455d661f71a582d", - "target": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Left" - } - }, - { - "source": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Right" - }, - "target": { - "id": "node375320830be9c46cd89f4069857d", - "arrow": "Left" - }, - "id": "linecf7b7f10c87187a88b72c5f91177" - } - ], - "start_event": { - "incoming": "", - "outgoing": "linecd597f19606c1455d661f71a582d", - "type": "EmptyStartEvent", - "id": "node4e87796ddd76b0d59337b08f385d", - "name": "" - }, - "constants": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "100", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "location": [ - { - "y": 150, - "x": 80, - "type": "startpoint", - "id": "node4e87796ddd76b0d59337b08f385d" - }, - { - "y": 149, - "x": 1092, - "type": "endpoint", - "id": "node375320830be9c46cd89f4069857d" - }, - { - "stage_name": "步骤1", - "name": "定时", - "y": 133, - "x": 300, - "type": "tasknode", - "id": "node76393dcfedcf73dbc726f1c4786d" - } - ] - }, - "last_run_at": "", - "enabled": false, - "id": 11, - "template_id": 2 - }, - "result": true -} -``` - -## set_periodic_task_enabled - -### 功能描述 -设置一个周期任务是否激活 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| enabled | bool | 否 | 该周期任务是否激活,不传则为 false | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| enabled | bool | 当前周期任务是否已经激活 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "enabled": False -} -response = requests.get("http://{stageVariables.domain}/apigw/set_periodic_task_enabled/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "enabled": False -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.set_periodic_task_enabled(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "enabled": false - }, - "result": true -} -``` - -## modify_cron_for_periodic_task - -### 功能描述 -修改一个周期任务的调度策略 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| cron | dict | 否 | 调度策略对象 | - -#### cron 说明 - - | 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| minute | string | 否 | 分,默认为 * | -| hour | string | 否 | 时,默认为 * | -| day_of_week | string | 否 | 一周内的某些天,默认为 * | -| day_of_month | string | 否 | 一个月中的某些天,默认为 * | -| month_of_year | string | 否 | 一年中的某些月份,默认为 * | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 调度策略表达式 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, -} -response = requests.get("http://{stageVariables.domain}/apigw/modify_cron_for_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.modify_cron_for_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "cron": "*/1 15 * * * (m/h/d/dM/MY)" - }, - "result": true -} -``` - -## modify_constants_for_periodic_task - -### 功能描述 -修改一个周期任务的全局变量 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| constants | dict | 否 | 全局参数设置 | - -#### constants 说明 - -KEY:变量 KEY,${key} 格式 - -VALUE:变量值 - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -KEY: -全局变量 KEY,${key} 格式 - -VALUE: -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "constants": {"${bk_timing}": "15"} -} -response = requests.get("http://{stageVariables.domain}/apigw/modify_constants_for_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "constants": {"${bk_timing}": "15"} -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.modify_constants_for_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "custom_type": "", - "index": 0, - "value": "15", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "result": true -} -``` diff --git a/gcloud/apigw/decorators.py b/gcloud/apigw/decorators.py index 65262774db..aaa330cf38 100644 --- a/gcloud/apigw/decorators.py +++ b/gcloud/apigw/decorators.py @@ -27,7 +27,7 @@ from gcloud.tasktmpl3.models import TaskTemplate from gcloud.conf import settings -if not sys.argv[1:2] == ['test'] and settings.RUN_VER == 'clouds': +if not sys.argv[1:2] == ['test'] and settings.USE_BK_OAUTH: try: from bkoauth.decorators import apigw_required except ImportError: @@ -36,6 +36,7 @@ apigw_required = None WHITE_APPS = {'bk_fta', 'bk_bcs'} +WHETHER_PREPARE_BIZ = getattr(settings, 'WHETHER_PREPARE_BIZ_IN_API_CALL', True) def check_white_apps(request): @@ -172,7 +173,7 @@ def decorator(view_func): @wraps(view_func, assigned=available_attrs(view_func)) def _wrapped_view(request, *args, **kwargs): # 应用白名单,免用户校验 - if is_request_from_trust_apps_and_inject_user(request, prepare_biz=True): + if is_request_from_trust_apps_and_inject_user(request, prepare_biz=WHETHER_PREPARE_BIZ): if not business_exist(kwargs): return JsonResponse({ 'result': False, @@ -180,7 +181,7 @@ def _wrapped_view(request, *args, **kwargs): }) return view_func(request, *args, **kwargs) - info = get_user_and_biz_info_and_inject_user(request, kwargs, prepare_biz=True) + info = get_user_and_biz_info_and_inject_user(request, kwargs, prepare_biz=WHETHER_PREPARE_BIZ) if not info['result']: return JsonResponse(info) user = info['data']['user'] diff --git a/gcloud/apigw/urls.py b/gcloud/apigw/urls.py index a59b8eab0a..8fb2e82356 100644 --- a/gcloud/apigw/urls.py +++ b/gcloud/apigw/urls.py @@ -32,4 +32,5 @@ views.modify_constants_for_periodic_task), url(r'^get_task_detail/(?P\d+)/(?P\d+)/$', views.get_task_detail), url(r'^get_task_node_detail/(?P\d+)/(?P\d+)/$', views.get_task_node_detail), + url(r'^node_callback/(?P\d+)/(?P\d+)/$', views.node_callback), ] diff --git a/gcloud/apigw/views.py b/gcloud/apigw/views.py index 084473c7d1..6cd84b50a1 100644 --- a/gcloud/apigw/views.py +++ b/gcloud/apigw/views.py @@ -24,6 +24,7 @@ from pipeline.exceptions import PipelineException from pipeline.engine import api as pipeline_api +from gcloud.conf import settings from gcloud.apigw.decorators import api_check_user_perm_of_business, api_check_user_perm_of_task from gcloud.apigw.schemas import APIGW_CREATE_PERIODIC_TASK_PARAMS, APIGW_CREATE_TASK_PARAMS from gcloud.core.models import Business @@ -33,9 +34,8 @@ from gcloud.commons.template.constants import PermNm from gcloud.tasktmpl3.models import TaskTemplate from gcloud.commons.template.models import CommonTemplate -from gcloud.conf import settings -if not sys.argv[1:2] == ['test'] and settings.RUN_VER == 'clouds': +if not sys.argv[1:2] == ['test'] and settings.USE_BK_OAUTH: try: from bkoauth.decorators import apigw_required except ImportError: @@ -206,7 +206,13 @@ def create_task(request, template_id, bk_biz_id): flow_type=params.get('flow_type', 'common'), current_flow='execute_task' if params.get('flow_type', 'common') == 'common' else 'func_claim', ) - return JsonResponse({'result': True, 'data': {'task_id': task.id}}) + return JsonResponse({ + 'result': True, + 'data': { + 'task_id': task.id, + 'task_url': task.url, + 'pipeline_tree': task.pipeline_tree + }}) @login_exempt @@ -598,6 +604,41 @@ def get_task_node_detail(request, task_id, bk_biz_id): node_id = request.GET.get('node_id') component_code = request.GET.get('component_code') - subprocess_stack = json.loads(request.GET.get('subprocess_stack', '[]')) + try: + subprocess_stack = json.loads(request.GET.get('subprocess_stack', '[]')) + except Exception: + return JsonResponse({ + 'result': False, + 'message': 'subprocess_stack is not a valid array json' + }) result = task.get_node_detail(node_id, component_code, subprocess_stack) return JsonResponse(result) + + +@login_exempt +@csrf_exempt +@require_POST +@apigw_required +@api_check_user_perm_of_business('manage_business') +def node_callback(request, task_id, bk_biz_id): + try: + params = json.loads(request.body) + except Exception: + return JsonResponse({ + 'result': False, + 'message': 'invalid param format' + }) + + try: + task = TaskFlowInstance.objects.get(id=task_id, business__cc_id=bk_biz_id) + except TaskFlowInstance.DoesNotExist: + message = 'task[id={task_id}] of business[bk_biz_id={bk_biz_id}] does not exist'.format( + task_id=task_id, + bk_biz_id=bk_biz_id) + logger.exception(message) + return JsonResponse({'result': False, 'message': message}) + + node_id = params.get('node_id') + callback_data = params.get('callback_data') + + return JsonResponse(task.callback(node_id, callback_data)) diff --git a/gcloud/conf/sites/community/ver_settings.py b/gcloud/conf/sites/community/ver_settings.py index 80dcb0c7aa..85c355adca 100644 --- a/gcloud/conf/sites/community/ver_settings.py +++ b/gcloud/conf/sites/community/ver_settings.py @@ -50,6 +50,10 @@ IMPORT_V1_TEMPLATE_FLAG = False +USE_BK_OAUTH = False + +WHETHER_PREPARE_BIZ_IN_API_CALL = True + RSA_PUB_KEY = "-----BEGIN PUBLIC KEY-----\\n" + \ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA2XZvbf++4M6YLSgS93kYJS34\\n" + \ "e2TZvq/s6r0yFDz0je38ekW02aH5efPTNijbJgHIbqfXzm8lBpmBbk9VlUHaJVyZ\\n" + \ diff --git a/gcloud/contrib/appmaker/admin.py b/gcloud/contrib/appmaker/admin.py index 999da77cae..6e3ecf85c1 100755 --- a/gcloud/contrib/appmaker/admin.py +++ b/gcloud/contrib/appmaker/admin.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/contrib/appmaker/models.py b/gcloud/contrib/appmaker/models.py index 03d63b05ef..cd967c1e84 100755 --- a/gcloud/contrib/appmaker/models.py +++ b/gcloud/contrib/appmaker/models.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/core/api_adapter/sites/open/user_info.py b/gcloud/core/api_adapter/sites/open/user_info.py index b79789ad69..b40f603731 100644 --- a/gcloud/core/api_adapter/sites/open/user_info.py +++ b/gcloud/core/api_adapter/sites/open/user_info.py @@ -15,7 +15,7 @@ def get_user_info(request): - client = settings.ESB_GET_CLIENT_BY_REQUEST(request) + client = settings.ESB_GET_CLIENT_BY_USER(request.user.username) auth = getattr(client, settings.ESB_AUTH_COMPONENT_SYSTEM) _get_user_info = getattr(auth, settings.ESB_AUTH_GET_USER_INFO) user_info = _get_user_info({}) diff --git a/gcloud/core/apps.py b/gcloud/core/apps.py index 00e218dbd4..58f9a1cd89 100644 --- a/gcloud/core/apps.py +++ b/gcloud/core/apps.py @@ -17,7 +17,6 @@ from django.apps import AppConfig from django.conf import settings - logger = logging.getLogger('root') @@ -35,7 +34,8 @@ def ready(self): 'port': EnvironmentVariables.objects.get_var('BKAPP_REDIS_PORT'), 'password': EnvironmentVariables.objects.get_var('BKAPP_REDIS_PASSWORD'), 'service_name': EnvironmentVariables.objects.get_var('BKAPP_REDIS_SERVICE_NAME'), - 'mode': EnvironmentVariables.objects.get_var('BKAPP_REDIS_MODE') + 'mode': EnvironmentVariables.objects.get_var('BKAPP_REDIS_MODE'), + 'db': EnvironmentVariables.objects.get_var('BKAPP_REDIS_DB'), } except Exception: logger.error(traceback.format_exc()) diff --git a/gcloud/core/command.py b/gcloud/core/command.py index 41141759be..5352cd1c3e 100644 --- a/gcloud/core/command.py +++ b/gcloud/core/command.py @@ -1,4 +1,4 @@ -# coding=utf-8 +# -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available. diff --git a/gcloud/taskflow3/api.py b/gcloud/taskflow3/api.py index ccd75d396a..a567cd5bcf 100644 --- a/gcloud/taskflow3/api.py +++ b/gcloud/taskflow3/api.py @@ -10,22 +10,22 @@ 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 copy import json import logging import traceback -from cryptography.fernet import Fernet +from cryptography.fernet import Fernet from django.conf import settings from django.http import JsonResponse, HttpResponseForbidden from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_GET, require_POST +from blueapps.account.decorators import login_exempt from pipeline.engine import api as pipeline_api from pipeline.engine import exceptions, states from pipeline.engine.models import PipelineModel -from blueapps.account.decorators import login_exempt from gcloud.taskflow3.constants import TASK_CREATE_METHOD from gcloud.taskflow3.models import TaskFlowInstance from gcloud.commons.template.models import CommonTemplate @@ -215,12 +215,18 @@ def preview_task_tree(request, biz_cc_id): return HttpResponseForbidden() exclude_task_nodes_id = json.loads(request.POST.get('exclude_task_nodes_id', '[]')) pipeline_tree = template.get_pipeline_tree_by_version(version) + template_constants = copy.deepcopy(pipeline_tree['constants']) try: TaskFlowInstance.objects.preview_pipeline_tree_exclude_task_nodes(pipeline_tree, exclude_task_nodes_id) except Exception as e: logger.exception(e) return JsonResponse({'result': False, 'message': e.message}) - return JsonResponse({'result': True, 'data': {'pipeline_tree': pipeline_tree}}) + constants_not_referred = {key: value for key, value in template_constants.items() + if key not in pipeline_tree['constants']} + return JsonResponse({ + 'result': True, + 'data': {'pipeline_tree': pipeline_tree, 'constants_not_referred': constants_not_referred} + }) @require_POST @@ -304,11 +310,7 @@ def node_callback(request, token): 'message': 'invalid request body' }, status=400) - result, message = TaskFlowInstance.objects.callback(node_id, callback_data) - return JsonResponse({ - 'result': result, - 'message': message - }) + return JsonResponse(TaskFlowInstance.objects.callback(node_id, callback_data)) def get_taskflow_root_context(request, taskflow_id): diff --git a/gcloud/taskflow3/models.py b/gcloud/taskflow3/models.py index 80ea4c2fe3..5ac1e9f05e 100644 --- a/gcloud/taskflow3/models.py +++ b/gcloud/taskflow3/models.py @@ -745,9 +745,15 @@ def callback(self, act_id, data): try: result = pipeline_api.activity_callback(activity_id=act_id, callback_data=data) except Exception as e: - return False, e.message + return { + 'result': False, + 'message': e.message + } - return result.result, result.message + return { + 'result': result.result, + 'message': result.message + } class TaskFlowInstance(models.Model): @@ -956,7 +962,8 @@ def get_node_data(self, node_id, component_code=None, subprocess_stack=None): logger.exception(message) outputs = {'ex_data': message} else: - outputs_data = outputs.get('outputs', {}) + # for some special empty case e.g. '' + outputs_data = outputs.get('outputs') or {} # 在标准插件定义中的预设输出参数 archived_keys = [] for outputs_item in outputs_format: @@ -1093,6 +1100,10 @@ def task_action(self, action, username): logger.exception(message) return {'result': False, 'message': message} + except TypeError: + logger.exception(traceback.format_exc()) + return {'result': False, 'message': 'redis connection error, check redis configuration please'} + except Exception as e: message = u"task[id=%s] action failed:%s" % (self.id, e) logger.exception(message) @@ -1231,7 +1242,9 @@ def get_task_detail(self): 'start_time': format_datetime(self.start_time), 'finish_time': format_datetime(self.finish_time), 'executor': self.executor, - 'elapsed_time': self.elapsed_time + 'elapsed_time': self.elapsed_time, + 'pipeline_tree': self.pipeline_tree, + 'task_url': self.url } exec_data = self.pipeline_instance.execution_data # inputs data @@ -1251,3 +1264,12 @@ def get_task_detail(self): 'ex_data': outputs.get('ex_data', '') }) return data + + def callback(self, act_id, data): + if not self.has_node(act_id): + return { + 'result': False, + 'message': 'task[{tid}] does not have node[{nid}]'.format(tid=self.id, nid=act_id) + } + + return TaskFlowInstance.objects.callback(act_id, data) diff --git a/gcloud/tasktmpl3/api.py b/gcloud/tasktmpl3/api.py index 2c771e950d..3e276ad1c8 100644 --- a/gcloud/tasktmpl3/api.py +++ b/gcloud/tasktmpl3/api.py @@ -180,7 +180,7 @@ def save_perms(request, biz_cc_id): return JsonResponse(ctx) -# TODO: 该方法已迁移至 code/api/get_basic_info ,等待前端完成迁移后删除 +# TODO: 该方法已迁移至 core/api/get_basic_info ,等待前端完成迁移后删除 @require_GET def get_business_basic_info(request, biz_cc_id): """ diff --git a/gcloud/tasktmpl3/sites/open/import_data.py b/gcloud/tasktmpl3/sites/open/import_data.py index a86be44fcb..1df0c10cdd 100644 --- a/gcloud/tasktmpl3/sites/open/import_data.py +++ b/gcloud/tasktmpl3/sites/open/import_data.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py b/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py index 42bf5681bd..5f9fb1fd84 100644 --- a/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py +++ b/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tasktmpl3/sites/utils.py b/gcloud/tasktmpl3/sites/utils.py index 29c68cc8e8..60d00d09c6 100644 --- a/gcloud/tasktmpl3/sites/utils.py +++ b/gcloud/tasktmpl3/sites/utils.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tests/apigw/test_apigw.py b/gcloud/tests/apigw/test_apigw.py index 77ab4589ef..befbba570e 100644 --- a/gcloud/tests/apigw/test_apigw.py +++ b/gcloud/tests/apigw/test_apigw.py @@ -18,8 +18,7 @@ import logging import jsonschema -from django.test import TestCase -from django.test import Client +from django.test import TestCase, Client from pipeline.exceptions import PipelineException @@ -57,8 +56,14 @@ def wrapper(*args, **kwargs): TEST_APP_CODE = 'app_code' TEST_TEMPLATE_ID = '1' # do not change this to non number TEST_TASKFLOW_ID = '2' # do not change this to non number +TEST_TASKFLOW_URL = 'url' +TEST_TASKFLOW_PIPELINE_TREE = 'pipeline_tree' TEST_PERIODIC_TASK_ID = '3' # do not change to this non number TEST_DATA = 'data' +TEST_NODE_ID = 'node_id' +TEST_CALLBACK_DATA = 'callback_data' +TEST_COMPONENT_CODE = 'component_code' +TEST_SUBPROCESS_STACK = '[1, 2, 3]' class APITest(TestCase): @@ -78,6 +83,9 @@ def setUpClass(cls): cls.SET_PERIODIC_TASK_ENABLED_URL = '/apigw/set_periodic_task_enabled/{task_id}/{bk_biz_id}/' cls.MODIFY_PERIODIC_TASK_CRON_URL = '/apigw/modify_cron_for_periodic_task/{task_id}/{bk_biz_id}/' cls.MODIFY_PERIODIC_TASK_CONSTANTS_URL = '/apigw/modify_constants_for_periodic_task/{task_id}/{bk_biz_id}/' + cls.GET_TASK_DETAIL = '/apigw/get_task_detail/{task_id}/{bk_biz_id}/' + cls.GET_TASK_NODE_DETAIL = '/apigw/get_task_node_detail/{task_id}/{bk_biz_id}/' + cls.NODE_CALLBACK = '/apigw/node_callback/{task_id}/{bk_biz_id}/' super(APITest, cls).setUpClass() @@ -296,15 +304,16 @@ def test_get_template_info__for_common_template_does_not_exists(self): @mock.patch(TASKINSTANCE_CREATE, MagicMock(return_value=MockTaskFlowInstance(id=TEST_TASKFLOW_ID))) @mock.patch(APIGW_VIEW_JSON_SCHEMA_VALIDATE, MagicMock()) def test_create_task__success(self): - pt1 = MockPipelineTemplate(id=1, - name='pt1') + pt1 = MockPipelineTemplate(id=1, name='pt1') tmpl = MockTaskTemplate(id=1, pipeline_template=pt1) biz = MockBusiness(cc_id=TEST_BIZ_CC_ID, cc_name=TEST_BIZ_CC_NAME) with mock.patch(BUSINESS_GET, MagicMock(return_value=biz)): with mock.patch(TASKTEMPLATE_SELECT_RELATE, MagicMock(return_value=MockQuerySet(get_result=tmpl))): - assert_data = {'task_id': TEST_TASKFLOW_ID} + assert_data = {'task_id': TEST_TASKFLOW_ID, + 'task_url': TEST_TASKFLOW_URL, + 'pipeline_tree': TEST_TASKFLOW_PIPELINE_TREE} response = self.client.post(path=self.CREATE_TASK_URL.format(template_id=TEST_TEMPLATE_ID, bk_biz_id=TEST_BIZ_CC_ID), data=json.dumps({'name': 'name', @@ -345,7 +354,9 @@ def test_create_task__success(self): tmpl = MockCommonTemplate(id=1, pipeline_template=pt1) with mock.patch(COMMONTEMPLATE_SELECT_RELATE, MagicMock(return_value=MockQuerySet(get_result=tmpl))): - assert_data = {'task_id': TEST_TASKFLOW_ID} + assert_data = {'task_id': TEST_TASKFLOW_ID, + 'task_url': TEST_TASKFLOW_URL, + 'pipeline_tree': TEST_TASKFLOW_PIPELINE_TREE} response = self.client.post(path=self.CREATE_TASK_URL.format(template_id=TEST_TEMPLATE_ID, bk_biz_id=TEST_BIZ_CC_ID), data=json.dumps({'name': 'name', @@ -941,3 +952,97 @@ def test_modify_constants_for_periodic_task__modify_constants_raise(self): self.assertFalse(data['result']) self.assertTrue('message' in data) + + def test_get_task_detail__success(self): + mock_taskflow = MockTaskFlowInstance(get_task_detail_return=TEST_DATA) + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_taskflow)): + assert_data = TEST_DATA + response = self.client.get(path=self.GET_TASK_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID)) + + data = json.loads(response.content) + + self.assertTrue(data['result']) + self.assertEqual(data['data'], assert_data) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_get_task_detail__success__taskflow_does_not_exists(self): + response = self.client.get(path=self.GET_TASK_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID)) + + data = json.loads(response.content) + + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_get_task_node_detail__success(self): + mock_taskflow = MockTaskFlowInstance(get_node_detail_return={'result': True, 'data': TEST_DATA}) + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_taskflow)): + assert_data = TEST_DATA + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': TEST_SUBPROCESS_STACK}) + + data = json.loads(response.content) + + self.assertTrue(data['result']) + self.assertEqual(data['data'], assert_data) + mock_taskflow.get_node_detail.assert_called_once_with(TEST_NODE_ID, + TEST_COMPONENT_CODE, + json.loads(TEST_SUBPROCESS_STACK)) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_get_task_node_detail__taskflow_doest_not_exist(self): + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': TEST_SUBPROCESS_STACK}) + + data = json.loads(response.content) + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_get_task_node_detail__with_invalid_subprocess_stack(self): + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': 'abcdefg'}) + + data = json.loads(response.content) + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_node_callback__success(self): + mock_instance = MockTaskFlowInstance() + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_instance)): + response = self.client.post(path=self.NODE_CALLBACK.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data=json.dumps({ + 'node_id': TEST_NODE_ID, + 'callback_data': TEST_CALLBACK_DATA + }), + content_type='application/json') + + data = json.loads(response.content) + + self.assertTrue(data['result']) + mock_instance.callback.assert_called_once_with(TEST_NODE_ID, TEST_CALLBACK_DATA) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_node_callback__taskflow_does_not_exists(self): + response = self.client.post(path=self.NODE_CALLBACK.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data=json.dumps({ + 'node_id': TEST_NODE_ID, + 'callback_data': TEST_CALLBACK_DATA + }), + content_type='application/json') + + data = json.loads(response.content) + + self.assertFalse(data['result']) + self.assertTrue('message' in data) diff --git a/gcloud/tests/mock.py b/gcloud/tests/mock.py index b22264e1e8..989c062035 100644 --- a/gcloud/tests/mock.py +++ b/gcloud/tests/mock.py @@ -19,6 +19,18 @@ from django.utils.timezone import now +class MockRequest(object): + def __init__(self, method, data): + self.method = method + setattr(self, method, data) + self.user = MagicMock() + + +class MockJsonResponse(object): + def __call__(self, dct): + return dct + + class MockBusiness(object): def __init__(self, **kwargs): self.cc_id = kwargs.get('cc_id', 'cc_id') @@ -42,7 +54,9 @@ def __init__(self, **kwargs): self.name = kwargs.get('name', 'name') self.category = kwargs.get('category', 'category') self.pipeline_template = kwargs.get('pipeline_template', MockPipelineTemplate()) - self.pipeline_tree = {'line': 'line', 'location': 'location', 'activities': []} + self.pipeline_tree = kwargs.get('pipeline_tree', + {'line': 'line', 'location': 'location', 'activities': []}) + self.get_pipeline_tree_by_version = MagicMock(return_value=self.pipeline_tree) class MockTaskTemplate(MockBaseTemplate): @@ -62,6 +76,13 @@ def __init__(self, **kwargs): 'side_effect': kwargs.get('get_status_raise')}) self.format_pipeline_status = MagicMock(**{'return_value': kwargs.get('format_pipeline_status_return'), 'side_effect': kwargs.get('format_pipeline_status_raise')}) + self.url = kwargs.get('url', 'url') + self.pipeline_tree = kwargs.get('pipeline_tree', 'pipeline_tree') + self.callback = MagicMock(return_value=kwargs.get('callback_return', {'result': True, + 'message': 'success'})) + self.get_task_detail = MagicMock(return_value=kwargs.get('get_task_detail_return', 'task_detail')) + self.get_node_detail = MagicMock(return_value=kwargs.get('get_node_detail_return', {'result': True, + 'data': 'data'})) class MockPeriodicTask(object): diff --git a/gcloud/tests/mock_settings.py b/gcloud/tests/mock_settings.py index d858a86308..3c37301c32 100644 --- a/gcloud/tests/mock_settings.py +++ b/gcloud/tests/mock_settings.py @@ -25,6 +25,9 @@ TASKINSTANCE_FORMAT_STATUS = 'gcloud.taskflow3.models.TaskFlowInstance.format_pipeline_status' TASKINSTANCE_EXTEN_CLASSIFIED_COUNT = 'gcloud.taskflow3.models.TaskFlowInstance.objects.extend_classified_count' TASKINSTANCE_PREVIEW_TREE = 'gcloud.taskflow3.models.TaskFlowInstance.objects.preview_pipeline_tree_exclude_task_nodes' +TASKINSTANCE_OBJECTS_CALLBACK = 'gcloud.taskflow3.models.TaskFlowInstance.objects.callback' +TASKINSTANCE_CALLBACK = 'gcloud.taskflow3.models.TaskFlowInstance.callback' +TASKINSTANCE_HAS_NODE = 'gcloud.taskflow3.models.TaskFlowInstance.has_node' PERIODIC_TASK_FILTER = 'gcloud.periodictask.models.PeriodicTask.objects.filter' PERIODIC_TASK_GET = 'gcloud.periodictask.models.PeriodicTask.objects.get' diff --git a/gcloud/tests/taskflow3/models/test_taskflow_instance.py b/gcloud/tests/taskflow3/models/test_taskflow_instance.py new file mode 100644 index 0000000000..2d82c91cdb --- /dev/null +++ b/gcloud/tests/taskflow3/models/test_taskflow_instance.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +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. +""" + +from django.test import TestCase + +from gcloud.taskflow3.models import TaskFlowInstance +from gcloud.tests.mock import * # noqa +from gcloud.tests.mock_settings import * # noqa + + +class TaskflowTestCase(TestCase): + + def test_callback(self): + instance = TaskFlowInstance() + + objects_callback_return = {'result': True, 'message': 'success'} + + with mock.patch(TASKINSTANCE_OBJECTS_CALLBACK, MagicMock(return_value=objects_callback_return)): + with mock.patch(TASKINSTANCE_HAS_NODE, MagicMock(return_value=False)): + result = instance.callback('act_id', 'data') + self.assertFalse(result['result']) + self.assertTrue('message' in result) + TaskFlowInstance.objects.callback.assert_not_called() + + with mock.patch(TASKINSTANCE_HAS_NODE, MagicMock(return_value=True)): + result = instance.callback('act_id', 'data') + self.assertTrue(result['result']) + self.assertTrue('message' in result) + TaskFlowInstance.objects.callback.assert_called_once_with('act_id', 'data') diff --git a/gcloud/tests/taskflow3/test_api.py b/gcloud/tests/taskflow3/test_api.py new file mode 100644 index 0000000000..d468509644 --- /dev/null +++ b/gcloud/tests/taskflow3/test_api.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +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. +""" + +from __future__ import absolute_import + +from copy import deepcopy + +from django.test import TestCase, Client + +from pipeline.utils.uniqid import node_uniqid + +from gcloud.tests.mock import * # noqa +from gcloud.tests.mock_settings import * # noqa +from gcloud.taskflow3 import api + + +TEST_BIZ_CC_ID = '2' # do not change this to non number +TEST_ID_LIST = [node_uniqid() for i in range(10)] +TEST_PIPELINE_TREE = { + 'id': TEST_ID_LIST[0], + 'name': 'name', + 'start_event': { + 'id': TEST_ID_LIST[1], + 'name': 'start', + 'type': 'EmptyStartEvent', + 'incoming': None, + 'outgoing': TEST_ID_LIST[5] + }, + 'end_event': { + 'id': TEST_ID_LIST[2], + 'name': 'end', + 'type': 'EmptyEndEvent', + 'incoming': TEST_ID_LIST[7], + 'outgoing': None + }, + 'activities': { + TEST_ID_LIST[3]: { + 'id': TEST_ID_LIST[3], + 'type': 'ServiceActivity', + 'name': 'first_task', + 'incoming': TEST_ID_LIST[5], + 'outgoing': TEST_ID_LIST[6], + 'optional': True, + 'component': { + 'code': 'test', + 'data': { + 'input_test': { + 'hook': False, + 'value': '${custom_key1}', + }, + 'radio_test': { + 'hook': False, + 'value': '1', + }, + }, + } + }, + TEST_ID_LIST[4]: { + 'id': TEST_ID_LIST[4], + 'type': 'ServiceActivity', + 'name': 'first_task', + 'incoming': TEST_ID_LIST[6], + 'outgoing': TEST_ID_LIST[7], + 'optional': True, + 'component': { + 'code': 'test', + 'data': { + 'input_test': { + 'hook': True, + 'value': '${custom_key2}' + }, + 'radio_test': { + 'hook': False, + 'value': '2' + }, + }, + } + }, + }, + 'flows': { # 存放该 Pipeline 中所有的线 + TEST_ID_LIST[5]: { + 'id': TEST_ID_LIST[5], + 'source': TEST_ID_LIST[1], + 'target': TEST_ID_LIST[3] + }, + TEST_ID_LIST[6]: { + 'id': TEST_ID_LIST[6], + 'source': TEST_ID_LIST[3], + 'target': TEST_ID_LIST[4] + }, + TEST_ID_LIST[7]: { + 'id': TEST_ID_LIST[7], + 'source': TEST_ID_LIST[4], + 'target': TEST_ID_LIST[2] + }, + }, + 'gateways': { # 这里存放着网关的详细信息 + }, + 'constants': { + '${custom_key1}': { + 'index': 0, + 'name': 'input1', + 'key': '${custom_key1}', + 'desc': '', + 'validation': '^.*$', + 'show_type': 'show', + 'value': 'value1', + 'source_type': 'custom', + 'source_tag': '', + 'source_info': {}, + 'custom_type': 'input', + }, + '${custom_key2}': { + 'index': 1, + 'name': 'input2', + 'key': '${custom_key2}', + 'desc': '', + 'validation': '^.*$', + 'show_type': 'show', + 'value': 'value1', + 'source_type': 'custom', + 'source_tag': '', + 'source_info': {}, + 'custom_type': 'input', + }, + }, + 'outputs': ['${custom_key1}'], +} + + +class APITest(TestCase): + + def setUp(self): + self.PREVIEW_TASK_TREE_URL = '/taskflow/api/preview_task_tree/{biz_cc_id}/' + self.client = Client() + + @mock.patch('gcloud.taskflow3.api.JsonResponse', MockJsonResponse()) + def test_preview_task_tree__constants_not_referred(self): + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data1 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s"]' % TEST_ID_LIST[3] + } + result = api.preview_task_tree(MockRequest('POST', data1), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key1}']) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data2 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s"]' % TEST_ID_LIST[4] + } + result = api.preview_task_tree(MockRequest('POST', data2), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key2}']) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data3 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '[]' + } + result = api.preview_task_tree(MockRequest('POST', data3), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), []) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data4 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s", "%s"]' % (TEST_ID_LIST[3], TEST_ID_LIST[4]) + } + result = api.preview_task_tree(MockRequest('POST', data4), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key1}', '${custom_key2}']) diff --git a/gcloud/webservice3/resources.py b/gcloud/webservice3/resources.py index 52c4fe6403..31747b2c84 100644 --- a/gcloud/webservice3/resources.py +++ b/gcloud/webservice3/resources.py @@ -12,12 +12,13 @@ """ import datetime +import logging from django.utils import timezone from django.db.models import Q from django.forms.fields import BooleanField from django.utils.translation import ugettext_lazy as _ -from django.http.response import HttpResponseForbidden, HttpResponse +from django.http.response import HttpResponseForbidden from guardian.shortcuts import get_objects_for_user from haystack.query import SearchQuerySet from tastypie import fields @@ -30,16 +31,20 @@ from pipeline.component_framework.library import ComponentLibrary from pipeline.component_framework.models import ComponentModel -from pipeline.core.data.library import VariableLibrary -from pipeline.models import VariableModel - +from pipeline.variable_framework.models import VariableModel from gcloud import exceptions from gcloud.core.models import Business +from gcloud.core.utils import ( + name_handler, + prepare_user_business, +) from gcloud.core.api_adapter import is_user_functor, is_user_auditor -from gcloud.core.utils import name_handler, prepare_user_business from gcloud.core.constant import TEMPLATE_NODE_NAME_MAX_LENGTH +logger = logging.getLogger('root') + + def pipeline_node_name_handle(pipeline_tree): for value in pipeline_tree.values(): if isinstance(value, dict): @@ -259,9 +264,7 @@ def apply_filters(self, request, applicable_filters): query = applicable_filters.pop('q') else: query = None - queryset = super(GCloudModelResource, self).apply_filters( - request, - applicable_filters) + queryset = super(GCloudModelResource, self).apply_filters(request, applicable_filters) return queryset.filter(query) if query else queryset def wrap_view(self, view): @@ -322,13 +325,9 @@ def get_object_list(self, request): try: # fetch business from CMDB biz_list = prepare_user_business(request) - except exceptions.Unauthorized: - return HttpResponse(status=401) - except exceptions.Forbidden: - # target business does not exist (irregular request) - return HttpResponseForbidden() - except exceptions.APIError as e: - return HttpResponse(status=503, content=e.error) + except (exceptions.Unauthorized, exceptions.Forbidden, exceptions.APIError) as e: + logger.error(u'get business list[username=%s] from CMDB raise error: %s' % (request.user.username, e)) + return super(BusinessResource, self).get_object_list(request) cc_id_list = [biz.cc_id for biz in biz_list] return super(BusinessResource, self).get_object_list(request).filter(cc_id__in=cc_id_list) @@ -340,7 +339,7 @@ class ComponentModelResource(ModelResource): null=True) class Meta: - queryset = ComponentModel.objects.filter(status=1).order_by('name') + queryset = ComponentModel.objects.filter(status=True).order_by('name') resource_name = 'component' excludes = ['status', 'id'] detail_uri_name = 'code' @@ -378,27 +377,32 @@ def alter_detail_data_to_serialize(self, request, data): class VariableModelResource(ModelResource): + name = fields.CharField( + attribute='name', + readonly=True, + null=True) + form = fields.CharField( + attribute='form', + readonly=True, + null=True) + type = fields.CharField( + attribute='type', + readonly=True, + null=True) + tag = fields.CharField( + attribute='tag', + readonly=True, + null=True) + meta_tag = fields.CharField( + attribute='meta_tag', + readonly=True, + null=True) + class Meta: - queryset = VariableModel.objects.filter(status=1) + queryset = VariableModel.objects.filter(status=True) resource_name = 'variable' excludes = ['status', 'id'] detail_uri_name = 'code' ordering = ['id'] authorization = ReadOnlyAuthorization() limit = 0 - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - var = VariableLibrary.get_var_class(bundle.data['code']) - bundle.data['form'] = var.form - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - var = VariableLibrary.get_var_class(bundle.data['code']) - is_meta = request.GET.get('meta', False) - form = getattr(var, 'meta_form') if bool(int(is_meta)) else var.form - bundle.data['form'] = form - - return data diff --git a/issue_template.md b/issue_template.md index c7eef6dcb6..a5b383a397 100644 --- a/issue_template.md +++ b/issue_template.md @@ -1,23 +1,23 @@ 问题描述 ======= -<这里写问题描述> + 重现方法 ======= -<列出如何重现的方法或操作步骤> + -**重要提醒**: 请优先尝试部署使用最新发布的版本 (发布清单: https://github.com/Tencent/bk-sops/releases), 如果问题不能在最新发布的版本里重现,说明此问题已经被修复。 + 关键信息 ======= -**重要提醒**: 这些关键信息会辅助我们快速定位问题。 + 请提供以下信息: - - [x] bk_sops 版本 (发布版本号 或 git tag): `<示例: V3.1.32-ce 或者 git sha. 请不要使用 "最新版本" 或 "当前版本"等无法准确定位代码版本的语句描述>` - - [ ] 蓝鲸PaaS 版本: `<示例:PaaS 3.0.58、PaaSAgent 3.0.9>` - - [ ] bk_sops 异常日志 + - [x] bk-sops 版本 (发布版本号 或 git tag): + - [ ] 蓝鲸PaaS 版本: + - [ ] bk_sops 异常日志: diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index f4ed5c52e8..b9f2929930 100644 Binary files a/locale/en/LC_MESSAGES/django.mo and b/locale/en/LC_MESSAGES/django.mo differ diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 240b56ab53..e767b01bc5 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: 2017-11-17 11:28+0800\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -18,2046 +18,1761 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: bk_api/sites/clouds/utils.py:40 bk_api/utils.py:78 -msgid "请求返回数据格式错误!" -msgstr "Request return data format error!" - -#: bk_api/sites/clouds/utils.py:41 bk_api/utils.py:79 -msgid "调用远程服务失败,Http请求返回数据格式错误!" -msgstr "Remote service called failed, HTTP request data return format error!" - -#: bk_api/utils.py:81 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" -msgstr "Remote service called failed, HTTP request error status error: %(code)s, request url: %(url)s" - -#: bk_api/sites/bkopen/app_maker.py:49 bk_api/sites/clouds/app_maker.py:73 -#, python-format -msgid "调用创建app maker接口失败,错误信息:%s" -msgstr "Creating app maker API called failed, error: %s" - -#: bk_api/sites/bkopen/app_maker.py:50 bk_api/sites/clouds/app_maker.py:74 -msgid "调用创建app maker接口失败" -msgstr "App maker API called failed" - -#: bk_api/sites/bkopen/app_maker.py:83 bk_api/sites/bkopen/app_maker.py:103 -#: bk_api/sites/clouds/app_maker.py:109 bk_api/sites/clouds/app_maker.py:129 -#, python-format -msgid "调用修改app maker接口失败,错误信息:%s" -msgstr "Updating app maker API called failed, error: %s" - -#: bk_api/sites/bkopen/app_maker.py:84 bk_api/sites/bkopen/app_maker.py:104 -#: bk_api/sites/clouds/app_maker.py:110 bk_api/sites/clouds/app_maker.py:130 -msgid "调用修改app maker接口失败" -msgstr "Updating app maker API called failed" - -#: bk_api/sites/clouds/app_maker.py:151 -#, python-format -msgid "调用修改 LOGO 接口失败,错误信息:%s" -msgstr "todo:%s" - -#: bk_api/sites/clouds/app_maker.py:152 -msgid "调用修改 LOGO 接口失败" -msgstr "todo" - -#: bk_api/sites/clouds/utils.py:43 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%s" -msgstr "Remote service called failed, HTTP request error status error: %s" - -#: blueapps/account/admin.py:13 +#: blueapps/account/admin.py:25 msgid "Personal info" msgstr "Personal info" -#: blueapps/account/admin.py:14 +#: blueapps/account/admin.py:26 msgid "Permissions" msgstr "Permissions" -#: blueapps/account/admin.py:16 +#: blueapps/account/admin.py:28 msgid "Important dates" msgstr "Important dates" -#: blueapps/account/apps.py:9 +#: blueapps/account/apps.py:21 msgid "account" msgstr "account" -#: blueapps/account/models.py:53 +#: blueapps/account/models.py:65 msgid "username" msgstr "username" -#: blueapps/account/models.py:56 blueapps/account/models.py:147 +#: blueapps/account/models.py:68 blueapps/account/models.py:159 msgid "Required. 64 characters or fewer. Letters, digits and underlined only." msgstr "Required. 64 characters or fewer. Letters, digits and underlined only." -#: blueapps/account/models.py:60 +#: blueapps/account/models.py:72 msgid "Enter a valid openid. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid openid. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:66 +#: blueapps/account/models.py:78 msgid "A user with that openid already exists." msgstr "A user with that openid already exists." -#: blueapps/account/models.py:71 +#: blueapps/account/models.py:83 msgid "nick name" msgstr "nick name" -#: blueapps/account/models.py:74 +#: blueapps/account/models.py:86 msgid "Required. 64 characters or fewer." msgstr "Required. 64 characters or fewer." -#: blueapps/account/models.py:77 +#: blueapps/account/models.py:89 msgid "staff status" msgstr "staff status" -#: blueapps/account/models.py:79 +#: blueapps/account/models.py:91 msgid "Designates whether the user can log into this admin site." msgstr "Designates whether the user can log into this admin site." -#: blueapps/account/models.py:83 +#: blueapps/account/models.py:95 msgid "active" msgstr "active" -#: blueapps/account/models.py:85 +#: blueapps/account/models.py:97 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." -#: blueapps/account/models.py:89 +#: blueapps/account/models.py:101 msgid "date joined" msgstr "date joined" -#: blueapps/account/models.py:99 +#: blueapps/account/models.py:111 msgid "user" msgstr "user" -#: blueapps/account/models.py:100 +#: blueapps/account/models.py:112 msgid "users" msgstr "users" -#: blueapps/account/models.py:151 +#: blueapps/account/models.py:163 msgid "Enter a valid key. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid key. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:160 +#: blueapps/account/models.py:172 msgid "user property" msgstr "user property" -#: blueapps/account/models.py:161 +#: blueapps/account/models.py:173 msgid "user properties" msgstr "user properties" -#: config/default.py:141 +#: config/default.py:152 msgid "English" msgstr "English" -#: config/default.py:142 +#: config/default.py:153 msgid "简体中文" msgstr "简体中文" -#: django_signal_valve/models.py:36 +#: django_signal_valve/models.py:48 msgid "信号模块名" msgstr "Signal module name" -#: django_signal_valve/models.py:37 +#: django_signal_valve/models.py:49 msgid "信号属性名" msgstr "Signal property name" -#: django_signal_valve/models.py:38 +#: django_signal_valve/models.py:50 msgid "信号参数" msgstr "Signal parameters" -#: gcloud/exceptions.py:27 +#: gcloud/exceptions.py:39 msgid "请求第三方系统" msgstr "Requesting third party system" -#: gcloud/exceptions.py:29 +#: gcloud/exceptions.py:41 msgid "接口" msgstr "API" -#: gcloud/exceptions.py:31 +#: gcloud/exceptions.py:43 msgid "异常" msgstr "exception" -#: gcloud/exceptions.py:33 +#: gcloud/exceptions.py:45 msgid "请联系第三方系统负责人处理" msgstr "Please contact the API system maintenance person to handle" -#: gcloud/commons/message/common.py:6 +#: gcloud/commons/message/common.py:18 msgid "【标准运维APP通知】执行失败" msgstr "[SOPS APP Notice] Task Field" -#: gcloud/commons/message/common.py:7 +#: gcloud/commons/message/common.py:19 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "Your task[{task_name}] in business[{cc_name}] executed failed, current failed node is [{node_name}], executor is [{executor}].Please go to SOPS[{url}] to view details." -#: gcloud/commons/message/common.py:19 +#: gcloud/commons/message/common.py:31 msgid "【标准运维APP通知】执行完成" msgstr "[SOPS APP Notice] Task Finished" -#: gcloud/commons/message/common.py:20 +#: gcloud/commons/message/common.py:32 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "Your task[{task_name}] in business[{cc_name}] executed successfully, executor is [{executor}].Please go to SOPS[{url}] to view details." -#: gcloud/commons/message/common.py:31 +#: gcloud/commons/message/common.py:43 msgid "【标准运维APP通知】周期任务启动失败" msgstr "[BK_SOPS Notification]Periodic task start failed" -#: gcloud/commons/message/common.py:32 +#: gcloud/commons/message/common.py:44 msgid "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" msgstr "Periodic task[{task_name}]in business [{cc_name}] which should be schedule at [{start_time}] started failed, error message: [{ex_data}]" -#: gcloud/commons/template/models.py:162 +#: gcloud/commons/template/models.py:174 msgid "模板类型" msgstr "Template Type" -#: gcloud/commons/template/models.py:172 +#: gcloud/commons/template/models.py:184 msgid "收藏模板的人" msgstr "Template favorited by" -#: gcloud/commons/template/models.py:174 +#: gcloud/commons/template/models.py:186 msgid "流程事件通知方式" msgstr "Events Notify Types" -#: gcloud/commons/template/models.py:179 +#: gcloud/commons/template/models.py:191 msgid "流程事件通知人" msgstr "Events Notify personnel" -#: gcloud/commons/template/models.py:182 +#: gcloud/commons/template/models.py:194 msgid "流程超时时间(分钟)" msgstr "Time-out" -#: gcloud/commons/template/models.py:185 gcloud/contrib/appmaker/models.py:279 -#: gcloud/taskflow3/models.py:768 pipeline/models.py:272 +#: gcloud/commons/template/models.py:197 gcloud/contrib/appmaker/models.py:292 +#: gcloud/taskflow3/models.py:780 pipeline/models.py:284 msgid "是否删除" msgstr "Deleted" -#: gcloud/commons/template/models.py:330 gcloud/commons/template/models.py:331 +#: gcloud/commons/template/models.py:342 gcloud/commons/template/models.py:343 msgid "公共流程模板 CommonTemplate" msgstr "Common Template" -#: gcloud/commons/template/models.py:341 gcloud/commons/template/models.py:342 +#: gcloud/commons/template/models.py:353 gcloud/commons/template/models.py:354 msgid "通用流程模板ID" msgstr "Common Template ID" -#: gcloud/commons/template/models.py:348 gcloud/commons/template/models.py:349 +#: gcloud/commons/template/models.py:360 gcloud/commons/template/models.py:361 msgid "公共流程模板权限 CommonTmplPerm" msgstr "Common Template Permission" -#: gcloud/conf/sites/community/ver_settings.py:29 +#: gcloud/conf/sites/community/ver_settings.py:41 msgid "蓝鲸智云社区版" msgstr "BK Community Edition" -#: gcloud/conf/sites/enterprise/ver_settings.py:29 -#: gcloud/conf/sites/ieod/ver_settings.py:32 -msgid "蓝鲸智云企业版" -msgstr "BK Enterprise Edition" - -#: gcloud/contrib/appmaker/api.py:36 +#: gcloud/contrib/appmaker/api.py:48 #, python-format msgid "参数格式错误:%s" msgstr "Parameters format error: %s" -#: gcloud/contrib/appmaker/api.py:44 +#: gcloud/contrib/appmaker/api.py:56 msgid "请上传 jpg 或 png 格式的图片" msgstr "Please upload a picture in jpg or png format" -#: gcloud/contrib/appmaker/api.py:48 +#: gcloud/contrib/appmaker/api.py:60 msgid "LOGO 文件大小必须小于 100K" msgstr "The size of LOGO must less than 100K" -#: gcloud/contrib/appmaker/api.py:53 +#: gcloud/contrib/appmaker/api.py:65 msgid "图片格式非法" msgstr "Illegal picture format" -#: gcloud/contrib/appmaker/models.py:58 +#: gcloud/contrib/appmaker/models.py:71 msgid "保存失败,引用的流程模板不存在!" msgstr "Save failed, the referenced flow template does not exist " -#: gcloud/contrib/appmaker/models.py:101 +#: gcloud/contrib/appmaker/models.py:114 #, python-format msgid "创建轻应用失败:%s" msgstr "Failed to create Mini-App: %s" -#: gcloud/contrib/appmaker/models.py:118 +#: gcloud/contrib/appmaker/models.py:131 msgid "保存失败,当前操作的轻应用不存在或已删除!" msgstr "Save failed, Mini-App of current operation does not exist or has been deleted!" -#: gcloud/contrib/appmaker/models.py:136 +#: gcloud/contrib/appmaker/models.py:149 #, python-format msgid "编辑轻应用失败:%s" msgstr "Failed to edit Mini-App: %s" -#: gcloud/contrib/appmaker/models.py:172 +#: gcloud/contrib/appmaker/models.py:185 msgid "当前操作的轻应用不存在或已删除!" msgstr "Mini-App of current operation does not exist or has been deleted!" -#: gcloud/contrib/appmaker/models.py:183 gcloud/contrib/appmaker/models.py:189 +#: gcloud/contrib/appmaker/models.py:196 gcloud/contrib/appmaker/models.py:202 #, python-format msgid "删除失败:%s" msgstr "Delete failed: %s" -#: gcloud/contrib/appmaker/models.py:266 gcloud/tasktmpl3/models.py:434 +#: gcloud/contrib/appmaker/models.py:279 gcloud/tasktmpl3/models.py:446 msgid "所属业务" msgstr "Business" -#: gcloud/contrib/appmaker/models.py:267 +#: gcloud/contrib/appmaker/models.py:280 msgid "APP名称" msgstr "APP name" -#: gcloud/contrib/appmaker/models.py:268 +#: gcloud/contrib/appmaker/models.py:281 msgid "APP编码" msgstr "APP code" -#: gcloud/contrib/appmaker/models.py:269 +#: gcloud/contrib/appmaker/models.py:282 msgid "APP基本信息" msgstr "APP basic information" -#: gcloud/contrib/appmaker/models.py:270 +#: gcloud/contrib/appmaker/models.py:283 msgid "APP描述信息" msgstr "APP description information" -#: gcloud/contrib/appmaker/models.py:271 +#: gcloud/contrib/appmaker/models.py:284 msgid "轻应用logo存放地址" msgstr "Mini-App logo url" -#: gcloud/contrib/appmaker/models.py:272 +#: gcloud/contrib/appmaker/models.py:285 msgid "gcloud链接" msgstr "gcloud link" -#: gcloud/contrib/appmaker/models.py:273 +#: gcloud/contrib/appmaker/models.py:286 msgid "创建人" msgstr "Creator" -#: gcloud/contrib/appmaker/models.py:274 pipeline/engine/models/core.py:803 -#: pipeline/models.py:66 pipeline/models.py:264 pipeline/models.py:578 +#: gcloud/contrib/appmaker/models.py:287 pipeline/engine/models/core.py:815 +#: pipeline/models.py:78 pipeline/models.py:276 pipeline/models.py:590 msgid "创建时间" msgstr "Creation time" -#: gcloud/contrib/appmaker/models.py:275 +#: gcloud/contrib/appmaker/models.py:288 msgid "编辑人" msgstr "Last Modified" -#: gcloud/contrib/appmaker/models.py:276 +#: gcloud/contrib/appmaker/models.py:289 msgid "编辑时间" msgstr "Date modified" -#: gcloud/contrib/appmaker/models.py:277 +#: gcloud/contrib/appmaker/models.py:290 msgid "关联模板" msgstr "Referenced template" -#: gcloud/contrib/appmaker/models.py:278 +#: gcloud/contrib/appmaker/models.py:291 msgid "执行方案" msgstr "Executing Plan" -#: gcloud/contrib/appmaker/models.py:303 gcloud/contrib/appmaker/models.py:304 +#: gcloud/contrib/appmaker/models.py:316 gcloud/contrib/appmaker/models.py:317 msgid "轻应用 AppMaker" msgstr "Mini-APP" -#: gcloud/contrib/function/models.py:11 +#: gcloud/contrib/function/models.py:23 msgid "未认领" msgstr "To be claim" -#: gcloud/contrib/function/models.py:12 +#: gcloud/contrib/function/models.py:24 msgid "已认领" msgstr "Claimed" -#: gcloud/contrib/function/models.py:13 +#: gcloud/contrib/function/models.py:25 msgid "已驳回" msgstr "Rejected" -#: gcloud/contrib/function/models.py:14 +#: gcloud/contrib/function/models.py:26 msgid "已执行" msgstr "Executed" -#: gcloud/contrib/function/models.py:15 gcloud/taskflow3/models.py:441 -#: gcloud/tasktmpl3/models.py:195 +#: gcloud/contrib/function/models.py:27 gcloud/taskflow3/models.py:453 +#: gcloud/tasktmpl3/models.py:207 msgid "已完成" msgstr "Finished" -#: gcloud/contrib/function/models.py:23 +#: gcloud/contrib/function/models.py:35 msgid "职能化单" msgstr "Functional bill" -#: gcloud/contrib/function/models.py:24 +#: gcloud/contrib/function/models.py:36 msgid "提单人" msgstr "Submitter" -#: gcloud/contrib/function/models.py:25 +#: gcloud/contrib/function/models.py:37 msgid "提单时间" msgstr "Date submitted" -#: gcloud/contrib/function/models.py:26 +#: gcloud/contrib/function/models.py:38 msgid "认领人" msgstr "Claimer" -#: gcloud/contrib/function/models.py:27 +#: gcloud/contrib/function/models.py:39 msgid "认领时间" msgstr "Date claimed" -#: gcloud/contrib/function/models.py:28 +#: gcloud/contrib/function/models.py:40 msgid "驳回人" msgstr "Rejecter" -#: gcloud/contrib/function/models.py:29 +#: gcloud/contrib/function/models.py:41 msgid "驳回时间" msgstr "Date rejected" -#: gcloud/contrib/function/models.py:30 +#: gcloud/contrib/function/models.py:42 msgid "转单人" msgstr "Predecessor" -#: gcloud/contrib/function/models.py:31 +#: gcloud/contrib/function/models.py:43 msgid "转单时间" msgstr "Date transferred" -#: gcloud/contrib/function/models.py:32 +#: gcloud/contrib/function/models.py:44 msgid "单据状态" msgstr "Bill Status" -#: gcloud/contrib/function/models.py:38 gcloud/contrib/function/models.py:39 +#: gcloud/contrib/function/models.py:50 gcloud/contrib/function/models.py:51 msgid "职能化认领单 FunctionTask" msgstr "Functional Bill" -#: gcloud/core/api.py:24 +#: gcloud/core/api.py:36 msgid "用户默认业务切换成功" msgstr "Change default business successfully" -#: gcloud/core/api.py:59 +#: gcloud/core/api.py:71 #, python-format msgid "所有%s" msgstr "All %ss" -#: gcloud/core/constant.py:7 +#: gcloud/core/constant.py:18 msgid "运维工具" msgstr "OPS Tools" -#: gcloud/core/constant.py:8 +#: gcloud/core/constant.py:19 msgid "监控告警" msgstr "Alarm" -#: gcloud/core/constant.py:9 +#: gcloud/core/constant.py:20 msgid "配置管理" msgstr "Conf Manage" -#: gcloud/core/constant.py:10 +#: gcloud/core/constant.py:21 msgid "开发工具" msgstr "Dev Tools" -#: gcloud/core/constant.py:11 +#: gcloud/core/constant.py:22 msgid "企业IT" msgstr "Enterprise IT" -#: gcloud/core/constant.py:12 +#: gcloud/core/constant.py:23 msgid "办公应用" msgstr "Office App" -#: gcloud/core/constant.py:13 +#: gcloud/core/constant.py:24 msgid "其它" msgstr "Others" -#: gcloud/core/constant.py:18 +#: gcloud/core/constant.py:29 msgid "默认任务流程" msgstr "Default Task Flow" -#: gcloud/core/constant.py:19 +#: gcloud/core/constant.py:30 msgid "职能化任务流程" msgstr "Functional Task Flow" -#: gcloud/core/constant.py:26 gcloud/core/constant.py:32 +#: gcloud/core/constant.py:37 gcloud/core/constant.py:43 msgid "步骤选择" msgstr "Step Selection" -#: gcloud/core/constant.py:27 +#: gcloud/core/constant.py:38 msgid "参数填写" msgstr "Parameter Enter" -#: gcloud/core/constant.py:28 gcloud/core/constant.py:35 +#: gcloud/core/constant.py:39 gcloud/core/constant.py:46 msgid "任务执行" msgstr "Task Execution" -#: gcloud/core/constant.py:29 gcloud/core/constant.py:36 +#: gcloud/core/constant.py:40 gcloud/core/constant.py:47 msgid "完成" msgstr "Complete" -#: gcloud/core/constant.py:33 +#: gcloud/core/constant.py:44 msgid "提交需求" msgstr "Submit Request" -#: gcloud/core/constant.py:34 +#: gcloud/core/constant.py:45 msgid "职能化认领" msgstr "Task Claim" -#: gcloud/core/constant.py:55 +#: gcloud/core/constant.py:66 msgid "任务准备" msgstr "Preparation" -#: gcloud/core/constant.py:56 +#: gcloud/core/constant.py:67 msgid "操作执行" msgstr "Execution" -#: gcloud/core/constant.py:57 +#: gcloud/core/constant.py:68 msgid "DB变更" msgstr "DB Change" -#: gcloud/core/constant.py:58 +#: gcloud/core/constant.py:69 msgid "DB备份" msgstr "DB Backup" -#: gcloud/core/constant.py:59 +#: gcloud/core/constant.py:70 msgid "现网测试" msgstr "Test" -#: gcloud/core/constant.py:60 +#: gcloud/core/constant.py:71 msgid "空闲时间" msgstr "Idle Time" -#: gcloud/core/constant.py:65 +#: gcloud/core/constant.py:76 msgid "微信" msgstr "WeChat" -#: gcloud/core/constant.py:66 +#: gcloud/core/constant.py:77 msgid "短信" msgstr "SMS" -#: gcloud/core/constant.py:67 +#: gcloud/core/constant.py:78 msgid "邮件" msgstr "Email" -#: gcloud/core/constant.py:68 +#: gcloud/core/constant.py:79 msgid "语音" msgstr "Voice" -#: gcloud/core/middlewares.py:64 +#: gcloud/core/middlewares.py:76 msgid "您没有权限进行此操作" msgstr "You have no permissions to make such operation" -#: gcloud/core/models.py:25 +#: gcloud/core/models.py:37 msgid "生命周期" msgstr "Life Cycle" -#: gcloud/core/models.py:26 +#: gcloud/core/models.py:38 msgid "任务执行者" msgstr "Task Executor" -#: gcloud/core/models.py:28 +#: gcloud/core/models.py:40 msgid "业务状态" msgstr "Business State" -#: gcloud/core/models.py:29 +#: gcloud/core/models.py:41 msgid "是否始终使用任务执行者" msgstr "Force to use executor" -#: gcloud/core/models.py:39 gcloud/core/models.py:40 +#: gcloud/core/models.py:51 gcloud/core/models.py:52 msgid "业务 Business" msgstr "Business" -#: gcloud/core/models.py:54 +#: gcloud/core/models.py:66 msgid "用户QQ" msgstr "User QQ" -#: gcloud/core/models.py:55 +#: gcloud/core/models.py:67 msgid "默认业务" msgstr "Default business" -#: gcloud/core/models.py:61 gcloud/core/models.py:62 +#: gcloud/core/models.py:73 gcloud/core/models.py:74 msgid "用户默认业务 UserBusiness" msgstr "User default business UserBusiness" -#: gcloud/core/models.py:72 gcloud/core/models.py:73 +#: gcloud/core/models.py:84 gcloud/core/models.py:85 msgid "业务用户组 BusinessGroupMembership" msgstr "Business user group BusinessGroupMembership" -#: gcloud/core/models.py:90 +#: gcloud/core/models.py:102 msgid "变量KEY" msgstr "Variable KEY" -#: gcloud/core/models.py:91 +#: gcloud/core/models.py:103 msgid "变量描述" msgstr "Variable Description" -#: gcloud/core/models.py:92 +#: gcloud/core/models.py:104 msgid "变量值" msgstr "Variable Value" -#: gcloud/core/models.py:100 gcloud/core/models.py:101 +#: gcloud/core/models.py:112 gcloud/core/models.py:113 msgid "环境变量 EnvironmentVariables" msgstr "EnvironmentVariables" -#: gcloud/core/roles.py:15 gcloud/core/roles/sites/clouds/roles.py:15 -#: gcloud/core/roles/sites/ieod/roles.py:15 -#: gcloud/core/roles/sites/open/roles.py:15 +#: gcloud/core/roles.py:27 gcloud/core/roles/sites/open/roles.py:27 msgid "运维人员" msgstr "Maintainer" -#: gcloud/core/roles.py:16 gcloud/core/roles/sites/clouds/roles.py:16 -#: gcloud/core/roles/sites/ieod/roles.py:16 -#: gcloud/core/roles/sites/open/roles.py:16 +#: gcloud/core/roles.py:28 gcloud/core/roles/sites/open/roles.py:28 msgid "产品人员" msgstr "Productor" -#: gcloud/core/roles.py:17 gcloud/core/roles/sites/clouds/roles.py:17 -#: gcloud/core/roles/sites/ieod/roles.py:17 -#: gcloud/core/roles/sites/open/roles.py:17 +#: gcloud/core/roles.py:29 gcloud/core/roles/sites/open/roles.py:29 msgid "合作商" msgstr "Partner" -#: gcloud/core/roles.py:18 gcloud/core/roles/sites/clouds/roles.py:18 -#: gcloud/core/roles/sites/ieod/roles.py:18 -#: gcloud/core/roles/sites/open/roles.py:18 +#: gcloud/core/roles.py:30 gcloud/core/roles/sites/open/roles.py:30 msgid "业务创建人" msgstr "Business Creator" -#: gcloud/core/roles.py:19 gcloud/core/roles/sites/clouds/roles.py:19 -#: gcloud/core/roles/sites/ieod/roles.py:19 -#: gcloud/core/roles/sites/open/roles.py:19 +#: gcloud/core/roles.py:31 gcloud/core/roles/sites/open/roles.py:31 msgid "超级管理员" msgstr "Administrator" -#: gcloud/core/roles.py:20 gcloud/core/roles/sites/clouds/roles.py:20 -#: gcloud/core/roles/sites/ieod/roles.py:20 -#: gcloud/core/roles/sites/open/roles.py:20 +#: gcloud/core/roles.py:32 gcloud/core/roles/sites/open/roles.py:32 msgid "职能化人员" msgstr "Functional Personnel" -#: gcloud/core/roles.py:21 gcloud/core/roles/sites/clouds/roles.py:21 -#: gcloud/core/roles/sites/ieod/roles.py:21 -#: gcloud/core/roles/sites/open/roles.py:21 +#: gcloud/core/roles.py:33 gcloud/core/roles/sites/open/roles.py:33 msgid "测试人员" msgstr "Tester" -#: gcloud/core/roles.py:22 gcloud/core/roles/sites/clouds/roles.py:22 -#: gcloud/core/roles/sites/ieod/roles.py:22 -#: gcloud/core/roles/sites/open/roles.py:22 +#: gcloud/core/roles.py:34 gcloud/core/roles/sites/open/roles.py:34 msgid "开发人员" msgstr "Developer" -#: gcloud/core/roles.py:23 gcloud/core/roles/sites/clouds/roles.py:23 -#: gcloud/core/roles/sites/ieod/roles.py:23 -#: gcloud/core/roles/sites/open/roles.py:23 +#: gcloud/core/roles.py:35 gcloud/core/roles/sites/open/roles.py:35 msgid "审计人员" msgstr "Auditor" -#: gcloud/periodictask/models.py:63 gcloud/taskflow3/models.py:743 +#: gcloud/core/api_adapter/utils.py:90 +msgid "请求返回数据格式错误!" +msgstr "Request return data format error!" + +#: gcloud/core/api_adapter/utils.py:91 +msgid "调用远程服务失败,Http请求返回数据格式错误!" +msgstr "Remote service called failed, HTTP request data return format error!" + +#: gcloud/core/api_adapter/utils.py:93 +#, python-format +msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" +msgstr "Remote service called failed, HTTP request error status error: %(code)s, request url: %(url)s" + +#: gcloud/periodictask/models.py:75 gcloud/taskflow3/models.py:755 msgid "业务" msgstr "Business" -#: gcloud/periodictask/models.py:67 +#: gcloud/periodictask/models.py:79 msgid "pipeline 层周期任务" msgstr "Periodic task in pipeline" -#: gcloud/periodictask/models.py:68 gcloud/taskflow3/models.py:753 +#: gcloud/periodictask/models.py:80 gcloud/taskflow3/models.py:765 msgid "创建任务所用的模板ID" msgstr "Template ID for task creation" -#: gcloud/periodictask/models.py:73 gcloud/periodictask/models.py:74 +#: gcloud/periodictask/models.py:85 gcloud/periodictask/models.py:86 msgid "周期任务 PeriodicTask" msgstr "Periodic Task" -#: gcloud/periodictask/models.py:118 +#: gcloud/periodictask/models.py:130 #, python-format msgid "模板不存在,错误信息:%s" msgstr "Template not exist, error message: %s" -#: gcloud/periodictask/models.py:157 +#: gcloud/periodictask/models.py:169 msgid "pipeline 层周期任务历史" msgstr "Periodic task history in pipeline" -#: gcloud/periodictask/models.py:158 gcloud/taskflow3/constants.py:10 -#: pipeline/contrib/periodic_task/models.py:383 +#: gcloud/periodictask/models.py:170 gcloud/taskflow3/constants.py:22 +#: pipeline/contrib/periodic_task/models.py:395 msgid "周期任务" msgstr "Periodic Task" -#: gcloud/periodictask/models.py:159 +#: gcloud/periodictask/models.py:171 msgid "流程实例" msgstr "Flow Instance" -#: gcloud/periodictask/models.py:160 -#: pipeline/contrib/periodic_task/models.py:391 pipeline/log/models.py:35 +#: gcloud/periodictask/models.py:172 +#: pipeline/contrib/periodic_task/models.py:403 pipeline/log/models.py:47 msgid "异常信息" msgstr "Exception" -#: gcloud/periodictask/models.py:161 -#: pipeline/contrib/periodic_task/models.py:392 -#: pipeline/engine/models/core.py:804 pipeline/engine/models/core.py:895 -#: pipeline/engine/models/loop_activity.py:56 +#: gcloud/periodictask/models.py:173 +#: pipeline/contrib/periodic_task/models.py:404 +#: pipeline/engine/models/core.py:816 pipeline/engine/models/core.py:907 +#: pipeline/engine/models/loop_activity.py:67 msgid "开始时间" msgstr "Date Started" -#: gcloud/periodictask/models.py:162 -#: pipeline/contrib/periodic_task/models.py:393 +#: gcloud/periodictask/models.py:174 +#: pipeline/contrib/periodic_task/models.py:405 msgid "是否启动成功" msgstr "Start Success" -#: gcloud/taskflow3/constants.py:7 +#: gcloud/taskflow3/constants.py:19 msgid "手动" msgstr "Manual" -#: gcloud/taskflow3/constants.py:8 +#: gcloud/taskflow3/constants.py:20 msgid "API网关" msgstr "API Gateway" -#: gcloud/taskflow3/constants.py:9 +#: gcloud/taskflow3/constants.py:21 msgid "轻应用" msgstr "Mini-APP" -#: gcloud/taskflow3/constants.py:15 +#: gcloud/taskflow3/constants.py:27 msgid "业务流程" msgstr "Business Flow" -#: gcloud/taskflow3/constants.py:16 +#: gcloud/taskflow3/constants.py:28 msgid "公共流程" msgstr "Common Flow" -#: gcloud/taskflow3/models.py:430 gcloud/tasktmpl3/models.py:184 +#: gcloud/taskflow3/models.py:442 gcloud/tasktmpl3/models.py:196 msgid "未执行" msgstr "Created" -#: gcloud/taskflow3/models.py:435 gcloud/tasktmpl3/models.py:189 +#: gcloud/taskflow3/models.py:447 gcloud/tasktmpl3/models.py:201 msgid "执行中" msgstr "Executing" -#: gcloud/taskflow3/models.py:751 +#: gcloud/taskflow3/models.py:763 msgid "任务类型,继承自模板" msgstr "Task type, inherited from flow" -#: gcloud/taskflow3/models.py:754 +#: gcloud/taskflow3/models.py:766 msgid "流程模板来源" msgstr "Template source" -#: gcloud/taskflow3/models.py:757 +#: gcloud/taskflow3/models.py:769 msgid "创建方式" msgstr "Creation method" -#: gcloud/taskflow3/models.py:761 +#: gcloud/taskflow3/models.py:773 msgid "创建任务额外信息(App maker ID或者APP CODE)" msgstr "Create additional task data (App maker ID or APP CODE)" -#: gcloud/taskflow3/models.py:763 +#: gcloud/taskflow3/models.py:775 msgid "任务流程类型" msgstr "Task flow type" -#: gcloud/taskflow3/models.py:767 +#: gcloud/taskflow3/models.py:779 msgid "当前任务流程阶段" msgstr "Current task flow phase" -#: gcloud/taskflow3/models.py:776 gcloud/taskflow3/models.py:777 +#: gcloud/taskflow3/models.py:788 gcloud/taskflow3/models.py:789 msgid "流程实例 TaskFlowInstance" msgstr "TaskFlowInstance" -#: gcloud/tasktmpl3/models.py:34 +#: gcloud/tasktmpl3/models.py:46 msgid "新建任务" msgstr "New Task" -#: gcloud/tasktmpl3/models.py:35 +#: gcloud/tasktmpl3/models.py:47 msgid "填写参数" msgstr "Fill params" -#: gcloud/tasktmpl3/models.py:36 -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:80 +#: gcloud/tasktmpl3/models.py:48 msgid "执行任务" msgstr "New task" -#: gcloud/tasktmpl3/models.py:445 gcloud/tasktmpl3/models.py:446 +#: gcloud/tasktmpl3/models.py:457 gcloud/tasktmpl3/models.py:458 msgid "流程模板 TaskTemplate" msgstr "TaskTemplate" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:16 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:28 msgid "测试" msgstr "Testing" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:17 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:29 msgid "体验" msgstr "Staging" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:18 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:30 msgid "正式" msgstr "Production" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:22 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:34 msgid "关闭" msgstr "Closed" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:23 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:35 msgid "开放" msgstr "Open" -#: gcloud/utils/forms.py:31 +#: gcloud/utils/forms.py:43 msgid "invalid json string" msgstr "invalid json string" -#: gcloud/utils/forms.py:49 +#: gcloud/utils/forms.py:61 msgid "json.loads result is not instance of list or tuple " msgstr "json.loads result is not instance of list or tuple" -#: gcloud/utils/forms.py:67 +#: gcloud/utils/forms.py:79 msgid "json.loads result is not list" msgstr "json.loads result is not list" -#: gcloud/webservice3/resources.py:308 +#: gcloud/webservice3/resources.py:299 msgid "停运" msgstr "Closed" -#: pipeline/models.py:65 +#: pipeline/models.py:77 msgid "快照字符串的md5sum" msgstr "Snapshot Md5sum" -#: pipeline/models.py:72 pipeline/models.py:73 +#: pipeline/models.py:84 pipeline/models.py:85 msgid "模板快照" msgstr "Template Snapshot" -#: pipeline/models.py:146 +#: pipeline/models.py:158 #, python-format msgid "子流程引用链中存在循环引用:%s" msgstr "Subprocess reference has circle: %s" -#: pipeline/contrib/statistics/models.py:8 -#: pipeline/contrib/statistics/models.py:44 pipeline/models.py:262 -#: pipeline/models.py:449 +#: pipeline/contrib/statistics/models.py:20 +#: pipeline/contrib/statistics/models.py:56 pipeline/models.py:274 +#: pipeline/models.py:461 msgid "模板ID" msgstr "Template ID" -#: pipeline/models.py:263 +#: pipeline/models.py:275 msgid "模板名称" msgstr "Template Name" -#: pipeline/contrib/periodic_task/models.py:298 pipeline/models.py:265 -#: pipeline/models.py:577 +#: pipeline/contrib/periodic_task/models.py:310 pipeline/models.py:277 +#: pipeline/models.py:589 msgid "创建者" msgstr "Creator" -#: pipeline/models.py:266 pipeline/models.py:582 +#: pipeline/models.py:278 pipeline/models.py:594 msgid "描述" msgstr "Description" -#: pipeline/models.py:267 +#: pipeline/models.py:279 msgid "修改者" msgstr "Editor" -#: pipeline/models.py:268 pipeline/models.py:492 +#: pipeline/models.py:280 pipeline/models.py:504 msgid "修改时间" msgstr "Date Edit" -#: pipeline/models.py:269 +#: pipeline/models.py:281 msgid "模板结构数据" msgstr "Template Data" -#: pipeline/models.py:270 +#: pipeline/models.py:282 msgid "是否含有子流程" msgstr "Has Subprocess" -#: pipeline/models.py:274 +#: pipeline/models.py:286 msgid "表示当前模板是否删除" msgstr "Deleted" -#: pipeline/models.py:280 pipeline/models.py:281 pipeline/models.py:574 +#: pipeline/models.py:292 pipeline/models.py:293 pipeline/models.py:586 msgid "Pipeline模板" msgstr "Pipeline Template" -#: pipeline/models.py:423 +#: pipeline/models.py:435 msgid "根模板ID" msgstr "Root flow ID" -#: pipeline/models.py:424 +#: pipeline/models.py:436 msgid "子流程模板ID" msgstr "Subprocess flow ID" -#: pipeline/models.py:425 +#: pipeline/models.py:437 msgid "子流程节点 ID" msgstr "Subprocess node ID" -#: pipeline/models.py:426 pipeline/models.py:450 pipeline/models.py:479 +#: pipeline/models.py:438 pipeline/models.py:462 pipeline/models.py:491 msgid "快照字符串的md5" msgstr "Snapshot string md5" -#: pipeline/models.py:477 +#: pipeline/models.py:489 msgid "模板 ID" msgstr "Template ID" -#: pipeline/models.py:478 +#: pipeline/models.py:490 msgid "模板数据 ID" msgstr "Template Data ID" -#: pipeline/models.py:480 +#: pipeline/models.py:492 msgid "添加日期" msgstr "Datetime added" -#: pipeline/models.py:489 +#: pipeline/models.py:501 msgid "对应模板 ID" msgstr "Template ID" -#: pipeline/models.py:490 +#: pipeline/models.py:502 msgid "方案唯一ID" msgstr "Schema Unique ID" -#: pipeline/models.py:491 +#: pipeline/models.py:503 msgid "方案名称" msgstr "Schema Name" -#: pipeline/models.py:493 +#: pipeline/models.py:505 msgid "方案数据" msgstr "Schema Data" -#: pipeline/contrib/statistics/models.py:23 -#: pipeline/contrib/statistics/models.py:58 pipeline/models.py:575 +#: pipeline/contrib/statistics/models.py:35 +#: pipeline/contrib/statistics/models.py:70 pipeline/models.py:587 msgid "实例ID" msgstr "Instance ID" -#: pipeline/models.py:576 +#: pipeline/models.py:588 msgid "实例名称" msgstr "Instance Name" -#: pipeline/models.py:579 +#: pipeline/models.py:591 msgid "执行者" msgstr "Executor" -#: pipeline/models.py:580 +#: pipeline/models.py:592 msgid "启动时间" msgstr "Date Started" -#: pipeline/engine/models/core.py:896 -#: pipeline/engine/models/loop_activity.py:57 pipeline/models.py:581 +#: pipeline/engine/models/core.py:908 +#: pipeline/engine/models/loop_activity.py:68 pipeline/models.py:593 msgid "结束时间" msgstr "Date Finished" -#: pipeline/models.py:583 +#: pipeline/models.py:595 msgid "是否已经启动" msgstr "Started" -#: pipeline/models.py:584 +#: pipeline/models.py:596 msgid "是否已经完成" msgstr "Finished" -#: pipeline/models.py:586 +#: pipeline/models.py:598 msgid "是否已经删除" msgstr "Deleted" -#: pipeline/models.py:588 +#: pipeline/models.py:600 msgid "表示当前实例是否删除" msgstr "Deleted" -#: pipeline/models.py:593 +#: pipeline/models.py:605 msgid "实例结构数据,指向实例对应的模板的结构数据" msgstr "Template data for this instance" -#: pipeline/models.py:599 +#: pipeline/models.py:611 msgid "用于实例执行的结构数据" msgstr "Used for execution" -#: pipeline/models.py:605 +#: pipeline/models.py:617 msgid "提前计算好的一些流程结构数据" msgstr "Some structure info have been precomputed" -#: pipeline/models.py:611 pipeline/models.py:612 +#: pipeline/models.py:623 pipeline/models.py:624 msgid "Pipeline实例" msgstr "Pipeline Instance" -#: pipeline/models.py:772 +#: pipeline/models.py:784 msgid "变量编码" msgstr "Variable Code" -#: pipeline/models.py:773 +#: pipeline/models.py:785 msgid "变量是否可用" msgstr "Available" -#: pipeline/models.py:776 pipeline/models.py:777 +#: pipeline/models.py:788 pipeline/models.py:789 msgid "Variable变量" msgstr "Variable" -#: pipeline/component_framework/models.py:28 -#: pipeline/contrib/statistics/models.py:7 -#: pipeline/contrib/statistics/models.py:22 +#: pipeline/component_framework/models.py:40 +#: pipeline/contrib/statistics/models.py:19 +#: pipeline/contrib/statistics/models.py:34 msgid "组件编码" msgstr "Component Code" -#: pipeline/component_framework/models.py:29 +#: pipeline/component_framework/models.py:41 msgid "组件名称" msgstr "Component Name" -#: pipeline/component_framework/models.py:30 +#: pipeline/component_framework/models.py:42 msgid "组件是否可用" msgstr "Available" -#: pipeline/component_framework/models.py:35 -#: pipeline/component_framework/models.py:36 +#: pipeline/component_framework/models.py:47 +#: pipeline/component_framework/models.py:48 msgid "组件 Component" msgstr "Component" -#: pipeline/contrib/periodic_task/models.py:23 +#: pipeline/contrib/periodic_task/models.py:35 msgid "Days" msgstr "Days" -#: pipeline/contrib/periodic_task/models.py:24 +#: pipeline/contrib/periodic_task/models.py:36 msgid "Hours" msgstr "Hours" -#: pipeline/contrib/periodic_task/models.py:25 +#: pipeline/contrib/periodic_task/models.py:37 msgid "Minutes" msgstr "Minutes" -#: pipeline/contrib/periodic_task/models.py:26 +#: pipeline/contrib/periodic_task/models.py:38 msgid "Seconds" msgstr "Seconds" -#: pipeline/contrib/periodic_task/models.py:27 +#: pipeline/contrib/periodic_task/models.py:39 msgid "Microseconds" msgstr "Microseconds" -#: pipeline/contrib/periodic_task/models.py:32 +#: pipeline/contrib/periodic_task/models.py:44 msgid "every" msgstr "every" -#: pipeline/contrib/periodic_task/models.py:34 +#: pipeline/contrib/periodic_task/models.py:46 msgid "period" msgstr "period" -#: pipeline/contrib/periodic_task/models.py:38 -#: pipeline/contrib/periodic_task/models.py:157 +#: pipeline/contrib/periodic_task/models.py:50 +#: pipeline/contrib/periodic_task/models.py:169 msgid "interval" msgstr "interval" -#: pipeline/contrib/periodic_task/models.py:39 +#: pipeline/contrib/periodic_task/models.py:51 msgid "intervals" msgstr "intervals" -#: pipeline/contrib/periodic_task/models.py:59 +#: pipeline/contrib/periodic_task/models.py:71 msgid "every {0.period_singular}" msgstr "every {0.period_singular}" -#: pipeline/contrib/periodic_task/models.py:60 +#: pipeline/contrib/periodic_task/models.py:72 msgid "every {0.every:d} {0.period}" msgstr "every {0.every:d} {0.period}" -#: pipeline/contrib/periodic_task/models.py:73 +#: pipeline/contrib/periodic_task/models.py:85 msgid "minute" msgstr "minute" -#: pipeline/contrib/periodic_task/models.py:74 +#: pipeline/contrib/periodic_task/models.py:86 msgid "hour" msgstr "hour" -#: pipeline/contrib/periodic_task/models.py:76 +#: pipeline/contrib/periodic_task/models.py:88 msgid "day of week" msgstr "day of week" -#: pipeline/contrib/periodic_task/models.py:79 +#: pipeline/contrib/periodic_task/models.py:91 msgid "day of month" msgstr "day of month" -#: pipeline/contrib/periodic_task/models.py:82 +#: pipeline/contrib/periodic_task/models.py:94 msgid "month of year" msgstr "month of year" -#: pipeline/contrib/periodic_task/models.py:87 -#: pipeline/contrib/periodic_task/models.py:161 +#: pipeline/contrib/periodic_task/models.py:99 +#: pipeline/contrib/periodic_task/models.py:173 msgid "crontab" msgstr "crontab" -#: pipeline/contrib/periodic_task/models.py:88 +#: pipeline/contrib/periodic_task/models.py:100 msgid "crontabs" msgstr "crontabs" -#: pipeline/contrib/periodic_task/models.py:151 +#: pipeline/contrib/periodic_task/models.py:163 msgid "name" msgstr "name" -#: pipeline/contrib/periodic_task/models.py:152 +#: pipeline/contrib/periodic_task/models.py:164 msgid "Useful description" msgstr "Useful description" -#: pipeline/contrib/periodic_task/models.py:154 +#: pipeline/contrib/periodic_task/models.py:166 msgid "task name" msgstr "task name" -#: pipeline/contrib/periodic_task/models.py:163 +#: pipeline/contrib/periodic_task/models.py:175 msgid "Use one of interval/crontab" msgstr "Use one of interval/crontab" -#: pipeline/contrib/periodic_task/models.py:166 +#: pipeline/contrib/periodic_task/models.py:178 msgid "Arguments" msgstr "Arguments" -#: pipeline/contrib/periodic_task/models.py:167 +#: pipeline/contrib/periodic_task/models.py:179 msgid "JSON encoded positional arguments" msgstr "JSON encoded positional arguments" -#: pipeline/contrib/periodic_task/models.py:170 +#: pipeline/contrib/periodic_task/models.py:182 msgid "Keyword arguments" msgstr "Keyword arguments" -#: pipeline/contrib/periodic_task/models.py:171 +#: pipeline/contrib/periodic_task/models.py:183 msgid "JSON encoded keyword arguments" msgstr "JSON encoded keyword arguments" -#: pipeline/contrib/periodic_task/models.py:174 +#: pipeline/contrib/periodic_task/models.py:186 msgid "queue" msgstr "queue" -#: pipeline/contrib/periodic_task/models.py:175 +#: pipeline/contrib/periodic_task/models.py:187 msgid "Queue defined in CELERY_QUEUES" msgstr "Queue defined in CELERY_QUEUES" -#: pipeline/contrib/periodic_task/models.py:178 +#: pipeline/contrib/periodic_task/models.py:190 msgid "exchange" msgstr "exchange" -#: pipeline/contrib/periodic_task/models.py:181 +#: pipeline/contrib/periodic_task/models.py:193 msgid "routing key" msgstr "routing key" -#: pipeline/contrib/periodic_task/models.py:184 +#: pipeline/contrib/periodic_task/models.py:196 msgid "expires" msgstr "expires" -#: pipeline/contrib/periodic_task/models.py:187 +#: pipeline/contrib/periodic_task/models.py:199 msgid "enabled" msgstr "enabled" -#: pipeline/contrib/periodic_task/models.py:197 +#: pipeline/contrib/periodic_task/models.py:209 msgid "description" msgstr "description" -#: pipeline/contrib/periodic_task/models.py:203 +#: pipeline/contrib/periodic_task/models.py:215 msgid "djcelery periodic task" msgstr "djcelery periodic task" -#: pipeline/contrib/periodic_task/models.py:204 +#: pipeline/contrib/periodic_task/models.py:216 msgid "djcelery periodic tasks" msgstr "djcelery periodic tasks" -#: pipeline/contrib/periodic_task/models.py:281 +#: pipeline/contrib/periodic_task/models.py:293 msgid "周期任务名称" msgstr "Periodic task name" -#: pipeline/contrib/periodic_task/models.py:286 +#: pipeline/contrib/periodic_task/models.py:298 msgid "周期任务对应的模板" msgstr "Periodic task template" -#: pipeline/contrib/periodic_task/models.py:289 +#: pipeline/contrib/periodic_task/models.py:301 msgid "调度策略" msgstr "Crontab" -#: pipeline/contrib/periodic_task/models.py:290 +#: pipeline/contrib/periodic_task/models.py:302 msgid "celery 周期任务实例" msgstr "Celery periodic task" -#: pipeline/contrib/periodic_task/models.py:294 +#: pipeline/contrib/periodic_task/models.py:306 msgid "用于创建流程实例的结构数据" msgstr "Flow data" -#: pipeline/contrib/periodic_task/models.py:296 +#: pipeline/contrib/periodic_task/models.py:308 msgid "执行次数" msgstr "Execution times" -#: pipeline/contrib/periodic_task/models.py:297 +#: pipeline/contrib/periodic_task/models.py:309 msgid "上次运行时间" msgstr "Last run at" -#: pipeline/contrib/periodic_task/models.py:299 +#: pipeline/contrib/periodic_task/models.py:311 msgid "额外信息" msgstr "Extra info" -#: pipeline/contrib/periodic_task/models.py:388 +#: pipeline/contrib/periodic_task/models.py:400 msgid "Pipeline 实例" msgstr "Pipeline instance" -#: pipeline/contrib/statistics/models.py:9 -#: pipeline/contrib/statistics/models.py:24 +#: pipeline/contrib/statistics/models.py:21 +#: pipeline/contrib/statistics/models.py:36 msgid "节点ID" msgstr "Node ID" -#: pipeline/contrib/statistics/models.py:10 -#: pipeline/contrib/statistics/models.py:25 +#: pipeline/contrib/statistics/models.py:22 +#: pipeline/contrib/statistics/models.py:37 msgid "是否子流程引用" msgstr "Subprocess referred" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "子流程堆栈" msgstr "Subprocess stack" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "JSON 格式的列表" msgstr "JSON format of list" -#: pipeline/contrib/statistics/models.py:14 -#: pipeline/contrib/statistics/models.py:15 +#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:27 msgid "Pipeline标准插件被引用数据" msgstr "Pipeline standard plugins reference" -#: pipeline/contrib/statistics/models.py:27 +#: pipeline/contrib/statistics/models.py:39 msgid "标准插件执行开始时间" msgstr "Standard Plugins execution started time" -#: pipeline/contrib/statistics/models.py:28 +#: pipeline/contrib/statistics/models.py:40 msgid "标准插件执行结束时间" msgstr "Standard Plugins execution finished time" -#: pipeline/contrib/statistics/models.py:29 +#: pipeline/contrib/statistics/models.py:41 msgid "标准插件执行耗时(s)" msgstr "Standard Plugins execution Elapsed(s)" -#: pipeline/contrib/statistics/models.py:30 +#: pipeline/contrib/statistics/models.py:42 msgid "是否执行成功" msgstr "Success" -#: pipeline/contrib/statistics/models.py:31 pipeline/engine/models/core.py:801 -#: pipeline/engine/models/core.py:898 +#: pipeline/contrib/statistics/models.py:43 pipeline/engine/models/core.py:813 +#: pipeline/engine/models/core.py:910 msgid "是否跳过" msgstr "Skip OR Not" -#: pipeline/contrib/statistics/models.py:32 +#: pipeline/contrib/statistics/models.py:44 msgid "是否重试记录" msgstr "Retried Record OR Not" -#: pipeline/contrib/statistics/models.py:35 -#: pipeline/contrib/statistics/models.py:36 +#: pipeline/contrib/statistics/models.py:47 +#: pipeline/contrib/statistics/models.py:48 msgid "Pipeline标准插件执行数据" msgstr "Standard Plugins execution data" -#: pipeline/contrib/statistics/models.py:45 -#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:57 +#: pipeline/contrib/statistics/models.py:71 msgid "标准插件总数" msgstr "Total number of Standard Plugins" -#: pipeline/contrib/statistics/models.py:46 -#: pipeline/contrib/statistics/models.py:60 +#: pipeline/contrib/statistics/models.py:58 +#: pipeline/contrib/statistics/models.py:72 msgid "子流程总数" msgstr "Subprocess Count" -#: pipeline/contrib/statistics/models.py:47 -#: pipeline/contrib/statistics/models.py:61 +#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:73 msgid "网关总数" msgstr "Gateways Count" -#: pipeline/contrib/statistics/models.py:50 -#: pipeline/contrib/statistics/models.py:51 +#: pipeline/contrib/statistics/models.py:62 +#: pipeline/contrib/statistics/models.py:63 msgid "Pipeline模板引用数据" msgstr "Pipeline Template Reference Data" -#: pipeline/contrib/statistics/models.py:64 -#: pipeline/contrib/statistics/models.py:65 +#: pipeline/contrib/statistics/models.py:76 +#: pipeline/contrib/statistics/models.py:77 msgid "Pipeline实例引用数据" msgstr "Pipeline Instance Reference Data" -#: pipeline/contrib/web/forms.py:37 +#: pipeline/contrib/web/forms.py:49 msgid "无效的节点 ID" msgstr "Invalid node ID" -#: pipeline/contrib/web/forms.py:46 +#: pipeline/contrib/web/forms.py:58 msgid "无效的实例 ID" msgstr "Invalid Task ID" -#: pipeline/contrib/web/forms.py:55 +#: pipeline/contrib/web/forms.py:67 msgid "无效的模板 ID" msgstr "Invalid flow ID" -#: pipeline/contrib/web/forms.py:72 +#: pipeline/contrib/web/forms.py:84 msgid "无效的组件代码" msgstr "Invalid component code" -#: pipeline/contrib/web/forms.py:85 +#: pipeline/contrib/web/forms.py:97 #, python-format msgid "该字段的类型必须为 %s" msgstr "The type of this field must be: %s" -#: pipeline/contrib/web/forms.py:87 -#: pipeline/contrib/web/webresource/resource.py:82 -#: pipeline/contrib/web/webresource/resource.py:101 -#: pipeline/contrib/web/webresource/resource.py:208 -#: pipeline/contrib/web/webresource/resource.py:228 +#: pipeline/contrib/web/forms.py:99 +#: pipeline/contrib/web/webresource/resource.py:94 +#: pipeline/contrib/web/webresource/resource.py:113 +#: pipeline/contrib/web/webresource/resource.py:220 +#: pipeline/contrib/web/webresource/resource.py:240 msgid "JSON 格式不合法" msgstr "JSON format invalid" -#: pipeline/contrib/web/views_v1.py:347 +#: pipeline/contrib/web/views_v1.py:359 msgid "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" msgstr "Timing node does not exist or has been finished, or task status does not allow reset timing" -#: pipeline/contrib/web/views_v1.py:352 +#: pipeline/contrib/web/views_v1.py:364 msgid "重试计时器失败,请稍后再次尝试" msgstr "Reset timing failed, please try again later" -#: pipeline/contrib/web/webresource/resource.py:201 -#: pipeline/contrib/web/webresource/resource.py:290 +#: pipeline/contrib/web/webresource/resource.py:213 +#: pipeline/contrib/web/webresource/resource.py:302 msgid "模板不存在" msgstr "Template does not exist" -#: pipeline/core/flow/activity.py:151 +#: pipeline/core/flow/activity.py:162 msgid "执行结果" msgstr "Execution Result" -#: pipeline/engine/admin.py:109 +#: pipeline/engine/admin.py:120 msgid "打开所选的功能" msgstr "Open Functions Selected" -#: pipeline/engine/admin.py:110 +#: pipeline/engine/admin.py:121 msgid "关闭所选的功能" msgstr "Close Functions Selected" -#: pipeline/engine/conf/function_switch.py:10 +#: pipeline/engine/conf/function_switch.py:21 msgid "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" msgstr "Used to freeze engine. In which period all signals and processes will be shielded and all request refused." -#: pipeline/engine/models/core.py:41 +#: pipeline/engine/models/core.py:53 msgid "pipeline 运行时数据" msgstr "Pipeline Runtime" -#: pipeline/engine/models/core.py:146 +#: pipeline/engine/models/core.py:158 msgid "Process ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:147 +#: pipeline/engine/models/core.py:159 msgid "根 pipeline 的 ID" msgstr "Root Process ID" -#: pipeline/engine/models/core.py:148 +#: pipeline/engine/models/core.py:160 msgid "当前推进到的节点的 ID" msgstr "Current Node ID" -#: pipeline/engine/models/core.py:149 +#: pipeline/engine/models/core.py:161 msgid "遇到该 ID 的节点就停止推进" msgstr "Pause Node ID" -#: pipeline/engine/models/core.py:150 +#: pipeline/engine/models/core.py:162 msgid "父 process 的 ID" msgstr "Father Process ID" -#: pipeline/engine/models/core.py:151 +#: pipeline/engine/models/core.py:163 msgid "收到子节点 ACK 的数量" msgstr "ACK Received" -#: pipeline/engine/models/core.py:152 +#: pipeline/engine/models/core.py:164 msgid "需要收到的子节点 ACK 的数量" msgstr "ACK Needed" -#: pipeline/engine/models/core.py:153 +#: pipeline/engine/models/core.py:165 msgid "该 process 是否还有效" msgstr "Available" -#: pipeline/engine/models/core.py:154 +#: pipeline/engine/models/core.py:166 msgid "该 process 是否正在休眠" msgstr "Sleep" -#: pipeline/engine/models/core.py:155 +#: pipeline/engine/models/core.py:167 msgid "该 process 是否被冻结" msgstr "Freeze" -#: pipeline/engine/models/core.py:531 +#: pipeline/engine/models/core.py:543 msgid "祖先 ID" msgstr "Ancestor ID" -#: pipeline/engine/models/core.py:532 +#: pipeline/engine/models/core.py:544 msgid "后代 ID" msgstr "Descendant ID" -#: pipeline/engine/models/core.py:533 +#: pipeline/engine/models/core.py:545 msgid "距离" msgstr "Distance" -#: pipeline/engine/models/core.py:796 pipeline/engine/models/core.py:843 -#: pipeline/engine/models/core.py:938 pipeline/engine/models/core.py:1096 -#: pipeline/engine/models/loop_activity.py:25 pipeline/log/models.py:38 +#: pipeline/engine/models/core.py:808 pipeline/engine/models/core.py:855 +#: pipeline/engine/models/core.py:950 pipeline/engine/models/core.py:1108 +#: pipeline/engine/models/loop_activity.py:36 pipeline/log/models.py:50 msgid "节点 ID" msgstr "Node ID" -#: pipeline/engine/models/core.py:797 +#: pipeline/engine/models/core.py:809 msgid "状态" msgstr "Status" -#: pipeline/engine/models/core.py:798 +#: pipeline/engine/models/core.py:810 msgid "节点名称" msgstr "Node Name" -#: pipeline/engine/models/core.py:799 +#: pipeline/engine/models/core.py:811 msgid "重试次数" msgstr "Retry Times" -#: pipeline/engine/models/core.py:800 pipeline/engine/models/core.py:897 +#: pipeline/engine/models/core.py:812 pipeline/engine/models/core.py:909 msgid "循环次数" msgstr "Circle Times" -#: pipeline/engine/models/core.py:802 +#: pipeline/engine/models/core.py:814 msgid "是否出错后自动忽略" msgstr "Error Ignorable" -#: pipeline/engine/models/core.py:805 +#: pipeline/engine/models/core.py:817 msgid "归档时间" msgstr "Date Archived" -#: pipeline/engine/models/core.py:806 +#: pipeline/engine/models/core.py:818 msgid "版本" msgstr "Version" -#: pipeline/engine/models/core.py:844 pipeline/engine/models/core.py:852 +#: pipeline/engine/models/core.py:856 pipeline/engine/models/core.py:864 msgid "输入数据" msgstr "Input Data" -#: pipeline/engine/models/core.py:845 pipeline/engine/models/core.py:853 +#: pipeline/engine/models/core.py:857 pipeline/engine/models/core.py:865 msgid "输出数据" msgstr "Output Data" -#: pipeline/engine/models/core.py:846 pipeline/engine/models/core.py:854 +#: pipeline/engine/models/core.py:858 pipeline/engine/models/core.py:866 msgid "异常数据" msgstr "Exceptions" -#: pipeline/engine/models/core.py:894 -#: pipeline/engine/models/loop_activity.py:54 -#: pipeline/engine/models/loop_activity.py:88 +#: pipeline/engine/models/core.py:906 +#: pipeline/engine/models/loop_activity.py:65 +#: pipeline/engine/models/loop_activity.py:99 msgid "节点 id" msgstr "Node ID" -#: pipeline/engine/models/core.py:937 -#: pipeline/engine/models/loop_activity.py:24 +#: pipeline/engine/models/core.py:949 +#: pipeline/engine/models/loop_activity.py:35 msgid "ID 节点ID+version" msgstr "ID Node+Version" -#: pipeline/engine/models/core.py:939 +#: pipeline/engine/models/core.py:951 msgid "Pipeline 进程 ID" msgstr "Pipeline process ID" -#: pipeline/engine/models/core.py:940 -#: pipeline/engine/models/loop_activity.py:26 +#: pipeline/engine/models/core.py:952 +#: pipeline/engine/models/loop_activity.py:37 msgid "被调度次数" msgstr "Schedule times" -#: pipeline/engine/models/core.py:941 -#: pipeline/engine/models/loop_activity.py:27 +#: pipeline/engine/models/core.py:953 +#: pipeline/engine/models/loop_activity.py:38 msgid "是否是回调型调度" msgstr "Schedulable" -#: pipeline/engine/models/core.py:942 -#: pipeline/engine/models/loop_activity.py:28 +#: pipeline/engine/models/core.py:954 +#: pipeline/engine/models/loop_activity.py:39 msgid "回调数据" msgstr "Callback Data" -#: pipeline/engine/models/core.py:943 +#: pipeline/engine/models/core.py:955 msgid "待调度服务" msgstr "To be Scheduled" -#: pipeline/engine/models/core.py:944 +#: pipeline/engine/models/core.py:956 msgid "是否已完成" msgstr "Finished" -#: pipeline/engine/models/core.py:945 -#: pipeline/engine/models/loop_activity.py:29 +#: pipeline/engine/models/core.py:957 +#: pipeline/engine/models/loop_activity.py:40 msgid "Activity 的版本" msgstr "Activity Version" -#: pipeline/engine/models/core.py:946 +#: pipeline/engine/models/core.py:958 msgid "是否正在被调度" msgstr "Dispatch" -#: pipeline/engine/models/core.py:1004 +#: pipeline/engine/models/core.py:1016 msgid "子流程 ID" msgstr "Subprocess ID" -#: pipeline/engine/models/core.py:1005 +#: pipeline/engine/models/core.py:1017 msgid "对应的进程 ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:1037 +#: pipeline/engine/models/core.py:1049 msgid "pipeline 进程 ID" msgstr "Pipeline Process ID" -#: pipeline/engine/models/core.py:1038 pipeline/engine/models/core.py:1065 -#: pipeline/engine/models/core.py:1097 +#: pipeline/engine/models/core.py:1050 pipeline/engine/models/core.py:1077 +#: pipeline/engine/models/core.py:1109 msgid "celery 任务 ID" msgstr "Celery Task ID" -#: pipeline/engine/models/core.py:1064 +#: pipeline/engine/models/core.py:1076 msgid "schedule ID" msgstr "schedule ID" -#: pipeline/engine/models/data.py:31 +#: pipeline/engine/models/data.py:43 msgid "对象唯一键" msgstr "Object Key" -#: pipeline/engine/models/data.py:32 +#: pipeline/engine/models/data.py:44 msgid "对象存储字段" msgstr "Object data" -#: pipeline/engine/models/function.py:43 +#: pipeline/engine/models/function.py:55 msgid "功能名称" msgstr "Function name" -#: pipeline/engine/models/function.py:44 +#: pipeline/engine/models/function.py:56 msgid "功能描述" msgstr "Functional Desc" -#: pipeline/engine/models/function.py:45 +#: pipeline/engine/models/function.py:57 msgid "是否激活" msgstr "Active" -#: pipeline/engine/models/loop_activity.py:30 +#: pipeline/engine/models/loop_activity.py:41 msgid "当前调度所处的循环计数" msgstr "Current Cycle Count" -#: pipeline/engine/models/loop_activity.py:55 +#: pipeline/engine/models/loop_activity.py:66 msgid "本次循环计数" msgstr "Cycle Count" -#: pipeline/engine/models/loop_activity.py:59 +#: pipeline/engine/models/loop_activity.py:70 msgid "执行状态" msgstr "Status" -#: pipeline/engine/models/loop_activity.py:89 +#: pipeline/engine/models/loop_activity.py:100 msgid "本次循环次数" msgstr "Planning Cycle Count" -#: pipeline/engine/models/loop_activity.py:90 +#: pipeline/engine/models/loop_activity.py:101 msgid "实际循环次数" msgstr "Real Cycle Count" -#: pipeline/engine/models/loop_activity.py:91 +#: pipeline/engine/models/loop_activity.py:102 msgid "所需循环次数" msgstr "Cycle Count Required" -#: pipeline/log/models.py:32 +#: pipeline/log/models.py:44 msgid "logger 名称" msgstr "Logger name" -#: pipeline/log/models.py:33 +#: pipeline/log/models.py:45 msgid "日志等级" msgstr "Log level" -#: pipeline/log/models.py:34 +#: pipeline/log/models.py:46 msgid "日志内容" msgstr "Log message" -#: pipeline/log/models.py:36 +#: pipeline/log/models.py:48 msgid "输出时间" msgstr "Log time" -#: pipeline/log/models.py:39 +#: pipeline/log/models.py:51 msgid "节点执行历史 ID" msgstr "Log history ID" -#: pipeline/validators/connection.py:30 +#: pipeline/validators/connection.py:41 #, python-format msgid "不能连接%s类型节点\n" msgstr "cannot connect to %s type nodes\n" -#: pipeline/validators/connection.py:32 +#: pipeline/validators/connection.py:43 #, python-format msgid "节点的入度最大为%s,最小为%s\n" msgstr "Incoming of node cannot larger than %s or smaller than %s\n" -#: pipeline/validators/connection.py:34 +#: pipeline/validators/connection.py:45 #, python-format msgid "节点的出度最大为%s,最小为%s\n" msgstr "Outgoing of node cannot larger than %s or smaller than %s\n" -#: pipeline/validators/gateway.py:117 pipeline/validators/gateway.py:168 +#: pipeline/validators/gateway.py:128 pipeline/validators/gateway.py:179 msgid "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" msgstr "Exclusive Gateways in a Parallel Gateway must be connected to one Converge Gateway" -#: pipeline/validators/gateway.py:178 +#: pipeline/validators/gateway.py:189 msgid "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" msgstr "All branches of one Exclusive Gateway must be connected to one Converge Gateway" -#: pipeline/validators/gateway.py:188 +#: pipeline/validators/gateway.py:199 msgid "非法网关,请检查其分支是否符合规则" msgstr "Invalid gateway, please check where the branch conforms the rules" -#: pipeline/validators/gateway.py:205 +#: pipeline/validators/gateway.py:216 msgid "汇聚网关只能汇聚来自同一个并行网关的分支" msgstr "All incoming of Converge Gateway must come from one Parallel Gateway" -#: pipeline/validators/gateway.py:210 +#: pipeline/validators/gateway.py:221 msgid "汇聚网关没有汇聚其对应的并行网关的所有分支" msgstr "Converge Gateway has not converge all branches" -#: pipeline/validators/gateway.py:313 +#: pipeline/validators/gateway.py:324 msgid "无法获取该网关距离开始节点的距离" msgstr "Cannot get the distance between gateway and start node" -#: pipeline_plugins/cmdb_ip_picker/query.py:60 -#: pipeline_plugins/cmdb_ip_picker/query.py:118 -#: pipeline_plugins/cmdb_ip_picker/utils.py:68 -#: pipeline_plugins/cmdb_ip_picker/utils.py:176 -#: pipeline_plugins/cmdb_ip_picker/utils.py:182 -#: pipeline_plugins/components/collections/sites/open/cc.py:16 +#: pipeline_plugins/cmdb_ip_picker/query.py:72 +#: pipeline_plugins/cmdb_ip_picker/query.py:130 +#: pipeline_plugins/cmdb_ip_picker/utils.py:80 +#: pipeline_plugins/cmdb_ip_picker/utils.py:188 +#: pipeline_plugins/cmdb_ip_picker/utils.py:194 +#: pipeline_plugins/components/collections/sites/open/cc.py:28 msgid "配置平台(CMDB)" msgstr "Conf System(CC)" -#: pipeline_plugins/cmdb_ip_picker/query.py:86 +#: pipeline_plugins/cmdb_ip_picker/query.py:98 msgid "管控平台(GSE)" msgstr "Control System(GSE)" -#: pipeline_plugins/cmdb_ip_picker/utils.py:192 +#: pipeline_plugins/cmdb_ip_picker/utils.py:204 msgid "集群" msgstr "Set" -#: pipeline_plugins/cmdb_ip_picker/utils.py:198 +#: pipeline_plugins/cmdb_ip_picker/utils.py:210 msgid "模块" msgstr "Module" -#: pipeline_plugins/components/collections/common.py:13 -#: pipeline_plugins/components/collections/controller.py:16 -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:10 -#: pipeline_plugins/components/collections/sites/ieod/bk.py:14 -#: pipeline_plugins/components/collections/sites/open/bk.py:14 +#: pipeline_plugins/components/collections/common.py:25 +#: pipeline_plugins/components/collections/controller.py:28 +#: pipeline_plugins/components/collections/sites/open/bk.py:26 msgid "蓝鲸服务(BK)" msgstr "BK Service(BK)" -#: pipeline_plugins/components/collections/common.py:45 +#: pipeline_plugins/components/collections/common.py:57 #, python-format msgid "请求异常,详细信息: %s" msgstr "Catch exception when request, details: %s" -#: pipeline_plugins/components/collections/common.py:56 +#: pipeline_plugins/components/collections/common.py:68 msgid "请求响应数据格式非 JSON" msgstr "Response data is not valid JSON" -#: pipeline_plugins/components/collections/common.py:62 +#: pipeline_plugins/components/collections/common.py:74 #, python-format msgid "请求失败,状态码: %s,响应: %s" msgstr "Request failed, status code: %s, response content: %s" -#: pipeline_plugins/components/collections/common.py:72 +#: pipeline_plugins/components/collections/common.py:84 msgid "响应内容" msgstr "Response Content" -#: pipeline_plugins/components/collections/common.py:73 +#: pipeline_plugins/components/collections/common.py:85 msgid "状态码" msgstr "Status Code" -#: pipeline_plugins/components/collections/common.py:78 +#: pipeline_plugins/components/collections/common.py:90 msgid "HTTP 请求" msgstr "HTTP Request" -#: pipeline_plugins/components/collections/common.py:79 +#: pipeline_plugins/components/collections/common.py:91 msgid "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" msgstr "Notes: 1.Request URL needs to be accessible under the current network, otherwise it will timeout failure 2.The response status code is between 200-300 (excluding 300), and the corresponding content is JSON format will be executed successfully" -#: pipeline_plugins/components/collections/controller.py:35 +#: pipeline_plugins/components/collections/controller.py:47 msgid "暂停" msgstr "Suspend" -#: pipeline_plugins/components/collections/controller.py:73 +#: pipeline_plugins/components/collections/controller.py:85 #, python-format msgid "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" msgstr "Input[%s] does not match format [second(s) or datetime(%%Y-%%m-%%d %%H:%%M:%%S)]" -#: pipeline_plugins/components/collections/controller.py:100 +#: pipeline_plugins/components/collections/controller.py:112 msgid "定时" msgstr "Timing" -#: pipeline_plugins/components/collections/test.py:15 -msgid "TEST" -msgstr "TEST" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:14 -msgid "GseAgent" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:139 -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:125 -msgid "安装" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:225 -msgid "卸载" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:77 -msgid "短信通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:78 -msgid "短信通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:79 -msgid "邮件通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:80 -msgid "邮件通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:81 -msgid "微信通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:82 -msgid "微信通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:87 -msgid "消息通知" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:10 -msgid "游戏区服管理(GCLOUD)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:71 -msgid "批量更新区服标注" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:131 -msgid "批量更新区服状态" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:167 -msgid "预发布大区" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:201 -msgid "发布大区" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:13 -msgid "游戏云存储平台(GCS)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:166 -msgid "权限申请" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:255 -msgid "权限回收提单" -msgstr "Privileges Revoke" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:349 -msgid "执行变更单据" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:442 -msgid "数据库备份" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:502 -msgid "变更提单" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:36 -#: pipeline_plugins/components/collections/sites/open/job.py:39 -msgid "作业平台(JOB)" -msgstr "JOB System(JOB)" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:85 -#: pipeline_plugins/components/collections/sites/clouds/job.py:386 -msgid "无法从 JOB 读取错误信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:89 -#: pipeline_plugins/components/collections/sites/clouds/job.py:390 -#, python-format -msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" -msgstr "todo: %s %s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:180 -#: pipeline_plugins/components/collections/sites/open/job.py:163 -msgid "执行作业" -msgstr "Execution JOB" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:239 -#: pipeline_plugins/components/collections/sites/open/job.py:231 -msgid "快速分发文件" -msgstr "Quick File Distribution" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:285 -#: pipeline_plugins/components/collections/sites/open/job.py:301 -msgid "快速执行脚本" -msgstr "Quick Script Execution" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:424 -msgid "本地文件列表为空,请确认本地文件是否已经上传" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:451 -#, python-format -msgid "获取 S3 对象下载链接失败:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:460 -msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:516 -msgid "分发本地文件" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:16 -msgid "蓝鲸监控(Monitor)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:92 -msgid "告警屏蔽" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:16 -msgid "GseProxy" -msgstr "GseProxy" - -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:11 -msgid "AutoTCM(TCM)" -msgstr "AutoTCM(TCM)" - -#: pipeline_plugins/components/collections/sites/ieod/bk.py:39 -#: pipeline_plugins/components/collections/sites/open/bk.py:39 +#: pipeline_plugins/components/collections/sites/open/bk.py:51 msgid "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" msgstr "todo" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:107 -#: pipeline_plugins/components/collections/sites/open/bk.py:107 +#: pipeline_plugins/components/collections/sites/open/bk.py:119 msgid "返回码" msgstr "Response Code" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:108 -#: pipeline_plugins/components/collections/sites/open/bk.py:108 +#: pipeline_plugins/components/collections/sites/open/bk.py:120 msgid "信息" msgstr "Message" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:147 -#: pipeline_plugins/components/collections/sites/open/bk.py:147 +#: pipeline_plugins/components/collections/sites/open/bk.py:159 msgid "发送通知" msgstr "Send Message" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:151 -msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:15 -msgid "负载均衡业务(CLB)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:143 -msgid "扫描域名证书" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:147 -msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:12 -msgid "企业微信(QYWEIXIN)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:36 -#, python-format -msgid "企业微信拉群失败,组件返回错误消息:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:52 -#, python-format -msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:62 -msgid "企业微信拉群" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:15 -msgid "消息通知服务(TOF)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:50 -msgid "获取员工直属Leader" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/open/bk.py:151 +#: pipeline_plugins/components/collections/sites/open/bk.py:163 msgid "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" msgstr "API Gateway defines the Interface Protocols for these message notification components and gives component examples (see components/generic/templates/cmsi/ in the project). However, the component content is not fully implemented and the user can override the component of this part based on the interface protocol. To reduce the difficulty of implementing a message notification component, the API Gateway provides solutions to update the component configuration online without writing a component code.Please check PaaS->API Gateway->Guide for details." -#: pipeline_plugins/components/collections/sites/open/cc.py:69 +#: pipeline_plugins/components/collections/sites/open/cc.py:81 msgid "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" msgstr "querying Conf System(CC) API cc.search_host showing there is IP which is not belong to current business" -#: pipeline_plugins/components/collections/sites/open/cc.py:174 +#: pipeline_plugins/components/collections/sites/open/cc.py:186 msgid "转移主机模块" msgstr "Transfer Host Module" -#: pipeline_plugins/components/collections/sites/open/cc.py:213 +#: pipeline_plugins/components/collections/sites/open/cc.py:225 msgid "所属运营商校验失败,请重试并修改为正确的所属运营商" msgstr "Isp name in invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:228 +#: pipeline_plugins/components/collections/sites/open/cc.py:240 msgid "所在国家校验失败,请重试并修改为正确的所在国家" msgstr "State name is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:241 +#: pipeline_plugins/components/collections/sites/open/cc.py:253 msgid "所在省份校验失败,请重试并修改为正确的所在省份" msgstr "Province name is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:266 +#: pipeline_plugins/components/collections/sites/open/cc.py:278 msgid "更新主机属性" msgstr "Update Host Property" -#: pipeline_plugins/components/collections/sites/open/cc.py:360 -#: pipeline_plugins/components/collections/sites/open/cc.py:364 +#: pipeline_plugins/components/collections/sites/open/cc.py:372 +#: pipeline_plugins/components/collections/sites/open/cc.py:376 #, python-format msgid "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" msgstr "No information about %s found, please check whether they exist in current business" -#: pipeline_plugins/components/collections/sites/open/cc.py:426 +#: pipeline_plugins/components/collections/sites/open/cc.py:438 #, python-format msgid "成功替换的机器: %s" msgstr "Machine replaced successfully: %s" -#: pipeline_plugins/components/collections/sites/open/cc.py:436 +#: pipeline_plugins/components/collections/sites/open/cc.py:448 msgid "故障机替换" msgstr "Fault Host Replacement" -#: pipeline_plugins/components/collections/sites/open/cc.py:475 +#: pipeline_plugins/components/collections/sites/open/cc.py:487 msgid "清空集群中主机" msgstr "Empty Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:516 +#: pipeline_plugins/components/collections/sites/open/cc.py:528 msgid "删除集群" msgstr "Delete Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:559 +#: pipeline_plugins/components/collections/sites/open/cc.py:571 msgid "修改集群服务状态" msgstr "Update Set Service Status" -#: pipeline_plugins/components/collections/sites/open/cc.py:602 -#: pipeline_plugins/components/collections/sites/open/cc.py:684 +#: pipeline_plugins/components/collections/sites/open/cc.py:614 +#: pipeline_plugins/components/collections/sites/open/cc.py:696 msgid "环境类型校验失败,请重试并修改为正确的环境类型" msgstr "Environment is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:617 -#: pipeline_plugins/components/collections/sites/open/cc.py:669 +#: pipeline_plugins/components/collections/sites/open/cc.py:629 +#: pipeline_plugins/components/collections/sites/open/cc.py:681 msgid "服务状态校验失败,请重试并修改为正确的服务状态" msgstr "Service status is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:636 +#: pipeline_plugins/components/collections/sites/open/cc.py:648 msgid "创建集群" msgstr "Create Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:713 +#: pipeline_plugins/components/collections/sites/open/cc.py:725 msgid "更新集群属性" msgstr "Update Set Attribute" -#: pipeline_plugins/components/collections/sites/open/cc.py:757 +#: pipeline_plugins/components/collections/sites/open/cc.py:769 msgid "模块类型校验失败,请重试并填写正确的模块类型" msgstr "Module type is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:786 +#: pipeline_plugins/components/collections/sites/open/cc.py:798 msgid "更新模块属性" msgstr "Update Module Attribute" -#: pipeline_plugins/components/collections/sites/open/cc.py:831 +#: pipeline_plugins/components/collections/sites/open/cc.py:843 msgid "转移主机至空闲机" msgstr "Transfer Host To Idle Module" -#: pipeline_plugins/components/collections/sites/open/job.py:88 +#: pipeline_plugins/components/collections/sites/open/job.py:50 +msgid "作业平台(JOB)" +msgstr "JOB System(JOB)" + +#: pipeline_plugins/components/collections/sites/open/job.py:99 #, python-format msgid "任务执行失败,前往作业平台(JOB)查看详情" msgstr "JOB task failed,GOTO(JOB)" -#: pipeline_plugins/components/collections/sites/open/job.py:99 +#: pipeline_plugins/components/collections/sites/open/job.py:110 msgid "JOB任务ID" msgstr "JOB Task ID" -#: pipeline_plugins/components/collections/sites/open/job.py:100 +#: pipeline_plugins/components/collections/sites/open/job.py:111 msgid "JOB任务链接" msgstr "JOB Task URL" -#: pipeline_plugins/components/query/common_query.py:33 +#: pipeline_plugins/components/collections/sites/open/job.py:174 +msgid "执行作业" +msgstr "Execution JOB" + +#: pipeline_plugins/components/collections/sites/open/job.py:242 +msgid "快速分发文件" +msgstr "Quick File Distribution" + +#: pipeline_plugins/components/collections/sites/open/job.py:312 +msgid "快速执行脚本" +msgstr "Quick Script Execution" + +#: pipeline_plugins/components/query/common_query.py:45 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" msgstr "Get topology tree of business[app_id=%s] from CC by API[cc.get_topo_tree_by_app_id] failed: %s" -#: pipeline_plugins/components/query/common_query.py:45 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:199 +#: pipeline_plugins/components/query/common_query.py:57 msgid "所有集群(all)" msgstr "Set(all)" -#: pipeline_plugins/components/query/common_query.py:69 +#: pipeline_plugins/components/query/common_query.py:81 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" msgstr "Get all module of business[app_id=%s] from CC by API[cc.get_modules] failed: %s" -#: pipeline_plugins/components/query/common_query.py:79 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:208 +#: pipeline_plugins/components/query/common_query.py:91 msgid "所有模块(all)" msgstr "Modules(all)" -#: pipeline_plugins/components/query/common_query.py:93 +#: pipeline_plugins/components/query/common_query.py:105 #, python-format msgid "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" msgstr "Get cloud list from CC by API[cc.get_plat_id] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:32 -#, python-format -msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" -msgstr "todo[biz_id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:42 -#, python-format -msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" -msgstr "tod[id=%s]" - -#: pipeline_plugins/components/query/sites/clouds/query.py:54 -#, python-format -msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" -msgstr "todo%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:77 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" -msgstr "todo[biz_id=%s, tcm_app_id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:104 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" -msgstr "todo[biz_id=%s, tcm_app_id=%s][id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:198 -msgid "文件上传失败, 文件大小超过2GB" -msgstr "todo" +#: pipeline_plugins/components/query/sites/open/query.py:270 +msgid "文件上传失败, 文件大小超过500M" +msgstr "Upload file failed, which size is greater than 500M" -#: pipeline_plugins/components/query/sites/clouds/query.py:204 -#: pipeline_plugins/components/query/sites/open/query.py:264 +#: pipeline_plugins/components/query/sites/open/query.py:276 msgid "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" msgstr "Upload file failed, which name should not contain chinese or \\/:*?\"<>|" -#: pipeline_plugins/components/query/sites/clouds/query.py:233 -#: pipeline_plugins/components/query/sites/open/query.py:301 +#: pipeline_plugins/components/query/sites/open/query.py:286 +msgid "非法业务 ID" +msgstr "Invalid business id" + +#: pipeline_plugins/components/query/sites/open/query.py:313 msgid "文件上传失败,路径不合法或者程序异常" msgstr "Upload file failed, which path is invalid" -#: pipeline_plugins/components/query/sites/clouds/query.py:243 -#: pipeline_plugins/components/query/sites/open/query.py:311 +#: pipeline_plugins/components/query/sites/open/query.py:323 #, python-format msgid "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" msgstr "Get job of business[app_id=%s] from JOB by API[job.get_task] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:266 -#: pipeline_plugins/components/query/sites/open/query.py:334 +#: pipeline_plugins/components/query/sites/open/query.py:346 #, python-format msgid "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" msgstr "Get job detail of business[app_id=%s] from JOB by API[job.get_task_detail] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:277 -#: pipeline_plugins/components/query/sites/open/query.py:345 +#: pipeline_plugins/components/query/sites/open/query.py:357 msgid "脚本" msgstr "Script" -#: pipeline_plugins/components/query/sites/clouds/query.py:278 -#: pipeline_plugins/components/query/sites/open/query.py:346 +#: pipeline_plugins/components/query/sites/open/query.py:358 msgid "文件" msgstr "File" -#: pipeline_plugins/components/query/sites/open/query.py:258 -msgid "文件上传失败, 文件大小超过500M" -msgstr "Upload file failed, which size is greater than 500M" - -#: pipeline_plugins/components/query/sites/open/query.py:274 -msgid "非法业务 ID" -msgstr "Invalid business id" - -#: pipeline_plugins/components/utils/common.py:44 +#: pipeline_plugins/components/utils/common.py:56 msgid "调用{system}接口{api_name}返回失败, params={params}, error={error}" msgstr "{system} API {api_name} returned false, params={params}, error={error}" -#: pipeline_plugins/components/utils/sites/clouds/utils.py:156 -#, python-format -msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" -msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s" - #~ msgid "循环测试" #~ msgstr "Cycle test" @@ -2079,3 +1794,174 @@ msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s #~ msgid "单据审核失败,请联系DBA查看详情" #~ msgstr "todo" +#~ msgid "调用创建app maker接口失败,错误信息:%s" +#~ msgstr "Creating app maker API called failed, error: %s" + +#~ msgid "调用创建app maker接口失败" +#~ msgstr "App maker API called failed" + +#~ msgid "调用修改app maker接口失败,错误信息:%s" +#~ msgstr "Updating app maker API called failed, error: %s" + +#~ msgid "调用修改app maker接口失败" +#~ msgstr "Updating app maker API called failed" + +#~ msgid "调用修改 LOGO 接口失败,错误信息:%s" +#~ msgstr "todo:%s" + +#~ msgid "调用修改 LOGO 接口失败" +#~ msgstr "todo" + +#~ msgid "调用远程服务失败,Http请求错误状态码:%s" +#~ msgstr "Remote service called failed, HTTP request error status error: %s" + +#~ msgid "蓝鲸智云企业版" +#~ msgstr "BK Enterprise Edition" + +#~ msgid "TEST" +#~ msgstr "TEST" + +#~ msgid "GseAgent" +#~ msgstr "todo" + +#~ msgid "安装" +#~ msgstr "todo" + +#~ msgid "卸载" +#~ msgstr "todo" + +#~ msgid "短信通知结果" +#~ msgstr "todo" + +#~ msgid "短信通知返回信息" +#~ msgstr "todo" + +#~ msgid "邮件通知结果" +#~ msgstr "todo" + +#~ msgid "邮件通知返回信息" +#~ msgstr "todo" + +#~ msgid "微信通知结果" +#~ msgstr "todo" + +#~ msgid "微信通知返回信息" +#~ msgstr "todo" + +#~ msgid "消息通知" +#~ msgstr "todo" + +#~ msgid "游戏区服管理(GCLOUD)" +#~ msgstr "todo" + +#~ msgid "批量更新区服标注" +#~ msgstr "todo" + +#~ msgid "批量更新区服状态" +#~ msgstr "todo" + +#~ msgid "预发布大区" +#~ msgstr "todo" + +#~ msgid "发布大区" +#~ msgstr "todo" + +#~ msgid "游戏云存储平台(GCS)" +#~ msgstr "todo" + +#~ msgid "权限申请" +#~ msgstr "todo" + +#~ msgid "权限回收提单" +#~ msgstr "Privileges Revoke" + +#~ msgid "执行变更单据" +#~ msgstr "todo" + +#~ msgid "数据库备份" +#~ msgstr "todo" + +#~ msgid "变更提单" +#~ msgstr "todo" + +#~ msgid "无法从 JOB 读取错误信息" +#~ msgstr "todo" + +#~ msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" +#~ msgstr "todo: %s %s" + +#~ msgid "本地文件列表为空,请确认本地文件是否已经上传" +#~ msgstr "todo" + +#~ msgid "获取 S3 对象下载链接失败:%s" +#~ msgstr "todo:%s" + +#~ msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" +#~ msgstr "todo" + +#~ msgid "分发本地文件" +#~ msgstr "todo" + +#~ msgid "蓝鲸监控(Monitor)" +#~ msgstr "todo" + +#~ msgid "告警屏蔽" +#~ msgstr "todo" + +#~ msgid "GseProxy" +#~ msgstr "GseProxy" + +#~ msgid "AutoTCM(TCM)" +#~ msgstr "AutoTCM(TCM)" + +#~ msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" +#~ msgstr "todo" + +#~ msgid "负载均衡业务(CLB)" +#~ msgstr "todo" + +#~ msgid "扫描域名证书" +#~ msgstr "todo" + +#~ msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" +#~ msgstr "todo" + +#~ msgid "企业微信(QYWEIXIN)" +#~ msgstr "todo" + +#~ msgid "企业微信拉群失败,组件返回错误消息:%s" +#~ msgstr "todo:%s" + +#~ msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" +#~ msgstr "todo:%s" + +#~ msgid "企业微信拉群" +#~ msgstr "todo" + +#~ msgid "消息通知服务(TOF)" +#~ msgstr "todo" + +#~ msgid "获取员工直属Leader" +#~ msgstr "todo" + +#~ msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" +#~ msgstr "todo[biz_id=%s]%s" + +#~ msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" +#~ msgstr "tod[id=%s]" + +#~ msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" +#~ msgstr "todo%s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" +#~ msgstr "todo[biz_id=%s, tcm_app_id=%s]%s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" +#~ msgstr "todo[biz_id=%s, tcm_app_id=%s][id=%s]%s" + +#~ msgid "文件上传失败, 文件大小超过2GB" +#~ msgstr "todo" + +#~ msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" +#~ msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s" + diff --git a/locale/en/LC_MESSAGES/djangojs.mo b/locale/en/LC_MESSAGES/djangojs.mo index 2a82631b9f..3dce8af439 100644 Binary files a/locale/en/LC_MESSAGES/djangojs.mo and b/locale/en/LC_MESSAGES/djangojs.mo differ diff --git a/locale/en/LC_MESSAGES/djangojs.po b/locale/en/LC_MESSAGES/djangojs.po index f981e7c984..da3daabf26 100644 --- a/locale/en/LC_MESSAGES/djangojs.po +++ b/locale/en/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,3814 +17,3382 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:47 -#, javascript-format -msgid "Available %s" -msgstr "Available %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:53 -#, javascript-format -msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." -msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:69 -#, javascript-format -msgid "Type into this box to filter down the list of available %s." -msgstr "Type into this box to filter down the list of available %s." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:74 -msgid "Filter" -msgstr "Filter" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -msgid "Choose all" -msgstr "Choose all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -#, javascript-format -msgid "Click to choose all %s at once." -msgstr "Click to choose all %s at once." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:84 -msgid "Choose" -msgstr "Choose" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:86 -msgid "Remove" -msgstr "Remove" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:92 -#, javascript-format -msgid "Chosen %s" -msgstr "Chosen %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:98 -#, javascript-format -msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." -msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -msgid "Remove all" -msgstr "Remove all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -#, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "Click to remove all chosen %s at once." - -#: blueapps/conf/project_template/static/admin/js/actions.js:48 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:2 -msgid "%(sel)s of %(cnt)s selected" -msgid_plural "%(sel)s of %(cnt)s selected" -msgstr[0] "%(sel)s of %(cnt)s selected" -msgstr[1] "%(sel)s of %(cnt)s selected" - -#: blueapps/conf/project_template/static/admin/js/actions.js:117 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:4 -msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." -msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." - -#: blueapps/conf/project_template/static/admin/js/actions.js:129 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." -msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." - -#: blueapps/conf/project_template/static/admin/js/actions.js:131 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." -msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:74 -#, javascript-format -msgid "Note: You are %s hour ahead of server time." -msgid_plural "Note: You are %s hours ahead of server time." -msgstr[0] "Note: You are %s hour ahead of server time." -msgstr[1] "Note: You are %s hours ahead of server time." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:82 -#, javascript-format -msgid "Note: You are %s hour behind server time." -msgid_plural "Note: You are %s hours behind server time." -msgstr[0] "Note: You are %s hour behind server time." -msgstr[1] "Note: You are %s hour behind server time." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:109 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:160 -msgid "Now" -msgstr "Now" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:127 -msgid "Choose a Time" -msgstr "Choose a Time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:157 -msgid "Choose a time" -msgstr "Choose a time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:165 -msgid "Midnight" -msgstr "Midnight" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:170 -msgid "6 a.m." -msgstr "6 a.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:175 -msgid "Noon" -msgstr "Noon" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:180 -msgid "6 p.m." -msgstr "6 p.m" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:188 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:348 -msgid "Cancel" -msgstr "Cancel" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:253 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:333 -msgid "Today" -msgstr "Today" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:270 -msgid "Choose a Date" -msgstr "Choose a Date" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:327 -msgid "Yesterday" -msgstr "Yesterday" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:339 -msgid "Tomorrow" -msgstr "Tomorrow" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:12 -msgid "January" -msgstr "January" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:13 -msgid "February" -msgstr "February" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:14 -msgid "March" -msgstr "March" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:15 -msgid "April" -msgstr "April" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:16 -msgid "May" -msgstr "May" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:17 -msgid "June" -msgstr "June" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:18 -msgid "July" -msgstr "July" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:19 -msgid "August" -msgstr "August" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:20 -msgid "September" -msgstr "September" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:21 -msgid "October" -msgstr "October" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:22 -msgid "November" -msgstr "November" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:23 -msgid "December" -msgstr "December" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:26 -msgctxt "one letter Sunday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:27 -msgctxt "one letter Monday" -msgid "M" -msgstr "M" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:28 -msgctxt "one letter Tuesday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:29 -msgctxt "one letter Wednesday" -msgid "W" -msgstr "W" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:30 -msgctxt "one letter Thursday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:31 -msgctxt "one letter Friday" -msgid "F" -msgstr "F" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:32 -msgctxt "one letter Saturday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:10 -#: blueapps/conf/project_template/static/admin/js/collapse.js:21 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Show" -msgstr "Show" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:18 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Hide" -msgstr "Hide" - -#: blueapps/conf/project_template/static/remote/v3/assets/jquery-ui-1.11.0.custom/jquery-ui.min.js:10 -msgid "'" -msgstr "'" - -#: pipeline/blueflow/src/api/interceptors.js:40 +#: pipeline/blueflow/src/api/interceptors.js:51 msgid "接口数据返回为空" msgstr "No data returned by API" -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "接口异常," msgstr "API error, " -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "HTTP状态码:" msgstr "HTTP Status:" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:50 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:61 msgid "错误码" msgstr "ErrorCode" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:51 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:62 msgid "请输入 IP" msgstr "Please enter IP" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:56 -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:138 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:67 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:149 msgid "请输入名称" msgstr "Please enter a name" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:57 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:82 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:68 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:93 msgid "新建流程" msgstr "New Flow" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:58 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:69 msgid "编辑流程" msgstr "Edit Flow" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:59 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:137 -#: pipeline/blueflow/src/pages/config/index.vue:64 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:119 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:186 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:70 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:148 +#: pipeline/blueflow/src/pages/config/index.vue:75 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:130 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:116 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:197 msgid "保存" msgstr "Save" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:60 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:71 msgid "返回" msgstr "Return" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:137 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:148 msgid "工具" msgstr "Tools" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:139 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:200 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:150 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:211 msgid "开始" msgstr "Start" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:140 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:201 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:151 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:212 msgid "结束" msgstr "End" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:141 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:85 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:152 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:96 msgid "个" msgstr " " -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:192 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:203 msgid "复位" msgstr "Reset zoom" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:193 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:204 msgid "放大" msgstr "Zoom in" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:194 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:205 msgid "缩小" msgstr "Zoom out" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:195 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:206 msgid "节点框选" msgstr "Selection" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:196 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:207 msgid "排版" msgstr "Layout" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:197 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:118 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:115 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:208 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:129 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:126 msgid "全选" msgstr "Select All" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:198 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:209 msgid "反选" msgstr "Inverse Select" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:199 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:210 msgid "已添加" msgstr " Added" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:200 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:39 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:211 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:50 msgid "个节点" msgstr " Nodes" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:254 -#: pipeline/blueflow/src/store/modules/template.js:29 -#: pipeline/blueflow/src/store/modules/template.js:56 -#: pipeline/blueflow/src/store/modules/template.js:474 -#: pipeline/blueflow/src/store/modules/template.js:489 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:265 +#: pipeline/blueflow/src/store/modules/template.js:40 +#: pipeline/blueflow/src/store/modules/template.js:67 +#: pipeline/blueflow/src/store/modules/template.js:485 +#: pipeline/blueflow/src/store/modules/template.js:500 msgid "步骤1" msgstr "Stage1" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:452 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:463 msgid "排版自动保存" msgstr "Automatic saved" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:453 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:464 msgid "排版完成,原内容在本地缓存中" msgstr "Layout completed, see last version in the Local Caches" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:92 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:125 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:103 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:240 msgid "取消勾选" msgstr "Check to cancel" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:93 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:126 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:228 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:104 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:137 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 msgid "勾选参数作为全局变量" msgstr "Check to adding the parameter to Global Variables" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:34 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:154 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:199 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:45 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:165 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:322 msgid "请选择" msgstr "Please select" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:35 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:46 msgid "输入筛选条件,多条筛选条件换行隔开" msgstr "Enter filter condition, multiple filter condition are separated by line breaks" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:36 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:42 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 -#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:181 -#: pipeline/blueflow/src/main.js:62 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:47 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:53 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:122 +#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:192 +#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:71 msgid "必填项" msgstr "Required" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:38 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:99 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:119 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:49 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:130 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:124 msgid "已选择" msgstr " Selected" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:40 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:51 msgid "搜索节点" msgstr "Search Nodes" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:41 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:70 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:98 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:89 -#: pipeline/blueflow/src/components/common/base/NoData.vue:26 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:197 -#: pipeline/blueflow/src/pages/functor/index.vue:319 -#: pipeline/blueflow/src/pages/functor/index.vue:324 -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:52 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:121 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:81 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/base/NoData.vue:37 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:208 +#: pipeline/blueflow/src/pages/functor/index.vue:330 +#: pipeline/blueflow/src/pages/functor/index.vue:335 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 msgid "无数据" msgstr "No Data" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:16 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:27 msgid "搜索IP,多个以逗号隔开" msgstr "Search IP, multiple ips are separated by commas" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:30 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:41 msgid "(同时满足)" msgstr "(All match)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:31 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:42 msgid "增加一条筛选条件" msgstr "Add one filter condition" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:93 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 msgid "复制IP" msgstr "Copy IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:94 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 msgid "复制Agent未安装IP" msgstr "Copy Not Installed IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:95 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 msgid "清空IP" msgstr "Remove IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:96 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 msgid "清空Agent未安装IP" msgstr "Remove Not Installed IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:97 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:66 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:77 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:153 msgid "添加" msgstr "Add" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:98 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 msgid "更多操作" msgstr "More Operations" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 msgid "个静态IP(未安装agent" msgstr " Static IP(not installed " -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:101 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:112 msgid "个)" msgstr " )" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:102 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:67 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:78 msgid "云区域" msgstr "Cloud Area" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:103 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:68 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:94 -#: pipeline/blueflow/src/pages/audit/index.vue:161 -#: pipeline/blueflow/src/pages/functor/index.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:223 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:114 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:79 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:105 +#: pipeline/blueflow/src/pages/audit/index.vue:114 +#: pipeline/blueflow/src/pages/functor/index.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:199 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:251 msgid "状态" msgstr "Status" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:69 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:115 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:80 msgid "异常" msgstr "Exceptions" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:140 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:196 -#: pipeline/blueflow/src/pages/audit/index.vue:162 -#: pipeline/blueflow/src/pages/functor/index.vue:164 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:224 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:286 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:116 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:151 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:207 +#: pipeline/blueflow/src/pages/audit/index.vue:115 +#: pipeline/blueflow/src/pages/functor/index.vue:175 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 msgid "操作" msgstr "Operation" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:117 msgid "移除" msgstr "Remove" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:71 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:118 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:82 msgid "正常" msgstr "normal" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:119 msgid "无数据,点击" msgstr "No data, click" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:120 msgid "服务器" msgstr "Host" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:72 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:138 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:121 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:41 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:187 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:83 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:149 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:132 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:52 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:117 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:198 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:170 msgid "取消" msgstr "Cancel" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:57 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:68 msgid "静态IP" msgstr "Static IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:58 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:69 msgid "动态IP" msgstr "Dynamic IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:59 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:70 msgid "筛选条件" msgstr "Filter Condition" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:71 msgid "排除条件" msgstr "Exclusion condition" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:139 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:36 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:177 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:150 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:47 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 msgid "编辑" msgstr "Edit" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:141 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:37 -#: pipeline/blueflow/src/pages/appmaker/index.vue:85 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:97 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:116 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:152 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:48 +#: pipeline/blueflow/src/pages/appmaker/index.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:127 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 msgid "删除" msgstr "Delete" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:276 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:287 msgid "请求表头数据失败,使用预置表头" msgstr "Requesting table titles failed, please config columns" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:25 -#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:24 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:36 +#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:35 msgid "请选择日期时间" msgstr "Please select a datetime" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:38 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:49 msgid "要修改密码请点击后重新输入密码" msgstr "Please enter a new password when modifying" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:111 msgid "加载中" msgstr "Loading" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:195 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:154 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:206 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:165 msgid "请求数据失败" msgstr "Get data failed" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:80 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:137 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 msgid "点击上传" msgstr "Upload" -#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:23 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:172 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 +#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:34 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:256 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:326 msgid "高级搜索" msgstr "Advanced Search" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:14 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:25 msgid "您需要登录蓝鲸智云" msgstr "You need login BlueKing" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:15 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:26 msgid "立即登录" msgstr "Login" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:28 msgid "对不起,您没有当前应用的访问权限" msgstr "Sorry, you have no access permissions of this app" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:18 -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:18 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:29 msgid "请尝试如下操作:" msgstr "Please try the following operations:" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:30 msgid "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" msgstr "Contact system admin to add user or IP whitelist for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:26 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:37 msgid "对不起,您没有当前操作需要的的权限" msgstr "Sorry, you have no access permissions of this operation" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:27 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:40 msgid "1.联系业务运维为您添加" msgstr "1.Contact business maintainers to add " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:28 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:39 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:41 msgid "配置平台" msgstr "Conf System " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:29 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:40 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:42 msgid "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" msgstr "business roles like maintainer, productor, developer, tester" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:41 msgid "2.联系业务运维为您添加需要操作的流程模板的权限" msgstr "2.Contact business maintainers to add flow permissions for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:42 msgid "3.或者前往" msgstr "3.Or goto " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:32 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:33 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:43 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:44 msgid "创建属于自己的业务" msgstr "to Creating you own business" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:28 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:39 msgid "对不起,您没有业务权限" msgstr "Sorry, you have no access permissions of business" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:32 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:43 msgid "2.或者前往" msgstr "2.Or goto " -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:28 msgid "对不起,您没有当前应用的管理员权限" msgstr "Sorry, you have no management permissions of APP" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:30 msgid "联系“管理员”为您添加管理员权限" msgstr "Contact \"admin\" to add admin permissions for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:16 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:27 msgid "应用出现异常" msgstr "System error occurred" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:17 -#: pipeline/blueflow/src/utils/errorHandler.js:33 -#: pipeline/blueflow/src/utils/errorHandler.js:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:28 +#: pipeline/blueflow/src/utils/errorHandler.js:44 +#: pipeline/blueflow/src/utils/errorHandler.js:49 msgid "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" msgstr "System error occurred. Please record error scenario and contact developer, thanks!" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:29 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:40 msgid "QQ咨询" msgstr "QQ" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:30 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:41 msgid "蓝鲸官网" msgstr "Official Website" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:31 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:42 msgid "蓝鲸论坛" msgstr "Blueking Forum" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:32 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:43 msgid "蓝鲸智云 版权所有" msgstr " " -#: pipeline/blueflow/src/components/layout/Navigator.vue:75 +#: pipeline/blueflow/src/components/layout/Navigator.vue:86 msgid "职能化中心" msgstr "Functional" -#: pipeline/blueflow/src/components/layout/Navigator.vue:83 -#: pipeline/blueflow/src/pages/audit/index.vue:152 +#: pipeline/blueflow/src/components/layout/Navigator.vue:94 +#: pipeline/blueflow/src/pages/audit/index.vue:105 msgid "审计中心" msgstr "Audit" -#: pipeline/blueflow/src/components/layout/Navigator.vue:90 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:134 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:219 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/components/layout/Navigator.vue:101 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:145 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:203 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "流程模板" msgstr "Flows" -#: pipeline/blueflow/src/components/layout/Navigator.vue:94 -#: pipeline/blueflow/src/pages/functor/index.vue:196 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:278 +#: pipeline/blueflow/src/components/layout/Navigator.vue:105 +#: pipeline/blueflow/src/pages/functor/index.vue:207 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 msgid "业务流程" msgstr "Business Flow" -#: pipeline/blueflow/src/components/layout/Navigator.vue:99 -#: pipeline/blueflow/src/components/layout/Navigator.vue:136 -#: pipeline/blueflow/src/pages/functor/index.vue:200 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:279 +#: pipeline/blueflow/src/components/layout/Navigator.vue:110 +#: pipeline/blueflow/src/components/layout/Navigator.vue:147 +#: pipeline/blueflow/src/pages/functor/index.vue:211 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 msgid "公共流程" msgstr "Common Flow" -#: pipeline/blueflow/src/components/layout/Navigator.vue:108 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:171 +#: pipeline/blueflow/src/components/layout/Navigator.vue:119 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 msgid "周期任务" msgstr "Periodic Tasks" -#: pipeline/blueflow/src/components/layout/Navigator.vue:113 -#: pipeline/blueflow/src/components/layout/Navigator.vue:193 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:216 +#: pipeline/blueflow/src/components/layout/Navigator.vue:124 +#: pipeline/blueflow/src/components/layout/Navigator.vue:204 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:111 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 msgid "任务记录" msgstr "Tasks" -#: pipeline/blueflow/src/components/layout/Navigator.vue:118 +#: pipeline/blueflow/src/components/layout/Navigator.vue:129 msgid "业务配置" msgstr "Configs" -#: pipeline/blueflow/src/components/layout/Navigator.vue:123 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:83 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/components/layout/Navigator.vue:134 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:94 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:254 msgid "轻应用" msgstr "Mini-APP" -#: pipeline/blueflow/src/components/layout/Navigator.vue:127 +#: pipeline/blueflow/src/components/layout/Navigator.vue:138 msgid "管理员入口" msgstr "Admin Entrance" -#: pipeline/blueflow/src/components/layout/Navigator.vue:131 -#: pipeline/blueflow/src/pages/statistics/index.vue:56 +#: pipeline/blueflow/src/components/layout/Navigator.vue:142 +#: pipeline/blueflow/src/pages/statistics/index.vue:67 msgid "运营数据" msgstr "Analysis" -#: pipeline/blueflow/src/components/layout/Navigator.vue:155 +#: pipeline/blueflow/src/components/layout/Navigator.vue:166 msgid "logo-zh" msgstr "logo-en" -#: pipeline/blueflow/src/components/layout/Navigator.vue:157 +#: pipeline/blueflow/src/components/layout/Navigator.vue:168 msgid "帮助文档" msgstr "Help" -#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:14 +#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:25 msgid "没找到页面!" msgstr "Page not found!" -#: pipeline/blueflow/src/config/setting.js:47 +#: pipeline/blueflow/src/config/setting.js:58 msgid "提示" msgstr "Prompt" -#: pipeline/blueflow/src/constants/index.js:2 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:161 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:231 -#: pipeline/blueflow/src/pages/audit/index.vue:243 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:92 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:348 +#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:172 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:242 +#: pipeline/blueflow/src/pages/audit/index.vue:196 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:103 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:268 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:359 msgid "未执行" msgstr "Created" -#: pipeline/blueflow/src/constants/index.js:3 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:185 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:228 -#: pipeline/blueflow/src/pages/audit/index.vue:169 -#: pipeline/blueflow/src/pages/audit/index.vue:275 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:112 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:373 +#: pipeline/blueflow/src/constants/index.js:14 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:196 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:239 +#: pipeline/blueflow/src/pages/audit/index.vue:122 +#: pipeline/blueflow/src/pages/audit/index.vue:228 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:123 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:384 msgid "执行中" msgstr "Executing" -#: pipeline/blueflow/src/constants/index.js:4 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:189 -#: pipeline/blueflow/src/pages/audit/index.vue:170 -#: pipeline/blueflow/src/pages/audit/index.vue:279 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:117 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:178 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:209 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:171 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:189 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:675 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:377 +#: pipeline/blueflow/src/constants/index.js:15 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:200 +#: pipeline/blueflow/src/pages/audit/index.vue:123 +#: pipeline/blueflow/src/pages/audit/index.vue:232 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:220 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:182 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:200 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:686 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:388 msgid "暂停" msgstr "Suspend" -#: pipeline/blueflow/src/constants/index.js:5 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:193 -#: pipeline/blueflow/src/pages/audit/index.vue:283 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:122 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:381 +#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 +#: pipeline/blueflow/src/pages/audit/index.vue:236 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:133 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 msgid "节点暂停" msgstr "Node Suspended" -#: pipeline/blueflow/src/constants/index.js:6 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:197 -#: pipeline/blueflow/src/pages/audit/index.vue:287 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:127 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:385 +#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:208 +#: pipeline/blueflow/src/pages/audit/index.vue:240 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:138 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:396 msgid "失败" msgstr "Failed" -#: pipeline/blueflow/src/constants/index.js:7 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:155 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:225 -#: pipeline/blueflow/src/pages/audit/index.vue:237 -#: pipeline/blueflow/src/pages/functor/index.vue:265 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:84 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:259 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:342 +#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:166 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:190 +#: pipeline/blueflow/src/pages/functor/index.vue:276 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:95 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:270 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:353 msgid "完成" msgstr "Finished" -#: pipeline/blueflow/src/constants/index.js:8 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:201 -#: pipeline/blueflow/src/pages/audit/index.vue:291 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:163 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:389 +#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:212 +#: pipeline/blueflow/src/pages/audit/index.vue:244 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:174 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:400 msgid "撤销" msgstr "Revoke" -#: pipeline/blueflow/src/constants/index.js:12 +#: pipeline/blueflow/src/constants/index.js:23 msgid "开始节点" msgstr "Start Node" -#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/constants/index.js:24 msgid "结束节点" msgstr "End Node" -#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/constants/index.js:27 msgid "并行网关" msgstr "Parallel Gateway" -#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/constants/index.js:28 msgid "分支网关" msgstr "Exclusive Gateway" -#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/constants/index.js:29 msgid "汇聚网关" msgstr "Converge Gateway" -#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/constants/index.js:30 msgid "标准插件节点" msgstr "Standard Plugins Node" -#: pipeline/blueflow/src/constants/index.js:20 +#: pipeline/blueflow/src/constants/index.js:31 msgid "子流程节点" msgstr "Subprocess Node" -#: pipeline/blueflow/src/main.js:66 +#: pipeline/blueflow/src/main.js:77 msgid "流程名称不能为空" msgstr "Flow name cannot be empty" -#: pipeline/blueflow/src/main.js:67 +#: pipeline/blueflow/src/main.js:78 msgid "流程名称不能包含" msgstr "Flow name cannot contain " -#: pipeline/blueflow/src/main.js:67 pipeline/blueflow/src/main.js:72 -#: pipeline/blueflow/src/main.js:76 pipeline/blueflow/src/main.js:81 -#: pipeline/blueflow/src/main.js:99 pipeline/blueflow/src/main.js:104 -#: pipeline/blueflow/src/main.js:112 pipeline/blueflow/src/main.js:120 -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:78 pipeline/blueflow/src/main.js:83 +#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:92 +#: pipeline/blueflow/src/main.js:110 pipeline/blueflow/src/main.js:115 +#: pipeline/blueflow/src/main.js:123 pipeline/blueflow/src/main.js:131 +#: pipeline/blueflow/src/main.js:140 msgid "非法字符" msgstr " " -#: pipeline/blueflow/src/main.js:68 +#: pipeline/blueflow/src/main.js:79 msgid "流程名称长度不能超过" msgstr "Length of flow name cannot be larger than " -#: pipeline/blueflow/src/main.js:68 pipeline/blueflow/src/main.js:73 -#: pipeline/blueflow/src/main.js:77 pipeline/blueflow/src/main.js:82 -#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:100 -#: pipeline/blueflow/src/main.js:105 pipeline/blueflow/src/main.js:113 -#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:121 -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:79 pipeline/blueflow/src/main.js:84 +#: pipeline/blueflow/src/main.js:88 pipeline/blueflow/src/main.js:93 +#: pipeline/blueflow/src/main.js:98 pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:127 pipeline/blueflow/src/main.js:132 +#: pipeline/blueflow/src/main.js:141 msgid "个字符" msgstr " characters" -#: pipeline/blueflow/src/main.js:71 +#: pipeline/blueflow/src/main.js:82 msgid "节点名称不能为空" msgstr "Node name cannot be empty" -#: pipeline/blueflow/src/main.js:72 +#: pipeline/blueflow/src/main.js:83 msgid "节点名称不能包含" msgstr "Node name cannot contain " -#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/main.js:84 msgid "节点名称长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:76 +#: pipeline/blueflow/src/main.js:87 msgid "步骤名称不能包含" msgstr "Stage name cannot contain " -#: pipeline/blueflow/src/main.js:77 +#: pipeline/blueflow/src/main.js:88 msgid "步骤名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:80 +#: pipeline/blueflow/src/main.js:91 msgid "变量名称不能为空" msgstr "Variable name cannot be empty" -#: pipeline/blueflow/src/main.js:81 +#: pipeline/blueflow/src/main.js:92 msgid "变量名称不能包含" msgstr "Variable name cannot contain " -#: pipeline/blueflow/src/main.js:82 +#: pipeline/blueflow/src/main.js:93 msgid "变量名称长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:85 +#: pipeline/blueflow/src/main.js:96 msgid "变量KEY值不能为空" msgstr "KEY cannot be empty" -#: pipeline/blueflow/src/main.js:86 +#: pipeline/blueflow/src/main.js:97 msgid "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" msgstr "KEY is composed of letters, numbers, underline and cannot begin with number" -#: pipeline/blueflow/src/main.js:87 +#: pipeline/blueflow/src/main.js:98 msgid "变量KEY值长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:88 +#: pipeline/blueflow/src/main.js:99 msgid "变量KEY值已存在" msgstr "KEY cannot repeat" -#: pipeline/blueflow/src/main.js:91 +#: pipeline/blueflow/src/main.js:102 msgid "变量隐藏时默认值不能为空" msgstr "Default cannot be empty where variable is hide" -#: pipeline/blueflow/src/main.js:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:399 +#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:410 msgid "默认值不满足正则校验" msgstr "Default does not match validation" -#: pipeline/blueflow/src/main.js:95 +#: pipeline/blueflow/src/main.js:106 msgid "正则校验不是合法的正则表达式" msgstr "Regular validation invalid" -#: pipeline/blueflow/src/main.js:98 +#: pipeline/blueflow/src/main.js:109 msgid "任务名称不能为空" msgstr "Task name cannot be empty" -#: pipeline/blueflow/src/main.js:99 +#: pipeline/blueflow/src/main.js:110 msgid "任务名称不能包含" msgstr "Task name cannot contain " -#: pipeline/blueflow/src/main.js:100 +#: pipeline/blueflow/src/main.js:111 msgid "任务名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/main.js:114 msgid "方案名称不能为空" msgstr "Scheme name cannot be empty" -#: pipeline/blueflow/src/main.js:104 +#: pipeline/blueflow/src/main.js:115 msgid "方案名称不能包含" msgstr "Scheme name cannot contain " -#: pipeline/blueflow/src/main.js:105 +#: pipeline/blueflow/src/main.js:116 msgid "方案名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:108 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:135 +#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:146 msgid "流程模板不能为空" msgstr "Flow cannot be empty" -#: pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:122 msgid "应用名称不能为空" msgstr "Name cannot be empty" -#: pipeline/blueflow/src/main.js:112 +#: pipeline/blueflow/src/main.js:123 msgid "应用名称不能包含" msgstr "App name cannot contain " -#: pipeline/blueflow/src/main.js:113 +#: pipeline/blueflow/src/main.js:124 msgid "应用名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:116 +#: pipeline/blueflow/src/main.js:127 msgid "应用简介不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/main.js:130 msgid "定时流程名称不能为空" msgstr "Flow name cannot be empty" -#: pipeline/blueflow/src/main.js:120 +#: pipeline/blueflow/src/main.js:131 msgid "定时流程名称包含" msgstr "Flow name cannot contain " -#: pipeline/blueflow/src/main.js:121 +#: pipeline/blueflow/src/main.js:132 msgid "定时流程名称不能超过" msgstr "Length of flow name cannot be larger than" -#: pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:135 msgid "定时表达式不能为空" msgstr "Default cannot be empty where variable is hide" -#: pipeline/blueflow/src/main.js:125 +#: pipeline/blueflow/src/main.js:136 msgid "输入定时表达式非法,请校验" msgstr "Invalid crontab, check it please" -#: pipeline/blueflow/src/main.js:128 +#: pipeline/blueflow/src/main.js:139 msgid "本地缓存名称不能为空" msgstr "Name cannot be empty" -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:140 msgid "本地缓存名称包含" msgstr "Cache name contains " -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:141 msgid "本地缓存名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:38 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:49 msgid "流程模板:" msgstr "Flow:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:39 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:50 msgid "应用简介:" msgstr "App Introduction:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:56 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:67 msgid "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" msgstr "Mini-APP cannot be opened outside Blueking desktop, please open it in Blueking App market" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 -#: pipeline/blueflow/src/pages/appmaker/index.vue:83 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 +#: pipeline/blueflow/src/pages/appmaker/index.vue:94 msgid "新建轻应用" msgstr "New Mini-APP" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 msgid "修改轻应用" msgstr "Update Mini-APP" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:136 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:147 msgid "应用名称" msgstr "App Name" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:137 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:126 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:148 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:137 msgid "执行方案" msgstr "Execution Scheme" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:138 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:149 msgid "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" msgstr "You can add schemes when creating a task if the flow contains optional nodes.After selecting a scheme, you can only create tasks according to the fixed execution scheme with this Mini-APP." -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:139 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:150 msgid "应用简介" msgstr "Introduction" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:140 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:151 msgid "应用LOGO" msgstr "LOGO" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:141 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:152 msgid "点击更换" msgstr "Change" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:142 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:153 msgid "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" msgstr "Only JPG/PNG type files can be uploaded. The recommended size is 100px*100px, which cannot exceed 100K" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:206 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:217 msgid "图片大小不能超过 100K" msgstr "Size cannot exceed 100K" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:87 -#: pipeline/blueflow/src/pages/audit/index.vue:153 -#: pipeline/blueflow/src/pages/functor/index.vue:156 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:277 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 +#: pipeline/blueflow/src/pages/audit/index.vue:106 +#: pipeline/blueflow/src/pages/functor/index.vue:167 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 msgid "请输入ID或流程名称" msgstr "Please enter ID or flow name" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:88 -#: pipeline/blueflow/src/pages/audit/index.vue:155 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:218 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 +#: pipeline/blueflow/src/pages/audit/index.vue:108 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 msgid "执行开始" msgstr "Execution started" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:89 -#: pipeline/blueflow/src/pages/audit/index.vue:156 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:219 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 +#: pipeline/blueflow/src/pages/audit/index.vue:109 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 msgid "执行结束" msgstr "Execution finished" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:90 -#: pipeline/blueflow/src/pages/audit/index.vue:157 -#: pipeline/blueflow/src/pages/functor/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:128 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:95 -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:49 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:217 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:101 +#: pipeline/blueflow/src/pages/audit/index.vue:110 +#: pipeline/blueflow/src/pages/functor/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:294 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:139 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:107 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:60 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 msgid "任务名称" msgstr "Task Name" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:91 -#: pipeline/blueflow/src/pages/audit/index.vue:158 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:102 +#: pipeline/blueflow/src/pages/audit/index.vue:111 msgid "任务类型" msgstr "Task types" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:92 -#: pipeline/blueflow/src/pages/audit/index.vue:159 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:173 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:221 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:285 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:103 +#: pipeline/blueflow/src/pages/audit/index.vue:112 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:219 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 msgid "创建人" msgstr "Creator" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:93 -#: pipeline/blueflow/src/pages/audit/index.vue:160 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:222 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:104 +#: pipeline/blueflow/src/pages/audit/index.vue:113 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 msgid "执行人" msgstr "Executor" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:95 -#: pipeline/blueflow/src/pages/audit/index.vue:164 -#: pipeline/blueflow/src/pages/functor/index.vue:171 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:106 +#: pipeline/blueflow/src/pages/audit/index.vue:117 +#: pipeline/blueflow/src/pages/functor/index.vue:182 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 msgid "共" msgstr " " -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:96 -#: pipeline/blueflow/src/pages/audit/index.vue:165 -#: pipeline/blueflow/src/pages/functor/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:107 +#: pipeline/blueflow/src/pages/audit/index.vue:118 +#: pipeline/blueflow/src/pages/functor/index.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 msgid "条记录" msgstr "records" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:97 -#: pipeline/blueflow/src/pages/audit/index.vue:166 -#: pipeline/blueflow/src/pages/functor/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:108 +#: pipeline/blueflow/src/pages/audit/index.vue:119 +#: pipeline/blueflow/src/pages/functor/index.vue:184 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 msgid "," msgstr "," -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 -#: pipeline/blueflow/src/pages/audit/index.vue:167 -#: pipeline/blueflow/src/pages/functor/index.vue:174 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:109 +#: pipeline/blueflow/src/pages/audit/index.vue:120 +#: pipeline/blueflow/src/pages/functor/index.vue:185 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 msgid "当前第" msgstr "current" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 -#: pipeline/blueflow/src/pages/audit/index.vue:168 -#: pipeline/blueflow/src/pages/functor/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:110 +#: pipeline/blueflow/src/pages/audit/index.vue:121 +#: pipeline/blueflow/src/pages/functor/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 msgid "页" msgstr "page" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 -#: pipeline/blueflow/src/pages/audit/index.vue:294 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:135 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:215 +#: pipeline/blueflow/src/pages/audit/index.vue:247 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:146 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:403 msgid "未知" msgstr "Unknown" -#: pipeline/blueflow/src/pages/appmaker/index.vue:84 +#: pipeline/blueflow/src/pages/appmaker/index.vue:95 msgid "请输入轻应用名称" msgstr "Please enter name" -#: pipeline/blueflow/src/pages/appmaker/index.vue:86 +#: pipeline/blueflow/src/pages/appmaker/index.vue:97 msgid "确认删除轻应用?" msgstr "Are you sure to delete this APP?" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "未找到相关轻应用" msgstr "No Mini-APP found" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "暂未添加轻应用" msgstr "No Mini-APP found in business" -#: pipeline/blueflow/src/pages/audit/index.vue:154 -#: pipeline/blueflow/src/pages/functor/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:148 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:192 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:197 +#: pipeline/blueflow/src/pages/audit/index.vue:107 +#: pipeline/blueflow/src/pages/functor/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 msgid "所属业务" msgstr "Business" -#: pipeline/blueflow/src/pages/audit/index.vue:163 -#: pipeline/blueflow/src/pages/functor/index.vue:166 +#: pipeline/blueflow/src/pages/audit/index.vue:116 +#: pipeline/blueflow/src/pages/functor/index.vue:177 msgid "查看" msgstr "View" -#: pipeline/blueflow/src/pages/audit/index.vue:171 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:271 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:220 +#: pipeline/blueflow/src/pages/audit/index.vue:124 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 msgid "任务分类" msgstr "Task Category" -#: pipeline/blueflow/src/pages/audit/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 +#: pipeline/blueflow/src/pages/audit/index.vue:125 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:205 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:249 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:323 msgid "搜索" msgstr "Search" -#: pipeline/blueflow/src/pages/audit/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/audit/index.vue:126 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:206 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:250 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:324 msgid "清空" msgstr "Empty" -#: pipeline/blueflow/src/pages/audit/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 +#: pipeline/blueflow/src/pages/audit/index.vue:127 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:317 msgid "请选择分类" msgstr "Choose category please" -#: pipeline/blueflow/src/pages/audit/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 +#: pipeline/blueflow/src/pages/audit/index.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:197 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:319 msgid "请输入创建人" msgstr "Input creator please" -#: pipeline/blueflow/src/pages/audit/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 msgid "请输入执行人" msgstr "Input executor please" -#: pipeline/blueflow/src/pages/audit/index.vue:177 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/audit/index.vue:130 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:198 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:202 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:248 msgid "请选择状态" msgstr "Choose status please" -#: pipeline/blueflow/src/pages/config/index.vue:59 +#: pipeline/blueflow/src/pages/config/index.vue:70 msgid "执行者配置" msgstr "Executor Config" -#: pipeline/blueflow/src/pages/config/index.vue:60 +#: pipeline/blueflow/src/pages/config/index.vue:71 msgid "任务执行者" msgstr "Task Executor" -#: pipeline/blueflow/src/pages/config/index.vue:61 +#: pipeline/blueflow/src/pages/config/index.vue:72 msgid "强制生效" msgstr "Force to take effect" -#: pipeline/blueflow/src/pages/config/index.vue:62 +#: pipeline/blueflow/src/pages/config/index.vue:73 msgid "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" msgstr "This field takes effect by default when a non-maintainer executes a task" -#: pipeline/blueflow/src/pages/config/index.vue:63 +#: pipeline/blueflow/src/pages/config/index.vue:74 msgid "开启后,所有任务都使用任务执行者身份来执行" msgstr "All tasks will be executed using identity of the task executor if opened" -#: pipeline/blueflow/src/pages/config/index.vue:104 -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:92 +#: pipeline/blueflow/src/pages/config/index.vue:115 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:103 msgid "保存成功" msgstr "Saved successfully" -#: pipeline/blueflow/src/pages/functor/index.vue:158 +#: pipeline/blueflow/src/pages/functor/index.vue:169 msgid "提单时间" msgstr "Date submitted" -#: pipeline/blueflow/src/pages/functor/index.vue:159 +#: pipeline/blueflow/src/pages/functor/index.vue:170 msgid "认领时间" msgstr "Claim ime" -#: pipeline/blueflow/src/pages/functor/index.vue:161 +#: pipeline/blueflow/src/pages/functor/index.vue:172 msgid "提单人" msgstr "Creator" -#: pipeline/blueflow/src/pages/functor/index.vue:162 +#: pipeline/blueflow/src/pages/functor/index.vue:173 msgid "认领人" msgstr "Claimant" -#: pipeline/blueflow/src/pages/functor/index.vue:165 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:98 +#: pipeline/blueflow/src/pages/functor/index.vue:176 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:110 msgid "认领" msgstr "Claim" -#: pipeline/blueflow/src/pages/functor/index.vue:167 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:39 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:287 +#: pipeline/blueflow/src/pages/functor/index.vue:178 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:50 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 msgid "新建任务" msgstr "NewTask" -#: pipeline/blueflow/src/pages/functor/index.vue:168 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:152 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:194 +#: pipeline/blueflow/src/pages/functor/index.vue:179 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 msgid "选择业务" msgstr "Business" -#: pipeline/blueflow/src/pages/functor/index.vue:169 +#: pipeline/blueflow/src/pages/functor/index.vue:180 msgid "选择模板" msgstr "Flow" -#: pipeline/blueflow/src/pages/functor/index.vue:170 +#: pipeline/blueflow/src/pages/functor/index.vue:181 msgid "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" msgstr "If there is no flow you want, please contact business maintainers to add 'New Task' permission for you or all the functors" -#: pipeline/blueflow/src/pages/functor/index.vue:268 +#: pipeline/blueflow/src/pages/functor/index.vue:279 msgid "未认领" msgstr "Submitted" -#: pipeline/blueflow/src/pages/functor/index.vue:271 +#: pipeline/blueflow/src/pages/functor/index.vue:282 msgid "已驳回" msgstr "Rejected" -#: pipeline/blueflow/src/pages/functor/index.vue:390 +#: pipeline/blueflow/src/pages/functor/index.vue:401 msgid " 无数据 " msgstr " No Data " -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:80 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:91 msgid "进入" msgstr "Enter" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:81 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:92 msgid "执行任务" msgstr "Execution Task" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:84 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:95 msgid "次" msgstr " " -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:66 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:77 msgid "快速新建任务" msgstr "New Task Quickly" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:67 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:78 msgid "取消常用流程" msgstr "cancel commonly used flow" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:68 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:118 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:79 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:129 msgid "添加常用流程" msgstr "Add Flows" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:69 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:80 msgid "业务下无常用流程," msgstr "No commonly used flow found in business. " -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:70 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:81 msgid "立即添加" msgstr "Add now" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:139 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:150 msgid "业务下无流程模板,为您跳转至新建流程" msgstr "No flow found in business, jump to Flows page for you" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:112 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 msgid "请输入流程名称" msgstr "Please enter flow name" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:120 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:114 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:131 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:125 msgid "项" msgstr " " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:121 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:132 msgid ",最多可选" msgstr " , no more than " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:122 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:133 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:121 msgid "搜索结果为空" msgstr "Search result is empty" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:134 msgid "该业务下暂无流程," msgstr "No flow found in business. " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:124 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:135 msgid "立即创建" msgstr "New Flow" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:175 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:186 msgid "最多只能添加10项" msgstr "Flows selected must not more than 10" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:53 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:64 msgid "业务动态" msgstr "Timeline" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:54 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:65 msgid "查看更多" msgstr "More" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:55 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:66 msgid "查看详情" msgstr "Detail" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:56 -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:149 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 msgid "耗时" msgstr "time-consuming" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:78 msgid "创建了一个" msgstr "has created a" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:69 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:80 msgid "执行了一个" msgstr "has executed a" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:72 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:83 msgid "任务" msgstr "task" -#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:24 +#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:35 msgid "任务分类占比" msgstr "Task Categories" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:26 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 msgid "确认删除" msgstr "Are you sure to delete " -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:32 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:43 msgid "?" msgstr "? " -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:66 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:77 msgid "周期信息" msgstr "Periodic Info" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:67 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:78 msgid "修改周期任务" msgstr "Modify Periodic Task" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:68 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:170 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:79 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 msgid "周期规则" msgstr "Corntab" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:69 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:80 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:108 msgid "参数信息" msgstr "Parameters" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:70 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:81 msgid "图片出错" msgstr "Rrror with image" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:76 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:157 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:168 msgid "task-zh" msgstr "task-en" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:106 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:117 msgid "输入周期表达式非法,请校验" msgstr "Invalid contab, check it please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:148 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:159 msgid "修改周期任务信息成功" msgstr "Modify periodic task success" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:153 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:164 msgid "修改周期任务参数成功,但表达式修改未成功,请重试" msgstr "Can not modify crontab, retry please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:158 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:169 msgid "修改周期任务表达式成功,但任务参数未修改成功,请重试" msgstr "Can not modify constants, retry please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:194 msgid "修改周期任务失败,请联系管理员" msgstr "Modify Periodic task failed, contact admin please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:178 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:189 msgid "修改周期任务表达式成功" msgstr "Modify crontab success" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:169 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 msgid "上次运行时间" msgstr "Last run at" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:208 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:219 msgid "启动" msgstr "Activate" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:179 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 msgid "运行次数" msgstr "Run times" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:196 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 msgid "请输入任务名称" msgstr "Please enter ID or task name" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:94 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:102 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:178 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:200 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:113 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:189 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:325 msgid "名称" msgstr "Name" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:201 msgid "请暂停任务后再执行编辑操作" msgstr "Deactivate task before edit it" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:204 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:221 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 msgid "执行历史" msgstr "History" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:329 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:340 msgid "删除周期任务成功" msgstr "Task delete success" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:147 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 msgid "轻应用分类" msgstr "Mini-APP Category" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:149 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 msgid "轻应用创建时间" msgstr "Creation Date: " -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:150 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 msgid "轻应用详情" msgstr "Mini-APP Detail" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:151 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:274 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:193 -msgid "选择分类" -msgstr "Category" - -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:153 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 +msgid "选择分类" +msgstr "Category" + +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:164 msgid "选择时间" msgstr "Time" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:155 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:166 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "标准插件" msgstr "Standard Plugins" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:156 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:278 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:200 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:394 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:167 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:405 msgid "全部分类" msgstr "All Categories" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:201 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:386 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:397 msgid "全部业务" msgstr "All Businesses" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:169 msgid "轻应用名称" msgstr "App Name" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:170 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:220 msgid "创建时间" msgstr "Date Created" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 msgid "更新时间" msgstr "Date Updated" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:172 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 msgid "更新人" msgstr "Editor" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:56 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:173 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:215 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:67 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 msgid "分类" msgstr "Category" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:174 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:224 msgid "创建任务数" msgstr "Number Of Tasks Created" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:268 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 msgid "引用次数" msgstr "Reference Number" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:269 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:196 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 msgid "流程详情" msgstr "Flow Detail" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:270 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:274 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 msgid "执行耗时" msgstr "Time-consuming" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:271 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 msgid "任务详情" msgstr "Task Detail" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:195 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 msgid "时间范围" msgstr "Time Range" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 msgid "任务开始时间" msgstr "Task Execution Date" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:141 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 msgid "流程名称" msgstr "Flow Name" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:216 msgid "标准插件数" msgstr "Number of StandardPlugins" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:217 msgid "子流程数" msgstr "Number of SubProcess" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:301 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:218 msgid "网关数" msgstr "Number of Gateways" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:303 msgid "执行次数" msgstr "Number of executions" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:304 msgid "失败次数" msgstr "Number of failures" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:305 msgid "平均执行耗时(秒)" msgstr "Avg time-consuming(s)" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:306 msgid "失败率" msgstr "Failure rate" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:278 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 msgid "时间维度" msgstr "Time Dimension" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:279 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 msgid "天" msgstr "Day" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:301 msgid "月" msgstr "Month" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:302 msgid "耗时(秒)" msgstr "Time-consuming(s)" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:191 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 msgid "流程分类" msgstr "Flow Category" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:198 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 msgid "流程引用" msgstr "Flow Reference" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:214 msgid "业务" msgstr "Business" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:222 msgid "创建轻应用数" msgstr "Number Of Mini-APPs Created" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:223 msgid "被引用为子流程数" msgstr "Number Of Referred As Subprocess" -#: pipeline/blueflow/src/pages/statistics/index.vue:30 +#: pipeline/blueflow/src/pages/statistics/index.vue:41 msgid "流程统计" msgstr "Flows" -#: pipeline/blueflow/src/pages/statistics/index.vue:35 +#: pipeline/blueflow/src/pages/statistics/index.vue:46 msgid "任务统计" msgstr "Tasks" -#: pipeline/blueflow/src/pages/statistics/index.vue:40 +#: pipeline/blueflow/src/pages/statistics/index.vue:51 msgid "标准插件统计" msgstr "Standard Plugins" -#: pipeline/blueflow/src/pages/statistics/index.vue:45 +#: pipeline/blueflow/src/pages/statistics/index.vue:56 msgid "轻应用统计" msgstr "Mini-APPs" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:127 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:94 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:106 msgid "任务信息" msgstr "Task Info" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:129 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:140 msgid "流程类型" msgstr "Flow Type" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:130 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:141 msgid "默认任务流程" msgstr "Default Flow" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:131 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:142 msgid "职能化任务流程" msgstr "Functional Flow" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:133 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:144 msgid "上一步" msgstr "Previous" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:134 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:122 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:145 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:133 msgid "下一步" msgstr "Next" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:135 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:146 msgid "立即执行" msgstr "Immediately" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:136 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:147 msgid "周期执行" msgstr "Periodically" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:137 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:148 msgid "周期表达式" msgstr "Crontab" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:149 msgid "执行计划" msgstr "Execution Plan" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:116 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:127 msgid "执行方案列表" msgstr "Execution Scheme" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:93 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:280 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 msgid "新建" msgstr "New" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:120 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:131 msgid "取消全选" msgstr "Cancel All" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:123 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:134 msgid "执行方案保存" msgstr "Save Scheme" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:135 msgid "方案名称" msgstr "Scheme Name" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:125 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:136 msgid "预览模式:" msgstr "Preview Mode:" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:291 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:302 msgid "方案名称已存在" msgstr "Scheme name cannot repeat" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:326 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:337 msgid "方案添加成功" msgstr "Scheme saved successfully" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:401 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:412 msgid "方案删除成功" msgstr "Scheme deleted successfully" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:37 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:37 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:48 msgid "节点选择" msgstr "Node Selection" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:42 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:41 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:53 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:52 msgid "参数填写" msgstr "Parameter Filling" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:47 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:101 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:113 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:118 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:45 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:40 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:58 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:112 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:56 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:51 msgid "任务执行" msgstr "Task Execution" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:108 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:119 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:98 msgid "职能化认领" msgstr "Functional Claiming" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:145 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 msgid "执行详情" msgstr "Execution Detail" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:146 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 msgid "执行信息" msgstr "Execution Info" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:147 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 msgid "开始时间" msgstr "Date Started" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:148 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 msgid "结束时间" msgstr "Date Finished" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:150 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 msgid "失败后跳过" msgstr "Skipped" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:151 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:162 msgid "失败自动忽略" msgstr "Auto Ignored" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:152 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:224 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 msgid "输入参数" msgstr "Input Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:153 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:225 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:164 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 msgid "输出参数" msgstr "Output Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:154 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:100 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:165 msgid "参数名" msgstr "Name" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:155 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:159 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:166 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:59 msgid "参数值" msgstr "Value" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:167 msgid "异常信息" msgstr "Exceptions" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:168 msgid "执行记录" msgstr "Execution History" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:101 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:112 msgid "序号" msgstr "Index" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:345 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:350 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:356 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:361 msgid "是" msgstr "Yes" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:346 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:351 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:171 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:357 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:362 msgid "否" msgstr "No" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:172 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:244 msgid "手动重试" msgstr "Manual Retry" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:48 msgid "请选择执行分支" msgstr "Please select a execution branch" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:38 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:49 msgid "可选执行分支" msgstr "Branches" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:51 msgid "修改全局参数" msgstr "Modify Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:102 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:113 msgid "参数修改成功" msgstr "Modified successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:39 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:50 msgid "修改定时时间" msgstr "Reset Timing" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:40 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:51 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:51 msgid "确定" msgstr "OK" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:140 msgid "修改成功" msgstr "Updated successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:39 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:636 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:50 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:647 msgid "重试" msgstr "Retry" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:140 msgid "重试成功" msgstr "Retried successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:97 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:109 msgid "预览" msgstr "Preview" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:99 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:111 msgid "任务流程预览" msgstr "Preview Task Flow" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:157 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:183 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:168 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:194 msgid "执行" msgstr "Execution" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:177 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:669 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:681 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:188 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:680 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:692 msgid "继续" msgstr "Continue" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:218 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:229 msgid "查看参数" msgstr "Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:219 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:230 msgid "修改参数" msgstr "Modify Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:372 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:383 msgid "任务开始执行" msgstr "Task started" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:400 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:411 msgid "任务暂停成功" msgstr "Task suspended" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:429 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:440 msgid "任务继续成功" msgstr "Task Continued" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:448 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:459 msgid "任务撤销成功" msgstr "Task Revoked" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:471 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:494 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:482 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:505 msgid "跳过成功" msgstr "Skip successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:516 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:527 msgid "继续成功" msgstr "Continued successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:637 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:663 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:648 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:674 msgid "跳过" msgstr "Skip" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:638 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:649 msgid "流程模板中该标准插件节点未配置失败处理方式,不可操作" msgstr "There is not failure process set to this node when editing flow, you can not operate" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:657 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:668 msgid "修改时间" msgstr "Reset Timer" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:49 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:60 msgid "查看标准插件参数" msgstr "View parameters of Standard Plugins" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 msgid "请点击标准插件节点查看参数" msgstr "Please click Standard Plugins node to view parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:26 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:37 msgid "是否撤销该任务?" msgstr "Whether to revoke the task?" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:27 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:38 msgid "任务撤销" msgstr "Task Revoke" -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:48 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:59 msgid "任务克隆" msgstr "Task Clone" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:214 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 msgid "全部" msgstr "All" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:215 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 msgid "请输入ID或任务名称" msgstr "Please enter ID or task name" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 msgid "克隆" msgstr "Clone" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:252 msgid "创建方式" msgstr "Create Method" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:253 msgid "应用内" msgstr "APP" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:255 msgid "请选择创建方式" msgstr "Choose create method please" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:269 msgid "未完成" msgstr "Unfinished" -#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:138 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:552 +#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:563 msgid "输入值不满足正则校验" msgstr "Input does not match validation" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:218 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:55 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:66 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:84 msgid "基础信息" msgstr "Basic Info" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:220 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 msgid "节点名称" msgstr "Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:42 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 msgid "步骤名称" msgstr "Stage Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:222 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 msgid "自动忽略" msgstr "Auto Ignore" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:223 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 msgid "是否可选" msgstr "Optional" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:227 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 msgid "引用" msgstr "Referred" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:241 msgid "不能为空" msgstr "Cannot be empty" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:242 msgid "版本更新" msgstr "Update Version" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:243 msgid "手动跳过" msgstr "Manual Skip" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:245 msgid "失败处理" msgstr "Failure Processing" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:246 msgid "说明:" msgstr "Description: " -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:247 msgid "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" msgstr "Auto Ignore: this node will set to success automatically if failed;" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:248 msgid "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" msgstr "Manual Skip: you can skip this node if it failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:249 msgid "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" msgstr "Manual Skip: you can skip this node if it failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:250 msgid "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" msgstr "No failure process set, you won't be able to operate it if this node failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1021 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1032 msgid "变量KEY已存在" msgstr "KEY cannot repeat" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:85 msgid "复用变量" msgstr "Reuse Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:75 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:86 msgid "新建变量" msgstr "New" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:76 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:87 msgid "变量名称" msgstr "Variable Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:77 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:88 msgid "变量KEY" msgstr "Variable KEY" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:106 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:117 msgid "变量KEY已存在,请创建新变量" msgstr "KEY repeated, please use new variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:119 msgid "是否复用变量" msgstr "Whether To Reuse Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:143 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:72 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:126 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:25 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:83 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:36 msgid "全局变量" msgstr "Global Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 msgid "属性" msgstr "Attribute" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 msgid "输入" msgstr "Input" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 msgid "输出" msgstr "Output" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:160 msgid "属性:" msgstr "Attribute:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:161 msgid "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" msgstr "Format is like \"Source/Show\".Source type is Input means variables are created by the user or referenced by input parameters of Standard Plugins/SubProcess, Source type is Output means variables are created by referring output parameters of Standard Plugins/SubProcess;Show type means whether the variable is displayed when filling parameters, output type variables are always Hide." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:162 msgid "输出:" msgstr "Output: " -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:163 msgid "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" msgstr "Represent whether the variable will be one of output parameters of the flow, which can by referred by other flows using this flow as a subprocess." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:164 msgid "无数据,请手动新增变量或者勾选标准插件参数自动生成" msgstr "No Data" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:165 msgid "删除变量" msgstr "Delete Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:166 msgid "确认删除该变量?" msgstr "Are you sure to delete this variable?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:167 msgid "已复制" msgstr "Copied" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:168 msgid "复制" msgstr "Copy" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:185 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:173 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:196 msgid "显示" msgstr "Show" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:174 msgid "隐藏" msgstr "Hide" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:85 msgid "本地缓存" msgstr "Local Caches" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 msgid "替换" msgstr "Replace" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 msgid "保存时间" msgstr "Date Saved" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:109 msgid "无数据,请手动添加缓存或等待自动保存" msgstr "No data, please manually add a cache or wait for automatic save" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:99 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:110 msgid "替换模板" msgstr "Replacement" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:100 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:111 msgid "是否替换模板?" msgstr "Whether to replace the flow?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:114 msgid "简述:" msgstr "Introduction:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:115 msgid "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" msgstr "Local Caches can be used to record all information about the current flow, including node arrangement, global variables, the name, and attributes of the flow. The Caches support up to 50 recent records for each flow, which is stored in the localStorage of the local browser, and each user can only view and edit their own caches." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:118 msgid "重置模板" msgstr "Reset template" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:57 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:68 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:18 msgid "通知方式" msgstr "Notification Method" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:69 msgid "超时时间(分钟)" msgstr "Timeout(s) " -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:59 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:44 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:70 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:55 msgid "通知分组" msgstr "Notification Group" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:144 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 msgid "普通变量" msgstr "Common Variables" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 msgid "输入框" msgstr "Input" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:158 msgid "文本框" msgstr "Textarea" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:159 msgid "日期时间" msgstr "Datetime" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:160 msgid "整数" msgstr "Integer" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:161 msgid "IP选择器(简单版)" msgstr "IP Picker(Simple)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:151 -#: pipeline_plugins/variables/static/variables/password.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 +#: pipeline_plugins/variables/static/variables/password.js:18 msgid "密码" msgstr "Password" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:166 msgid "元变量" msgstr "Meta Variables" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 -#: pipeline_plugins/variables/static/variables/select.js:44 -#: pipeline_plugins/variables/static/variables/select_meta.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:168 +#: pipeline_plugins/variables/static/variables/select.js:55 +#: pipeline_plugins/variables/static/variables/select_meta.js:18 msgid "下拉框" msgstr "Select" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:179 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:190 msgid "说明" msgstr "Description" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:180 -#: pipeline_plugins/variables/static/variables/select_meta.js:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:191 +#: pipeline_plugins/variables/static/variables/select_meta.js:69 msgid "默认值" msgstr "Default" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:181 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:192 msgid "配置" msgstr "Config" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:182 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:193 msgid "编辑表格" msgstr "Edit Table" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:183 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:194 msgid "正则校验" msgstr "Regular Check" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:184 -#: pipeline_plugins/variables/static/variables/select_meta.js:43 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:195 +#: pipeline_plugins/variables/static/variables/select_meta.js:54 msgid "类型" msgstr "Type" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:260 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:271 msgid "组件" msgstr "Component" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:35 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:46 msgid "编辑变量" msgstr "Edit" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:89 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:100 msgid "流程编辑" msgstr "Flow Edit" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:90 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:101 msgid "离开页面" msgstr "Leave" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:102 msgid "系统不会保存您所做的更改,确认离开?" msgstr "System have not saved you change, are you going to leave?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:93 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:104 msgid "任务节点参数错误,请点击错误节点查看详情" msgstr "Parameters of task nodes raise error, please click error node to see details" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:94 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:105 msgid "删除本地缓存成功" msgstr "Local Caches deleted successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:106 msgid "该本地缓存不存在,删除失败" msgstr "Local Cache deleted failed because it does not exist" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:107 msgid "替换流程成功" msgstr "Flow Replaced successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:97 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:108 msgid "新增流程本地缓存成功" msgstr "Local Cache added successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:109 msgid "替换流程自动保存" msgstr "Replacement saved" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:70 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:81 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 msgid "权限管理" msgstr "Permissions" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:71 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:82 msgid "新建任务权限" msgstr "New Task" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:72 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:83 msgid "认领任务权限" msgstr "Claim Task" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:84 msgid "执行任务权限" msgstr "Execution Task" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:119 msgid "导出流程" msgstr "Export" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:109 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:120 msgid "选择流程" msgstr "Flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:111 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:122 msgid "请选择需要导出的流程" msgstr "Please select flows to export" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 msgid "上传文件" msgstr "Upload File" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:138 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 msgid "重新上传" msgstr "Re-upload" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:139 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 msgid "导入流程" msgstr "Import" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:140 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 msgid "导入列表" msgstr "Flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:143 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 msgid "是否覆盖" msgstr "Overwrite" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 msgid "上传了" msgstr "Uploaded " -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 msgid "条流程" msgstr " flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 msgid "只显示冲突项" msgstr "Show only conflicting items" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 msgid "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" msgstr "Flows imported inherit the ID in file, and the flow with the same ID in current business will be overwritten(If the flow with the same ID is not in current business, you cannot overwrite)." -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:161 msgid "导入的流程会使用新的流程ID,不会对现有的流程造成影响" msgstr "Flows imported use new ID, without affecting flows existed" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:162 msgid "模板文件上传为空" msgstr "The file is empty" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:163 msgid "模板上传内容不合法,请重新选择文件" msgstr "The content of file is illegal, please select the file again" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:164 msgid "该文件后缀不为.dat" msgstr "The file suffix is not .dat" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:165 msgid "其中" msgstr "And " -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:166 msgid "保留ID,并提交" msgstr "Keep ID and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:167 msgid "使用新ID, 并提交" msgstr "Use new ID and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:168 msgid "覆盖冲突项, 并提交" msgstr "Override conflict items and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:169 msgid "保留两者, 并提交" msgstr "Keep both and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:171 msgid "条流程与系统已有流程存在冲突" msgstr " conflict with existing flows" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:284 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 msgid "子流程更新" msgstr "Subprocess Updated" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 msgid "导入 V1 模板" msgstr "Import From V1" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 msgid "导出" msgstr "Export" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 msgid "导入" msgstr "Import" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 msgid "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" msgstr "No data, please contact business maintainer to add flow permissions for you if you are not a maintainer." -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:318 msgid "请选择子流程更新" msgstr "Choose subprocess status" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:320 msgid "来源" msgstr "Source" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:321 msgid "请选择来源" msgstr "Choose source please" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:327 msgid "搜索流程名称" msgstr "Search by flow name" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:347 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:358 msgid "无子流程" msgstr "Has No Subprocess" -#: pipeline/blueflow/src/utils/draft.js:5 +#: pipeline/blueflow/src/utils/draft.js:16 msgid "自动保存" msgstr "Automatic saved" -#: pipeline/blueflow/src/utils/errorHandler.js:13 +#: pipeline/blueflow/src/utils/errorHandler.js:24 msgid "当前访问的页面不存在" msgstr "Page not found" -#: pipeline/blueflow/src/utils/errorHandler.js:18 +#: pipeline/blueflow/src/utils/errorHandler.js:29 msgid "sorry,您没有访问权限!" msgstr "sorry, you have no access permissions!" -#: pipeline/blueflow/src/utils/errorHandler.js:23 -#: pipeline/blueflow/src/utils/errorHandler.js:28 +#: pipeline/blueflow/src/utils/errorHandler.js:34 +#: pipeline/blueflow/src/utils/errorHandler.js:39 msgid "Sorry,您的权限不足!" msgstr "Sorry, you have no permissions" -#: pipeline/blueflow/src/utils/tools.js:122 +#: pipeline/blueflow/src/utils/tools.js:133 msgid " 秒" msgstr " Second" -#: pipeline/blueflow/src/utils/tools.js:124 +#: pipeline/blueflow/src/utils/tools.js:135 msgid " 分" msgstr " Minute" -#: pipeline/blueflow/src/utils/tools.js:126 +#: pipeline/blueflow/src/utils/tools.js:137 msgid " 小时" msgstr " Hour" -#: pipeline/blueflow/src/utils/tools.js:128 +#: pipeline/blueflow/src/utils/tools.js:139 msgid " 天" msgstr " Day" -#: pipeline/blueflow/src/utils/validatePipeline.js:86 +#: pipeline/blueflow/src/utils/validatePipeline.js:97 msgid "只能添加输入连线" msgstr " can add input flow only" -#: pipeline/blueflow/src/utils/validatePipeline.js:92 +#: pipeline/blueflow/src/utils/validatePipeline.js:103 msgid "只能添加输出连线" msgstr " can add output flow only" -#: pipeline/blueflow/src/utils/validatePipeline.js:98 +#: pipeline/blueflow/src/utils/validatePipeline.js:109 msgid "不能连接" msgstr " cannot be connected to " -#: pipeline/blueflow/src/utils/validatePipeline.js:118 +#: pipeline/blueflow/src/utils/validatePipeline.js:129 msgid "相同节点不能回连" msgstr "Same node cannot be connected to self" -#: pipeline/blueflow/src/utils/validatePipeline.js:123 +#: pipeline/blueflow/src/utils/validatePipeline.js:134 msgid "重复添加连线" msgstr " cannot add repeated flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:126 +#: pipeline/blueflow/src/utils/validatePipeline.js:137 msgid "已达到" msgstr " has reached " -#: pipeline/blueflow/src/utils/validatePipeline.js:128 +#: pipeline/blueflow/src/utils/validatePipeline.js:139 msgid "最大输出连线条数" msgstr " max number of output flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:133 +#: pipeline/blueflow/src/utils/validatePipeline.js:144 msgid "最大输入连线条数" msgstr " max number of input flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:145 +#: pipeline/blueflow/src/utils/validatePipeline.js:156 msgid "在模板中只能添加一个" msgstr " can add just one in a flow template" -#: pipeline/blueflow/src/utils/validatePipeline.js:184 +#: pipeline/blueflow/src/utils/validatePipeline.js:195 msgid "至少需要" msgstr " need as least " -#: pipeline/blueflow/src/utils/validatePipeline.js:186 +#: pipeline/blueflow/src/utils/validatePipeline.js:197 msgid "条输入连线" msgstr " input flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:191 +#: pipeline/blueflow/src/utils/validatePipeline.js:202 msgid "条输出连线" msgstr " output flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:203 +#: pipeline/blueflow/src/utils/validatePipeline.js:214 msgid "请添加任务节点" msgstr "Please add a task node" -#: pipeline/blueflow/src/utils/validatePipeline.js:208 +#: pipeline/blueflow/src/utils/validatePipeline.js:219 msgid "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" msgstr "The sum of Parallel and Exclusive Gateway must be same with sum of Converge Gateway, and must be paired" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:18 msgid "请求方式" msgstr "Method" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:52 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:63 msgid "请输入正确的 URL" msgstr "Input a valid url please" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:10 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:21 msgid "微信" msgstr "Wechat" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:9 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:11 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:22 msgid "邮件" msgstr "Email" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:12 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:12 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:23 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:23 msgid "短信" msgstr "SMS" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:25 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:36 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:36 msgid "请至少选择一种通知方式" msgstr "Please select one notify method at lease" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:36 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:218 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:236 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:46 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:57 msgid "运维人员" msgstr "Maintainer" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:202 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:237 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:47 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:58 msgid "产品人员" msgstr "Productor" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:42 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:203 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:220 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:53 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:59 msgid "开发人员" msgstr "Developer" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:204 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:49 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:54 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:60 msgid "测试人员" msgstr "Tester" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:56 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:67 msgid "请至少选择一个通知分组" msgstr "Please select one receiver group ay lease" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:214 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:231 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:249 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:71 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:71 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:79 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:82 msgid "附加人员" msgstr "More Receivers" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:69 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:80 msgid "多个用 , 分隔" msgstr "are separated by [,]" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:61 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:102 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:102 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:88 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:113 msgid "通知主题" msgstr "Title" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:115 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:115 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:101 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:126 msgid "通知内容" msgstr "Content" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:18 msgid "定时时间" msgstr "Timing" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:8 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:19 msgid "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" msgstr "Seconds(s) or Datetime(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:16 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:27 msgid "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" msgstr "Fill in seconds(s) or datetime(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:18 msgid "脚本来源" msgstr "Script Source" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:10 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:21 msgid "手工录入" msgstr "Manual" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:22 msgid "业务脚本" msgstr "Business Script" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:12 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:23 msgid "公共脚本" msgstr "Common Script" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:46 msgid "脚本类型" msgstr "Script Type" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:59 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:63 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:70 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:74 msgid "请选择脚本类型" msgstr "Choose script Type" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:89 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:28 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:100 msgid "脚本内容" msgstr "Script Content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:102 msgid "填写执行脚本内容" msgstr "Please enter script content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:106 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:110 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:117 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:121 msgid "请输入脚本内容" msgstr "Please input script content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:136 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:187 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:147 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:198 msgid "脚本列表" msgstr "Script List" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:157 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:161 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:208 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:212 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:168 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:172 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:219 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:223 msgid "请选择脚本" msgstr "Choose script please" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:57 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:42 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:249 msgid "脚本参数" msgstr "Script Parameter" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:184 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:43 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:250 msgid "可为空" msgstr "Empty is valid" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:247 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:51 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:258 msgid "超时时间" msgstr "Timeout(s) " -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:248 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:52 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:259 msgid "单位为秒,为空时使用 JOB 默认值" msgstr "The unit is second, empty is valid, defaulted as same with JOB" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:260 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:64 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:271 msgid "请输入数字" msgstr "Please enter a number" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:272 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:67 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:76 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:37 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:283 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:78 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:48 msgid "目标IP" msgstr "Target IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:273 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:77 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:116 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:156 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:173 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:66 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:66 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:284 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:79 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:77 msgid "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP format must be one of [set name|module name|IP], [cloud area ID:IP] or [IP], multiple IP are separated by Line breaks;[IP] format must ensure the input LAN IP are unique in the business on Configuration System" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:286 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:81 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:46 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:297 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:92 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:57 msgid "目标账户" msgstr "Target Account" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:287 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:82 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:47 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:298 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:93 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:58 msgid "请输入在蓝鲸作业平台上注册的账户名" msgstr "Please enter the account name" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:18 msgid "源文件" msgstr "Source File" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:65 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:49 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:68 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:74 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:92 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:98 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:115 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:155 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:172 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:65 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:65 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:26 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:76 msgid "IP" msgstr "IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:40 msgid "文件路径" msgstr "File" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:30 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:41 msgid "多个请用换行分隔" msgstr "use link breaker to separate it" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:73 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:55 msgid "执行账户" msgstr "Account" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:95 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:55 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:55 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:106 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:66 msgid "目标路径" msgstr "Target Path" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:96 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:56 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:107 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:67 msgid "请输入绝对路径" msgstr "Please enter absolute path" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:18 msgid "本地文件" msgstr "Local Files" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:22 msgid "文件名不能包含中文和特殊字符且大小不能超过500M" msgstr "File's name cannot contain chinese character and size cannot be larger than 500M" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:38 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:49 msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP format must be one of [cloud area ID:IP] or [IP], multiple IP are separated by Line breaks;[IP] format must ensure the input LAN IP are unique in the business on Configuration System" -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:7 -msgid "云区域ID" -msgstr "Cloud Area ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:30 -msgid "proxy内网IP" -msgstr "Proxy inner IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:32 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:41 -msgid "可为空,为空时使用Agent安装APP中业务默认值" -msgstr "Empty is valid, default is the business default value on Agent APP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:39 -msgid "proxy外网IP" -msgstr "Proxy outer IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:48 -msgid "目标主机操作系统" -msgstr "Target host operating system" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:32 -msgid "linux" -msgstr "linux" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:51 -msgid "windows" -msgstr "windows" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:66 -msgid "目标主机认证方式" -msgstr "Target host verification method" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:49 -msgid "密码认证" -msgstr "password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:69 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:50 -msgid "密钥认证" -msgstr "key" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:84 -msgid "目标主机详情" -msgstr "Host Detail" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:94 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:215 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:232 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:250 -msgid "多个用,分隔" -msgstr "multiple are separated by ," - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:107 -msgid "ssh账号" -msgstr "ssh account" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:120 -msgid "ssh端口" -msgstr "ssh port" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:133 -msgid "ssh密码" -msgstr "ssh password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:134 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:122 -msgid "密码认证,则必填" -msgstr "Required if it is password authentication" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:142 -msgid "ssh密钥" -msgstr "ssh key" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:143 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:147 -msgid "密钥认证,则必填" -msgstr "Required if it is key authentication" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:31 -msgid "多个用,或换行符分隔" -msgstr "multiple are separated by , or line break" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:27 -msgid "通知人" -msgstr "Receivers" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:205 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:222 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:240 -msgid "合作商" -msgstr "Cooperation" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:7 -msgid "游戏ID" -msgstr "Game ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:20 -msgid "Region" -msgstr "Region" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:23 -msgid "上海" -msgstr "Shanghai" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:24 -msgid "香港" -msgstr "Hong Kong" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:25 -msgid "新加坡" -msgstr "Singapore" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:38 -msgid "访问账号" -msgstr "Access account" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:52 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:51 -msgid "访问密码" -msgstr "Access password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:65 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:64 -msgid "大区ID" -msgstr "Set ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:78 -msgid "区服ID(列表)" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:79 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:80 -msgid "整形,多个,或换行符分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:91 -msgid "服务态" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:93 -msgid "自动" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:94 -msgid "繁忙" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:95 -msgid "拥挤" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:96 -msgid "良好" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:97 -msgid "维护" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:93 -msgid "区服标注" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:96 -msgid "热" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:97 -msgid "荐" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:98 -msgid "新" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:99 -msgid "限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:100 -msgid "体验服" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:7 -msgid "GCS业务名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:8 -msgid "为空则使用在配置平台(CC)的业务名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:16 -msgid "DB类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:180 -msgid "应用类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:54 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:40 -msgid "备份选项" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:73 -msgid "字符集" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:95 -msgid "是否强制执行" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:113 -msgid "IP列表" -msgstr "IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:114 -msgid "IP列表,多个以逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:127 -msgid "变更详情" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:135 -msgid "SQL文件" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:148 -msgid "变更DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:161 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:100 -msgid "忽略DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:183 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:200 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:218 -msgid "变更描述" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:192 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:199 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:209 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:216 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:227 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:234 -msgid "关注人" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:16 -msgid "备份类型配置" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:23 -msgid "备份类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:83 -msgid "备份详情" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:92 -msgid "备份DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:108 -msgid "表名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:148 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:172 -msgid "目标参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:166 -msgid "IP/服ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:167 -msgid "IP/服ID列表,多个以逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_execute_bill.js:7 -msgid "单据ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:158 -msgid "访问发起IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:159 -msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:66 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:190 -msgid "目标域名/服ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:67 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:191 -msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:80 -msgid "DB名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:81 -msgid "支持通配符,多个请用 , 分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:16 -msgid "回收类型配置" -msgstr "Revoke Type Config" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:23 -msgid "回收类型" -msgstr "Revoke Type" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:25 -msgid "账号清理" -msgstr "Account Cleaning" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:26 -msgid "权限清理" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:40 -msgid "回收DB名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:76 -msgid "权限清理时必填,支持通配符,多个请用 , 分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:75 -msgid "回收表名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:110 -msgid "回收权限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:204 -msgid "用户名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:205 -msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:7 -msgid "作业模板" -msgstr "Job" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:25 -msgid "步骤参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:28 -msgid "没选中作业模板或当前作业模板脚本步骤为空" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:136 -msgid "ID" -msgstr "ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:49 -msgid "步骤类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:110 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:141 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:209 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:236 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:275 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:302 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:224 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:224 -msgid "请求后台接口异常:" -msgstr "Server API error:" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:130 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:27 -msgid "没选中作业模板或当前作业模板全局变量为空" -msgstr "No job selected or global variable are empty" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:144 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:33 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:33 -msgid "参数名称" -msgstr "Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:151 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:40 -msgid "参数类型" -msgstr "Type" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:7 -msgid "屏蔽开始时间" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:40 -msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" -msgstr "Fill in datetime(%Y-%m-%d %H:%M:%S)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:32 -msgid "屏蔽结束时间" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:57 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:184 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:316 -msgid "集群名称" -msgstr "Set Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:76 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:250 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:351 -msgid "模块名称" -msgstr "Module Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:30 -msgid "主机操作系统" -msgstr "Host operating system" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:47 -msgid "主机认证方式" -msgstr "Host verification method" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:65 -msgid "内网IP" -msgstr "Inner IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:66 -msgid "请输入内网IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:79 -msgid "外网IP" -msgstr "Outer IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:80 -msgid "请输入外网IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:94 -msgid "SSH账号" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:108 -msgid "SSH端口" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:121 -msgid "SSH密码" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:133 -msgid "请输入密码" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:146 -msgid "SSH密钥" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:160 -msgid "请输入密钥" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:7 -msgid "TCM业务" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:29 -msgid "模板" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:85 -msgid "参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:93 -msgid "步骤ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:12 -msgid "语音" -msgstr "Voice" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:72 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:72 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:83 msgid "填写用户名,多个用户名用 , 分隔" msgstr "Enter username, multiple are separated by [,]" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:87 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:87 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:98 msgid "通知分组与附加人员不可同时为空" msgstr "Notification Group and More Receivers cannot be empty at the same time" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:18 msgid "集群" msgstr "Set" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:18 msgid "父实例" msgstr "Parent Instance" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:37 msgid "集群信息" msgstr "Set Instance" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:18 msgid "主机详情" msgstr "Host Detail" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:19 msgid "请至少添加一条数据" msgstr "Please add one at least" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:16 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:27 msgid "故障机IP" msgstr "Fault Host IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:40 msgid "替换机IP" msgstr "Replacement Host IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:18 msgid "主机内网IP" msgstr "Host Inner IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:19 msgid "请输入主机内网IP,多个用换行符分隔" msgstr "Please enter host inner IP, multiple are separated by Line breaks" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:32 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:18 msgid "模块" msgstr "Module" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:40 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:51 msgid "转移方式" msgstr "Transfer Type" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:43 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:54 msgid "覆盖" msgstr "cover" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:44 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:55 msgid "追加" msgstr "increment" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:32 msgid "主机属性" msgstr "Host Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:22 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:33 msgid "请选择需要更新的主机属性" msgstr "Please select a host attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:45 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:56 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:56 msgid "属性值" msgstr "Attribute Value" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:46 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:57 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:57 msgid "请输入更新后的属性值" msgstr "Please enter a new attribute value" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:37 msgid "模块属性" msgstr "Module Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:38 msgid "请选择需要更新的模块属性" msgstr "Please select a module attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:37 msgid "集群属性" msgstr "Set Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:38 msgid "请选择需要更新的集群属性" msgstr "Please select a set attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:37 msgid "服务状态" msgstr "Service Status" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:40 msgid "开放" msgstr "Open" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:30 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:41 msgid "关闭" msgstr "Close" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/clb/scan_certificate.js:7 -msgid "扫描域名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:56 -msgid "描述" -msgstr "Desc" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:7 -msgid "群聊名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:20 -msgid "群聊成员" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:18 +msgid "作业模板" +msgstr "Job" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:22 -msgid "企业微信群成员,多个以逗号分隔" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:38 +msgid "没选中作业模板或当前作业模板全局变量为空" +msgstr "No job selected or global variable are empty" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:34 -msgid "推送消息" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:44 +msgid "参数名称" +msgstr "Name" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/tof/get_staff_leader.js:7 -msgid "员工英文名" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:51 +msgid "参数类型" +msgstr "Type" -#: pipeline_plugins/components/static/components/atoms/test/test.js:7 -#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:7 -msgid "选择服务器" -msgstr "IP" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:67 +msgid "描述" +msgstr "Desc" -#: pipeline_plugins/variables/static/variables/select.js:19 -#: pipeline_plugins/variables/static/variables/select.js:23 +#: pipeline_plugins/variables/static/variables/select.js:30 +#: pipeline_plugins/variables/static/variables/select.js:34 msgid "非法下拉框数据源,请检查您的配置" msgstr "Data source is invalid, please check the config" -#: pipeline_plugins/variables/static/variables/select_meta.js:14 +#: pipeline_plugins/variables/static/variables/select_meta.js:25 msgid "数据源" msgstr "Data source" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "自定义" msgstr "custom" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "远程数据源" msgstr "remote" -#: pipeline_plugins/variables/static/variables/select_meta.js:29 +#: pipeline_plugins/variables/static/variables/select_meta.js:40 msgid "选项" msgstr "Type" -#: pipeline_plugins/variables/static/variables/select_meta.js:31 +#: pipeline_plugins/variables/static/variables/select_meta.js:42 msgid "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" msgstr "Please enter data source, custom data should be like [{\"text\": \"\", \"value\": \"\"}...}], remote data requires a url that returns the format data." -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "单选" msgstr "single" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "多选" msgstr "multiple" -#: pipeline_plugins/variables/static/variables/select_meta.js:59 +#: pipeline_plugins/variables/static/variables/select_meta.js:70 msgid "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" msgstr "Please enter the default value, \"value\" format if single, \"value, value...\" format if multiple" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:14 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:31 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:31 +#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:18 +msgid "选择服务器" +msgstr "IP" + +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:42 msgid "填参方式" msgstr "Method" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:16 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:33 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:33 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:44 msgid "自定义输入" msgstr "Custom Enter" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:17 -msgid "选择集群和模块自动获取" -msgstr "Select Sets and Modules" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:18 -msgid "输入集群名和模块名自动获取" -msgstr "Enter Sets and Modules" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:47 -msgid "值类型" -msgstr "Value Type" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:50 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:69 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:75 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:93 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:149 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:166 -msgid "DNS" -msgstr "DNS" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:51 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:70 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:94 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:152 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:169 -msgid "服ID" -msgstr "Region ID" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:150 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:167 -msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" -msgstr "DNS format must be one of [IP#port] or domain, multiple are separated by line breaks" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:153 -msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" -msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:170 -msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" -msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:318 -msgid "多个用,分隔,all代表所有集群" -msgstr "Multiple are separated by [,], 'all' represent all sets" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:353 -msgid "多个用,分隔,all代表所有模块" -msgstr "Multiple are separated by [,], 'all' represent all modules" - -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:34 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:34 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:45 msgid "通过配置平台拓扑获取" msgstr "Select from CMDB topology" -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:99 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:110 msgid "拓扑树" msgstr "Topology" +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:177 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:228 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:235 +msgid "请求后台接口异常:" +msgstr "Server API error:" + +#~ msgid "Available %s" +#~ msgstr "Available %s" + +#~ msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." +#~ msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." + +#~ msgid "Type into this box to filter down the list of available %s." +#~ msgstr "Type into this box to filter down the list of available %s." + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Choose all" +#~ msgstr "Choose all" + +#~ msgid "Click to choose all %s at once." +#~ msgstr "Click to choose all %s at once." + +#~ msgid "Choose" +#~ msgstr "Choose" + +#~ msgid "Remove" +#~ msgstr "Remove" + +#~ msgid "Chosen %s" +#~ msgstr "Chosen %s" + +#~ msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." +#~ msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." + +#~ msgid "Remove all" +#~ msgstr "Remove all" + +#~ msgid "Click to remove all chosen %s at once." +#~ msgstr "Click to remove all chosen %s at once." + +#~ msgid "%(sel)s of %(cnt)s selected" +#~ msgid_plural "%(sel)s of %(cnt)s selected" +#~ msgstr[0] "%(sel)s of %(cnt)s selected" +#~ msgstr[1] "%(sel)s of %(cnt)s selected" + +#~ msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." +#~ msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." + +#~ msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." +#~ msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." + +#~ msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." +#~ msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." + +#~ msgid "Note: You are %s hour ahead of server time." +#~ msgid_plural "Note: You are %s hours ahead of server time." +#~ msgstr[0] "Note: You are %s hour ahead of server time." +#~ msgstr[1] "Note: You are %s hours ahead of server time." + +#~ msgid "Note: You are %s hour behind server time." +#~ msgid_plural "Note: You are %s hours behind server time." +#~ msgstr[0] "Note: You are %s hour behind server time." +#~ msgstr[1] "Note: You are %s hour behind server time." + +#~ msgid "Now" +#~ msgstr "Now" + +#~ msgid "Choose a Time" +#~ msgstr "Choose a Time" + +#~ msgid "Choose a time" +#~ msgstr "Choose a time" + +#~ msgid "Midnight" +#~ msgstr "Midnight" + +#~ msgid "6 a.m." +#~ msgstr "6 a.m." + +#~ msgid "Noon" +#~ msgstr "Noon" + +#~ msgid "6 p.m." +#~ msgstr "6 p.m" + +#~ msgid "Cancel" +#~ msgstr "Cancel" + +#~ msgid "Today" +#~ msgstr "Today" + +#~ msgid "Choose a Date" +#~ msgstr "Choose a Date" + +#~ msgid "Yesterday" +#~ msgstr "Yesterday" + +#~ msgid "Tomorrow" +#~ msgstr "Tomorrow" + +#~ msgid "January" +#~ msgstr "January" + +#~ msgid "February" +#~ msgstr "February" + +#~ msgid "March" +#~ msgstr "March" + +#~ msgid "April" +#~ msgstr "April" + +#~ msgid "May" +#~ msgstr "May" + +#~ msgid "June" +#~ msgstr "June" + +#~ msgid "July" +#~ msgstr "July" + +#~ msgid "August" +#~ msgstr "August" + +#~ msgid "September" +#~ msgstr "September" + +#~ msgid "October" +#~ msgstr "October" + +#~ msgid "November" +#~ msgstr "November" + +#~ msgid "December" +#~ msgstr "December" + +#~ msgctxt "one letter Sunday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgctxt "one letter Monday" +#~ msgid "M" +#~ msgstr "M" + +#~ msgctxt "one letter Tuesday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Wednesday" +#~ msgid "W" +#~ msgstr "W" + +#~ msgctxt "one letter Thursday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Friday" +#~ msgid "F" +#~ msgstr "F" + +#~ msgctxt "one letter Saturday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgid "Show" +#~ msgstr "Show" + +#~ msgid "Hide" +#~ msgstr "Hide" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "云区域ID" +#~ msgstr "Cloud Area ID" + +#~ msgid "proxy内网IP" +#~ msgstr "Proxy inner IP" + +#~ msgid "可为空,为空时使用Agent安装APP中业务默认值" +#~ msgstr "Empty is valid, default is the business default value on Agent APP" + +#~ msgid "proxy外网IP" +#~ msgstr "Proxy outer IP" + +#~ msgid "目标主机操作系统" +#~ msgstr "Target host operating system" + +#~ msgid "linux" +#~ msgstr "linux" + +#~ msgid "windows" +#~ msgstr "windows" + +#~ msgid "目标主机认证方式" +#~ msgstr "Target host verification method" + +#~ msgid "密码认证" +#~ msgstr "password" + +#~ msgid "密钥认证" +#~ msgstr "key" + +#~ msgid "目标主机详情" +#~ msgstr "Host Detail" + +#~ msgid "多个用,分隔" +#~ msgstr "multiple are separated by ," + +#~ msgid "ssh账号" +#~ msgstr "ssh account" + +#~ msgid "ssh端口" +#~ msgstr "ssh port" + +#~ msgid "ssh密码" +#~ msgstr "ssh password" + +#~ msgid "密码认证,则必填" +#~ msgstr "Required if it is password authentication" + +#~ msgid "ssh密钥" +#~ msgstr "ssh key" + +#~ msgid "密钥认证,则必填" +#~ msgstr "Required if it is key authentication" + +#~ msgid "多个用,或换行符分隔" +#~ msgstr "multiple are separated by , or line break" + +#~ msgid "通知人" +#~ msgstr "Receivers" + +#~ msgid "合作商" +#~ msgstr "Cooperation" + +#~ msgid "游戏ID" +#~ msgstr "Game ID" + +#~ msgid "Region" +#~ msgstr "Region" + +#~ msgid "上海" +#~ msgstr "Shanghai" + +#~ msgid "香港" +#~ msgstr "Hong Kong" + +#~ msgid "新加坡" +#~ msgstr "Singapore" + +#~ msgid "访问账号" +#~ msgstr "Access account" + +#~ msgid "访问密码" +#~ msgstr "Access password" + +#~ msgid "大区ID" +#~ msgstr "Set ID" + +#~ msgid "区服ID(列表)" +#~ msgstr "todo" + +#~ msgid "整形,多个,或换行符分隔" +#~ msgstr "todo" + +#~ msgid "服务态" +#~ msgstr "todo" + +#~ msgid "自动" +#~ msgstr "todo" + +#~ msgid "繁忙" +#~ msgstr "todo" + +#~ msgid "拥挤" +#~ msgstr "todo" + +#~ msgid "良好" +#~ msgstr "todo" + +#~ msgid "维护" +#~ msgstr "todo" + +#~ msgid "区服标注" +#~ msgstr "todo" + +#~ msgid "热" +#~ msgstr "todo" + +#~ msgid "荐" +#~ msgstr "todo" + +#~ msgid "新" +#~ msgstr "todo" + +#~ msgid "限" +#~ msgstr "todo" + +#~ msgid "体验服" +#~ msgstr "todo" + +#~ msgid "GCS业务名称" +#~ msgstr "todo" + +#~ msgid "为空则使用在配置平台(CC)的业务名" +#~ msgstr "todo" + +#~ msgid "DB类型" +#~ msgstr "todo" + +#~ msgid "应用类型" +#~ msgstr "todo" + +#~ msgid "备份选项" +#~ msgstr "todo" + +#~ msgid "字符集" +#~ msgstr "todo" + +#~ msgid "是否强制执行" +#~ msgstr "todo" + +#~ msgid "IP列表" +#~ msgstr "IP" + +#~ msgid "IP列表,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "变更详情" +#~ msgstr "todo" + +#~ msgid "SQL文件" +#~ msgstr "todo" + +#~ msgid "变更DB名" +#~ msgstr "todo" + +#~ msgid "忽略DB名" +#~ msgstr "todo" + +#~ msgid "变更描述" +#~ msgstr "todo" + +#~ msgid "关注人" +#~ msgstr "todo" + +#~ msgid "备份类型配置" +#~ msgstr "todo" + +#~ msgid "备份类型" +#~ msgstr "todo" + +#~ msgid "备份详情" +#~ msgstr "todo" + +#~ msgid "备份DB名" +#~ msgstr "todo" + +#~ msgid "表名称" +#~ msgstr "todo" + +#~ msgid "目标参数" +#~ msgstr "todo" + +#~ msgid "IP/服ID" +#~ msgstr "todo" + +#~ msgid "IP/服ID列表,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "单据ID" +#~ msgstr "todo" + +#~ msgid "访问发起IP" +#~ msgstr "todo" + +#~ msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" +#~ msgstr "todo" + +#~ msgid "目标域名/服ID" +#~ msgstr "todo" + +#~ msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" +#~ msgstr "todo" + +#~ msgid "DB名称" +#~ msgstr "todo" + +#~ msgid "支持通配符,多个请用 , 分隔" +#~ msgstr "todo" + +#~ msgid "回收类型配置" +#~ msgstr "Revoke Type Config" + +#~ msgid "回收类型" +#~ msgstr "Revoke Type" + +#~ msgid "账号清理" +#~ msgstr "Account Cleaning" + +#~ msgid "权限清理" +#~ msgstr "todo" + +#~ msgid "回收DB名称" +#~ msgstr "todo" + +#~ msgid "权限清理时必填,支持通配符,多个请用 , 分隔" +#~ msgstr "todo" + +#~ msgid "回收表名" +#~ msgstr "todo" + +#~ msgid "回收权限" +#~ msgstr "todo" + +#~ msgid "用户名" +#~ msgstr "todo" + +#~ msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" +#~ msgstr "todo" + +#~ msgid "步骤参数" +#~ msgstr "todo" + +#~ msgid "没选中作业模板或当前作业模板脚本步骤为空" +#~ msgstr "todo" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "步骤类型" +#~ msgstr "todo" + +#~ msgid "屏蔽开始时间" +#~ msgstr "todo" + +#~ msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" +#~ msgstr "Fill in datetime(%Y-%m-%d %H:%M:%S)" + +#~ msgid "屏蔽结束时间" +#~ msgstr "todo" + +#~ msgid "集群名称" +#~ msgstr "Set Name" + +#~ msgid "模块名称" +#~ msgstr "Module Name" + +#~ msgid "主机操作系统" +#~ msgstr "Host operating system" + +#~ msgid "主机认证方式" +#~ msgstr "Host verification method" + +#~ msgid "内网IP" +#~ msgstr "Inner IP" + +#~ msgid "请输入内网IP" +#~ msgstr "todo" + +#~ msgid "外网IP" +#~ msgstr "Outer IP" + +#~ msgid "请输入外网IP" +#~ msgstr "todo" + +#~ msgid "SSH账号" +#~ msgstr "todo" + +#~ msgid "SSH端口" +#~ msgstr "todo" + +#~ msgid "SSH密码" +#~ msgstr "todo" + +#~ msgid "请输入密码" +#~ msgstr "todo" + +#~ msgid "SSH密钥" +#~ msgstr "todo" + +#~ msgid "请输入密钥" +#~ msgstr "todo" + +#~ msgid "TCM业务" +#~ msgstr "todo" + +#~ msgid "模板" +#~ msgstr "todo" + +#~ msgid "参数" +#~ msgstr "todo" + +#~ msgid "步骤ID" +#~ msgstr "todo" + +#~ msgid "语音" +#~ msgstr "Voice" + +#~ msgid "扫描域名" +#~ msgstr "todo" + +#~ msgid "群聊名称" +#~ msgstr "todo" + +#~ msgid "群聊成员" +#~ msgstr "todo" + +#~ msgid "企业微信群成员,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "推送消息" +#~ msgstr "todo" + +#~ msgid "员工英文名" +#~ msgstr "todo" + +#~ msgid "选择集群和模块自动获取" +#~ msgstr "Select Sets and Modules" + +#~ msgid "输入集群名和模块名自动获取" +#~ msgstr "Enter Sets and Modules" + +#~ msgid "值类型" +#~ msgstr "Value Type" + +#~ msgid "DNS" +#~ msgstr "DNS" + +#~ msgid "服ID" +#~ msgstr "Region ID" + +#~ msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" +#~ msgstr "DNS format must be one of [IP#port] or domain, multiple are separated by line breaks" + +#~ msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" +#~ msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" + +#~ msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" +#~ msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" + +#~ msgid "多个用,分隔,all代表所有集群" +#~ msgstr "Multiple are separated by [,], 'all' represent all sets" + +#~ msgid "多个用,分隔,all代表所有模块" +#~ msgstr "Multiple are separated by [,], 'all' represent all modules" + #~ msgid "模板编辑" #~ msgstr "Flow Editing" diff --git a/locale/zh_hans/LC_MESSAGES/django.mo b/locale/zh_hans/LC_MESSAGES/django.mo index 4dce39c218..0f0d50fdb6 100644 Binary files a/locale/zh_hans/LC_MESSAGES/django.mo and b/locale/zh_hans/LC_MESSAGES/django.mo differ diff --git a/locale/zh_hans/LC_MESSAGES/django.po b/locale/zh_hans/LC_MESSAGES/django.po index 5f17de9e9f..991c3f58d0 100644 --- a/locale/zh_hans/LC_MESSAGES/django.po +++ b/locale/zh_hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: 2019-02-27 23:25+0800\n" "Last-Translator: FULL NAME \n" "Language: zh_Hans\n" @@ -18,2046 +18,1761 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: bk_api/sites/clouds/utils.py:40 bk_api/utils.py:78 -msgid "请求返回数据格式错误!" -msgstr "请求返回数据格式错误!" - -#: bk_api/sites/clouds/utils.py:41 bk_api/utils.py:79 -msgid "调用远程服务失败,Http请求返回数据格式错误!" -msgstr "调用远程服务失败,Http请求返回数据格式错误!" - -#: bk_api/utils.py:81 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" -msgstr "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" - -#: bk_api/sites/bkopen/app_maker.py:49 bk_api/sites/clouds/app_maker.py:73 -#, python-format -msgid "调用创建app maker接口失败,错误信息:%s" -msgstr "调用创建app maker接口失败,错误信息:%s" - -#: bk_api/sites/bkopen/app_maker.py:50 bk_api/sites/clouds/app_maker.py:74 -msgid "调用创建app maker接口失败" -msgstr "调用创建app maker接口失败" - -#: bk_api/sites/bkopen/app_maker.py:83 bk_api/sites/bkopen/app_maker.py:103 -#: bk_api/sites/clouds/app_maker.py:109 bk_api/sites/clouds/app_maker.py:129 -#, python-format -msgid "调用修改app maker接口失败,错误信息:%s" -msgstr "调用修改app maker接口失败,错误信息:%s" - -#: bk_api/sites/bkopen/app_maker.py:84 bk_api/sites/bkopen/app_maker.py:104 -#: bk_api/sites/clouds/app_maker.py:110 bk_api/sites/clouds/app_maker.py:130 -msgid "调用修改app maker接口失败" -msgstr "调用修改app maker接口失败" - -#: bk_api/sites/clouds/app_maker.py:151 -#, python-format -msgid "调用修改 LOGO 接口失败,错误信息:%s" -msgstr "调用修改 LOGO 接口失败,错误信息:%s" - -#: bk_api/sites/clouds/app_maker.py:152 -msgid "调用修改 LOGO 接口失败" -msgstr "调用修改 LOGO 接口失败" - -#: bk_api/sites/clouds/utils.py:43 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%s" -msgstr "调用远程服务失败,Http请求错误状态码:%s" - -#: blueapps/account/admin.py:13 +#: blueapps/account/admin.py:25 msgid "Personal info" msgstr "Personal info" -#: blueapps/account/admin.py:14 +#: blueapps/account/admin.py:26 msgid "Permissions" msgstr "Permissions" -#: blueapps/account/admin.py:16 +#: blueapps/account/admin.py:28 msgid "Important dates" msgstr "Important dates" -#: blueapps/account/apps.py:9 +#: blueapps/account/apps.py:21 msgid "account" msgstr "account" -#: blueapps/account/models.py:53 +#: blueapps/account/models.py:65 msgid "username" msgstr "username" -#: blueapps/account/models.py:56 blueapps/account/models.py:147 +#: blueapps/account/models.py:68 blueapps/account/models.py:159 msgid "Required. 64 characters or fewer. Letters, digits and underlined only." msgstr "Required. 64 characters or fewer. Letters, digits and underlined only." -#: blueapps/account/models.py:60 +#: blueapps/account/models.py:72 msgid "Enter a valid openid. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid openid. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:66 +#: blueapps/account/models.py:78 msgid "A user with that openid already exists." msgstr "A user with that openid already exists." -#: blueapps/account/models.py:71 +#: blueapps/account/models.py:83 msgid "nick name" msgstr "nick name" -#: blueapps/account/models.py:74 +#: blueapps/account/models.py:86 msgid "Required. 64 characters or fewer." msgstr "Required. 64 characters or fewer." -#: blueapps/account/models.py:77 +#: blueapps/account/models.py:89 msgid "staff status" msgstr "staff status" -#: blueapps/account/models.py:79 +#: blueapps/account/models.py:91 msgid "Designates whether the user can log into this admin site." msgstr "Designates whether the user can log into this admin site." -#: blueapps/account/models.py:83 +#: blueapps/account/models.py:95 msgid "active" msgstr "active" -#: blueapps/account/models.py:85 +#: blueapps/account/models.py:97 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." -#: blueapps/account/models.py:89 +#: blueapps/account/models.py:101 msgid "date joined" msgstr "date joined" -#: blueapps/account/models.py:99 +#: blueapps/account/models.py:111 msgid "user" msgstr "user" -#: blueapps/account/models.py:100 +#: blueapps/account/models.py:112 msgid "users" msgstr "users" -#: blueapps/account/models.py:151 +#: blueapps/account/models.py:163 msgid "Enter a valid key. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid key. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:160 +#: blueapps/account/models.py:172 msgid "user property" msgstr "user property" -#: blueapps/account/models.py:161 +#: blueapps/account/models.py:173 msgid "user properties" msgstr "user properties" -#: config/default.py:141 +#: config/default.py:152 msgid "English" msgstr "English" -#: config/default.py:142 +#: config/default.py:153 msgid "简体中文" msgstr "简体中文" -#: django_signal_valve/models.py:36 +#: django_signal_valve/models.py:48 msgid "信号模块名" msgstr "信号模块名" -#: django_signal_valve/models.py:37 +#: django_signal_valve/models.py:49 msgid "信号属性名" msgstr "信号属性名" -#: django_signal_valve/models.py:38 +#: django_signal_valve/models.py:50 msgid "信号参数" msgstr "信号参数" -#: gcloud/exceptions.py:27 +#: gcloud/exceptions.py:39 msgid "请求第三方系统" msgstr "请求第三方系统" -#: gcloud/exceptions.py:29 +#: gcloud/exceptions.py:41 msgid "接口" msgstr "接口" -#: gcloud/exceptions.py:31 +#: gcloud/exceptions.py:43 msgid "异常" msgstr "异常" -#: gcloud/exceptions.py:33 +#: gcloud/exceptions.py:45 msgid "请联系第三方系统负责人处理" msgstr "请联系第三方系统负责人处理" -#: gcloud/commons/message/common.py:6 +#: gcloud/commons/message/common.py:18 msgid "【标准运维APP通知】执行失败" msgstr "【标准运维APP通知】执行失败" -#: gcloud/commons/message/common.py:7 +#: gcloud/commons/message/common.py:19 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" -#: gcloud/commons/message/common.py:19 +#: gcloud/commons/message/common.py:31 msgid "【标准运维APP通知】执行完成" msgstr "【标准运维APP通知】执行完成" -#: gcloud/commons/message/common.py:20 +#: gcloud/commons/message/common.py:32 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" -#: gcloud/commons/message/common.py:31 +#: gcloud/commons/message/common.py:43 msgid "【标准运维APP通知】周期任务启动失败" msgstr "【标准运维APP通知】周期任务启动失败" -#: gcloud/commons/message/common.py:32 +#: gcloud/commons/message/common.py:44 msgid "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" msgstr "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" -#: gcloud/commons/template/models.py:162 +#: gcloud/commons/template/models.py:174 msgid "模板类型" msgstr "模板类型" -#: gcloud/commons/template/models.py:172 +#: gcloud/commons/template/models.py:184 msgid "收藏模板的人" msgstr "收藏模板的人" -#: gcloud/commons/template/models.py:174 +#: gcloud/commons/template/models.py:186 msgid "流程事件通知方式" msgstr "流程事件通知方式" -#: gcloud/commons/template/models.py:179 +#: gcloud/commons/template/models.py:191 msgid "流程事件通知人" msgstr "流程事件通知人" -#: gcloud/commons/template/models.py:182 +#: gcloud/commons/template/models.py:194 msgid "流程超时时间(分钟)" msgstr "流程超时时间(分钟)" -#: gcloud/commons/template/models.py:185 gcloud/contrib/appmaker/models.py:279 -#: gcloud/taskflow3/models.py:768 pipeline/models.py:272 +#: gcloud/commons/template/models.py:197 gcloud/contrib/appmaker/models.py:292 +#: gcloud/taskflow3/models.py:780 pipeline/models.py:284 msgid "是否删除" msgstr "是否删除" -#: gcloud/commons/template/models.py:330 gcloud/commons/template/models.py:331 +#: gcloud/commons/template/models.py:342 gcloud/commons/template/models.py:343 msgid "公共流程模板 CommonTemplate" msgstr "公共流程模板 CommonTemplate" -#: gcloud/commons/template/models.py:341 gcloud/commons/template/models.py:342 +#: gcloud/commons/template/models.py:353 gcloud/commons/template/models.py:354 msgid "通用流程模板ID" msgstr "通用流程模板ID" -#: gcloud/commons/template/models.py:348 gcloud/commons/template/models.py:349 +#: gcloud/commons/template/models.py:360 gcloud/commons/template/models.py:361 msgid "公共流程模板权限 CommonTmplPerm" msgstr "公共流程模板权限 CommonTmplPerm" -#: gcloud/conf/sites/community/ver_settings.py:29 +#: gcloud/conf/sites/community/ver_settings.py:41 msgid "蓝鲸智云社区版" msgstr "蓝鲸智云社区版" -#: gcloud/conf/sites/enterprise/ver_settings.py:29 -#: gcloud/conf/sites/ieod/ver_settings.py:32 -msgid "蓝鲸智云企业版" -msgstr "蓝鲸智云企业版" - -#: gcloud/contrib/appmaker/api.py:36 +#: gcloud/contrib/appmaker/api.py:48 #, python-format msgid "参数格式错误:%s" msgstr "参数格式错误:%s" -#: gcloud/contrib/appmaker/api.py:44 +#: gcloud/contrib/appmaker/api.py:56 msgid "请上传 jpg 或 png 格式的图片" msgstr "请上传 jpg 或 png 格式的图片" -#: gcloud/contrib/appmaker/api.py:48 +#: gcloud/contrib/appmaker/api.py:60 msgid "LOGO 文件大小必须小于 100K" msgstr "LOGO 文件大小必须小于 100K" -#: gcloud/contrib/appmaker/api.py:53 +#: gcloud/contrib/appmaker/api.py:65 msgid "图片格式非法" msgstr "图片格式非法" -#: gcloud/contrib/appmaker/models.py:58 +#: gcloud/contrib/appmaker/models.py:71 msgid "保存失败,引用的流程模板不存在!" msgstr "保存失败,引用的流程模板不存在!" -#: gcloud/contrib/appmaker/models.py:101 +#: gcloud/contrib/appmaker/models.py:114 #, python-format msgid "创建轻应用失败:%s" msgstr "创建轻应用失败:%s" -#: gcloud/contrib/appmaker/models.py:118 +#: gcloud/contrib/appmaker/models.py:131 msgid "保存失败,当前操作的轻应用不存在或已删除!" msgstr "保存失败,当前操作的轻应用不存在或已删除!" -#: gcloud/contrib/appmaker/models.py:136 +#: gcloud/contrib/appmaker/models.py:149 #, python-format msgid "编辑轻应用失败:%s" msgstr "编辑轻应用失败:%s" -#: gcloud/contrib/appmaker/models.py:172 +#: gcloud/contrib/appmaker/models.py:185 msgid "当前操作的轻应用不存在或已删除!" msgstr "当前操作的轻应用不存在或已删除!" -#: gcloud/contrib/appmaker/models.py:183 gcloud/contrib/appmaker/models.py:189 +#: gcloud/contrib/appmaker/models.py:196 gcloud/contrib/appmaker/models.py:202 #, python-format msgid "删除失败:%s" msgstr "删除失败:%s" -#: gcloud/contrib/appmaker/models.py:266 gcloud/tasktmpl3/models.py:434 +#: gcloud/contrib/appmaker/models.py:279 gcloud/tasktmpl3/models.py:446 msgid "所属业务" msgstr "所属业务" -#: gcloud/contrib/appmaker/models.py:267 +#: gcloud/contrib/appmaker/models.py:280 msgid "APP名称" msgstr "APP名称" -#: gcloud/contrib/appmaker/models.py:268 +#: gcloud/contrib/appmaker/models.py:281 msgid "APP编码" msgstr "APP编码" -#: gcloud/contrib/appmaker/models.py:269 +#: gcloud/contrib/appmaker/models.py:282 msgid "APP基本信息" msgstr "APP基本信息" -#: gcloud/contrib/appmaker/models.py:270 +#: gcloud/contrib/appmaker/models.py:283 msgid "APP描述信息" msgstr "APP描述信息" -#: gcloud/contrib/appmaker/models.py:271 +#: gcloud/contrib/appmaker/models.py:284 msgid "轻应用logo存放地址" msgstr "轻应用logo存放地址" -#: gcloud/contrib/appmaker/models.py:272 +#: gcloud/contrib/appmaker/models.py:285 msgid "gcloud链接" msgstr "gcloud链接" -#: gcloud/contrib/appmaker/models.py:273 +#: gcloud/contrib/appmaker/models.py:286 msgid "创建人" msgstr "创建人" -#: gcloud/contrib/appmaker/models.py:274 pipeline/engine/models/core.py:803 -#: pipeline/models.py:66 pipeline/models.py:264 pipeline/models.py:578 +#: gcloud/contrib/appmaker/models.py:287 pipeline/engine/models/core.py:815 +#: pipeline/models.py:78 pipeline/models.py:276 pipeline/models.py:590 msgid "创建时间" msgstr "创建时间" -#: gcloud/contrib/appmaker/models.py:275 +#: gcloud/contrib/appmaker/models.py:288 msgid "编辑人" msgstr "编辑人" -#: gcloud/contrib/appmaker/models.py:276 +#: gcloud/contrib/appmaker/models.py:289 msgid "编辑时间" msgstr "编辑时间" -#: gcloud/contrib/appmaker/models.py:277 +#: gcloud/contrib/appmaker/models.py:290 msgid "关联模板" msgstr "关联模板" -#: gcloud/contrib/appmaker/models.py:278 +#: gcloud/contrib/appmaker/models.py:291 msgid "执行方案" msgstr "执行方案" -#: gcloud/contrib/appmaker/models.py:303 gcloud/contrib/appmaker/models.py:304 +#: gcloud/contrib/appmaker/models.py:316 gcloud/contrib/appmaker/models.py:317 msgid "轻应用 AppMaker" msgstr "轻应用 AppMaker" -#: gcloud/contrib/function/models.py:11 +#: gcloud/contrib/function/models.py:23 msgid "未认领" msgstr "未认领" -#: gcloud/contrib/function/models.py:12 +#: gcloud/contrib/function/models.py:24 msgid "已认领" msgstr "已认领" -#: gcloud/contrib/function/models.py:13 +#: gcloud/contrib/function/models.py:25 msgid "已驳回" msgstr "已驳回" -#: gcloud/contrib/function/models.py:14 +#: gcloud/contrib/function/models.py:26 msgid "已执行" msgstr "已执行" -#: gcloud/contrib/function/models.py:15 gcloud/taskflow3/models.py:441 -#: gcloud/tasktmpl3/models.py:195 +#: gcloud/contrib/function/models.py:27 gcloud/taskflow3/models.py:453 +#: gcloud/tasktmpl3/models.py:207 msgid "已完成" msgstr "已完成" -#: gcloud/contrib/function/models.py:23 +#: gcloud/contrib/function/models.py:35 msgid "职能化单" msgstr "职能化单" -#: gcloud/contrib/function/models.py:24 +#: gcloud/contrib/function/models.py:36 msgid "提单人" msgstr "提单人" -#: gcloud/contrib/function/models.py:25 +#: gcloud/contrib/function/models.py:37 msgid "提单时间" msgstr "提单时间" -#: gcloud/contrib/function/models.py:26 +#: gcloud/contrib/function/models.py:38 msgid "认领人" msgstr "认领人" -#: gcloud/contrib/function/models.py:27 +#: gcloud/contrib/function/models.py:39 msgid "认领时间" msgstr "认领时间" -#: gcloud/contrib/function/models.py:28 +#: gcloud/contrib/function/models.py:40 msgid "驳回人" msgstr "驳回人" -#: gcloud/contrib/function/models.py:29 +#: gcloud/contrib/function/models.py:41 msgid "驳回时间" msgstr "驳回时间" -#: gcloud/contrib/function/models.py:30 +#: gcloud/contrib/function/models.py:42 msgid "转单人" msgstr "转单人" -#: gcloud/contrib/function/models.py:31 +#: gcloud/contrib/function/models.py:43 msgid "转单时间" msgstr "转单时间" -#: gcloud/contrib/function/models.py:32 +#: gcloud/contrib/function/models.py:44 msgid "单据状态" msgstr "单据状态" -#: gcloud/contrib/function/models.py:38 gcloud/contrib/function/models.py:39 +#: gcloud/contrib/function/models.py:50 gcloud/contrib/function/models.py:51 msgid "职能化认领单 FunctionTask" msgstr "职能化认领单 FunctionTask" -#: gcloud/core/api.py:24 +#: gcloud/core/api.py:36 msgid "用户默认业务切换成功" msgstr "用户默认业务切换成功" -#: gcloud/core/api.py:59 +#: gcloud/core/api.py:71 #, python-format msgid "所有%s" msgstr "所有%s" -#: gcloud/core/constant.py:7 +#: gcloud/core/constant.py:18 msgid "运维工具" msgstr "运维工具" -#: gcloud/core/constant.py:8 +#: gcloud/core/constant.py:19 msgid "监控告警" msgstr "监控告警" -#: gcloud/core/constant.py:9 +#: gcloud/core/constant.py:20 msgid "配置管理" msgstr "配置管理" -#: gcloud/core/constant.py:10 +#: gcloud/core/constant.py:21 msgid "开发工具" msgstr "开发工具" -#: gcloud/core/constant.py:11 +#: gcloud/core/constant.py:22 msgid "企业IT" msgstr "企业IT" -#: gcloud/core/constant.py:12 +#: gcloud/core/constant.py:23 msgid "办公应用" msgstr "办公应用" -#: gcloud/core/constant.py:13 +#: gcloud/core/constant.py:24 msgid "其它" msgstr "其它" -#: gcloud/core/constant.py:18 +#: gcloud/core/constant.py:29 msgid "默认任务流程" msgstr "默认任务流程" -#: gcloud/core/constant.py:19 +#: gcloud/core/constant.py:30 msgid "职能化任务流程" msgstr "职能化任务流程" -#: gcloud/core/constant.py:26 gcloud/core/constant.py:32 +#: gcloud/core/constant.py:37 gcloud/core/constant.py:43 msgid "步骤选择" msgstr "步骤选择" -#: gcloud/core/constant.py:27 +#: gcloud/core/constant.py:38 msgid "参数填写" msgstr "参数填写" -#: gcloud/core/constant.py:28 gcloud/core/constant.py:35 +#: gcloud/core/constant.py:39 gcloud/core/constant.py:46 msgid "任务执行" msgstr "任务执行" -#: gcloud/core/constant.py:29 gcloud/core/constant.py:36 +#: gcloud/core/constant.py:40 gcloud/core/constant.py:47 msgid "完成" msgstr "完成" -#: gcloud/core/constant.py:33 +#: gcloud/core/constant.py:44 msgid "提交需求" msgstr "提交需求" -#: gcloud/core/constant.py:34 +#: gcloud/core/constant.py:45 msgid "职能化认领" msgstr "职能化认领" -#: gcloud/core/constant.py:55 +#: gcloud/core/constant.py:66 msgid "任务准备" msgstr "任务准备" -#: gcloud/core/constant.py:56 +#: gcloud/core/constant.py:67 msgid "操作执行" msgstr "操作执行" -#: gcloud/core/constant.py:57 +#: gcloud/core/constant.py:68 msgid "DB变更" msgstr "DB变更" -#: gcloud/core/constant.py:58 +#: gcloud/core/constant.py:69 msgid "DB备份" msgstr "DB备份" -#: gcloud/core/constant.py:59 +#: gcloud/core/constant.py:70 msgid "现网测试" msgstr "现网测试" -#: gcloud/core/constant.py:60 +#: gcloud/core/constant.py:71 msgid "空闲时间" msgstr "空闲时间" -#: gcloud/core/constant.py:65 +#: gcloud/core/constant.py:76 msgid "微信" msgstr "微信" -#: gcloud/core/constant.py:66 +#: gcloud/core/constant.py:77 msgid "短信" msgstr "短信" -#: gcloud/core/constant.py:67 +#: gcloud/core/constant.py:78 msgid "邮件" msgstr "邮件" -#: gcloud/core/constant.py:68 +#: gcloud/core/constant.py:79 msgid "语音" msgstr "语音" -#: gcloud/core/middlewares.py:64 +#: gcloud/core/middlewares.py:76 msgid "您没有权限进行此操作" msgstr "您没有权限进行此操作" -#: gcloud/core/models.py:25 +#: gcloud/core/models.py:37 msgid "生命周期" msgstr "生命周期" -#: gcloud/core/models.py:26 +#: gcloud/core/models.py:38 msgid "任务执行者" msgstr "任务执行者" -#: gcloud/core/models.py:28 +#: gcloud/core/models.py:40 msgid "业务状态" msgstr "业务状态" -#: gcloud/core/models.py:29 +#: gcloud/core/models.py:41 msgid "是否始终使用任务执行者" msgstr "是否始终使用任务执行者" -#: gcloud/core/models.py:39 gcloud/core/models.py:40 +#: gcloud/core/models.py:51 gcloud/core/models.py:52 msgid "业务 Business" msgstr "业务 Business" -#: gcloud/core/models.py:54 +#: gcloud/core/models.py:66 msgid "用户QQ" msgstr "用户QQ" -#: gcloud/core/models.py:55 +#: gcloud/core/models.py:67 msgid "默认业务" msgstr "默认业务" -#: gcloud/core/models.py:61 gcloud/core/models.py:62 +#: gcloud/core/models.py:73 gcloud/core/models.py:74 msgid "用户默认业务 UserBusiness" msgstr "用户默认业务 UserBusiness" -#: gcloud/core/models.py:72 gcloud/core/models.py:73 +#: gcloud/core/models.py:84 gcloud/core/models.py:85 msgid "业务用户组 BusinessGroupMembership" msgstr "业务用户组 BusinessGroupMembership" -#: gcloud/core/models.py:90 +#: gcloud/core/models.py:102 msgid "变量KEY" msgstr "变量KEY" -#: gcloud/core/models.py:91 +#: gcloud/core/models.py:103 msgid "变量描述" msgstr "变量描述" -#: gcloud/core/models.py:92 +#: gcloud/core/models.py:104 msgid "变量值" msgstr "变量值" -#: gcloud/core/models.py:100 gcloud/core/models.py:101 +#: gcloud/core/models.py:112 gcloud/core/models.py:113 msgid "环境变量 EnvironmentVariables" msgstr "环境变量 EnvironmentVariables" -#: gcloud/core/roles.py:15 gcloud/core/roles/sites/clouds/roles.py:15 -#: gcloud/core/roles/sites/ieod/roles.py:15 -#: gcloud/core/roles/sites/open/roles.py:15 +#: gcloud/core/roles.py:27 gcloud/core/roles/sites/open/roles.py:27 msgid "运维人员" msgstr "运维人员" -#: gcloud/core/roles.py:16 gcloud/core/roles/sites/clouds/roles.py:16 -#: gcloud/core/roles/sites/ieod/roles.py:16 -#: gcloud/core/roles/sites/open/roles.py:16 +#: gcloud/core/roles.py:28 gcloud/core/roles/sites/open/roles.py:28 msgid "产品人员" msgstr "产品人员" -#: gcloud/core/roles.py:17 gcloud/core/roles/sites/clouds/roles.py:17 -#: gcloud/core/roles/sites/ieod/roles.py:17 -#: gcloud/core/roles/sites/open/roles.py:17 +#: gcloud/core/roles.py:29 gcloud/core/roles/sites/open/roles.py:29 msgid "合作商" msgstr "合作商" -#: gcloud/core/roles.py:18 gcloud/core/roles/sites/clouds/roles.py:18 -#: gcloud/core/roles/sites/ieod/roles.py:18 -#: gcloud/core/roles/sites/open/roles.py:18 +#: gcloud/core/roles.py:30 gcloud/core/roles/sites/open/roles.py:30 msgid "业务创建人" msgstr "业务创建人" -#: gcloud/core/roles.py:19 gcloud/core/roles/sites/clouds/roles.py:19 -#: gcloud/core/roles/sites/ieod/roles.py:19 -#: gcloud/core/roles/sites/open/roles.py:19 +#: gcloud/core/roles.py:31 gcloud/core/roles/sites/open/roles.py:31 msgid "超级管理员" msgstr "超级管理员" -#: gcloud/core/roles.py:20 gcloud/core/roles/sites/clouds/roles.py:20 -#: gcloud/core/roles/sites/ieod/roles.py:20 -#: gcloud/core/roles/sites/open/roles.py:20 +#: gcloud/core/roles.py:32 gcloud/core/roles/sites/open/roles.py:32 msgid "职能化人员" msgstr "职能化人员" -#: gcloud/core/roles.py:21 gcloud/core/roles/sites/clouds/roles.py:21 -#: gcloud/core/roles/sites/ieod/roles.py:21 -#: gcloud/core/roles/sites/open/roles.py:21 +#: gcloud/core/roles.py:33 gcloud/core/roles/sites/open/roles.py:33 msgid "测试人员" msgstr "测试人员" -#: gcloud/core/roles.py:22 gcloud/core/roles/sites/clouds/roles.py:22 -#: gcloud/core/roles/sites/ieod/roles.py:22 -#: gcloud/core/roles/sites/open/roles.py:22 +#: gcloud/core/roles.py:34 gcloud/core/roles/sites/open/roles.py:34 msgid "开发人员" msgstr "开发人员" -#: gcloud/core/roles.py:23 gcloud/core/roles/sites/clouds/roles.py:23 -#: gcloud/core/roles/sites/ieod/roles.py:23 -#: gcloud/core/roles/sites/open/roles.py:23 +#: gcloud/core/roles.py:35 gcloud/core/roles/sites/open/roles.py:35 msgid "审计人员" msgstr "审计人员" -#: gcloud/periodictask/models.py:63 gcloud/taskflow3/models.py:743 +#: gcloud/core/api_adapter/utils.py:90 +msgid "请求返回数据格式错误!" +msgstr "请求返回数据格式错误!" + +#: gcloud/core/api_adapter/utils.py:91 +msgid "调用远程服务失败,Http请求返回数据格式错误!" +msgstr "调用远程服务失败,Http请求返回数据格式错误!" + +#: gcloud/core/api_adapter/utils.py:93 +#, python-format +msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" +msgstr "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" + +#: gcloud/periodictask/models.py:75 gcloud/taskflow3/models.py:755 msgid "业务" msgstr "业务" -#: gcloud/periodictask/models.py:67 +#: gcloud/periodictask/models.py:79 msgid "pipeline 层周期任务" msgstr "pipeline 层周期任务" -#: gcloud/periodictask/models.py:68 gcloud/taskflow3/models.py:753 +#: gcloud/periodictask/models.py:80 gcloud/taskflow3/models.py:765 msgid "创建任务所用的模板ID" msgstr "创建任务所用的模板ID" -#: gcloud/periodictask/models.py:73 gcloud/periodictask/models.py:74 +#: gcloud/periodictask/models.py:85 gcloud/periodictask/models.py:86 msgid "周期任务 PeriodicTask" msgstr "周期任务 PeriodicTask" -#: gcloud/periodictask/models.py:118 +#: gcloud/periodictask/models.py:130 #, python-format msgid "模板不存在,错误信息:%s" msgstr "模板不存在,错误信息:%s" -#: gcloud/periodictask/models.py:157 +#: gcloud/periodictask/models.py:169 msgid "pipeline 层周期任务历史" msgstr "pipeline 层周期任务历史" -#: gcloud/periodictask/models.py:158 gcloud/taskflow3/constants.py:10 -#: pipeline/contrib/periodic_task/models.py:383 +#: gcloud/periodictask/models.py:170 gcloud/taskflow3/constants.py:22 +#: pipeline/contrib/periodic_task/models.py:395 msgid "周期任务" msgstr "周期任务" -#: gcloud/periodictask/models.py:159 +#: gcloud/periodictask/models.py:171 msgid "流程实例" msgstr "流程实例" -#: gcloud/periodictask/models.py:160 -#: pipeline/contrib/periodic_task/models.py:391 pipeline/log/models.py:35 +#: gcloud/periodictask/models.py:172 +#: pipeline/contrib/periodic_task/models.py:403 pipeline/log/models.py:47 msgid "异常信息" msgstr "异常信息" -#: gcloud/periodictask/models.py:161 -#: pipeline/contrib/periodic_task/models.py:392 -#: pipeline/engine/models/core.py:804 pipeline/engine/models/core.py:895 -#: pipeline/engine/models/loop_activity.py:56 +#: gcloud/periodictask/models.py:173 +#: pipeline/contrib/periodic_task/models.py:404 +#: pipeline/engine/models/core.py:816 pipeline/engine/models/core.py:907 +#: pipeline/engine/models/loop_activity.py:67 msgid "开始时间" msgstr "开始时间" -#: gcloud/periodictask/models.py:162 -#: pipeline/contrib/periodic_task/models.py:393 +#: gcloud/periodictask/models.py:174 +#: pipeline/contrib/periodic_task/models.py:405 msgid "是否启动成功" msgstr "是否启动成功" -#: gcloud/taskflow3/constants.py:7 +#: gcloud/taskflow3/constants.py:19 msgid "手动" msgstr "手动" -#: gcloud/taskflow3/constants.py:8 +#: gcloud/taskflow3/constants.py:20 msgid "API网关" msgstr "API网关" -#: gcloud/taskflow3/constants.py:9 +#: gcloud/taskflow3/constants.py:21 msgid "轻应用" msgstr "轻应用" -#: gcloud/taskflow3/constants.py:15 +#: gcloud/taskflow3/constants.py:27 msgid "业务流程" msgstr "业务流程" -#: gcloud/taskflow3/constants.py:16 +#: gcloud/taskflow3/constants.py:28 msgid "公共流程" msgstr "公共流程" -#: gcloud/taskflow3/models.py:430 gcloud/tasktmpl3/models.py:184 +#: gcloud/taskflow3/models.py:442 gcloud/tasktmpl3/models.py:196 msgid "未执行" msgstr "未执行" -#: gcloud/taskflow3/models.py:435 gcloud/tasktmpl3/models.py:189 +#: gcloud/taskflow3/models.py:447 gcloud/tasktmpl3/models.py:201 msgid "执行中" msgstr "执行中" -#: gcloud/taskflow3/models.py:751 +#: gcloud/taskflow3/models.py:763 msgid "任务类型,继承自模板" msgstr "任务类型,继承自模板" -#: gcloud/taskflow3/models.py:754 +#: gcloud/taskflow3/models.py:766 msgid "流程模板来源" msgstr "流程模板来源" -#: gcloud/taskflow3/models.py:757 +#: gcloud/taskflow3/models.py:769 msgid "创建方式" msgstr "创建方式" -#: gcloud/taskflow3/models.py:761 +#: gcloud/taskflow3/models.py:773 msgid "创建任务额外信息(App maker ID或者APP CODE)" msgstr "创建任务额外信息(App maker ID或者APP CODE)" -#: gcloud/taskflow3/models.py:763 +#: gcloud/taskflow3/models.py:775 msgid "任务流程类型" msgstr "任务流程类型" -#: gcloud/taskflow3/models.py:767 +#: gcloud/taskflow3/models.py:779 msgid "当前任务流程阶段" msgstr "当前任务流程阶段" -#: gcloud/taskflow3/models.py:776 gcloud/taskflow3/models.py:777 +#: gcloud/taskflow3/models.py:788 gcloud/taskflow3/models.py:789 msgid "流程实例 TaskFlowInstance" msgstr "流程实例 TaskFlowInstance" -#: gcloud/tasktmpl3/models.py:34 +#: gcloud/tasktmpl3/models.py:46 msgid "新建任务" msgstr "新建任务" -#: gcloud/tasktmpl3/models.py:35 +#: gcloud/tasktmpl3/models.py:47 msgid "填写参数" msgstr "填写参数" -#: gcloud/tasktmpl3/models.py:36 -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:80 +#: gcloud/tasktmpl3/models.py:48 msgid "执行任务" msgstr "执行任务" -#: gcloud/tasktmpl3/models.py:445 gcloud/tasktmpl3/models.py:446 +#: gcloud/tasktmpl3/models.py:457 gcloud/tasktmpl3/models.py:458 msgid "流程模板 TaskTemplate" msgstr "流程模板 TaskTemplate" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:16 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:28 msgid "测试" msgstr "测试" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:17 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:29 msgid "体验" msgstr "体验" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:18 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:30 msgid "正式" msgstr "正式" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:22 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:34 msgid "关闭" msgstr "关闭" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:23 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:35 msgid "开放" msgstr "开放" -#: gcloud/utils/forms.py:31 +#: gcloud/utils/forms.py:43 msgid "invalid json string" msgstr "invalid json string" -#: gcloud/utils/forms.py:49 +#: gcloud/utils/forms.py:61 msgid "json.loads result is not instance of list or tuple " msgstr "json.loads result is not instance of list or tuple " -#: gcloud/utils/forms.py:67 +#: gcloud/utils/forms.py:79 msgid "json.loads result is not list" msgstr "json.loads result is not list" -#: gcloud/webservice3/resources.py:308 +#: gcloud/webservice3/resources.py:299 msgid "停运" msgstr "停运" -#: pipeline/models.py:65 +#: pipeline/models.py:77 msgid "快照字符串的md5sum" msgstr "快照字符串的md5sum" -#: pipeline/models.py:72 pipeline/models.py:73 +#: pipeline/models.py:84 pipeline/models.py:85 msgid "模板快照" msgstr "模板快照" -#: pipeline/models.py:146 +#: pipeline/models.py:158 #, python-format msgid "子流程引用链中存在循环引用:%s" msgstr "子流程引用链中存在循环引用:%s" -#: pipeline/contrib/statistics/models.py:8 -#: pipeline/contrib/statistics/models.py:44 pipeline/models.py:262 -#: pipeline/models.py:449 +#: pipeline/contrib/statistics/models.py:20 +#: pipeline/contrib/statistics/models.py:56 pipeline/models.py:274 +#: pipeline/models.py:461 msgid "模板ID" msgstr "模板ID" -#: pipeline/models.py:263 +#: pipeline/models.py:275 msgid "模板名称" msgstr "模板名称" -#: pipeline/contrib/periodic_task/models.py:298 pipeline/models.py:265 -#: pipeline/models.py:577 +#: pipeline/contrib/periodic_task/models.py:310 pipeline/models.py:277 +#: pipeline/models.py:589 msgid "创建者" msgstr "创建者" -#: pipeline/models.py:266 pipeline/models.py:582 +#: pipeline/models.py:278 pipeline/models.py:594 msgid "描述" msgstr "描述" -#: pipeline/models.py:267 +#: pipeline/models.py:279 msgid "修改者" msgstr "修改者" -#: pipeline/models.py:268 pipeline/models.py:492 +#: pipeline/models.py:280 pipeline/models.py:504 msgid "修改时间" msgstr "修改时间" -#: pipeline/models.py:269 +#: pipeline/models.py:281 msgid "模板结构数据" msgstr "模板结构数据" -#: pipeline/models.py:270 +#: pipeline/models.py:282 msgid "是否含有子流程" msgstr "是否含有子流程" -#: pipeline/models.py:274 +#: pipeline/models.py:286 msgid "表示当前模板是否删除" msgstr "表示当前模板是否删除" -#: pipeline/models.py:280 pipeline/models.py:281 pipeline/models.py:574 +#: pipeline/models.py:292 pipeline/models.py:293 pipeline/models.py:586 msgid "Pipeline模板" msgstr "Pipeline模板" -#: pipeline/models.py:423 +#: pipeline/models.py:435 msgid "根模板ID" msgstr "根模板ID" -#: pipeline/models.py:424 +#: pipeline/models.py:436 msgid "子流程模板ID" msgstr "子流程模板ID" -#: pipeline/models.py:425 +#: pipeline/models.py:437 msgid "子流程节点 ID" msgstr "子流程节点 ID" -#: pipeline/models.py:426 pipeline/models.py:450 pipeline/models.py:479 +#: pipeline/models.py:438 pipeline/models.py:462 pipeline/models.py:491 msgid "快照字符串的md5" msgstr "快照字符串的md5" -#: pipeline/models.py:477 +#: pipeline/models.py:489 msgid "模板 ID" msgstr "模板 ID" -#: pipeline/models.py:478 +#: pipeline/models.py:490 msgid "模板数据 ID" msgstr "模板数据 ID" -#: pipeline/models.py:480 +#: pipeline/models.py:492 msgid "添加日期" msgstr "添加日期" -#: pipeline/models.py:489 +#: pipeline/models.py:501 msgid "对应模板 ID" msgstr "对应模板 ID" -#: pipeline/models.py:490 +#: pipeline/models.py:502 msgid "方案唯一ID" msgstr "方案唯一ID" -#: pipeline/models.py:491 +#: pipeline/models.py:503 msgid "方案名称" msgstr "方案名称" -#: pipeline/models.py:493 +#: pipeline/models.py:505 msgid "方案数据" msgstr "方案数据" -#: pipeline/contrib/statistics/models.py:23 -#: pipeline/contrib/statistics/models.py:58 pipeline/models.py:575 +#: pipeline/contrib/statistics/models.py:35 +#: pipeline/contrib/statistics/models.py:70 pipeline/models.py:587 msgid "实例ID" msgstr "实例ID" -#: pipeline/models.py:576 +#: pipeline/models.py:588 msgid "实例名称" msgstr "实例名称" -#: pipeline/models.py:579 +#: pipeline/models.py:591 msgid "执行者" msgstr "执行者" -#: pipeline/models.py:580 +#: pipeline/models.py:592 msgid "启动时间" msgstr "启动时间" -#: pipeline/engine/models/core.py:896 -#: pipeline/engine/models/loop_activity.py:57 pipeline/models.py:581 +#: pipeline/engine/models/core.py:908 +#: pipeline/engine/models/loop_activity.py:68 pipeline/models.py:593 msgid "结束时间" msgstr "结束时间" -#: pipeline/models.py:583 +#: pipeline/models.py:595 msgid "是否已经启动" msgstr "是否已经启动" -#: pipeline/models.py:584 +#: pipeline/models.py:596 msgid "是否已经完成" msgstr "是否已经完成" -#: pipeline/models.py:586 +#: pipeline/models.py:598 msgid "是否已经删除" msgstr "是否已经删除" -#: pipeline/models.py:588 +#: pipeline/models.py:600 msgid "表示当前实例是否删除" msgstr "表示当前实例是否删除" -#: pipeline/models.py:593 +#: pipeline/models.py:605 msgid "实例结构数据,指向实例对应的模板的结构数据" msgstr "实例结构数据,指向实例对应的模板的结构数据" -#: pipeline/models.py:599 +#: pipeline/models.py:611 msgid "用于实例执行的结构数据" msgstr "用于实例执行的结构数据" -#: pipeline/models.py:605 +#: pipeline/models.py:617 msgid "提前计算好的一些流程结构数据" msgstr "提前计算好的一些流程结构数据" -#: pipeline/models.py:611 pipeline/models.py:612 +#: pipeline/models.py:623 pipeline/models.py:624 msgid "Pipeline实例" msgstr "Pipeline实例" -#: pipeline/models.py:772 +#: pipeline/models.py:784 msgid "变量编码" msgstr "变量编码" -#: pipeline/models.py:773 +#: pipeline/models.py:785 msgid "变量是否可用" msgstr "变量是否可用" -#: pipeline/models.py:776 pipeline/models.py:777 +#: pipeline/models.py:788 pipeline/models.py:789 msgid "Variable变量" msgstr "Variable变量" -#: pipeline/component_framework/models.py:28 -#: pipeline/contrib/statistics/models.py:7 -#: pipeline/contrib/statistics/models.py:22 +#: pipeline/component_framework/models.py:40 +#: pipeline/contrib/statistics/models.py:19 +#: pipeline/contrib/statistics/models.py:34 msgid "组件编码" msgstr "组件编码" -#: pipeline/component_framework/models.py:29 +#: pipeline/component_framework/models.py:41 msgid "组件名称" msgstr "组件名称" -#: pipeline/component_framework/models.py:30 +#: pipeline/component_framework/models.py:42 msgid "组件是否可用" msgstr "组件是否可用" -#: pipeline/component_framework/models.py:35 -#: pipeline/component_framework/models.py:36 +#: pipeline/component_framework/models.py:47 +#: pipeline/component_framework/models.py:48 msgid "组件 Component" msgstr "组件 Component" -#: pipeline/contrib/periodic_task/models.py:23 +#: pipeline/contrib/periodic_task/models.py:35 msgid "Days" msgstr "Days" -#: pipeline/contrib/periodic_task/models.py:24 +#: pipeline/contrib/periodic_task/models.py:36 msgid "Hours" msgstr "Hours" -#: pipeline/contrib/periodic_task/models.py:25 +#: pipeline/contrib/periodic_task/models.py:37 msgid "Minutes" msgstr "Minutes" -#: pipeline/contrib/periodic_task/models.py:26 +#: pipeline/contrib/periodic_task/models.py:38 msgid "Seconds" msgstr "Seconds" -#: pipeline/contrib/periodic_task/models.py:27 +#: pipeline/contrib/periodic_task/models.py:39 msgid "Microseconds" msgstr "Microseconds" -#: pipeline/contrib/periodic_task/models.py:32 +#: pipeline/contrib/periodic_task/models.py:44 msgid "every" msgstr "every" -#: pipeline/contrib/periodic_task/models.py:34 +#: pipeline/contrib/periodic_task/models.py:46 msgid "period" msgstr "period" -#: pipeline/contrib/periodic_task/models.py:38 -#: pipeline/contrib/periodic_task/models.py:157 +#: pipeline/contrib/periodic_task/models.py:50 +#: pipeline/contrib/periodic_task/models.py:169 msgid "interval" msgstr "interval" -#: pipeline/contrib/periodic_task/models.py:39 +#: pipeline/contrib/periodic_task/models.py:51 msgid "intervals" msgstr "intervals" -#: pipeline/contrib/periodic_task/models.py:59 +#: pipeline/contrib/periodic_task/models.py:71 msgid "every {0.period_singular}" msgstr "every {0.period_singular}" -#: pipeline/contrib/periodic_task/models.py:60 +#: pipeline/contrib/periodic_task/models.py:72 msgid "every {0.every:d} {0.period}" msgstr "every {0.every:d} {0.period}" -#: pipeline/contrib/periodic_task/models.py:73 +#: pipeline/contrib/periodic_task/models.py:85 msgid "minute" msgstr "minute" -#: pipeline/contrib/periodic_task/models.py:74 +#: pipeline/contrib/periodic_task/models.py:86 msgid "hour" msgstr "hour" -#: pipeline/contrib/periodic_task/models.py:76 +#: pipeline/contrib/periodic_task/models.py:88 msgid "day of week" msgstr "day of week" -#: pipeline/contrib/periodic_task/models.py:79 +#: pipeline/contrib/periodic_task/models.py:91 msgid "day of month" msgstr "day of month" -#: pipeline/contrib/periodic_task/models.py:82 +#: pipeline/contrib/periodic_task/models.py:94 msgid "month of year" msgstr "month of year" -#: pipeline/contrib/periodic_task/models.py:87 -#: pipeline/contrib/periodic_task/models.py:161 +#: pipeline/contrib/periodic_task/models.py:99 +#: pipeline/contrib/periodic_task/models.py:173 msgid "crontab" msgstr "crontab" -#: pipeline/contrib/periodic_task/models.py:88 +#: pipeline/contrib/periodic_task/models.py:100 msgid "crontabs" msgstr "crontabs" -#: pipeline/contrib/periodic_task/models.py:151 +#: pipeline/contrib/periodic_task/models.py:163 msgid "name" msgstr "name" -#: pipeline/contrib/periodic_task/models.py:152 +#: pipeline/contrib/periodic_task/models.py:164 msgid "Useful description" msgstr "Useful description" -#: pipeline/contrib/periodic_task/models.py:154 +#: pipeline/contrib/periodic_task/models.py:166 msgid "task name" msgstr "task name" -#: pipeline/contrib/periodic_task/models.py:163 +#: pipeline/contrib/periodic_task/models.py:175 msgid "Use one of interval/crontab" msgstr "Use one of interval/crontab" -#: pipeline/contrib/periodic_task/models.py:166 +#: pipeline/contrib/periodic_task/models.py:178 msgid "Arguments" msgstr "Arguments" -#: pipeline/contrib/periodic_task/models.py:167 +#: pipeline/contrib/periodic_task/models.py:179 msgid "JSON encoded positional arguments" msgstr "JSON encoded positional arguments" -#: pipeline/contrib/periodic_task/models.py:170 +#: pipeline/contrib/periodic_task/models.py:182 msgid "Keyword arguments" msgstr "Keyword arguments" -#: pipeline/contrib/periodic_task/models.py:171 +#: pipeline/contrib/periodic_task/models.py:183 msgid "JSON encoded keyword arguments" msgstr "JSON encoded keyword arguments" -#: pipeline/contrib/periodic_task/models.py:174 +#: pipeline/contrib/periodic_task/models.py:186 msgid "queue" msgstr "queue" -#: pipeline/contrib/periodic_task/models.py:175 +#: pipeline/contrib/periodic_task/models.py:187 msgid "Queue defined in CELERY_QUEUES" msgstr "Queue defined in CELERY_QUEUES" -#: pipeline/contrib/periodic_task/models.py:178 +#: pipeline/contrib/periodic_task/models.py:190 msgid "exchange" msgstr "exchange" -#: pipeline/contrib/periodic_task/models.py:181 +#: pipeline/contrib/periodic_task/models.py:193 msgid "routing key" msgstr "routing key" -#: pipeline/contrib/periodic_task/models.py:184 +#: pipeline/contrib/periodic_task/models.py:196 msgid "expires" msgstr "expires" -#: pipeline/contrib/periodic_task/models.py:187 +#: pipeline/contrib/periodic_task/models.py:199 msgid "enabled" msgstr "enabled" -#: pipeline/contrib/periodic_task/models.py:197 +#: pipeline/contrib/periodic_task/models.py:209 msgid "description" msgstr "description" -#: pipeline/contrib/periodic_task/models.py:203 +#: pipeline/contrib/periodic_task/models.py:215 msgid "djcelery periodic task" msgstr "djcelery periodic task" -#: pipeline/contrib/periodic_task/models.py:204 +#: pipeline/contrib/periodic_task/models.py:216 msgid "djcelery periodic tasks" msgstr "djcelery periodic tasks" -#: pipeline/contrib/periodic_task/models.py:281 +#: pipeline/contrib/periodic_task/models.py:293 msgid "周期任务名称" msgstr "周期任务名称" -#: pipeline/contrib/periodic_task/models.py:286 +#: pipeline/contrib/periodic_task/models.py:298 msgid "周期任务对应的模板" msgstr "周期任务对应的模板" -#: pipeline/contrib/periodic_task/models.py:289 +#: pipeline/contrib/periodic_task/models.py:301 msgid "调度策略" msgstr "调度策略" -#: pipeline/contrib/periodic_task/models.py:290 +#: pipeline/contrib/periodic_task/models.py:302 msgid "celery 周期任务实例" msgstr "celery 周期任务实例" -#: pipeline/contrib/periodic_task/models.py:294 +#: pipeline/contrib/periodic_task/models.py:306 msgid "用于创建流程实例的结构数据" msgstr "用于创建流程实例的结构数据" -#: pipeline/contrib/periodic_task/models.py:296 +#: pipeline/contrib/periodic_task/models.py:308 msgid "执行次数" msgstr "执行次数" -#: pipeline/contrib/periodic_task/models.py:297 +#: pipeline/contrib/periodic_task/models.py:309 msgid "上次运行时间" msgstr "上次运行时间" -#: pipeline/contrib/periodic_task/models.py:299 +#: pipeline/contrib/periodic_task/models.py:311 msgid "额外信息" msgstr "额外信息" -#: pipeline/contrib/periodic_task/models.py:388 +#: pipeline/contrib/periodic_task/models.py:400 msgid "Pipeline 实例" msgstr "Pipeline 实例" -#: pipeline/contrib/statistics/models.py:9 -#: pipeline/contrib/statistics/models.py:24 +#: pipeline/contrib/statistics/models.py:21 +#: pipeline/contrib/statistics/models.py:36 msgid "节点ID" msgstr "节点ID" -#: pipeline/contrib/statistics/models.py:10 -#: pipeline/contrib/statistics/models.py:25 +#: pipeline/contrib/statistics/models.py:22 +#: pipeline/contrib/statistics/models.py:37 msgid "是否子流程引用" msgstr "是否子流程引用" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "子流程堆栈" msgstr "子流程堆栈" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "JSON 格式的列表" msgstr "JSON 格式的列表" -#: pipeline/contrib/statistics/models.py:14 -#: pipeline/contrib/statistics/models.py:15 +#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:27 msgid "Pipeline标准插件被引用数据" msgstr "Pipeline标准插件被引用数据" -#: pipeline/contrib/statistics/models.py:27 +#: pipeline/contrib/statistics/models.py:39 msgid "标准插件执行开始时间" msgstr "标准插件执行开始时间" -#: pipeline/contrib/statistics/models.py:28 +#: pipeline/contrib/statistics/models.py:40 msgid "标准插件执行结束时间" msgstr "标准插件执行结束时间" -#: pipeline/contrib/statistics/models.py:29 +#: pipeline/contrib/statistics/models.py:41 msgid "标准插件执行耗时(s)" msgstr "标准插件执行耗时(s)" -#: pipeline/contrib/statistics/models.py:30 +#: pipeline/contrib/statistics/models.py:42 msgid "是否执行成功" msgstr "是否执行成功" -#: pipeline/contrib/statistics/models.py:31 pipeline/engine/models/core.py:801 -#: pipeline/engine/models/core.py:898 +#: pipeline/contrib/statistics/models.py:43 pipeline/engine/models/core.py:813 +#: pipeline/engine/models/core.py:910 msgid "是否跳过" msgstr "是否跳过" -#: pipeline/contrib/statistics/models.py:32 +#: pipeline/contrib/statistics/models.py:44 msgid "是否重试记录" msgstr "是否重试记录" -#: pipeline/contrib/statistics/models.py:35 -#: pipeline/contrib/statistics/models.py:36 +#: pipeline/contrib/statistics/models.py:47 +#: pipeline/contrib/statistics/models.py:48 msgid "Pipeline标准插件执行数据" msgstr "Pipeline标准插件执行数据" -#: pipeline/contrib/statistics/models.py:45 -#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:57 +#: pipeline/contrib/statistics/models.py:71 msgid "标准插件总数" msgstr "标准插件总数" -#: pipeline/contrib/statistics/models.py:46 -#: pipeline/contrib/statistics/models.py:60 +#: pipeline/contrib/statistics/models.py:58 +#: pipeline/contrib/statistics/models.py:72 msgid "子流程总数" msgstr "子流程总数" -#: pipeline/contrib/statistics/models.py:47 -#: pipeline/contrib/statistics/models.py:61 +#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:73 msgid "网关总数" msgstr "网关总数" -#: pipeline/contrib/statistics/models.py:50 -#: pipeline/contrib/statistics/models.py:51 +#: pipeline/contrib/statistics/models.py:62 +#: pipeline/contrib/statistics/models.py:63 msgid "Pipeline模板引用数据" msgstr "Pipeline模板引用数据" -#: pipeline/contrib/statistics/models.py:64 -#: pipeline/contrib/statistics/models.py:65 +#: pipeline/contrib/statistics/models.py:76 +#: pipeline/contrib/statistics/models.py:77 msgid "Pipeline实例引用数据" msgstr "Pipeline实例引用数据" -#: pipeline/contrib/web/forms.py:37 +#: pipeline/contrib/web/forms.py:49 msgid "无效的节点 ID" msgstr "无效的节点 ID" -#: pipeline/contrib/web/forms.py:46 +#: pipeline/contrib/web/forms.py:58 msgid "无效的实例 ID" msgstr "无效的实例 ID" -#: pipeline/contrib/web/forms.py:55 +#: pipeline/contrib/web/forms.py:67 msgid "无效的模板 ID" msgstr "无效的模板 ID" -#: pipeline/contrib/web/forms.py:72 +#: pipeline/contrib/web/forms.py:84 msgid "无效的组件代码" msgstr "无效的组件代码" -#: pipeline/contrib/web/forms.py:85 +#: pipeline/contrib/web/forms.py:97 #, python-format msgid "该字段的类型必须为 %s" msgstr "该字段的类型必须为 %s" -#: pipeline/contrib/web/forms.py:87 -#: pipeline/contrib/web/webresource/resource.py:82 -#: pipeline/contrib/web/webresource/resource.py:101 -#: pipeline/contrib/web/webresource/resource.py:208 -#: pipeline/contrib/web/webresource/resource.py:228 +#: pipeline/contrib/web/forms.py:99 +#: pipeline/contrib/web/webresource/resource.py:94 +#: pipeline/contrib/web/webresource/resource.py:113 +#: pipeline/contrib/web/webresource/resource.py:220 +#: pipeline/contrib/web/webresource/resource.py:240 msgid "JSON 格式不合法" msgstr "JSON 格式不合法" -#: pipeline/contrib/web/views_v1.py:347 +#: pipeline/contrib/web/views_v1.py:359 msgid "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" msgstr "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" -#: pipeline/contrib/web/views_v1.py:352 +#: pipeline/contrib/web/views_v1.py:364 msgid "重试计时器失败,请稍后再次尝试" msgstr "重试计时器失败,请稍后再次尝试" -#: pipeline/contrib/web/webresource/resource.py:201 -#: pipeline/contrib/web/webresource/resource.py:290 +#: pipeline/contrib/web/webresource/resource.py:213 +#: pipeline/contrib/web/webresource/resource.py:302 msgid "模板不存在" msgstr "模板不存在" -#: pipeline/core/flow/activity.py:151 +#: pipeline/core/flow/activity.py:162 msgid "执行结果" msgstr "执行结果" -#: pipeline/engine/admin.py:109 +#: pipeline/engine/admin.py:120 msgid "打开所选的功能" msgstr "打开所选的功能" -#: pipeline/engine/admin.py:110 +#: pipeline/engine/admin.py:121 msgid "关闭所选的功能" msgstr "关闭所选的功能" -#: pipeline/engine/conf/function_switch.py:10 +#: pipeline/engine/conf/function_switch.py:21 msgid "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" msgstr "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" -#: pipeline/engine/models/core.py:41 +#: pipeline/engine/models/core.py:53 msgid "pipeline 运行时数据" msgstr "pipeline 运行时数据" -#: pipeline/engine/models/core.py:146 +#: pipeline/engine/models/core.py:158 msgid "Process ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:147 +#: pipeline/engine/models/core.py:159 msgid "根 pipeline 的 ID" msgstr "根 pipeline 的 ID" -#: pipeline/engine/models/core.py:148 +#: pipeline/engine/models/core.py:160 msgid "当前推进到的节点的 ID" msgstr "当前推进到的节点的 ID" -#: pipeline/engine/models/core.py:149 +#: pipeline/engine/models/core.py:161 msgid "遇到该 ID 的节点就停止推进" msgstr "遇到该 ID 的节点就停止推进" -#: pipeline/engine/models/core.py:150 +#: pipeline/engine/models/core.py:162 msgid "父 process 的 ID" msgstr "父 process 的 ID" -#: pipeline/engine/models/core.py:151 +#: pipeline/engine/models/core.py:163 msgid "收到子节点 ACK 的数量" msgstr "收到子节点 ACK 的数量" -#: pipeline/engine/models/core.py:152 +#: pipeline/engine/models/core.py:164 msgid "需要收到的子节点 ACK 的数量" msgstr "需要收到的子节点 ACK 的数量" -#: pipeline/engine/models/core.py:153 +#: pipeline/engine/models/core.py:165 msgid "该 process 是否还有效" msgstr "该 process 是否还有效" -#: pipeline/engine/models/core.py:154 +#: pipeline/engine/models/core.py:166 msgid "该 process 是否正在休眠" msgstr "该 process 是否正在休眠" -#: pipeline/engine/models/core.py:155 +#: pipeline/engine/models/core.py:167 msgid "该 process 是否被冻结" msgstr "该 process 是否被冻结" -#: pipeline/engine/models/core.py:531 +#: pipeline/engine/models/core.py:543 msgid "祖先 ID" msgstr "祖先 ID" -#: pipeline/engine/models/core.py:532 +#: pipeline/engine/models/core.py:544 msgid "后代 ID" msgstr "后代 ID" -#: pipeline/engine/models/core.py:533 +#: pipeline/engine/models/core.py:545 msgid "距离" msgstr "距离" -#: pipeline/engine/models/core.py:796 pipeline/engine/models/core.py:843 -#: pipeline/engine/models/core.py:938 pipeline/engine/models/core.py:1096 -#: pipeline/engine/models/loop_activity.py:25 pipeline/log/models.py:38 +#: pipeline/engine/models/core.py:808 pipeline/engine/models/core.py:855 +#: pipeline/engine/models/core.py:950 pipeline/engine/models/core.py:1108 +#: pipeline/engine/models/loop_activity.py:36 pipeline/log/models.py:50 msgid "节点 ID" msgstr "节点 ID" -#: pipeline/engine/models/core.py:797 +#: pipeline/engine/models/core.py:809 msgid "状态" msgstr "状态" -#: pipeline/engine/models/core.py:798 +#: pipeline/engine/models/core.py:810 msgid "节点名称" msgstr "节点名称" -#: pipeline/engine/models/core.py:799 +#: pipeline/engine/models/core.py:811 msgid "重试次数" msgstr "重试次数" -#: pipeline/engine/models/core.py:800 pipeline/engine/models/core.py:897 +#: pipeline/engine/models/core.py:812 pipeline/engine/models/core.py:909 msgid "循环次数" msgstr "循环次数" -#: pipeline/engine/models/core.py:802 +#: pipeline/engine/models/core.py:814 msgid "是否出错后自动忽略" msgstr "是否出错后自动忽略" -#: pipeline/engine/models/core.py:805 +#: pipeline/engine/models/core.py:817 msgid "归档时间" msgstr "归档时间" -#: pipeline/engine/models/core.py:806 +#: pipeline/engine/models/core.py:818 msgid "版本" msgstr "版本" -#: pipeline/engine/models/core.py:844 pipeline/engine/models/core.py:852 +#: pipeline/engine/models/core.py:856 pipeline/engine/models/core.py:864 msgid "输入数据" msgstr "输入数据" -#: pipeline/engine/models/core.py:845 pipeline/engine/models/core.py:853 +#: pipeline/engine/models/core.py:857 pipeline/engine/models/core.py:865 msgid "输出数据" msgstr "输出数据" -#: pipeline/engine/models/core.py:846 pipeline/engine/models/core.py:854 +#: pipeline/engine/models/core.py:858 pipeline/engine/models/core.py:866 msgid "异常数据" msgstr "异常数据" -#: pipeline/engine/models/core.py:894 -#: pipeline/engine/models/loop_activity.py:54 -#: pipeline/engine/models/loop_activity.py:88 +#: pipeline/engine/models/core.py:906 +#: pipeline/engine/models/loop_activity.py:65 +#: pipeline/engine/models/loop_activity.py:99 msgid "节点 id" msgstr "节点 id" -#: pipeline/engine/models/core.py:937 -#: pipeline/engine/models/loop_activity.py:24 +#: pipeline/engine/models/core.py:949 +#: pipeline/engine/models/loop_activity.py:35 msgid "ID 节点ID+version" msgstr "ID 节点ID+version" -#: pipeline/engine/models/core.py:939 +#: pipeline/engine/models/core.py:951 msgid "Pipeline 进程 ID" msgstr "Pipeline 进程 ID" -#: pipeline/engine/models/core.py:940 -#: pipeline/engine/models/loop_activity.py:26 +#: pipeline/engine/models/core.py:952 +#: pipeline/engine/models/loop_activity.py:37 msgid "被调度次数" msgstr "被调度次数" -#: pipeline/engine/models/core.py:941 -#: pipeline/engine/models/loop_activity.py:27 +#: pipeline/engine/models/core.py:953 +#: pipeline/engine/models/loop_activity.py:38 msgid "是否是回调型调度" msgstr "是否是回调型调度" -#: pipeline/engine/models/core.py:942 -#: pipeline/engine/models/loop_activity.py:28 +#: pipeline/engine/models/core.py:954 +#: pipeline/engine/models/loop_activity.py:39 msgid "回调数据" msgstr "回调数据" -#: pipeline/engine/models/core.py:943 +#: pipeline/engine/models/core.py:955 msgid "待调度服务" msgstr "待调度服务" -#: pipeline/engine/models/core.py:944 +#: pipeline/engine/models/core.py:956 msgid "是否已完成" msgstr "是否已完成" -#: pipeline/engine/models/core.py:945 -#: pipeline/engine/models/loop_activity.py:29 +#: pipeline/engine/models/core.py:957 +#: pipeline/engine/models/loop_activity.py:40 msgid "Activity 的版本" msgstr "Activity 的版本" -#: pipeline/engine/models/core.py:946 +#: pipeline/engine/models/core.py:958 msgid "是否正在被调度" msgstr "是否正在被调度" -#: pipeline/engine/models/core.py:1004 +#: pipeline/engine/models/core.py:1016 msgid "子流程 ID" msgstr "子流程 ID" -#: pipeline/engine/models/core.py:1005 +#: pipeline/engine/models/core.py:1017 msgid "对应的进程 ID" msgstr "对应的进程 ID" -#: pipeline/engine/models/core.py:1037 +#: pipeline/engine/models/core.py:1049 msgid "pipeline 进程 ID" msgstr "pipeline 进程 ID" -#: pipeline/engine/models/core.py:1038 pipeline/engine/models/core.py:1065 -#: pipeline/engine/models/core.py:1097 +#: pipeline/engine/models/core.py:1050 pipeline/engine/models/core.py:1077 +#: pipeline/engine/models/core.py:1109 msgid "celery 任务 ID" msgstr "celery 任务 ID" -#: pipeline/engine/models/core.py:1064 +#: pipeline/engine/models/core.py:1076 msgid "schedule ID" msgstr "schedule ID" -#: pipeline/engine/models/data.py:31 +#: pipeline/engine/models/data.py:43 msgid "对象唯一键" msgstr "对象唯一键" -#: pipeline/engine/models/data.py:32 +#: pipeline/engine/models/data.py:44 msgid "对象存储字段" msgstr "对象存储字段" -#: pipeline/engine/models/function.py:43 +#: pipeline/engine/models/function.py:55 msgid "功能名称" msgstr "功能名称" -#: pipeline/engine/models/function.py:44 +#: pipeline/engine/models/function.py:56 msgid "功能描述" msgstr "功能描述" -#: pipeline/engine/models/function.py:45 +#: pipeline/engine/models/function.py:57 msgid "是否激活" msgstr "是否激活" -#: pipeline/engine/models/loop_activity.py:30 +#: pipeline/engine/models/loop_activity.py:41 msgid "当前调度所处的循环计数" msgstr "当前调度所处的循环计数" -#: pipeline/engine/models/loop_activity.py:55 +#: pipeline/engine/models/loop_activity.py:66 msgid "本次循环计数" msgstr "本次循环计数" -#: pipeline/engine/models/loop_activity.py:59 +#: pipeline/engine/models/loop_activity.py:70 msgid "执行状态" msgstr "执行状态" -#: pipeline/engine/models/loop_activity.py:89 +#: pipeline/engine/models/loop_activity.py:100 msgid "本次循环次数" msgstr "本次循环次数" -#: pipeline/engine/models/loop_activity.py:90 +#: pipeline/engine/models/loop_activity.py:101 msgid "实际循环次数" msgstr "实际循环次数" -#: pipeline/engine/models/loop_activity.py:91 +#: pipeline/engine/models/loop_activity.py:102 msgid "所需循环次数" msgstr "所需循环次数" -#: pipeline/log/models.py:32 +#: pipeline/log/models.py:44 msgid "logger 名称" msgstr "logger 名称" -#: pipeline/log/models.py:33 +#: pipeline/log/models.py:45 msgid "日志等级" msgstr "日志等级" -#: pipeline/log/models.py:34 +#: pipeline/log/models.py:46 msgid "日志内容" msgstr "日志内容" -#: pipeline/log/models.py:36 +#: pipeline/log/models.py:48 msgid "输出时间" msgstr "输出时间" -#: pipeline/log/models.py:39 +#: pipeline/log/models.py:51 msgid "节点执行历史 ID" msgstr "节点执行历史 ID" -#: pipeline/validators/connection.py:30 +#: pipeline/validators/connection.py:41 #, python-format msgid "不能连接%s类型节点\n" msgstr "不能连接%s类型节点\n" -#: pipeline/validators/connection.py:32 +#: pipeline/validators/connection.py:43 #, python-format msgid "节点的入度最大为%s,最小为%s\n" msgstr "节点的入度最大为%s,最小为%s\n" -#: pipeline/validators/connection.py:34 +#: pipeline/validators/connection.py:45 #, python-format msgid "节点的出度最大为%s,最小为%s\n" msgstr "节点的出度最大为%s,最小为%s\n" -#: pipeline/validators/gateway.py:117 pipeline/validators/gateway.py:168 +#: pipeline/validators/gateway.py:128 pipeline/validators/gateway.py:179 msgid "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" msgstr "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" -#: pipeline/validators/gateway.py:178 +#: pipeline/validators/gateway.py:189 msgid "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" msgstr "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" -#: pipeline/validators/gateway.py:188 +#: pipeline/validators/gateway.py:199 msgid "非法网关,请检查其分支是否符合规则" msgstr "非法网关,请检查其分支是否符合规则" -#: pipeline/validators/gateway.py:205 +#: pipeline/validators/gateway.py:216 msgid "汇聚网关只能汇聚来自同一个并行网关的分支" msgstr "汇聚网关只能汇聚来自同一个并行网关的分支" -#: pipeline/validators/gateway.py:210 +#: pipeline/validators/gateway.py:221 msgid "汇聚网关没有汇聚其对应的并行网关的所有分支" msgstr "汇聚网关没有汇聚其对应的并行网关的所有分支" -#: pipeline/validators/gateway.py:313 +#: pipeline/validators/gateway.py:324 msgid "无法获取该网关距离开始节点的距离" msgstr "无法获取该网关距离开始节点的距离" -#: pipeline_plugins/cmdb_ip_picker/query.py:60 -#: pipeline_plugins/cmdb_ip_picker/query.py:118 -#: pipeline_plugins/cmdb_ip_picker/utils.py:68 -#: pipeline_plugins/cmdb_ip_picker/utils.py:176 -#: pipeline_plugins/cmdb_ip_picker/utils.py:182 -#: pipeline_plugins/components/collections/sites/open/cc.py:16 +#: pipeline_plugins/cmdb_ip_picker/query.py:72 +#: pipeline_plugins/cmdb_ip_picker/query.py:130 +#: pipeline_plugins/cmdb_ip_picker/utils.py:80 +#: pipeline_plugins/cmdb_ip_picker/utils.py:188 +#: pipeline_plugins/cmdb_ip_picker/utils.py:194 +#: pipeline_plugins/components/collections/sites/open/cc.py:28 msgid "配置平台(CMDB)" msgstr "配置平台(CMDB)" -#: pipeline_plugins/cmdb_ip_picker/query.py:86 +#: pipeline_plugins/cmdb_ip_picker/query.py:98 msgid "管控平台(GSE)" msgstr "管控平台(GSE)" -#: pipeline_plugins/cmdb_ip_picker/utils.py:192 +#: pipeline_plugins/cmdb_ip_picker/utils.py:204 msgid "集群" msgstr "集群" -#: pipeline_plugins/cmdb_ip_picker/utils.py:198 +#: pipeline_plugins/cmdb_ip_picker/utils.py:210 msgid "模块" msgstr "模块" -#: pipeline_plugins/components/collections/common.py:13 -#: pipeline_plugins/components/collections/controller.py:16 -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:10 -#: pipeline_plugins/components/collections/sites/ieod/bk.py:14 -#: pipeline_plugins/components/collections/sites/open/bk.py:14 +#: pipeline_plugins/components/collections/common.py:25 +#: pipeline_plugins/components/collections/controller.py:28 +#: pipeline_plugins/components/collections/sites/open/bk.py:26 msgid "蓝鲸服务(BK)" msgstr "蓝鲸服务(BK)" -#: pipeline_plugins/components/collections/common.py:45 +#: pipeline_plugins/components/collections/common.py:57 #, python-format msgid "请求异常,详细信息: %s" msgstr "请求异常,详细信息: %s" -#: pipeline_plugins/components/collections/common.py:56 +#: pipeline_plugins/components/collections/common.py:68 msgid "请求响应数据格式非 JSON" msgstr "请求响应数据格式非 JSON" -#: pipeline_plugins/components/collections/common.py:62 +#: pipeline_plugins/components/collections/common.py:74 #, python-format msgid "请求失败,状态码: %s,响应: %s" msgstr "请求失败,状态码: %s,响应: %s" -#: pipeline_plugins/components/collections/common.py:72 +#: pipeline_plugins/components/collections/common.py:84 msgid "响应内容" msgstr "响应内容" -#: pipeline_plugins/components/collections/common.py:73 +#: pipeline_plugins/components/collections/common.py:85 msgid "状态码" msgstr "状态码" -#: pipeline_plugins/components/collections/common.py:78 +#: pipeline_plugins/components/collections/common.py:90 msgid "HTTP 请求" msgstr "HTTP 请求" -#: pipeline_plugins/components/collections/common.py:79 +#: pipeline_plugins/components/collections/common.py:91 msgid "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" msgstr "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" -#: pipeline_plugins/components/collections/controller.py:35 +#: pipeline_plugins/components/collections/controller.py:47 msgid "暂停" msgstr "暂停" -#: pipeline_plugins/components/collections/controller.py:73 +#: pipeline_plugins/components/collections/controller.py:85 #, python-format msgid "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" msgstr "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" -#: pipeline_plugins/components/collections/controller.py:100 +#: pipeline_plugins/components/collections/controller.py:112 msgid "定时" msgstr "定时" -#: pipeline_plugins/components/collections/test.py:15 -msgid "TEST" -msgstr "TEST" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:14 -msgid "GseAgent" -msgstr "GseAgent" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:139 -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:125 -msgid "安装" -msgstr "安装" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:225 -msgid "卸载" -msgstr "卸载" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:77 -msgid "短信通知结果" -msgstr "短信通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:78 -msgid "短信通知返回信息" -msgstr "短信通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:79 -msgid "邮件通知结果" -msgstr "邮件通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:80 -msgid "邮件通知返回信息" -msgstr "邮件通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:81 -msgid "微信通知结果" -msgstr "微信通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:82 -msgid "微信通知返回信息" -msgstr "微信通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:87 -msgid "消息通知" -msgstr "消息通知" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:10 -msgid "游戏区服管理(GCLOUD)" -msgstr "游戏区服管理(GCLOUD)" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:71 -msgid "批量更新区服标注" -msgstr "批量更新区服标注" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:131 -msgid "批量更新区服状态" -msgstr "批量更新区服状态" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:167 -msgid "预发布大区" -msgstr "预发布大区" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:201 -msgid "发布大区" -msgstr "发布大区" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:13 -msgid "游戏云存储平台(GCS)" -msgstr "游戏云存储平台(GCS)" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:166 -msgid "权限申请" -msgstr "权限申请" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:255 -msgid "权限回收提单" -msgstr "权限回收提单" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:349 -msgid "执行变更单据" -msgstr "执行变更单据" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:442 -msgid "数据库备份" -msgstr "数据库备份" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:502 -msgid "变更提单" -msgstr "变更提单" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:36 -#: pipeline_plugins/components/collections/sites/open/job.py:39 -msgid "作业平台(JOB)" -msgstr "作业平台(JOB)" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:85 -#: pipeline_plugins/components/collections/sites/clouds/job.py:386 -msgid "无法从 JOB 读取错误信息" -msgstr "无法从 JOB 读取错误信息" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:89 -#: pipeline_plugins/components/collections/sites/clouds/job.py:390 -#, python-format -msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" -msgstr "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:180 -#: pipeline_plugins/components/collections/sites/open/job.py:163 -msgid "执行作业" -msgstr "执行作业" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:239 -#: pipeline_plugins/components/collections/sites/open/job.py:231 -msgid "快速分发文件" -msgstr "快速分发文件" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:285 -#: pipeline_plugins/components/collections/sites/open/job.py:301 -msgid "快速执行脚本" -msgstr "快速执行脚本" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:424 -msgid "本地文件列表为空,请确认本地文件是否已经上传" -msgstr "本地文件列表为空,请确认本地文件是否已经上传" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:451 -#, python-format -msgid "获取 S3 对象下载链接失败:%s" -msgstr "获取 S3 对象下载链接失败:%s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:460 -msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" -msgstr "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:516 -msgid "分发本地文件" -msgstr "分发本地文件" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:16 -msgid "蓝鲸监控(Monitor)" -msgstr "蓝鲸监控(Monitor)" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:92 -msgid "告警屏蔽" -msgstr "告警屏蔽" - -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:16 -msgid "GseProxy" -msgstr "GseProxy" - -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:11 -msgid "AutoTCM(TCM)" -msgstr "AutoTCM(TCM)" - -#: pipeline_plugins/components/collections/sites/ieod/bk.py:39 -#: pipeline_plugins/components/collections/sites/open/bk.py:39 +#: pipeline_plugins/components/collections/sites/open/bk.py:51 msgid "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" msgstr "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:107 -#: pipeline_plugins/components/collections/sites/open/bk.py:107 +#: pipeline_plugins/components/collections/sites/open/bk.py:119 msgid "返回码" msgstr "返回码" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:108 -#: pipeline_plugins/components/collections/sites/open/bk.py:108 +#: pipeline_plugins/components/collections/sites/open/bk.py:120 msgid "信息" msgstr "信息" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:147 -#: pipeline_plugins/components/collections/sites/open/bk.py:147 +#: pipeline_plugins/components/collections/sites/open/bk.py:159 msgid "发送通知" msgstr "发送通知" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:151 -msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" -msgstr "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:15 -msgid "负载均衡业务(CLB)" -msgstr "负载均衡业务(CLB)" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:143 -msgid "扫描域名证书" -msgstr "扫描域名证书" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:147 -msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" -msgstr "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:12 -msgid "企业微信(QYWEIXIN)" -msgstr "企业微信(QYWEIXIN)" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:36 -#, python-format -msgid "企业微信拉群失败,组件返回错误消息:%s" -msgstr "企业微信拉群失败,组件返回错误消息:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:52 -#, python-format -msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" -msgstr "企业微信拉群发送消息失败,组件返回错误消息:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:62 -msgid "企业微信拉群" -msgstr "企业微信拉群" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:15 -msgid "消息通知服务(TOF)" -msgstr "消息通知服务(TOF)" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:50 -msgid "获取员工直属Leader" -msgstr "获取员工直属Leader" - -#: pipeline_plugins/components/collections/sites/open/bk.py:151 +#: pipeline_plugins/components/collections/sites/open/bk.py:163 msgid "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" msgstr "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" -#: pipeline_plugins/components/collections/sites/open/cc.py:69 +#: pipeline_plugins/components/collections/sites/open/cc.py:81 msgid "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" msgstr "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" -#: pipeline_plugins/components/collections/sites/open/cc.py:174 +#: pipeline_plugins/components/collections/sites/open/cc.py:186 msgid "转移主机模块" msgstr "转移主机模块" -#: pipeline_plugins/components/collections/sites/open/cc.py:213 +#: pipeline_plugins/components/collections/sites/open/cc.py:225 msgid "所属运营商校验失败,请重试并修改为正确的所属运营商" msgstr "所属运营商校验失败,请重试并修改为正确的所属运营商" -#: pipeline_plugins/components/collections/sites/open/cc.py:228 +#: pipeline_plugins/components/collections/sites/open/cc.py:240 msgid "所在国家校验失败,请重试并修改为正确的所在国家" msgstr "所在国家校验失败,请重试并修改为正确的所在国家" -#: pipeline_plugins/components/collections/sites/open/cc.py:241 +#: pipeline_plugins/components/collections/sites/open/cc.py:253 msgid "所在省份校验失败,请重试并修改为正确的所在省份" msgstr "所在省份校验失败,请重试并修改为正确的所在省份" -#: pipeline_plugins/components/collections/sites/open/cc.py:266 +#: pipeline_plugins/components/collections/sites/open/cc.py:278 msgid "更新主机属性" msgstr "更新主机属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:360 -#: pipeline_plugins/components/collections/sites/open/cc.py:364 +#: pipeline_plugins/components/collections/sites/open/cc.py:372 +#: pipeline_plugins/components/collections/sites/open/cc.py:376 #, python-format msgid "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" msgstr "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" -#: pipeline_plugins/components/collections/sites/open/cc.py:426 +#: pipeline_plugins/components/collections/sites/open/cc.py:438 #, python-format msgid "成功替换的机器: %s" msgstr "成功替换的机器: %s" -#: pipeline_plugins/components/collections/sites/open/cc.py:436 +#: pipeline_plugins/components/collections/sites/open/cc.py:448 msgid "故障机替换" msgstr "故障机替换" -#: pipeline_plugins/components/collections/sites/open/cc.py:475 +#: pipeline_plugins/components/collections/sites/open/cc.py:487 msgid "清空集群中主机" msgstr "清空集群中主机" -#: pipeline_plugins/components/collections/sites/open/cc.py:516 +#: pipeline_plugins/components/collections/sites/open/cc.py:528 msgid "删除集群" msgstr "删除集群" -#: pipeline_plugins/components/collections/sites/open/cc.py:559 +#: pipeline_plugins/components/collections/sites/open/cc.py:571 msgid "修改集群服务状态" msgstr "修改集群服务状态" -#: pipeline_plugins/components/collections/sites/open/cc.py:602 -#: pipeline_plugins/components/collections/sites/open/cc.py:684 +#: pipeline_plugins/components/collections/sites/open/cc.py:614 +#: pipeline_plugins/components/collections/sites/open/cc.py:696 msgid "环境类型校验失败,请重试并修改为正确的环境类型" msgstr "环境类型校验失败,请重试并修改为正确的环境类型" -#: pipeline_plugins/components/collections/sites/open/cc.py:617 -#: pipeline_plugins/components/collections/sites/open/cc.py:669 +#: pipeline_plugins/components/collections/sites/open/cc.py:629 +#: pipeline_plugins/components/collections/sites/open/cc.py:681 msgid "服务状态校验失败,请重试并修改为正确的服务状态" msgstr "服务状态校验失败,请重试并修改为正确的服务状态" -#: pipeline_plugins/components/collections/sites/open/cc.py:636 +#: pipeline_plugins/components/collections/sites/open/cc.py:648 msgid "创建集群" msgstr "创建集群" -#: pipeline_plugins/components/collections/sites/open/cc.py:713 +#: pipeline_plugins/components/collections/sites/open/cc.py:725 msgid "更新集群属性" msgstr "更新集群属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:757 +#: pipeline_plugins/components/collections/sites/open/cc.py:769 msgid "模块类型校验失败,请重试并填写正确的模块类型" msgstr "模块类型校验失败,请重试并填写正确的模块类型" -#: pipeline_plugins/components/collections/sites/open/cc.py:786 +#: pipeline_plugins/components/collections/sites/open/cc.py:798 msgid "更新模块属性" msgstr "更新模块属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:831 +#: pipeline_plugins/components/collections/sites/open/cc.py:843 msgid "转移主机至空闲机" msgstr "转移主机至空闲机" -#: pipeline_plugins/components/collections/sites/open/job.py:88 +#: pipeline_plugins/components/collections/sites/open/job.py:50 +msgid "作业平台(JOB)" +msgstr "作业平台(JOB)" + +#: pipeline_plugins/components/collections/sites/open/job.py:99 #, python-format msgid "任务执行失败,前往作业平台(JOB)查看详情" msgstr "任务执行失败,前往作业平台(JOB)查看详情" -#: pipeline_plugins/components/collections/sites/open/job.py:99 +#: pipeline_plugins/components/collections/sites/open/job.py:110 msgid "JOB任务ID" msgstr "JOB任务ID" -#: pipeline_plugins/components/collections/sites/open/job.py:100 +#: pipeline_plugins/components/collections/sites/open/job.py:111 msgid "JOB任务链接" msgstr "JOB任务链接" -#: pipeline_plugins/components/query/common_query.py:33 +#: pipeline_plugins/components/collections/sites/open/job.py:174 +msgid "执行作业" +msgstr "执行作业" + +#: pipeline_plugins/components/collections/sites/open/job.py:242 +msgid "快速分发文件" +msgstr "快速分发文件" + +#: pipeline_plugins/components/collections/sites/open/job.py:312 +msgid "快速执行脚本" +msgstr "快速执行脚本" + +#: pipeline_plugins/components/query/common_query.py:45 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" msgstr "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" -#: pipeline_plugins/components/query/common_query.py:45 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:199 +#: pipeline_plugins/components/query/common_query.py:57 msgid "所有集群(all)" msgstr "所有集群(all)" -#: pipeline_plugins/components/query/common_query.py:69 +#: pipeline_plugins/components/query/common_query.py:81 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" msgstr "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" -#: pipeline_plugins/components/query/common_query.py:79 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:208 +#: pipeline_plugins/components/query/common_query.py:91 msgid "所有模块(all)" msgstr "所有模块(all)" -#: pipeline_plugins/components/query/common_query.py:93 +#: pipeline_plugins/components/query/common_query.py:105 #, python-format msgid "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" msgstr "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:32 -#, python-format -msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" -msgstr "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:42 -#, python-format -msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" -msgstr "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" - -#: pipeline_plugins/components/query/sites/clouds/query.py:54 -#, python-format -msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" -msgstr "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:77 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" -msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:104 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" -msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:198 -msgid "文件上传失败, 文件大小超过2GB" -msgstr "文件上传失败, 文件大小超过2GB" +#: pipeline_plugins/components/query/sites/open/query.py:270 +msgid "文件上传失败, 文件大小超过500M" +msgstr "文件上传失败, 文件大小超过500M" -#: pipeline_plugins/components/query/sites/clouds/query.py:204 -#: pipeline_plugins/components/query/sites/open/query.py:264 +#: pipeline_plugins/components/query/sites/open/query.py:276 msgid "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" msgstr "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" -#: pipeline_plugins/components/query/sites/clouds/query.py:233 -#: pipeline_plugins/components/query/sites/open/query.py:301 +#: pipeline_plugins/components/query/sites/open/query.py:286 +msgid "非法业务 ID" +msgstr "非法业务 ID" + +#: pipeline_plugins/components/query/sites/open/query.py:313 msgid "文件上传失败,路径不合法或者程序异常" msgstr "文件上传失败,路径不合法或者程序异常" -#: pipeline_plugins/components/query/sites/clouds/query.py:243 -#: pipeline_plugins/components/query/sites/open/query.py:311 +#: pipeline_plugins/components/query/sites/open/query.py:323 #, python-format msgid "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" msgstr "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:266 -#: pipeline_plugins/components/query/sites/open/query.py:334 +#: pipeline_plugins/components/query/sites/open/query.py:346 #, python-format msgid "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" msgstr "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:277 -#: pipeline_plugins/components/query/sites/open/query.py:345 +#: pipeline_plugins/components/query/sites/open/query.py:357 msgid "脚本" msgstr "脚本" -#: pipeline_plugins/components/query/sites/clouds/query.py:278 -#: pipeline_plugins/components/query/sites/open/query.py:346 +#: pipeline_plugins/components/query/sites/open/query.py:358 msgid "文件" msgstr "文件" -#: pipeline_plugins/components/query/sites/open/query.py:258 -msgid "文件上传失败, 文件大小超过500M" -msgstr "文件上传失败, 文件大小超过500M" - -#: pipeline_plugins/components/query/sites/open/query.py:274 -msgid "非法业务 ID" -msgstr "非法业务 ID" - -#: pipeline_plugins/components/utils/common.py:44 +#: pipeline_plugins/components/utils/common.py:56 msgid "调用{system}接口{api_name}返回失败, params={params}, error={error}" msgstr "调用{system}接口{api_name}返回失败, params={params}, error={error}" -#: pipeline_plugins/components/utils/sites/clouds/utils.py:156 -#, python-format -msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" -msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" - #~ msgid "循环测试" #~ msgstr "循环测试" @@ -2079,3 +1794,174 @@ msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回 #~ msgid "单据审核失败,请联系DBA查看详情" #~ msgstr "单据审核失败,请联系DBA查看详情" +#~ msgid "调用创建app maker接口失败,错误信息:%s" +#~ msgstr "调用创建app maker接口失败,错误信息:%s" + +#~ msgid "调用创建app maker接口失败" +#~ msgstr "调用创建app maker接口失败" + +#~ msgid "调用修改app maker接口失败,错误信息:%s" +#~ msgstr "调用修改app maker接口失败,错误信息:%s" + +#~ msgid "调用修改app maker接口失败" +#~ msgstr "调用修改app maker接口失败" + +#~ msgid "调用修改 LOGO 接口失败,错误信息:%s" +#~ msgstr "调用修改 LOGO 接口失败,错误信息:%s" + +#~ msgid "调用修改 LOGO 接口失败" +#~ msgstr "调用修改 LOGO 接口失败" + +#~ msgid "调用远程服务失败,Http请求错误状态码:%s" +#~ msgstr "调用远程服务失败,Http请求错误状态码:%s" + +#~ msgid "蓝鲸智云企业版" +#~ msgstr "蓝鲸智云企业版" + +#~ msgid "TEST" +#~ msgstr "TEST" + +#~ msgid "GseAgent" +#~ msgstr "GseAgent" + +#~ msgid "安装" +#~ msgstr "安装" + +#~ msgid "卸载" +#~ msgstr "卸载" + +#~ msgid "短信通知结果" +#~ msgstr "短信通知结果" + +#~ msgid "短信通知返回信息" +#~ msgstr "短信通知返回信息" + +#~ msgid "邮件通知结果" +#~ msgstr "邮件通知结果" + +#~ msgid "邮件通知返回信息" +#~ msgstr "邮件通知返回信息" + +#~ msgid "微信通知结果" +#~ msgstr "微信通知结果" + +#~ msgid "微信通知返回信息" +#~ msgstr "微信通知返回信息" + +#~ msgid "消息通知" +#~ msgstr "消息通知" + +#~ msgid "游戏区服管理(GCLOUD)" +#~ msgstr "游戏区服管理(GCLOUD)" + +#~ msgid "批量更新区服标注" +#~ msgstr "批量更新区服标注" + +#~ msgid "批量更新区服状态" +#~ msgstr "批量更新区服状态" + +#~ msgid "预发布大区" +#~ msgstr "预发布大区" + +#~ msgid "发布大区" +#~ msgstr "发布大区" + +#~ msgid "游戏云存储平台(GCS)" +#~ msgstr "游戏云存储平台(GCS)" + +#~ msgid "权限申请" +#~ msgstr "权限申请" + +#~ msgid "权限回收提单" +#~ msgstr "权限回收提单" + +#~ msgid "执行变更单据" +#~ msgstr "执行变更单据" + +#~ msgid "数据库备份" +#~ msgstr "数据库备份" + +#~ msgid "变更提单" +#~ msgstr "变更提单" + +#~ msgid "无法从 JOB 读取错误信息" +#~ msgstr "无法从 JOB 读取错误信息" + +#~ msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" +#~ msgstr "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" + +#~ msgid "本地文件列表为空,请确认本地文件是否已经上传" +#~ msgstr "本地文件列表为空,请确认本地文件是否已经上传" + +#~ msgid "获取 S3 对象下载链接失败:%s" +#~ msgstr "获取 S3 对象下载链接失败:%s" + +#~ msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" +#~ msgstr "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" + +#~ msgid "分发本地文件" +#~ msgstr "分发本地文件" + +#~ msgid "蓝鲸监控(Monitor)" +#~ msgstr "蓝鲸监控(Monitor)" + +#~ msgid "告警屏蔽" +#~ msgstr "告警屏蔽" + +#~ msgid "GseProxy" +#~ msgstr "GseProxy" + +#~ msgid "AutoTCM(TCM)" +#~ msgstr "AutoTCM(TCM)" + +#~ msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" +#~ msgstr "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" + +#~ msgid "负载均衡业务(CLB)" +#~ msgstr "负载均衡业务(CLB)" + +#~ msgid "扫描域名证书" +#~ msgstr "扫描域名证书" + +#~ msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" +#~ msgstr "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" + +#~ msgid "企业微信(QYWEIXIN)" +#~ msgstr "企业微信(QYWEIXIN)" + +#~ msgid "企业微信拉群失败,组件返回错误消息:%s" +#~ msgstr "企业微信拉群失败,组件返回错误消息:%s" + +#~ msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" +#~ msgstr "企业微信拉群发送消息失败,组件返回错误消息:%s" + +#~ msgid "企业微信拉群" +#~ msgstr "企业微信拉群" + +#~ msgid "消息通知服务(TOF)" +#~ msgstr "消息通知服务(TOF)" + +#~ msgid "获取员工直属Leader" +#~ msgstr "获取员工直属Leader" + +#~ msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" +#~ msgstr "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" + +#~ msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" +#~ msgstr "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" + +#~ msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" +#~ msgstr "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" +#~ msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" +#~ msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" + +#~ msgid "文件上传失败, 文件大小超过2GB" +#~ msgstr "文件上传失败, 文件大小超过2GB" + +#~ msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" +#~ msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" + diff --git a/locale/zh_hans/LC_MESSAGES/djangojs.mo b/locale/zh_hans/LC_MESSAGES/djangojs.mo index 9a71310ee6..b94ddb68d7 100644 Binary files a/locale/zh_hans/LC_MESSAGES/djangojs.mo and b/locale/zh_hans/LC_MESSAGES/djangojs.mo differ diff --git a/locale/zh_hans/LC_MESSAGES/djangojs.po b/locale/zh_hans/LC_MESSAGES/djangojs.po index 90eae98120..ec8bbfb330 100644 --- a/locale/zh_hans/LC_MESSAGES/djangojs.po +++ b/locale/zh_hans/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,3811 +18,3367 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:47 -#, javascript-format -msgid "Available %s" -msgstr "Available %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:53 -#, javascript-format -msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." -msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:69 -#, javascript-format -msgid "Type into this box to filter down the list of available %s." -msgstr "Type into this box to filter down the list of available %s." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:74 -msgid "Filter" -msgstr "Filter" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -msgid "Choose all" -msgstr "Choose all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -#, javascript-format -msgid "Click to choose all %s at once." -msgstr "Click to choose all %s at once." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:84 -msgid "Choose" -msgstr "Choose" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:86 -msgid "Remove" -msgstr "Remove" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:92 -#, javascript-format -msgid "Chosen %s" -msgstr "Chosen %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:98 -#, javascript-format -msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." -msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -msgid "Remove all" -msgstr "Remove all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -#, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "Click to remove all chosen %s at once." - -#: blueapps/conf/project_template/static/admin/js/actions.js:48 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:2 -msgid "%(sel)s of %(cnt)s selected" -msgid_plural "%(sel)s of %(cnt)s selected" -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/actions.js:117 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:4 -msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." -msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." - -#: blueapps/conf/project_template/static/admin/js/actions.js:129 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." -msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." - -#: blueapps/conf/project_template/static/admin/js/actions.js:131 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." -msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:74 -#, javascript-format -msgid "Note: You are %s hour ahead of server time." -msgid_plural "Note: You are %s hours ahead of server time." -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:82 -#, javascript-format -msgid "Note: You are %s hour behind server time." -msgid_plural "Note: You are %s hours behind server time." -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:109 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:160 -msgid "Now" -msgstr "Now" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:127 -msgid "Choose a Time" -msgstr "Choose a Time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:157 -msgid "Choose a time" -msgstr "Choose a time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:165 -msgid "Midnight" -msgstr "Midnight" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:170 -msgid "6 a.m." -msgstr "6 a.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:175 -msgid "Noon" -msgstr "Noon" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:180 -msgid "6 p.m." -msgstr "6 p.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:188 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:348 -msgid "Cancel" -msgstr "Cancel" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:253 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:333 -msgid "Today" -msgstr "Today" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:270 -msgid "Choose a Date" -msgstr "Choose a Date" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:327 -msgid "Yesterday" -msgstr "Yesterday" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:339 -msgid "Tomorrow" -msgstr "Tomorrow" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:12 -msgid "January" -msgstr "January" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:13 -msgid "February" -msgstr "February" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:14 -msgid "March" -msgstr "March" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:15 -msgid "April" -msgstr "April" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:16 -msgid "May" -msgstr "May" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:17 -msgid "June" -msgstr "June" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:18 -msgid "July" -msgstr "July" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:19 -msgid "August" -msgstr "August" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:20 -msgid "September" -msgstr "September" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:21 -msgid "October" -msgstr "October" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:22 -msgid "November" -msgstr "November" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:23 -msgid "December" -msgstr "December" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:26 -msgctxt "one letter Sunday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:27 -msgctxt "one letter Monday" -msgid "M" -msgstr "M" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:28 -msgctxt "one letter Tuesday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:29 -msgctxt "one letter Wednesday" -msgid "W" -msgstr "W" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:30 -msgctxt "one letter Thursday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:31 -msgctxt "one letter Friday" -msgid "F" -msgstr "F" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:32 -msgctxt "one letter Saturday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:10 -#: blueapps/conf/project_template/static/admin/js/collapse.js:21 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Show" -msgstr "Show" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:18 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Hide" -msgstr "Hide" - -#: blueapps/conf/project_template/static/remote/v3/assets/jquery-ui-1.11.0.custom/jquery-ui.min.js:10 -msgid "'" -msgstr "'" - -#: pipeline/blueflow/src/api/interceptors.js:40 +#: pipeline/blueflow/src/api/interceptors.js:51 msgid "接口数据返回为空" msgstr "接口数据返回为空" -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "接口异常," msgstr "接口异常," -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "HTTP状态码:" msgstr "HTTP状态码:" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:50 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:61 msgid "错误码" msgstr "错误码" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:51 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:62 msgid "请输入 IP" msgstr "请输入 IP" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:56 -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:138 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:67 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:149 msgid "请输入名称" msgstr "请输入名称" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:57 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:82 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:68 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:93 msgid "新建流程" msgstr "新建流程" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:58 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:69 msgid "编辑流程" msgstr "编辑流程" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:59 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:137 -#: pipeline/blueflow/src/pages/config/index.vue:64 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:119 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:186 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:70 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:148 +#: pipeline/blueflow/src/pages/config/index.vue:75 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:130 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:116 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:197 msgid "保存" msgstr "保存" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:60 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:71 msgid "返回" msgstr "返回" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:137 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:148 msgid "工具" msgstr "工具" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:139 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:200 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:150 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:211 msgid "开始" msgstr "开始" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:140 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:201 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:151 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:212 msgid "结束" msgstr "结束" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:141 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:85 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:152 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:96 msgid "个" msgstr "个" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:192 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:203 msgid "复位" msgstr "复位" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:193 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:204 msgid "放大" msgstr "放大" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:194 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:205 msgid "缩小" msgstr "缩小" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:195 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:206 msgid "节点框选" msgstr "节点框选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:196 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:207 msgid "排版" msgstr "排版" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:197 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:118 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:115 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:208 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:129 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:126 msgid "全选" msgstr "全选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:198 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:209 msgid "反选" msgstr "反选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:199 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:210 msgid "已添加" msgstr "已添加" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:200 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:39 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:211 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:50 msgid "个节点" msgstr "个节点" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:254 -#: pipeline/blueflow/src/store/modules/template.js:29 -#: pipeline/blueflow/src/store/modules/template.js:56 -#: pipeline/blueflow/src/store/modules/template.js:474 -#: pipeline/blueflow/src/store/modules/template.js:489 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:265 +#: pipeline/blueflow/src/store/modules/template.js:40 +#: pipeline/blueflow/src/store/modules/template.js:67 +#: pipeline/blueflow/src/store/modules/template.js:485 +#: pipeline/blueflow/src/store/modules/template.js:500 msgid "步骤1" msgstr "步骤1" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:452 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:463 msgid "排版自动保存" msgstr "排版自动保存" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:453 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:464 msgid "排版完成,原内容在本地缓存中" msgstr "排版完成,原内容在本地缓存中" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:92 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:125 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:103 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:240 msgid "取消勾选" msgstr "取消勾选" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:93 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:126 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:228 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:104 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:137 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 msgid "勾选参数作为全局变量" msgstr "勾选参数作为全局变量" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:34 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:154 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:199 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:45 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:165 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:322 msgid "请选择" msgstr "请选择" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:35 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:46 msgid "输入筛选条件,多条筛选条件换行隔开" msgstr "输入筛选条件,多条筛选条件换行隔开" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:36 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:42 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 -#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:181 -#: pipeline/blueflow/src/main.js:62 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:47 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:53 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:122 +#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:192 +#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:71 msgid "必填项" msgstr "必填项" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:38 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:99 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:119 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:49 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:130 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:124 msgid "已选择" msgstr "已选择" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:40 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:51 msgid "搜索节点" msgstr "搜索节点" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:41 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:70 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:98 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:89 -#: pipeline/blueflow/src/components/common/base/NoData.vue:26 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:197 -#: pipeline/blueflow/src/pages/functor/index.vue:319 -#: pipeline/blueflow/src/pages/functor/index.vue:324 -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:52 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:121 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:81 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/base/NoData.vue:37 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:208 +#: pipeline/blueflow/src/pages/functor/index.vue:330 +#: pipeline/blueflow/src/pages/functor/index.vue:335 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 msgid "无数据" msgstr "无数据" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:16 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:27 msgid "搜索IP,多个以逗号隔开" msgstr "搜索IP,多个以逗号分隔" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:30 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:41 msgid "(同时满足)" msgstr "(同时满足)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:31 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:42 msgid "增加一条筛选条件" msgstr "增加一条筛选条件" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:93 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 msgid "复制IP" msgstr "复制IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:94 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 msgid "复制Agent未安装IP" msgstr "复制Agent未安装IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:95 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 msgid "清空IP" msgstr "清空IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:96 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 msgid "清空Agent未安装IP" msgstr "清空Agent未安装IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:97 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:66 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:77 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:153 msgid "添加" msgstr "添加" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:98 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 msgid "更多操作" msgstr "更多操作" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 msgid "个静态IP(未安装agent" msgstr "个静态IP(未安装agent" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:101 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:112 msgid "个)" msgstr "个)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:102 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:67 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:78 msgid "云区域" msgstr "云区域" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:103 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:68 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:94 -#: pipeline/blueflow/src/pages/audit/index.vue:161 -#: pipeline/blueflow/src/pages/functor/index.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:223 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:114 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:79 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:105 +#: pipeline/blueflow/src/pages/audit/index.vue:114 +#: pipeline/blueflow/src/pages/functor/index.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:199 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:251 msgid "状态" msgstr "状态" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:69 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:115 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:80 msgid "异常" msgstr "异常" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:140 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:196 -#: pipeline/blueflow/src/pages/audit/index.vue:162 -#: pipeline/blueflow/src/pages/functor/index.vue:164 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:224 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:286 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:116 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:151 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:207 +#: pipeline/blueflow/src/pages/audit/index.vue:115 +#: pipeline/blueflow/src/pages/functor/index.vue:175 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 msgid "操作" msgstr "操作" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:117 msgid "移除" msgstr "移除" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:71 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:118 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:82 msgid "正常" msgstr "正常" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:119 msgid "无数据,点击" msgstr "无数据,点击" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:120 msgid "服务器" msgstr "服务器" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:72 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:138 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:121 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:41 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:187 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:83 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:149 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:132 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:52 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:117 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:198 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:170 msgid "取消" msgstr "取消" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:57 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:68 msgid "静态IP" msgstr "静态IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:58 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:69 msgid "动态IP" msgstr "动态IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:59 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:70 msgid "筛选条件" msgstr "筛选条件" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:71 msgid "排除条件" msgstr "排除条件" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:139 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:36 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:177 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:150 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:47 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 msgid "编辑" msgstr "编辑" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:141 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:37 -#: pipeline/blueflow/src/pages/appmaker/index.vue:85 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:97 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:116 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:152 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:48 +#: pipeline/blueflow/src/pages/appmaker/index.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:127 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 msgid "删除" msgstr "删除" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:276 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:287 msgid "请求表头数据失败,使用预置表头" msgstr "请求表头数据失败,使用预置表头" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:25 -#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:24 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:36 +#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:35 msgid "请选择日期时间" msgstr "请选择日期时间" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:38 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:49 msgid "要修改密码请点击后重新输入密码" msgstr "要修改密码请点击后重新输入密码" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:111 msgid "加载中" msgstr "加载中" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:195 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:154 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:206 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:165 msgid "请求数据失败" msgstr "请求数据失败" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:80 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:137 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 msgid "点击上传" msgstr "点击上传" -#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:23 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:172 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 +#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:34 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:256 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:326 msgid "高级搜索" msgstr "高级搜索" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:14 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:25 msgid "您需要登录蓝鲸智云" msgstr "您需要登录蓝鲸智云" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:15 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:26 msgid "立即登录" msgstr "立即登录" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:28 msgid "对不起,您没有当前应用的访问权限" msgstr "对不起,您没有当前应用的访问权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:18 -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:18 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:29 msgid "请尝试如下操作:" msgstr "请尝试如下操作:" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:30 msgid "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" msgstr "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:26 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:37 msgid "对不起,您没有当前操作需要的的权限" msgstr "对不起,您没有当前操作需要的的权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:27 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:40 msgid "1.联系业务运维为您添加" msgstr "1.联系业务运维为您添加" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:28 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:39 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:41 msgid "配置平台" msgstr "配置平台" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:29 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:40 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:42 msgid "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" msgstr "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:41 msgid "2.联系业务运维为您添加需要操作的流程模板的权限" msgstr "2.联系业务运维为您添加需要操作的流程模板的权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:42 msgid "3.或者前往" msgstr "3.或者前往" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:32 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:33 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:43 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:44 msgid "创建属于自己的业务" msgstr "创建属于自己的业务" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:28 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:39 msgid "对不起,您没有业务权限" msgstr "对不起,您没有业务权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:32 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:43 msgid "2.或者前往" msgstr "2.或者前往" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:28 msgid "对不起,您没有当前应用的管理员权限" msgstr "对不起,您没有当前应用的管理员权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:30 msgid "联系“管理员”为您添加管理员权限" msgstr "联系“管理员”为您添加管理员权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:16 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:27 msgid "应用出现异常" msgstr "应用出现异常" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:17 -#: pipeline/blueflow/src/utils/errorHandler.js:33 -#: pipeline/blueflow/src/utils/errorHandler.js:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:28 +#: pipeline/blueflow/src/utils/errorHandler.js:44 +#: pipeline/blueflow/src/utils/errorHandler.js:49 msgid "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" msgstr "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:29 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:40 msgid "QQ咨询" msgstr "QQ咨询" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:30 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:41 msgid "蓝鲸官网" msgstr "蓝鲸官网" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:31 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:42 msgid "蓝鲸论坛" msgstr "蓝鲸论坛" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:32 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:43 msgid "蓝鲸智云 版权所有" msgstr "蓝鲸智云 版权所有" -#: pipeline/blueflow/src/components/layout/Navigator.vue:75 +#: pipeline/blueflow/src/components/layout/Navigator.vue:86 msgid "职能化中心" msgstr "职能化中心" -#: pipeline/blueflow/src/components/layout/Navigator.vue:83 -#: pipeline/blueflow/src/pages/audit/index.vue:152 +#: pipeline/blueflow/src/components/layout/Navigator.vue:94 +#: pipeline/blueflow/src/pages/audit/index.vue:105 msgid "审计中心" msgstr "审计中心" -#: pipeline/blueflow/src/components/layout/Navigator.vue:90 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:134 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:219 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/components/layout/Navigator.vue:101 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:145 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:203 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "流程模板" msgstr "流程模板" -#: pipeline/blueflow/src/components/layout/Navigator.vue:94 -#: pipeline/blueflow/src/pages/functor/index.vue:196 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:278 +#: pipeline/blueflow/src/components/layout/Navigator.vue:105 +#: pipeline/blueflow/src/pages/functor/index.vue:207 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 msgid "业务流程" msgstr "业务流程" -#: pipeline/blueflow/src/components/layout/Navigator.vue:99 -#: pipeline/blueflow/src/components/layout/Navigator.vue:136 -#: pipeline/blueflow/src/pages/functor/index.vue:200 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:279 +#: pipeline/blueflow/src/components/layout/Navigator.vue:110 +#: pipeline/blueflow/src/components/layout/Navigator.vue:147 +#: pipeline/blueflow/src/pages/functor/index.vue:211 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 msgid "公共流程" msgstr "公共流程" -#: pipeline/blueflow/src/components/layout/Navigator.vue:108 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:171 +#: pipeline/blueflow/src/components/layout/Navigator.vue:119 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 msgid "周期任务" msgstr "周期任务" -#: pipeline/blueflow/src/components/layout/Navigator.vue:113 -#: pipeline/blueflow/src/components/layout/Navigator.vue:193 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:216 +#: pipeline/blueflow/src/components/layout/Navigator.vue:124 +#: pipeline/blueflow/src/components/layout/Navigator.vue:204 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:111 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 msgid "任务记录" msgstr "任务记录" -#: pipeline/blueflow/src/components/layout/Navigator.vue:118 +#: pipeline/blueflow/src/components/layout/Navigator.vue:129 msgid "业务配置" msgstr "业务配置" -#: pipeline/blueflow/src/components/layout/Navigator.vue:123 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:83 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/components/layout/Navigator.vue:134 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:94 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:254 msgid "轻应用" msgstr "轻应用" -#: pipeline/blueflow/src/components/layout/Navigator.vue:127 +#: pipeline/blueflow/src/components/layout/Navigator.vue:138 msgid "管理员入口" msgstr "管理员入口" -#: pipeline/blueflow/src/components/layout/Navigator.vue:131 -#: pipeline/blueflow/src/pages/statistics/index.vue:56 +#: pipeline/blueflow/src/components/layout/Navigator.vue:142 +#: pipeline/blueflow/src/pages/statistics/index.vue:67 msgid "运营数据" msgstr "运营数据" -#: pipeline/blueflow/src/components/layout/Navigator.vue:155 +#: pipeline/blueflow/src/components/layout/Navigator.vue:166 msgid "logo-zh" msgstr "logo-zh" -#: pipeline/blueflow/src/components/layout/Navigator.vue:157 +#: pipeline/blueflow/src/components/layout/Navigator.vue:168 msgid "帮助文档" msgstr "帮助文档" -#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:14 +#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:25 msgid "没找到页面!" msgstr "没找到页面!" -#: pipeline/blueflow/src/config/setting.js:47 +#: pipeline/blueflow/src/config/setting.js:58 msgid "提示" msgstr "提示" -#: pipeline/blueflow/src/constants/index.js:2 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:161 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:231 -#: pipeline/blueflow/src/pages/audit/index.vue:243 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:92 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:348 +#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:172 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:242 +#: pipeline/blueflow/src/pages/audit/index.vue:196 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:103 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:268 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:359 msgid "未执行" msgstr "未执行" -#: pipeline/blueflow/src/constants/index.js:3 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:185 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:228 -#: pipeline/blueflow/src/pages/audit/index.vue:169 -#: pipeline/blueflow/src/pages/audit/index.vue:275 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:112 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:373 +#: pipeline/blueflow/src/constants/index.js:14 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:196 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:239 +#: pipeline/blueflow/src/pages/audit/index.vue:122 +#: pipeline/blueflow/src/pages/audit/index.vue:228 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:123 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:384 msgid "执行中" msgstr "执行中" -#: pipeline/blueflow/src/constants/index.js:4 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:189 -#: pipeline/blueflow/src/pages/audit/index.vue:170 -#: pipeline/blueflow/src/pages/audit/index.vue:279 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:117 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:178 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:209 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:171 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:189 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:675 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:377 +#: pipeline/blueflow/src/constants/index.js:15 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:200 +#: pipeline/blueflow/src/pages/audit/index.vue:123 +#: pipeline/blueflow/src/pages/audit/index.vue:232 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:220 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:182 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:200 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:686 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:388 msgid "暂停" msgstr "暂停" -#: pipeline/blueflow/src/constants/index.js:5 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:193 -#: pipeline/blueflow/src/pages/audit/index.vue:283 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:122 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:381 +#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 +#: pipeline/blueflow/src/pages/audit/index.vue:236 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:133 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 msgid "节点暂停" msgstr "节点暂停" -#: pipeline/blueflow/src/constants/index.js:6 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:197 -#: pipeline/blueflow/src/pages/audit/index.vue:287 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:127 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:385 +#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:208 +#: pipeline/blueflow/src/pages/audit/index.vue:240 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:138 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:396 msgid "失败" msgstr "失败" -#: pipeline/blueflow/src/constants/index.js:7 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:155 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:225 -#: pipeline/blueflow/src/pages/audit/index.vue:237 -#: pipeline/blueflow/src/pages/functor/index.vue:265 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:84 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:259 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:342 +#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:166 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:190 +#: pipeline/blueflow/src/pages/functor/index.vue:276 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:95 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:270 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:353 msgid "完成" msgstr "完成" -#: pipeline/blueflow/src/constants/index.js:8 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:201 -#: pipeline/blueflow/src/pages/audit/index.vue:291 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:163 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:389 +#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:212 +#: pipeline/blueflow/src/pages/audit/index.vue:244 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:174 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:400 msgid "撤销" msgstr "撤销" -#: pipeline/blueflow/src/constants/index.js:12 +#: pipeline/blueflow/src/constants/index.js:23 msgid "开始节点" msgstr "开始节点" -#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/constants/index.js:24 msgid "结束节点" msgstr "结束节点" -#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/constants/index.js:27 msgid "并行网关" msgstr "并行网关" -#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/constants/index.js:28 msgid "分支网关" msgstr "分支网关" -#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/constants/index.js:29 msgid "汇聚网关" msgstr "汇聚网关" -#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/constants/index.js:30 msgid "标准插件节点" msgstr "标准插件节点" -#: pipeline/blueflow/src/constants/index.js:20 +#: pipeline/blueflow/src/constants/index.js:31 msgid "子流程节点" msgstr "子流程节点" -#: pipeline/blueflow/src/main.js:66 +#: pipeline/blueflow/src/main.js:77 msgid "流程名称不能为空" msgstr "流程名称不能为空" -#: pipeline/blueflow/src/main.js:67 +#: pipeline/blueflow/src/main.js:78 msgid "流程名称不能包含" msgstr "流程名称不能包含" -#: pipeline/blueflow/src/main.js:67 pipeline/blueflow/src/main.js:72 -#: pipeline/blueflow/src/main.js:76 pipeline/blueflow/src/main.js:81 -#: pipeline/blueflow/src/main.js:99 pipeline/blueflow/src/main.js:104 -#: pipeline/blueflow/src/main.js:112 pipeline/blueflow/src/main.js:120 -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:78 pipeline/blueflow/src/main.js:83 +#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:92 +#: pipeline/blueflow/src/main.js:110 pipeline/blueflow/src/main.js:115 +#: pipeline/blueflow/src/main.js:123 pipeline/blueflow/src/main.js:131 +#: pipeline/blueflow/src/main.js:140 msgid "非法字符" msgstr "非法字符" -#: pipeline/blueflow/src/main.js:68 +#: pipeline/blueflow/src/main.js:79 msgid "流程名称长度不能超过" msgstr "流程名称长度不能超过" -#: pipeline/blueflow/src/main.js:68 pipeline/blueflow/src/main.js:73 -#: pipeline/blueflow/src/main.js:77 pipeline/blueflow/src/main.js:82 -#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:100 -#: pipeline/blueflow/src/main.js:105 pipeline/blueflow/src/main.js:113 -#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:121 -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:79 pipeline/blueflow/src/main.js:84 +#: pipeline/blueflow/src/main.js:88 pipeline/blueflow/src/main.js:93 +#: pipeline/blueflow/src/main.js:98 pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:127 pipeline/blueflow/src/main.js:132 +#: pipeline/blueflow/src/main.js:141 msgid "个字符" msgstr "个字符" -#: pipeline/blueflow/src/main.js:71 +#: pipeline/blueflow/src/main.js:82 msgid "节点名称不能为空" msgstr "节点名称不能为空" -#: pipeline/blueflow/src/main.js:72 +#: pipeline/blueflow/src/main.js:83 msgid "节点名称不能包含" msgstr "节点名称不能包含" -#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/main.js:84 msgid "节点名称长度不能超过" msgstr "节点名称长度不能超过" -#: pipeline/blueflow/src/main.js:76 +#: pipeline/blueflow/src/main.js:87 msgid "步骤名称不能包含" msgstr "步骤名称不能包含" -#: pipeline/blueflow/src/main.js:77 +#: pipeline/blueflow/src/main.js:88 msgid "步骤名称不能超过" msgstr "步骤名称不能超过" -#: pipeline/blueflow/src/main.js:80 +#: pipeline/blueflow/src/main.js:91 msgid "变量名称不能为空" msgstr "变量名称不能为空" -#: pipeline/blueflow/src/main.js:81 +#: pipeline/blueflow/src/main.js:92 msgid "变量名称不能包含" msgstr "变量名称不能包含" -#: pipeline/blueflow/src/main.js:82 +#: pipeline/blueflow/src/main.js:93 msgid "变量名称长度不能超过" msgstr "变量名称长度不能超过" -#: pipeline/blueflow/src/main.js:85 +#: pipeline/blueflow/src/main.js:96 msgid "变量KEY值不能为空" msgstr "变量KEY值不能为空" -#: pipeline/blueflow/src/main.js:86 +#: pipeline/blueflow/src/main.js:97 msgid "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" msgstr "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" -#: pipeline/blueflow/src/main.js:87 +#: pipeline/blueflow/src/main.js:98 msgid "变量KEY值长度不能超过" msgstr "变量KEY值长度不能超过" -#: pipeline/blueflow/src/main.js:88 +#: pipeline/blueflow/src/main.js:99 msgid "变量KEY值已存在" msgstr "变量KEY值已存在" -#: pipeline/blueflow/src/main.js:91 +#: pipeline/blueflow/src/main.js:102 msgid "变量隐藏时默认值不能为空" msgstr "变量隐藏时默认值不能为空" -#: pipeline/blueflow/src/main.js:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:399 +#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:410 msgid "默认值不满足正则校验" msgstr "默认值不满足正则校验" -#: pipeline/blueflow/src/main.js:95 +#: pipeline/blueflow/src/main.js:106 msgid "正则校验不是合法的正则表达式" msgstr "正则校验不是合法的正则表达式" -#: pipeline/blueflow/src/main.js:98 +#: pipeline/blueflow/src/main.js:109 msgid "任务名称不能为空" msgstr "任务名称不能为空" -#: pipeline/blueflow/src/main.js:99 +#: pipeline/blueflow/src/main.js:110 msgid "任务名称不能包含" msgstr "任务名称不能包含" -#: pipeline/blueflow/src/main.js:100 +#: pipeline/blueflow/src/main.js:111 msgid "任务名称不能超过" msgstr "任务名称不能超过" -#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/main.js:114 msgid "方案名称不能为空" msgstr "方案名称不能为空" -#: pipeline/blueflow/src/main.js:104 +#: pipeline/blueflow/src/main.js:115 msgid "方案名称不能包含" msgstr "方案名称不能包含" -#: pipeline/blueflow/src/main.js:105 +#: pipeline/blueflow/src/main.js:116 msgid "方案名称不能超过" msgstr "方案名称不能超过" -#: pipeline/blueflow/src/main.js:108 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:135 +#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:146 msgid "流程模板不能为空" msgstr "流程模板不能为空" -#: pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:122 msgid "应用名称不能为空" msgstr "应用名称不能为空" -#: pipeline/blueflow/src/main.js:112 +#: pipeline/blueflow/src/main.js:123 msgid "应用名称不能包含" msgstr "应用名称不能包含" -#: pipeline/blueflow/src/main.js:113 +#: pipeline/blueflow/src/main.js:124 msgid "应用名称不能超过" msgstr "应用名称不能超过" -#: pipeline/blueflow/src/main.js:116 +#: pipeline/blueflow/src/main.js:127 msgid "应用简介不能超过" msgstr "应用简介不能超过" -#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/main.js:130 msgid "定时流程名称不能为空" msgstr "定时流程名称不能为空" -#: pipeline/blueflow/src/main.js:120 +#: pipeline/blueflow/src/main.js:131 msgid "定时流程名称包含" msgstr "定时流程名称包含" -#: pipeline/blueflow/src/main.js:121 +#: pipeline/blueflow/src/main.js:132 msgid "定时流程名称不能超过" msgstr "定时流程名称不能超过" -#: pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:135 msgid "定时表达式不能为空" msgstr "定时表达式不能为空" -#: pipeline/blueflow/src/main.js:125 +#: pipeline/blueflow/src/main.js:136 msgid "输入定时表达式非法,请校验" msgstr "输入定时表达式非法,请校验" -#: pipeline/blueflow/src/main.js:128 +#: pipeline/blueflow/src/main.js:139 msgid "本地缓存名称不能为空" msgstr "本地缓存名称不能为空" -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:140 msgid "本地缓存名称包含" msgstr "本地缓存名称包含" -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:141 msgid "本地缓存名称不能超过" msgstr "本地缓存名称不能超过" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:38 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:49 msgid "流程模板:" msgstr "流程模板:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:39 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:50 msgid "应用简介:" msgstr "应用简介:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:56 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:67 msgid "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" msgstr "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 -#: pipeline/blueflow/src/pages/appmaker/index.vue:83 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 +#: pipeline/blueflow/src/pages/appmaker/index.vue:94 msgid "新建轻应用" msgstr "新建轻应用" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 msgid "修改轻应用" msgstr "修改轻应用" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:136 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:147 msgid "应用名称" msgstr "应用名称" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:137 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:126 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:148 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:137 msgid "执行方案" msgstr "执行方案" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:138 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:149 msgid "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" msgstr "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:139 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:150 msgid "应用简介" msgstr "应用简介" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:140 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:151 msgid "应用LOGO" msgstr "应用LOGO" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:141 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:152 msgid "点击更换" msgstr "点击更换" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:142 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:153 msgid "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" msgstr "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:206 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:217 msgid "图片大小不能超过 100K" msgstr "图片大小不能超过 100K" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:87 -#: pipeline/blueflow/src/pages/audit/index.vue:153 -#: pipeline/blueflow/src/pages/functor/index.vue:156 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:277 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 +#: pipeline/blueflow/src/pages/audit/index.vue:106 +#: pipeline/blueflow/src/pages/functor/index.vue:167 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 msgid "请输入ID或流程名称" msgstr "请输入ID或流程名称" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:88 -#: pipeline/blueflow/src/pages/audit/index.vue:155 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:218 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 +#: pipeline/blueflow/src/pages/audit/index.vue:108 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 msgid "执行开始" msgstr "执行开始" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:89 -#: pipeline/blueflow/src/pages/audit/index.vue:156 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:219 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 +#: pipeline/blueflow/src/pages/audit/index.vue:109 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 msgid "执行结束" msgstr "执行结束" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:90 -#: pipeline/blueflow/src/pages/audit/index.vue:157 -#: pipeline/blueflow/src/pages/functor/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:128 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:95 -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:49 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:217 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:101 +#: pipeline/blueflow/src/pages/audit/index.vue:110 +#: pipeline/blueflow/src/pages/functor/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:294 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:139 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:107 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:60 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 msgid "任务名称" msgstr "任务名称" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:91 -#: pipeline/blueflow/src/pages/audit/index.vue:158 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:102 +#: pipeline/blueflow/src/pages/audit/index.vue:111 msgid "任务类型" msgstr "任务类型" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:92 -#: pipeline/blueflow/src/pages/audit/index.vue:159 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:173 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:221 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:285 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:103 +#: pipeline/blueflow/src/pages/audit/index.vue:112 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:219 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 msgid "创建人" msgstr "创建人" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:93 -#: pipeline/blueflow/src/pages/audit/index.vue:160 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:222 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:104 +#: pipeline/blueflow/src/pages/audit/index.vue:113 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 msgid "执行人" msgstr "执行人" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:95 -#: pipeline/blueflow/src/pages/audit/index.vue:164 -#: pipeline/blueflow/src/pages/functor/index.vue:171 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:106 +#: pipeline/blueflow/src/pages/audit/index.vue:117 +#: pipeline/blueflow/src/pages/functor/index.vue:182 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 msgid "共" msgstr "共" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:96 -#: pipeline/blueflow/src/pages/audit/index.vue:165 -#: pipeline/blueflow/src/pages/functor/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:107 +#: pipeline/blueflow/src/pages/audit/index.vue:118 +#: pipeline/blueflow/src/pages/functor/index.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 msgid "条记录" msgstr "条记录" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:97 -#: pipeline/blueflow/src/pages/audit/index.vue:166 -#: pipeline/blueflow/src/pages/functor/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:108 +#: pipeline/blueflow/src/pages/audit/index.vue:119 +#: pipeline/blueflow/src/pages/functor/index.vue:184 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 msgid "," msgstr "," -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 -#: pipeline/blueflow/src/pages/audit/index.vue:167 -#: pipeline/blueflow/src/pages/functor/index.vue:174 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:109 +#: pipeline/blueflow/src/pages/audit/index.vue:120 +#: pipeline/blueflow/src/pages/functor/index.vue:185 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 msgid "当前第" msgstr "当前第" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 -#: pipeline/blueflow/src/pages/audit/index.vue:168 -#: pipeline/blueflow/src/pages/functor/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:110 +#: pipeline/blueflow/src/pages/audit/index.vue:121 +#: pipeline/blueflow/src/pages/functor/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 msgid "页" msgstr "页" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 -#: pipeline/blueflow/src/pages/audit/index.vue:294 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:135 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:215 +#: pipeline/blueflow/src/pages/audit/index.vue:247 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:146 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:403 msgid "未知" msgstr "未知" -#: pipeline/blueflow/src/pages/appmaker/index.vue:84 +#: pipeline/blueflow/src/pages/appmaker/index.vue:95 msgid "请输入轻应用名称" msgstr "请输入轻应用名称" -#: pipeline/blueflow/src/pages/appmaker/index.vue:86 +#: pipeline/blueflow/src/pages/appmaker/index.vue:97 msgid "确认删除轻应用?" msgstr "确认删除轻应用?" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "未找到相关轻应用" msgstr "未找到相关轻应用" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "暂未添加轻应用" msgstr "暂未添加轻应用" -#: pipeline/blueflow/src/pages/audit/index.vue:154 -#: pipeline/blueflow/src/pages/functor/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:148 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:192 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:197 +#: pipeline/blueflow/src/pages/audit/index.vue:107 +#: pipeline/blueflow/src/pages/functor/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 msgid "所属业务" msgstr "所属业务" -#: pipeline/blueflow/src/pages/audit/index.vue:163 -#: pipeline/blueflow/src/pages/functor/index.vue:166 +#: pipeline/blueflow/src/pages/audit/index.vue:116 +#: pipeline/blueflow/src/pages/functor/index.vue:177 msgid "查看" msgstr "查看" -#: pipeline/blueflow/src/pages/audit/index.vue:171 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:271 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:220 +#: pipeline/blueflow/src/pages/audit/index.vue:124 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 msgid "任务分类" msgstr "任务分类" -#: pipeline/blueflow/src/pages/audit/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 +#: pipeline/blueflow/src/pages/audit/index.vue:125 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:205 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:249 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:323 msgid "搜索" msgstr "搜索" -#: pipeline/blueflow/src/pages/audit/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/audit/index.vue:126 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:206 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:250 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:324 msgid "清空" msgstr "清空" -#: pipeline/blueflow/src/pages/audit/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 +#: pipeline/blueflow/src/pages/audit/index.vue:127 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:317 msgid "请选择分类" msgstr "请选择分类" -#: pipeline/blueflow/src/pages/audit/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 +#: pipeline/blueflow/src/pages/audit/index.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:197 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:319 msgid "请输入创建人" msgstr "请输入创建人" -#: pipeline/blueflow/src/pages/audit/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 msgid "请输入执行人" msgstr "请输入执行人" -#: pipeline/blueflow/src/pages/audit/index.vue:177 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/audit/index.vue:130 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:198 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:202 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:248 msgid "请选择状态" msgstr "请选择状态" -#: pipeline/blueflow/src/pages/config/index.vue:59 +#: pipeline/blueflow/src/pages/config/index.vue:70 msgid "执行者配置" msgstr "执行者配置" -#: pipeline/blueflow/src/pages/config/index.vue:60 +#: pipeline/blueflow/src/pages/config/index.vue:71 msgid "任务执行者" msgstr "任务执行者" -#: pipeline/blueflow/src/pages/config/index.vue:61 +#: pipeline/blueflow/src/pages/config/index.vue:72 msgid "强制生效" msgstr "强制生效" -#: pipeline/blueflow/src/pages/config/index.vue:62 +#: pipeline/blueflow/src/pages/config/index.vue:73 msgid "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" msgstr "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" -#: pipeline/blueflow/src/pages/config/index.vue:63 +#: pipeline/blueflow/src/pages/config/index.vue:74 msgid "开启后,所有任务都使用任务执行者身份来执行" msgstr "开启后,所有任务都使用任务执行者身份来执行" -#: pipeline/blueflow/src/pages/config/index.vue:104 -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:92 +#: pipeline/blueflow/src/pages/config/index.vue:115 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:103 msgid "保存成功" msgstr "保存成功" -#: pipeline/blueflow/src/pages/functor/index.vue:158 +#: pipeline/blueflow/src/pages/functor/index.vue:169 msgid "提单时间" msgstr "提单时间" -#: pipeline/blueflow/src/pages/functor/index.vue:159 +#: pipeline/blueflow/src/pages/functor/index.vue:170 msgid "认领时间" msgstr "认领时间" -#: pipeline/blueflow/src/pages/functor/index.vue:161 +#: pipeline/blueflow/src/pages/functor/index.vue:172 msgid "提单人" msgstr "提单人" -#: pipeline/blueflow/src/pages/functor/index.vue:162 +#: pipeline/blueflow/src/pages/functor/index.vue:173 msgid "认领人" msgstr "认领人" -#: pipeline/blueflow/src/pages/functor/index.vue:165 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:98 +#: pipeline/blueflow/src/pages/functor/index.vue:176 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:110 msgid "认领" msgstr "认领" -#: pipeline/blueflow/src/pages/functor/index.vue:167 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:39 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:287 +#: pipeline/blueflow/src/pages/functor/index.vue:178 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:50 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 msgid "新建任务" msgstr "新建任务" -#: pipeline/blueflow/src/pages/functor/index.vue:168 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:152 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:194 +#: pipeline/blueflow/src/pages/functor/index.vue:179 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 msgid "选择业务" msgstr "选择业务" -#: pipeline/blueflow/src/pages/functor/index.vue:169 +#: pipeline/blueflow/src/pages/functor/index.vue:180 msgid "选择模板" msgstr "选择模板" -#: pipeline/blueflow/src/pages/functor/index.vue:170 +#: pipeline/blueflow/src/pages/functor/index.vue:181 msgid "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" msgstr "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" -#: pipeline/blueflow/src/pages/functor/index.vue:268 +#: pipeline/blueflow/src/pages/functor/index.vue:279 msgid "未认领" msgstr "未认领" -#: pipeline/blueflow/src/pages/functor/index.vue:271 +#: pipeline/blueflow/src/pages/functor/index.vue:282 msgid "已驳回" msgstr "已驳回" -#: pipeline/blueflow/src/pages/functor/index.vue:390 +#: pipeline/blueflow/src/pages/functor/index.vue:401 msgid " 无数据 " msgstr " 无数据 " -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:80 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:91 msgid "进入" msgstr "进入" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:81 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:92 msgid "执行任务" msgstr "执行任务" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:84 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:95 msgid "次" msgstr "次" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:66 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:77 msgid "快速新建任务" msgstr "快速新建任务" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:67 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:78 msgid "取消常用流程" msgstr "取消常用流程" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:68 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:118 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:79 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:129 msgid "添加常用流程" msgstr "添加常用流程" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:69 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:80 msgid "业务下无常用流程," msgstr "业务下无常用流程," -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:70 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:81 msgid "立即添加" msgstr "立即添加" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:139 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:150 msgid "业务下无流程模板,为您跳转至新建流程" msgstr "业务下无流程模板,为您跳转至新建流程" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:112 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 msgid "请输入流程名称" msgstr "请输入流程名称" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:120 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:114 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:131 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:125 msgid "项" msgstr "项" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:121 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:132 msgid ",最多可选" msgstr ",最多可选" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:122 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:133 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:121 msgid "搜索结果为空" msgstr "搜索结果为空" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:134 msgid "该业务下暂无流程," msgstr "该业务下暂无流程," -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:124 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:135 msgid "立即创建" msgstr "立即创建" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:175 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:186 msgid "最多只能添加10项" msgstr "最多只能添加10项" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:53 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:64 msgid "业务动态" msgstr "业务动态" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:54 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:65 msgid "查看更多" msgstr "查看更多" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:55 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:66 msgid "查看详情" msgstr "查看详情" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:56 -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:149 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 msgid "耗时" msgstr "耗时" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:78 msgid "创建了一个" msgstr "创建了一个" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:69 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:80 msgid "执行了一个" msgstr "执行了一个" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:72 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:83 msgid "任务" msgstr "任务" -#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:24 +#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:35 msgid "任务分类占比" msgstr "任务分类占比" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:26 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 msgid "确认删除" msgstr "确认删除" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:32 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:43 msgid "?" msgstr "?" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:66 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:77 msgid "周期信息" msgstr "周期信息" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:67 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:78 msgid "修改周期任务" msgstr "修改周期任务" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:68 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:170 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:79 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 msgid "周期规则" msgstr "周期规则" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:69 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:80 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:108 msgid "参数信息" msgstr "参数信息" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:70 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:81 msgid "图片出错" msgstr "图片出错" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:76 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:157 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:168 msgid "task-zh" msgstr "task-zh" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:106 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:117 msgid "输入周期表达式非法,请校验" msgstr "输入周期表达式非法,请校验" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:148 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:159 msgid "修改周期任务信息成功" msgstr "修改周期任务信息成功" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:153 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:164 msgid "修改周期任务参数成功,但表达式修改未成功,请重试" msgstr "修改周期任务参数成功,但表达式修改未成功,请重试" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:158 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:169 msgid "修改周期任务表达式成功,但任务参数未修改成功,请重试" msgstr "修改周期任务表达式成功,但任务参数未修改成功,请重试" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:194 msgid "修改周期任务失败,请联系管理员" msgstr "修改周期任务失败,请联系管理员" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:178 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:189 msgid "修改周期任务表达式成功" msgstr "修改周期任务表达式成功" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:169 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 msgid "上次运行时间" msgstr "上次运行时间" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:208 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:219 msgid "启动" msgstr "启动" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:179 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 msgid "运行次数" msgstr "运行次数" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:196 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 msgid "请输入任务名称" msgstr "请输入任务名称" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:94 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:102 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:178 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:200 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:113 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:189 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:325 msgid "名称" msgstr "名称" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:201 msgid "请暂停任务后再执行编辑操作" msgstr "请暂停任务后再执行编辑操作" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:204 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:221 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 msgid "执行历史" msgstr "执行历史" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:329 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:340 msgid "删除周期任务成功" msgstr "删除周期任务成功" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:147 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 msgid "轻应用分类" msgstr "轻应用分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:149 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 msgid "轻应用创建时间" msgstr "轻应用创建时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:150 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 msgid "轻应用详情" msgstr "轻应用详情" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:151 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:274 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:193 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 msgid "选择分类" msgstr "选择分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:153 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:164 msgid "选择时间" msgstr "选择时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:155 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:166 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "标准插件" msgstr "标准插件" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:156 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:278 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:200 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:394 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:167 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:405 msgid "全部分类" msgstr "全部分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:201 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:386 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:397 msgid "全部业务" msgstr "全部业务" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:169 msgid "轻应用名称" msgstr "轻应用名称" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:170 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:220 msgid "创建时间" msgstr "创建时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 msgid "更新时间" msgstr "更新时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:172 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 msgid "更新人" msgstr "更新人" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:56 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:173 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:215 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:67 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 msgid "分类" msgstr "分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:174 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:224 msgid "创建任务数" msgstr "创建任务数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:268 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 msgid "引用次数" msgstr "引用次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:269 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:196 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 msgid "流程详情" msgstr "流程详情" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:270 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:274 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 msgid "执行耗时" msgstr "执行耗时" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:271 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 msgid "任务详情" msgstr "任务详情" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:195 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 msgid "时间范围" msgstr "时间范围" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 msgid "任务开始时间" msgstr "任务开始时间" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:141 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 msgid "流程名称" msgstr "流程名称" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:216 msgid "标准插件数" msgstr "标准插件数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:217 msgid "子流程数" msgstr "子流程数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:301 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:218 msgid "网关数" msgstr "网关数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:303 msgid "执行次数" msgstr "执行次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:304 msgid "失败次数" msgstr "失败次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:305 msgid "平均执行耗时(秒)" msgstr "平均执行耗时(秒)" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:306 msgid "失败率" msgstr "失败率" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:278 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 msgid "时间维度" msgstr "时间维度" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:279 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 msgid "天" msgstr "天" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:301 msgid "月" msgstr "月" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:302 msgid "耗时(秒)" msgstr "耗时(秒)" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:191 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 msgid "流程分类" msgstr "流程分类" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:198 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 msgid "流程引用" msgstr "流程引用" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:214 msgid "业务" msgstr "业务" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:222 msgid "创建轻应用数" msgstr "创建轻应用数" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:223 msgid "被引用为子流程数" msgstr "被引用为子流程数" -#: pipeline/blueflow/src/pages/statistics/index.vue:30 +#: pipeline/blueflow/src/pages/statistics/index.vue:41 msgid "流程统计" msgstr "流程统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:35 +#: pipeline/blueflow/src/pages/statistics/index.vue:46 msgid "任务统计" msgstr "任务统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:40 +#: pipeline/blueflow/src/pages/statistics/index.vue:51 msgid "标准插件统计" msgstr "标准插件统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:45 +#: pipeline/blueflow/src/pages/statistics/index.vue:56 msgid "轻应用统计" msgstr "轻应用统计" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:127 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:94 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:106 msgid "任务信息" msgstr "任务信息" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:129 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:140 msgid "流程类型" msgstr "流程类型" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:130 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:141 msgid "默认任务流程" msgstr "默认任务流程" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:131 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:142 msgid "职能化任务流程" msgstr "职能化任务流程" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:133 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:144 msgid "上一步" msgstr "上一步" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:134 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:122 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:145 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:133 msgid "下一步" msgstr "下一步" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:135 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:146 msgid "立即执行" msgstr "立即执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:136 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:147 msgid "周期执行" msgstr "周期执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:137 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:148 msgid "周期表达式" msgstr "周期表达式" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:149 msgid "执行计划" msgstr "执行计划" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:116 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:127 msgid "执行方案列表" msgstr "执行方案列表" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:93 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:280 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 msgid "新建" msgstr "新建" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:120 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:131 msgid "取消全选" msgstr "取消全选" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:123 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:134 msgid "执行方案保存" msgstr "执行方案保存" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:135 msgid "方案名称" msgstr "方案名称" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:125 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:136 msgid "预览模式:" msgstr "预览模式:" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:291 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:302 msgid "方案名称已存在" msgstr "方案名称已存在" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:326 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:337 msgid "方案添加成功" msgstr "方案添加成功" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:401 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:412 msgid "方案删除成功" msgstr "方案删除成功" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:37 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:37 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:48 msgid "节点选择" msgstr "节点选择" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:42 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:41 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:53 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:52 msgid "参数填写" msgstr "参数填写" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:47 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:101 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:113 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:118 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:45 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:40 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:58 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:112 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:56 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:51 msgid "任务执行" msgstr "任务执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:108 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:119 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:98 msgid "职能化认领" msgstr "职能化认领" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:145 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 msgid "执行详情" msgstr "执行详情" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:146 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 msgid "执行信息" msgstr "执行信息" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:147 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 msgid "开始时间" msgstr "开始时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:148 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 msgid "结束时间" msgstr "结束时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:150 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 msgid "失败后跳过" msgstr "失败后跳过" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:151 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:162 msgid "失败自动忽略" msgstr "失败自动忽略" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:152 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:224 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 msgid "输入参数" msgstr "输入参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:153 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:225 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:164 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 msgid "输出参数" msgstr "输出参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:154 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:100 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:165 msgid "参数名" msgstr "参数名" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:155 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:159 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:166 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:59 msgid "参数值" msgstr "参数值" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:167 msgid "异常信息" msgstr "异常信息" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:168 msgid "执行记录" msgstr "执行记录" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:101 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:112 msgid "序号" msgstr "序号" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:345 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:350 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:356 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:361 msgid "是" msgstr "是" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:346 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:351 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:171 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:357 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:362 msgid "否" msgstr "否" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:172 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:244 msgid "手动重试" msgstr "手动重试" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:48 msgid "请选择执行分支" msgstr "请选择执行分支" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:38 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:49 msgid "可选执行分支" msgstr "可选执行分支" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:51 msgid "修改全局参数" msgstr "修改全局参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:102 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:113 msgid "参数修改成功" msgstr "参数修改成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:39 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:50 msgid "修改定时时间" msgstr "修改定时时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:40 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:51 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:51 msgid "确定" msgstr "确定" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:140 msgid "修改成功" msgstr "修改成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:39 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:636 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:50 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:647 msgid "重试" msgstr "重试" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:140 msgid "重试成功" msgstr "重试成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:97 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:109 msgid "预览" msgstr "预览" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:99 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:111 msgid "任务流程预览" msgstr "任务流程预览" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:157 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:183 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:168 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:194 msgid "执行" msgstr "执行" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:177 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:669 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:681 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:188 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:680 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:692 msgid "继续" msgstr "继续" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:218 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:229 msgid "查看参数" msgstr "查看参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:219 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:230 msgid "修改参数" msgstr "修改参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:372 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:383 msgid "任务开始执行" msgstr "任务开始执行" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:400 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:411 msgid "任务暂停成功" msgstr "任务暂停成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:429 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:440 msgid "任务继续成功" msgstr "任务继续成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:448 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:459 msgid "任务撤销成功" msgstr "任务撤销成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:471 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:494 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:482 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:505 msgid "跳过成功" msgstr "跳过成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:516 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:527 msgid "继续成功" msgstr "继续成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:637 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:663 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:648 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:674 msgid "跳过" msgstr "跳过" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:638 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:649 msgid "流程模板中该标准插件节点未配置失败处理方式,不可操作" msgstr "流程模板中该标准插件节点未配置失败处理方式,不可操作" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:657 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:668 msgid "修改时间" msgstr "修改时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:49 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:60 msgid "查看标准插件参数" msgstr "查看标准插件参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 msgid "请点击标准插件节点查看参数" msgstr "请点击标准插件节点查看参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:26 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:37 msgid "是否撤销该任务?" msgstr "是否撤销该任务?" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:27 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:38 msgid "任务撤销" msgstr "任务撤销" -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:48 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:59 msgid "任务克隆" msgstr "任务克隆" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:214 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 msgid "全部" msgstr "全部" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:215 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 msgid "请输入ID或任务名称" msgstr "请输入ID或任务名称" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 msgid "克隆" msgstr "克隆" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:252 msgid "创建方式" msgstr "创建方式" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:253 msgid "应用内" msgstr "应用内" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:255 msgid "请选择创建方式" msgstr "请选择创建方式" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:269 msgid "未完成" msgstr "未完成" -#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:138 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:552 +#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:563 msgid "输入值不满足正则校验" msgstr "输入值不满足正则校验" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:218 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:55 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:66 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:84 msgid "基础信息" msgstr "基础信息" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:220 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 msgid "节点名称" msgstr "节点名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:42 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 msgid "步骤名称" msgstr "步骤名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:222 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 msgid "自动忽略" msgstr "自动忽略" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:223 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 msgid "是否可选" msgstr "是否可选" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:227 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 msgid "引用" msgstr "引用" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:241 msgid "不能为空" msgstr "不能为空" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:242 msgid "版本更新" msgstr "版本更新" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:243 msgid "手动跳过" msgstr "手动跳过" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:245 msgid "失败处理" msgstr "失败处理" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:246 msgid "说明:" msgstr "说明:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:247 msgid "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" msgstr "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:248 msgid "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" msgstr "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:249 msgid "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" msgstr "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:250 msgid "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" msgstr "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1021 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1032 msgid "变量KEY已存在" msgstr "变量KEY已存在" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:85 msgid "复用变量" msgstr "复用变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:75 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:86 msgid "新建变量" msgstr "新建变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:76 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:87 msgid "变量名称" msgstr "变量名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:77 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:88 msgid "变量KEY" msgstr "变量KEY" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:106 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:117 msgid "变量KEY已存在,请创建新变量" msgstr "变量KEY已存在,请创建新变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:119 msgid "是否复用变量" msgstr "是否复用变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:143 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:72 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:126 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:25 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:83 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:36 msgid "全局变量" msgstr "全局变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 msgid "属性" msgstr "属性" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 msgid "输入" msgstr "输入" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 msgid "输出" msgstr "输出" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:160 msgid "属性:" msgstr "属性:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:161 msgid "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" msgstr "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:162 msgid "输出:" msgstr "输出:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:163 msgid "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" msgstr "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:164 msgid "无数据,请手动新增变量或者勾选标准插件参数自动生成" msgstr "无数据,请手动新增变量或者勾选标准插件参数自动生成" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:165 msgid "删除变量" msgstr "删除变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:166 msgid "确认删除该变量?" msgstr "确认删除该变量?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:167 msgid "已复制" msgstr "已复制" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:168 msgid "复制" msgstr "复制" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:185 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:173 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:196 msgid "显示" msgstr "显示" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:174 msgid "隐藏" msgstr "隐藏" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:85 msgid "本地缓存" msgstr "本地缓存" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 msgid "替换" msgstr "替换" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 msgid "保存时间" msgstr "保存时间" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:109 msgid "无数据,请手动添加缓存或等待自动保存" msgstr "无数据,请手动添加缓存或等待自动保存" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:99 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:110 msgid "替换模板" msgstr "替换模板" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:100 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:111 msgid "是否替换模板?" msgstr "是否替换模板?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:114 msgid "简述:" msgstr "简述:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:115 msgid "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" msgstr "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:118 msgid "重置模板" msgstr "重置模板" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:57 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:68 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:18 msgid "通知方式" msgstr "通知方式" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:69 msgid "超时时间(分钟)" msgstr "超时时间(分钟)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:59 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:44 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:70 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:55 msgid "通知分组" msgstr "通知分组" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:144 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 msgid "普通变量" msgstr "普通变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 msgid "输入框" msgstr "输入框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:158 msgid "文本框" msgstr "文本框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:159 msgid "日期时间" msgstr "日期时间" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:160 msgid "整数" msgstr "整数" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:161 msgid "IP选择器(简单版)" msgstr "IP选择器(简单版)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:151 -#: pipeline_plugins/variables/static/variables/password.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 +#: pipeline_plugins/variables/static/variables/password.js:18 msgid "密码" msgstr "密码" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:166 msgid "元变量" msgstr "元变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 -#: pipeline_plugins/variables/static/variables/select.js:44 -#: pipeline_plugins/variables/static/variables/select_meta.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:168 +#: pipeline_plugins/variables/static/variables/select.js:55 +#: pipeline_plugins/variables/static/variables/select_meta.js:18 msgid "下拉框" msgstr "下拉框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:179 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:190 msgid "说明" msgstr "说明" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:180 -#: pipeline_plugins/variables/static/variables/select_meta.js:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:191 +#: pipeline_plugins/variables/static/variables/select_meta.js:69 msgid "默认值" msgstr "默认值" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:181 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:192 msgid "配置" msgstr "配置" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:182 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:193 msgid "编辑表格" msgstr "编辑表格" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:183 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:194 msgid "正则校验" msgstr "正则校验" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:184 -#: pipeline_plugins/variables/static/variables/select_meta.js:43 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:195 +#: pipeline_plugins/variables/static/variables/select_meta.js:54 msgid "类型" msgstr "类型" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:260 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:271 msgid "组件" msgstr "组件" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:35 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:46 msgid "编辑变量" msgstr "编辑变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:89 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:100 msgid "流程编辑" msgstr "流程编辑" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:90 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:101 msgid "离开页面" msgstr "离开页面" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:102 msgid "系统不会保存您所做的更改,确认离开?" msgstr "系统不会保存您所做的更改,确认离开?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:93 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:104 msgid "任务节点参数错误,请点击错误节点查看详情" msgstr "任务节点参数错误,请点击错误节点查看详情" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:94 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:105 msgid "删除本地缓存成功" msgstr "删除本地缓存成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:106 msgid "该本地缓存不存在,删除失败" msgstr "该本地缓存不存在,删除失败" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:107 msgid "替换流程成功" msgstr "替换流程成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:97 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:108 msgid "新增流程本地缓存成功" msgstr "新增流程本地缓存成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:109 msgid "替换流程自动保存" msgstr "替换流程自动保存" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:70 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:81 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 msgid "权限管理" msgstr "权限管理" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:71 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:82 msgid "新建任务权限" msgstr "新建任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:72 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:83 msgid "认领任务权限" msgstr "认领任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:84 msgid "执行任务权限" msgstr "执行任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:119 msgid "导出流程" msgstr "导出流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:109 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:120 msgid "选择流程" msgstr "选择流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:111 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:122 msgid "请选择需要导出的流程" msgstr "请选择需要导出的流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 msgid "上传文件" msgstr "上传文件" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:138 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 msgid "重新上传" msgstr "重新上传" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:139 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 msgid "导入流程" msgstr "导入流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:140 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 msgid "导入列表" msgstr "导入列表" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:143 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 msgid "是否覆盖" msgstr "是否覆盖" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 msgid "上传了" msgstr "上传了" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 msgid "条流程" msgstr "条流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 msgid "只显示冲突项" msgstr "只显示冲突项" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 msgid "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" msgstr "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:161 msgid "导入的流程会使用新的流程ID,不会对现有的流程造成影响" msgstr "导入的流程会使用新的流程ID,不会对现有的流程造成影响" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:162 msgid "模板文件上传为空" msgstr "模板文件上传为空" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:163 msgid "模板上传内容不合法,请重新选择文件" msgstr "模板上传内容不合法,请重新选择文件" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:164 msgid "该文件后缀不为.dat" msgstr "该文件后缀不为.dat" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:165 msgid "其中" msgstr "其中" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:166 msgid "保留ID,并提交" msgstr "保留ID,并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:167 msgid "使用新ID, 并提交" msgstr "使用新ID, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:168 msgid "覆盖冲突项, 并提交" msgstr "覆盖冲突项, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:169 msgid "保留两者, 并提交" msgstr "保留两者, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:171 msgid "条流程与系统已有流程存在冲突" msgstr "条流程与系统已有流程存在冲突" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:284 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 msgid "子流程更新" msgstr "子流程更新" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 msgid "导入 V1 模板" msgstr "导入 V1 模板" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 msgid "导出" msgstr "导出" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 msgid "导入" msgstr "导入" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 msgid "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" msgstr "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:318 msgid "请选择子流程更新" msgstr "请选择子流程更新" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:320 msgid "来源" msgstr "来源" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:321 msgid "请选择来源" msgstr "请选择来源" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:327 msgid "搜索流程名称" msgstr "搜索流程名称" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:347 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:358 msgid "无子流程" msgstr "无子流程" -#: pipeline/blueflow/src/utils/draft.js:5 +#: pipeline/blueflow/src/utils/draft.js:16 msgid "自动保存" msgstr "自动保存" -#: pipeline/blueflow/src/utils/errorHandler.js:13 +#: pipeline/blueflow/src/utils/errorHandler.js:24 msgid "当前访问的页面不存在" msgstr "当前访问的页面不存在" -#: pipeline/blueflow/src/utils/errorHandler.js:18 +#: pipeline/blueflow/src/utils/errorHandler.js:29 msgid "sorry,您没有访问权限!" msgstr "sorry,您没有访问权限!" -#: pipeline/blueflow/src/utils/errorHandler.js:23 -#: pipeline/blueflow/src/utils/errorHandler.js:28 +#: pipeline/blueflow/src/utils/errorHandler.js:34 +#: pipeline/blueflow/src/utils/errorHandler.js:39 msgid "Sorry,您的权限不足!" msgstr "Sorry,您的权限不足!" -#: pipeline/blueflow/src/utils/tools.js:122 +#: pipeline/blueflow/src/utils/tools.js:133 msgid " 秒" msgstr " 秒" -#: pipeline/blueflow/src/utils/tools.js:124 +#: pipeline/blueflow/src/utils/tools.js:135 msgid " 分" msgstr " 分" -#: pipeline/blueflow/src/utils/tools.js:126 +#: pipeline/blueflow/src/utils/tools.js:137 msgid " 小时" msgstr " 小时" -#: pipeline/blueflow/src/utils/tools.js:128 +#: pipeline/blueflow/src/utils/tools.js:139 msgid " 天" msgstr " 天" -#: pipeline/blueflow/src/utils/validatePipeline.js:86 +#: pipeline/blueflow/src/utils/validatePipeline.js:97 msgid "只能添加输入连线" msgstr "只能添加输入连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:92 +#: pipeline/blueflow/src/utils/validatePipeline.js:103 msgid "只能添加输出连线" msgstr "只能添加输出连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:98 +#: pipeline/blueflow/src/utils/validatePipeline.js:109 msgid "不能连接" msgstr "不能连接" -#: pipeline/blueflow/src/utils/validatePipeline.js:118 +#: pipeline/blueflow/src/utils/validatePipeline.js:129 msgid "相同节点不能回连" msgstr "相同节点不能回连" -#: pipeline/blueflow/src/utils/validatePipeline.js:123 +#: pipeline/blueflow/src/utils/validatePipeline.js:134 msgid "重复添加连线" msgstr "重复添加连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:126 +#: pipeline/blueflow/src/utils/validatePipeline.js:137 msgid "已达到" msgstr "已达到" -#: pipeline/blueflow/src/utils/validatePipeline.js:128 +#: pipeline/blueflow/src/utils/validatePipeline.js:139 msgid "最大输出连线条数" msgstr "最大输出连线条数" -#: pipeline/blueflow/src/utils/validatePipeline.js:133 +#: pipeline/blueflow/src/utils/validatePipeline.js:144 msgid "最大输入连线条数" msgstr "最大输入连线条数" -#: pipeline/blueflow/src/utils/validatePipeline.js:145 +#: pipeline/blueflow/src/utils/validatePipeline.js:156 msgid "在模板中只能添加一个" msgstr "在模板中只能添加一个" -#: pipeline/blueflow/src/utils/validatePipeline.js:184 +#: pipeline/blueflow/src/utils/validatePipeline.js:195 msgid "至少需要" msgstr "至少需要" -#: pipeline/blueflow/src/utils/validatePipeline.js:186 +#: pipeline/blueflow/src/utils/validatePipeline.js:197 msgid "条输入连线" msgstr "条输入连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:191 +#: pipeline/blueflow/src/utils/validatePipeline.js:202 msgid "条输出连线" msgstr "条输出连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:203 +#: pipeline/blueflow/src/utils/validatePipeline.js:214 msgid "请添加任务节点" msgstr "请添加任务节点" -#: pipeline/blueflow/src/utils/validatePipeline.js:208 +#: pipeline/blueflow/src/utils/validatePipeline.js:219 msgid "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" msgstr "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:18 msgid "请求方式" msgstr "请求方式" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:52 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:63 msgid "请输入正确的 URL" msgstr "请输入正确的 URL" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:10 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:21 msgid "微信" msgstr "微信" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:9 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:11 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:22 msgid "邮件" msgstr "邮件" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:12 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:12 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:23 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:23 msgid "短信" msgstr "短信" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:25 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:36 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:36 msgid "请至少选择一种通知方式" msgstr "请至少选择一种通知方式" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:36 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:218 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:236 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:46 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:57 msgid "运维人员" msgstr "运维人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:202 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:237 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:47 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:58 msgid "产品人员" msgstr "产品人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:42 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:203 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:220 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:53 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:59 msgid "开发人员" msgstr "开发人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:204 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:49 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:54 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:60 msgid "测试人员" msgstr "测试人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:56 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:67 msgid "请至少选择一个通知分组" msgstr "请至少选择一个通知分组" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:214 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:231 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:249 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:71 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:71 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:79 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:82 msgid "附加人员" msgstr "附加人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:69 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:80 msgid "多个用 , 分隔" msgstr "多个用 , 分隔" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:61 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:102 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:102 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:88 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:113 msgid "通知主题" msgstr "通知主题" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:115 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:115 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:101 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:126 msgid "通知内容" msgstr "通知内容" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:18 msgid "定时时间" msgstr "定时时间" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:8 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:19 msgid "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" msgstr "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:16 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:27 msgid "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" msgstr "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:18 msgid "脚本来源" msgstr "脚本来源" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:10 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:21 msgid "手工录入" msgstr "手工录入" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:22 msgid "业务脚本" msgstr "业务脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:12 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:23 msgid "公共脚本" msgstr "公共脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:46 msgid "脚本类型" msgstr "脚本类型" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:59 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:63 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:70 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:74 msgid "请选择脚本类型" msgstr "请选择脚本类型" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:89 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:28 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:100 msgid "脚本内容" msgstr "脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:102 msgid "填写执行脚本内容" msgstr "填写执行脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:106 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:110 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:117 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:121 msgid "请输入脚本内容" msgstr "请输入脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:136 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:187 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:147 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:198 msgid "脚本列表" msgstr "脚本列表" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:157 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:161 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:208 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:212 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:168 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:172 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:219 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:223 msgid "请选择脚本" msgstr "请选择脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:57 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:42 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:249 msgid "脚本参数" msgstr "脚本参数" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:184 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:43 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:250 msgid "可为空" msgstr "可为空" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:247 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:51 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:258 msgid "超时时间" msgstr "超时时间" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:248 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:52 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:259 msgid "单位为秒,为空时使用 JOB 默认值" msgstr "单位为秒,为空时使用 JOB 默认值" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:260 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:64 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:271 msgid "请输入数字" msgstr "请输入数字" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:272 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:67 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:76 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:37 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:283 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:78 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:48 msgid "目标IP" msgstr "目标IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:273 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:77 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:116 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:156 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:173 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:66 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:66 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:284 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:79 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:77 msgid "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:286 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:81 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:46 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:297 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:92 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:57 msgid "目标账户" msgstr "目标账户" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:287 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:82 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:47 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:298 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:93 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:58 msgid "请输入在蓝鲸作业平台上注册的账户名" msgstr "请输入在蓝鲸作业平台上注册的账户名" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:18 msgid "源文件" msgstr "源文件" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:65 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:49 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:68 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:74 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:92 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:98 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:115 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:155 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:172 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:65 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:65 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:26 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:76 msgid "IP" msgstr "IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:40 msgid "文件路径" msgstr "文件路径" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:30 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:41 msgid "多个请用换行分隔" msgstr "多个请用换行分隔" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:73 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:55 msgid "执行账户" msgstr "执行账户" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:95 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:55 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:55 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:106 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:66 msgid "目标路径" msgstr "目标路径" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:96 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:56 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:107 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:67 msgid "请输入绝对路径" msgstr "请输入绝对路径" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:18 msgid "本地文件" msgstr "本地文件" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:22 msgid "文件名不能包含中文和特殊字符且大小不能超过500M" msgstr "文件名不能包含中文和特殊字符且大小不能超过500M" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:38 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:49 msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:7 -msgid "云区域ID" -msgstr "云区域ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:30 -msgid "proxy内网IP" -msgstr "proxy内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:32 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:41 -msgid "可为空,为空时使用Agent安装APP中业务默认值" -msgstr "可为空,为空时使用Agent安装APP中业务默认值" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:39 -msgid "proxy外网IP" -msgstr "proxy外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:48 -msgid "目标主机操作系统" -msgstr "目标主机操作系统" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:32 -msgid "linux" -msgstr "linux" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:51 -msgid "windows" -msgstr "windows" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:66 -msgid "目标主机认证方式" -msgstr "目标主机认证方式" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:49 -msgid "密码认证" -msgstr "密码认证" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:69 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:50 -msgid "密钥认证" -msgstr "密钥认证" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:84 -msgid "目标主机详情" -msgstr "目标主机详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:94 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:215 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:232 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:250 -msgid "多个用,分隔" -msgstr "多个用,分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:107 -msgid "ssh账号" -msgstr "ssh账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:120 -msgid "ssh端口" -msgstr "ssh端口" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:133 -msgid "ssh密码" -msgstr "ssh密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:134 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:122 -msgid "密码认证,则必填" -msgstr "密码认证,则必填" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:142 -msgid "ssh密钥" -msgstr "ssh密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:143 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:147 -msgid "密钥认证,则必填" -msgstr "密钥认证,则必填" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:31 -msgid "多个用,或换行符分隔" -msgstr "多个用,或换行符分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:27 -msgid "通知人" -msgstr "通知人" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:205 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:222 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:240 -msgid "合作商" -msgstr "合作商" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:7 -msgid "游戏ID" -msgstr "游戏ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:20 -msgid "Region" -msgstr "Region" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:23 -msgid "上海" -msgstr "上海" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:24 -msgid "香港" -msgstr "香港" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:25 -msgid "新加坡" -msgstr "新加坡" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:38 -msgid "访问账号" -msgstr "访问账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:52 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:51 -msgid "访问密码" -msgstr "访问密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:65 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:64 -msgid "大区ID" -msgstr "大区ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:78 -msgid "区服ID(列表)" -msgstr "区服ID(列表)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:79 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:80 -msgid "整形,多个,或换行符分隔" -msgstr "整形,多个,或换行符分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:91 -msgid "服务态" -msgstr "服务态" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:93 -msgid "自动" -msgstr "自动" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:94 -msgid "繁忙" -msgstr "繁忙" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:95 -msgid "拥挤" -msgstr "拥挤" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:96 -msgid "良好" -msgstr "良好" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:97 -msgid "维护" -msgstr "维护" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:93 -msgid "区服标注" -msgstr "区服标注" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:96 -msgid "热" -msgstr "热" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:97 -msgid "荐" -msgstr "荐" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:98 -msgid "新" -msgstr "新" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:99 -msgid "限" -msgstr "限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:100 -msgid "体验服" -msgstr "体验服" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:7 -msgid "GCS业务名称" -msgstr "GCS业务名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:8 -msgid "为空则使用在配置平台(CC)的业务名" -msgstr "为空则使用在配置平台(CC)的业务名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:16 -msgid "DB类型" -msgstr "DB类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:180 -msgid "应用类型" -msgstr "应用类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:54 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:40 -msgid "备份选项" -msgstr "备份选项" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:73 -msgid "字符集" -msgstr "字符集" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:95 -msgid "是否强制执行" -msgstr "是否强制执行" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:113 -msgid "IP列表" -msgstr "IP列表" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:114 -msgid "IP列表,多个以逗号分隔" -msgstr "IP列表,多个以逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:127 -msgid "变更详情" -msgstr "变更详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:135 -msgid "SQL文件" -msgstr "SQL文件" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:148 -msgid "变更DB名" -msgstr "变更DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:161 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:100 -msgid "忽略DB名" -msgstr "忽略DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:183 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:200 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:218 -msgid "变更描述" -msgstr "变更描述" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:192 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:199 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:209 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:216 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:227 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:234 -msgid "关注人" -msgstr "关注人" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:16 -msgid "备份类型配置" -msgstr "备份类型配置" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:23 -msgid "备份类型" -msgstr "备份类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:83 -msgid "备份详情" -msgstr "备份详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:92 -msgid "备份DB名" -msgstr "备份DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:108 -msgid "表名称" -msgstr "表名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:148 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:172 -msgid "目标参数" -msgstr "目标参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:166 -msgid "IP/服ID" -msgstr "IP/服ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:167 -msgid "IP/服ID列表,多个以逗号分隔" -msgstr "IP/服ID列表,多个以逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_execute_bill.js:7 -msgid "单据ID" -msgstr "单据ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:158 -msgid "访问发起IP" -msgstr "访问发起IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:159 -msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" -msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:66 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:190 -msgid "目标域名/服ID" -msgstr "目标域名/服ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:67 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:191 -msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" -msgstr "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:80 -msgid "DB名称" -msgstr "DB名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:81 -msgid "支持通配符,多个请用 , 分隔" -msgstr "支持通配符,多个请用 , 分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:16 -msgid "回收类型配置" -msgstr "回收类型配置" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:23 -msgid "回收类型" -msgstr "回收类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:25 -msgid "账号清理" -msgstr "账号清理" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:26 -msgid "权限清理" -msgstr "权限清理" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:40 -msgid "回收DB名称" -msgstr "回收DB名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:76 -msgid "权限清理时必填,支持通配符,多个请用 , 分隔" -msgstr "权限清理时必填,支持通配符,多个请用 , 分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:75 -msgid "回收表名" -msgstr "回收表名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:110 -msgid "回收权限" -msgstr "回收权限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:204 -msgid "用户名" -msgstr "用户名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:205 -msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" -msgstr "若填写 all,可以实现清理发起访问IP的所有账号权限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:7 -msgid "作业模板" -msgstr "作业模板" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:25 -msgid "步骤参数" -msgstr "步骤参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:28 -msgid "没选中作业模板或当前作业模板脚本步骤为空" -msgstr "没选中作业模板或当前作业模板脚本步骤为空" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:136 -msgid "ID" -msgstr "ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:49 -msgid "步骤类型" -msgstr "步骤类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:110 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:141 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:209 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:236 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:275 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:302 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:224 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:224 -msgid "请求后台接口异常:" -msgstr "请求后台接口异常:" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:130 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:27 -msgid "没选中作业模板或当前作业模板全局变量为空" -msgstr "没选中作业模板或当前作业模板全局变量为空" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:144 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:33 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:33 -msgid "参数名称" -msgstr "参数名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:151 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:40 -msgid "参数类型" -msgstr "参数类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:7 -msgid "屏蔽开始时间" -msgstr "屏蔽开始时间" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:40 -msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" -msgstr "请填写时间格式(%Y-%m-%d %H:%M:%S)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:32 -msgid "屏蔽结束时间" -msgstr "屏蔽结束时间" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:57 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:184 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:316 -msgid "集群名称" -msgstr "集群名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:76 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:250 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:351 -msgid "模块名称" -msgstr "模块名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:30 -msgid "主机操作系统" -msgstr "主机操作系统" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:47 -msgid "主机认证方式" -msgstr "主机认证方式" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:65 -msgid "内网IP" -msgstr "内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:66 -msgid "请输入内网IP" -msgstr "请输入内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:79 -msgid "外网IP" -msgstr "外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:80 -msgid "请输入外网IP" -msgstr "请输入外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:94 -msgid "SSH账号" -msgstr "SSH账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:108 -msgid "SSH端口" -msgstr "SSH端口" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:121 -msgid "SSH密码" -msgstr "SSH密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:133 -msgid "请输入密码" -msgstr "请输入密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:146 -msgid "SSH密钥" -msgstr "SSH密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:160 -msgid "请输入密钥" -msgstr "请输入密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:7 -msgid "TCM业务" -msgstr "TCM业务" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:29 -msgid "模板" -msgstr "模板" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:85 -msgid "参数" -msgstr "参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:93 -msgid "步骤ID" -msgstr "步骤ID" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:12 -msgid "语音" -msgstr "语音" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:72 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:72 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:83 msgid "填写用户名,多个用户名用 , 分隔" msgstr "填写用户名,多个用户名用 , 分隔" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:87 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:87 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:98 msgid "通知分组与附加人员不可同时为空" msgstr "通知分组与附加人员不可同时为空" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:18 msgid "集群" msgstr "集群" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:18 msgid "父实例" msgstr "父实例" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:37 msgid "集群信息" msgstr "集群信息" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:18 msgid "主机详情" msgstr "主机详情" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:19 msgid "请至少添加一条数据" msgstr "请至少添加一条数据" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:16 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:27 msgid "故障机IP" msgstr "故障机IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:40 msgid "替换机IP" msgstr "替换机IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:18 msgid "主机内网IP" msgstr "主机内网IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:19 msgid "请输入主机内网IP,多个用换行符分隔" msgstr "请输入主机内网IP,多个用换行符分隔" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:32 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:18 msgid "模块" msgstr "模块" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:40 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:51 msgid "转移方式" msgstr "转移方式" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:43 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:54 msgid "覆盖" msgstr "覆盖" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:44 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:55 msgid "追加" msgstr "追加" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:32 msgid "主机属性" msgstr "主机属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:22 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:33 msgid "请选择需要更新的主机属性" msgstr "请选择需要更新的主机属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:45 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:56 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:56 msgid "属性值" msgstr "属性值" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:46 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:57 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:57 msgid "请输入更新后的属性值" msgstr "请输入更新后的属性值" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:37 msgid "模块属性" msgstr "模块属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:38 msgid "请选择需要更新的模块属性" msgstr "请选择需要更新的模块属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:37 msgid "集群属性" msgstr "集群属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:38 msgid "请选择需要更新的集群属性" msgstr "请选择需要更新的集群属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:37 msgid "服务状态" msgstr "服务状态" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:40 msgid "开放" msgstr "开放" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:30 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:41 msgid "关闭" msgstr "关闭" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/clb/scan_certificate.js:7 -msgid "扫描域名" -msgstr "扫描域名" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:56 -msgid "描述" -msgstr "描述" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:7 -msgid "群聊名称" -msgstr "群聊名称" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:20 -msgid "群聊成员" -msgstr "群聊成员" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:18 +msgid "作业模板" +msgstr "作业模板" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:22 -msgid "企业微信群成员,多个以逗号分隔" -msgstr "企业微信群成员,多个以逗号分隔" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:38 +msgid "没选中作业模板或当前作业模板全局变量为空" +msgstr "没选中作业模板或当前作业模板全局变量为空" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:34 -msgid "推送消息" -msgstr "推送消息" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:44 +msgid "参数名称" +msgstr "参数名称" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/tof/get_staff_leader.js:7 -msgid "员工英文名" -msgstr "员工英文名" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:51 +msgid "参数类型" +msgstr "参数类型" -#: pipeline_plugins/components/static/components/atoms/test/test.js:7 -#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:7 -msgid "选择服务器" -msgstr "选择服务器" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:67 +msgid "描述" +msgstr "描述" -#: pipeline_plugins/variables/static/variables/select.js:19 -#: pipeline_plugins/variables/static/variables/select.js:23 +#: pipeline_plugins/variables/static/variables/select.js:30 +#: pipeline_plugins/variables/static/variables/select.js:34 msgid "非法下拉框数据源,请检查您的配置" msgstr "非法下拉框数据源,请检查您的配置" -#: pipeline_plugins/variables/static/variables/select_meta.js:14 +#: pipeline_plugins/variables/static/variables/select_meta.js:25 msgid "数据源" msgstr "数据源" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "自定义" msgstr "自定义" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "远程数据源" msgstr "远程数据源" -#: pipeline_plugins/variables/static/variables/select_meta.js:29 +#: pipeline_plugins/variables/static/variables/select_meta.js:40 msgid "选项" msgstr "选项" -#: pipeline_plugins/variables/static/variables/select_meta.js:31 +#: pipeline_plugins/variables/static/variables/select_meta.js:42 msgid "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" msgstr "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "单选" msgstr "单选" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "多选" msgstr "多选" -#: pipeline_plugins/variables/static/variables/select_meta.js:59 +#: pipeline_plugins/variables/static/variables/select_meta.js:70 msgid "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" msgstr "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:14 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:31 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:31 +#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:18 +msgid "选择服务器" +msgstr "选择服务器" + +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:42 msgid "填参方式" msgstr "填参方式" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:16 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:33 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:33 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:44 msgid "自定义输入" msgstr "自定义输入" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:17 -msgid "选择集群和模块自动获取" -msgstr "选择集群和模块自动获取" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:18 -msgid "输入集群名和模块名自动获取" -msgstr "输入集群名和模块名自动获取" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:47 -msgid "值类型" -msgstr "值类型" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:50 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:69 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:75 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:93 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:149 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:166 -msgid "DNS" -msgstr "DNS" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:51 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:70 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:94 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:152 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:169 -msgid "服ID" -msgstr "服ID" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:150 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:167 -msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" -msgstr "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:153 -msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" -msgstr "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:170 -msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" -msgstr "服ID用于GCS原子自动获取域名,多个请用空格分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:318 -msgid "多个用,分隔,all代表所有集群" -msgstr "多个用,分隔,all代表所有集群" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:353 -msgid "多个用,分隔,all代表所有模块" -msgstr "多个用,分隔,all代表所有模块" - -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:34 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:34 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:45 msgid "通过配置平台拓扑获取" msgstr "通过配置平台拓扑获取" -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:99 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:110 msgid "拓扑树" msgstr "拓扑树" +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:177 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:228 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:235 +msgid "请求后台接口异常:" +msgstr "请求后台接口异常:" + +#~ msgid "Available %s" +#~ msgstr "Available %s" + +#~ msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." +#~ msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." + +#~ msgid "Type into this box to filter down the list of available %s." +#~ msgstr "Type into this box to filter down the list of available %s." + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Choose all" +#~ msgstr "Choose all" + +#~ msgid "Click to choose all %s at once." +#~ msgstr "Click to choose all %s at once." + +#~ msgid "Choose" +#~ msgstr "Choose" + +#~ msgid "Remove" +#~ msgstr "Remove" + +#~ msgid "Chosen %s" +#~ msgstr "Chosen %s" + +#~ msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." +#~ msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." + +#~ msgid "Remove all" +#~ msgstr "Remove all" + +#~ msgid "Click to remove all chosen %s at once." +#~ msgstr "Click to remove all chosen %s at once." + +#~ msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." +#~ msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." + +#~ msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." +#~ msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." + +#~ msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." +#~ msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." + +#~ msgid "Now" +#~ msgstr "Now" + +#~ msgid "Choose a Time" +#~ msgstr "Choose a Time" + +#~ msgid "Choose a time" +#~ msgstr "Choose a time" + +#~ msgid "Midnight" +#~ msgstr "Midnight" + +#~ msgid "6 a.m." +#~ msgstr "6 a.m." + +#~ msgid "Noon" +#~ msgstr "Noon" + +#~ msgid "6 p.m." +#~ msgstr "6 p.m." + +#~ msgid "Cancel" +#~ msgstr "Cancel" + +#~ msgid "Today" +#~ msgstr "Today" + +#~ msgid "Choose a Date" +#~ msgstr "Choose a Date" + +#~ msgid "Yesterday" +#~ msgstr "Yesterday" + +#~ msgid "Tomorrow" +#~ msgstr "Tomorrow" + +#~ msgid "January" +#~ msgstr "January" + +#~ msgid "February" +#~ msgstr "February" + +#~ msgid "March" +#~ msgstr "March" + +#~ msgid "April" +#~ msgstr "April" + +#~ msgid "May" +#~ msgstr "May" + +#~ msgid "June" +#~ msgstr "June" + +#~ msgid "July" +#~ msgstr "July" + +#~ msgid "August" +#~ msgstr "August" + +#~ msgid "September" +#~ msgstr "September" + +#~ msgid "October" +#~ msgstr "October" + +#~ msgid "November" +#~ msgstr "November" + +#~ msgid "December" +#~ msgstr "December" + +#~ msgctxt "one letter Sunday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgctxt "one letter Monday" +#~ msgid "M" +#~ msgstr "M" + +#~ msgctxt "one letter Tuesday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Wednesday" +#~ msgid "W" +#~ msgstr "W" + +#~ msgctxt "one letter Thursday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Friday" +#~ msgid "F" +#~ msgstr "F" + +#~ msgctxt "one letter Saturday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgid "Show" +#~ msgstr "Show" + +#~ msgid "Hide" +#~ msgstr "Hide" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "云区域ID" +#~ msgstr "云区域ID" + +#~ msgid "proxy内网IP" +#~ msgstr "proxy内网IP" + +#~ msgid "可为空,为空时使用Agent安装APP中业务默认值" +#~ msgstr "可为空,为空时使用Agent安装APP中业务默认值" + +#~ msgid "proxy外网IP" +#~ msgstr "proxy外网IP" + +#~ msgid "目标主机操作系统" +#~ msgstr "目标主机操作系统" + +#~ msgid "linux" +#~ msgstr "linux" + +#~ msgid "windows" +#~ msgstr "windows" + +#~ msgid "目标主机认证方式" +#~ msgstr "目标主机认证方式" + +#~ msgid "密码认证" +#~ msgstr "密码认证" + +#~ msgid "密钥认证" +#~ msgstr "密钥认证" + +#~ msgid "目标主机详情" +#~ msgstr "目标主机详情" + +#~ msgid "多个用,分隔" +#~ msgstr "多个用,分隔" + +#~ msgid "ssh账号" +#~ msgstr "ssh账号" + +#~ msgid "ssh端口" +#~ msgstr "ssh端口" + +#~ msgid "ssh密码" +#~ msgstr "ssh密码" + +#~ msgid "密码认证,则必填" +#~ msgstr "密码认证,则必填" + +#~ msgid "ssh密钥" +#~ msgstr "ssh密钥" + +#~ msgid "密钥认证,则必填" +#~ msgstr "密钥认证,则必填" + +#~ msgid "多个用,或换行符分隔" +#~ msgstr "多个用,或换行符分隔" + +#~ msgid "通知人" +#~ msgstr "通知人" + +#~ msgid "合作商" +#~ msgstr "合作商" + +#~ msgid "游戏ID" +#~ msgstr "游戏ID" + +#~ msgid "Region" +#~ msgstr "Region" + +#~ msgid "上海" +#~ msgstr "上海" + +#~ msgid "香港" +#~ msgstr "香港" + +#~ msgid "新加坡" +#~ msgstr "新加坡" + +#~ msgid "访问账号" +#~ msgstr "访问账号" + +#~ msgid "访问密码" +#~ msgstr "访问密码" + +#~ msgid "大区ID" +#~ msgstr "大区ID" + +#~ msgid "区服ID(列表)" +#~ msgstr "区服ID(列表)" + +#~ msgid "整形,多个,或换行符分隔" +#~ msgstr "整形,多个,或换行符分隔" + +#~ msgid "服务态" +#~ msgstr "服务态" + +#~ msgid "自动" +#~ msgstr "自动" + +#~ msgid "繁忙" +#~ msgstr "繁忙" + +#~ msgid "拥挤" +#~ msgstr "拥挤" + +#~ msgid "良好" +#~ msgstr "良好" + +#~ msgid "维护" +#~ msgstr "维护" + +#~ msgid "区服标注" +#~ msgstr "区服标注" + +#~ msgid "热" +#~ msgstr "热" + +#~ msgid "荐" +#~ msgstr "荐" + +#~ msgid "新" +#~ msgstr "新" + +#~ msgid "限" +#~ msgstr "限" + +#~ msgid "体验服" +#~ msgstr "体验服" + +#~ msgid "GCS业务名称" +#~ msgstr "GCS业务名称" + +#~ msgid "为空则使用在配置平台(CC)的业务名" +#~ msgstr "为空则使用在配置平台(CC)的业务名" + +#~ msgid "DB类型" +#~ msgstr "DB类型" + +#~ msgid "应用类型" +#~ msgstr "应用类型" + +#~ msgid "备份选项" +#~ msgstr "备份选项" + +#~ msgid "字符集" +#~ msgstr "字符集" + +#~ msgid "是否强制执行" +#~ msgstr "是否强制执行" + +#~ msgid "IP列表" +#~ msgstr "IP列表" + +#~ msgid "IP列表,多个以逗号分隔" +#~ msgstr "IP列表,多个以逗号分隔" + +#~ msgid "变更详情" +#~ msgstr "变更详情" + +#~ msgid "SQL文件" +#~ msgstr "SQL文件" + +#~ msgid "变更DB名" +#~ msgstr "变更DB名" + +#~ msgid "忽略DB名" +#~ msgstr "忽略DB名" + +#~ msgid "变更描述" +#~ msgstr "变更描述" + +#~ msgid "关注人" +#~ msgstr "关注人" + +#~ msgid "备份类型配置" +#~ msgstr "备份类型配置" + +#~ msgid "备份类型" +#~ msgstr "备份类型" + +#~ msgid "备份详情" +#~ msgstr "备份详情" + +#~ msgid "备份DB名" +#~ msgstr "备份DB名" + +#~ msgid "表名称" +#~ msgstr "表名称" + +#~ msgid "目标参数" +#~ msgstr "目标参数" + +#~ msgid "IP/服ID" +#~ msgstr "IP/服ID" + +#~ msgid "IP/服ID列表,多个以逗号分隔" +#~ msgstr "IP/服ID列表,多个以逗号分隔" + +#~ msgid "单据ID" +#~ msgstr "单据ID" + +#~ msgid "访问发起IP" +#~ msgstr "访问发起IP" + +#~ msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" +#~ msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" + +#~ msgid "目标域名/服ID" +#~ msgstr "目标域名/服ID" + +#~ msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" +#~ msgstr "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" + +#~ msgid "DB名称" +#~ msgstr "DB名称" + +#~ msgid "支持通配符,多个请用 , 分隔" +#~ msgstr "支持通配符,多个请用 , 分隔" + +#~ msgid "回收类型配置" +#~ msgstr "回收类型配置" + +#~ msgid "回收类型" +#~ msgstr "回收类型" + +#~ msgid "账号清理" +#~ msgstr "账号清理" + +#~ msgid "权限清理" +#~ msgstr "权限清理" + +#~ msgid "回收DB名称" +#~ msgstr "回收DB名称" + +#~ msgid "权限清理时必填,支持通配符,多个请用 , 分隔" +#~ msgstr "权限清理时必填,支持通配符,多个请用 , 分隔" + +#~ msgid "回收表名" +#~ msgstr "回收表名" + +#~ msgid "回收权限" +#~ msgstr "回收权限" + +#~ msgid "用户名" +#~ msgstr "用户名" + +#~ msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" +#~ msgstr "若填写 all,可以实现清理发起访问IP的所有账号权限" + +#~ msgid "步骤参数" +#~ msgstr "步骤参数" + +#~ msgid "没选中作业模板或当前作业模板脚本步骤为空" +#~ msgstr "没选中作业模板或当前作业模板脚本步骤为空" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "步骤类型" +#~ msgstr "步骤类型" + +#~ msgid "屏蔽开始时间" +#~ msgstr "屏蔽开始时间" + +#~ msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" +#~ msgstr "请填写时间格式(%Y-%m-%d %H:%M:%S)" + +#~ msgid "屏蔽结束时间" +#~ msgstr "屏蔽结束时间" + +#~ msgid "集群名称" +#~ msgstr "集群名称" + +#~ msgid "模块名称" +#~ msgstr "模块名称" + +#~ msgid "主机操作系统" +#~ msgstr "主机操作系统" + +#~ msgid "主机认证方式" +#~ msgstr "主机认证方式" + +#~ msgid "内网IP" +#~ msgstr "内网IP" + +#~ msgid "请输入内网IP" +#~ msgstr "请输入内网IP" + +#~ msgid "外网IP" +#~ msgstr "外网IP" + +#~ msgid "请输入外网IP" +#~ msgstr "请输入外网IP" + +#~ msgid "SSH账号" +#~ msgstr "SSH账号" + +#~ msgid "SSH端口" +#~ msgstr "SSH端口" + +#~ msgid "SSH密码" +#~ msgstr "SSH密码" + +#~ msgid "请输入密码" +#~ msgstr "请输入密码" + +#~ msgid "SSH密钥" +#~ msgstr "SSH密钥" + +#~ msgid "请输入密钥" +#~ msgstr "请输入密钥" + +#~ msgid "TCM业务" +#~ msgstr "TCM业务" + +#~ msgid "模板" +#~ msgstr "模板" + +#~ msgid "参数" +#~ msgstr "参数" + +#~ msgid "步骤ID" +#~ msgstr "步骤ID" + +#~ msgid "语音" +#~ msgstr "语音" + +#~ msgid "扫描域名" +#~ msgstr "扫描域名" + +#~ msgid "群聊名称" +#~ msgstr "群聊名称" + +#~ msgid "群聊成员" +#~ msgstr "群聊成员" + +#~ msgid "企业微信群成员,多个以逗号分隔" +#~ msgstr "企业微信群成员,多个以逗号分隔" + +#~ msgid "推送消息" +#~ msgstr "推送消息" + +#~ msgid "员工英文名" +#~ msgstr "员工英文名" + +#~ msgid "选择集群和模块自动获取" +#~ msgstr "选择集群和模块自动获取" + +#~ msgid "输入集群名和模块名自动获取" +#~ msgstr "输入集群名和模块名自动获取" + +#~ msgid "值类型" +#~ msgstr "值类型" + +#~ msgid "DNS" +#~ msgstr "DNS" + +#~ msgid "服ID" +#~ msgstr "服ID" + +#~ msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" +#~ msgstr "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" + +#~ msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" +#~ msgstr "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" + +#~ msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" +#~ msgstr "服ID用于GCS原子自动获取域名,多个请用空格分隔" + +#~ msgid "多个用,分隔,all代表所有集群" +#~ msgstr "多个用,分隔,all代表所有集群" + +#~ msgid "多个用,分隔,all代表所有模块" +#~ msgstr "多个用,分隔,all代表所有模块" + #~ msgid "模板编辑" #~ msgstr "模板编辑" diff --git a/pipeline/admin.py b/pipeline/admin.py index 11771bb8c3..2161853434 100644 --- a/pipeline/admin.py +++ b/pipeline/admin.py @@ -31,10 +31,3 @@ class PipelineInstanceAdmin(admin.ModelAdmin): list_filter = ['is_started', 'is_finished', 'is_deleted'] search_fields = ['name'] raw_id_fields = ['template', 'snapshot', 'execution_snapshot'] - - -@admin.register(models.VariableModel) -class VariableModelAdmin(admin.ModelAdmin): - list_display = ['id', 'code', 'status'] - list_filter = ['status'] - search_fields = ['code', 'status'] diff --git a/pipeline/blueflow/.eslintrc.js b/pipeline/blueflow/.eslintrc.js deleted file mode 100644 index e91a0b95f3..0000000000 --- a/pipeline/blueflow/.eslintrc.js +++ /dev/null @@ -1,55 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ -module.exports = { - root: true, - parserOptions: { - parser: "babel-eslint", - ecmaVersion: 2017, - sourceType: 'module' - }, - env: { - browser: true, - }, - rules: { - "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0, - "arrow-parens": 0, - "no-empty": "error", - "no-extra-semi": "error", - "semi": ["error", "never"], - "generator-star-spacing": 0, - "no-unused-vars": 0, - "indent": ["error", 4, { - "SwitchCase": 1 - }], - "space-before-function-paren": ["error", { - "anonymous": "always", - "named": "always", - "asyncArrow": "always" - }], - "no-trailing-spaces": ["error", { - "skipBlankLines": true - }], - "comma-dangle": ["error", "never"], - "key-spacing": ["error", { - "beforeColon": false - }], - "keyword-spacing": ["error", { - "before": true, - "after": true - }], - "space-infix-ops": "error", - "spaced-comment": ["error", "always"], - }, - extends: [ - "plugin:vue/essential" - ] -} \ No newline at end of file diff --git a/pipeline/blueflow/src/App.vue b/pipeline/blueflow/src/App.vue deleted file mode 100644 index 9e896fa9ec..0000000000 --- a/pipeline/blueflow/src/App.vue +++ /dev/null @@ -1,121 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue b/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue deleted file mode 100644 index 6d85a81024..0000000000 --- a/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue +++ /dev/null @@ -1,162 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue b/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue deleted file mode 100644 index 1245a02823..0000000000 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue +++ /dev/null @@ -1,219 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue b/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue deleted file mode 100644 index ca20c972fe..0000000000 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue +++ /dev/null @@ -1,685 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue b/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue deleted file mode 100644 index ebc2168137..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue +++ /dev/null @@ -1,217 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue b/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue deleted file mode 100644 index 049dbf211e..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue +++ /dev/null @@ -1,346 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue deleted file mode 100644 index 380ed2cb8c..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue +++ /dev/null @@ -1,200 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue deleted file mode 100644 index b5a45e695f..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue +++ /dev/null @@ -1,358 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue deleted file mode 100644 index ded1db0640..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue +++ /dev/null @@ -1,215 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue b/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue deleted file mode 100644 index efd776457a..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue +++ /dev/null @@ -1,240 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue deleted file mode 100644 index d95c722c4f..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue +++ /dev/null @@ -1,356 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue deleted file mode 100644 index 1a174577a9..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue +++ /dev/null @@ -1,132 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue deleted file mode 100644 index 8863669015..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue +++ /dev/null @@ -1,101 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue deleted file mode 100644 index ba9bdfe935..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue +++ /dev/null @@ -1,229 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue deleted file mode 100644 index b8af4fa0c3..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue +++ /dev/null @@ -1,194 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue deleted file mode 100644 index 7e882b1c38..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue +++ /dev/null @@ -1,149 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - diff --git a/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue b/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue deleted file mode 100644 index e07ee0c59e..0000000000 --- a/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue +++ /dev/null @@ -1,359 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue b/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue deleted file mode 100644 index 91cad98d5a..0000000000 --- a/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue +++ /dev/null @@ -1,108 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/components/layout/Navigator.vue b/pipeline/blueflow/src/components/layout/Navigator.vue deleted file mode 100644 index 88fbee234d..0000000000 --- a/pipeline/blueflow/src/components/layout/Navigator.vue +++ /dev/null @@ -1,427 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/appmaker/index.vue b/pipeline/blueflow/src/pages/appmaker/index.vue deleted file mode 100644 index 9e503b6956..0000000000 --- a/pipeline/blueflow/src/pages/appmaker/index.vue +++ /dev/null @@ -1,286 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/audit/index.vue b/pipeline/blueflow/src/pages/audit/index.vue deleted file mode 100644 index 4bd1c69e6a..0000000000 --- a/pipeline/blueflow/src/pages/audit/index.vue +++ /dev/null @@ -1,534 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/functor/index.vue b/pipeline/blueflow/src/pages/functor/index.vue deleted file mode 100644 index 31e64eec73..0000000000 --- a/pipeline/blueflow/src/pages/functor/index.vue +++ /dev/null @@ -1,594 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/home/TaskPercentChart.vue b/pipeline/blueflow/src/pages/home/TaskPercentChart.vue deleted file mode 100644 index 30717705cc..0000000000 --- a/pipeline/blueflow/src/pages/home/TaskPercentChart.vue +++ /dev/null @@ -1,86 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/home/index.vue b/pipeline/blueflow/src/pages/home/index.vue deleted file mode 100644 index bc30c75488..0000000000 --- a/pipeline/blueflow/src/pages/home/index.vue +++ /dev/null @@ -1,296 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue b/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue deleted file mode 100644 index 8a9eaa03a9..0000000000 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue +++ /dev/null @@ -1,243 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue b/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue deleted file mode 100644 index 0f6c076c29..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue +++ /dev/null @@ -1,530 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - diff --git a/pipeline/blueflow/src/pages/statistics/Atom/index.vue b/pipeline/blueflow/src/pages/statistics/Atom/index.vue deleted file mode 100644 index 6cfb6024f2..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Atom/index.vue +++ /dev/null @@ -1,859 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/statistics/Instance/index.vue b/pipeline/blueflow/src/pages/statistics/Instance/index.vue deleted file mode 100644 index a574cb34d3..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Instance/index.vue +++ /dev/null @@ -1,855 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - diff --git a/pipeline/blueflow/src/pages/statistics/Template/index.vue b/pipeline/blueflow/src/pages/statistics/Template/index.vue deleted file mode 100644 index 3b829f52f3..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Template/index.vue +++ /dev/null @@ -1,690 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue b/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue deleted file mode 100644 index 256ced886e..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue +++ /dev/null @@ -1,519 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue b/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue deleted file mode 100644 index 0df9a50904..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue +++ /dev/null @@ -1,992 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/index.vue b/pipeline/blueflow/src/pages/task/TaskCreate/index.vue deleted file mode 100644 index 64116a04a2..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/index.vue +++ /dev/null @@ -1,179 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue deleted file mode 100644 index a67de82722..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue +++ /dev/null @@ -1,158 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue deleted file mode 100644 index 12dc11b534..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue +++ /dev/null @@ -1,187 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue b/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue deleted file mode 100644 index b1b542303a..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue +++ /dev/null @@ -1,188 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue b/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue deleted file mode 100644 index 89d51eb948..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue +++ /dev/null @@ -1,1414 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue deleted file mode 100644 index 95d0544ceb..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue +++ /dev/null @@ -1,197 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/index.vue b/pipeline/blueflow/src/pages/task/TaskExecute/index.vue deleted file mode 100644 index 9ca75c0fc3..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/index.vue +++ /dev/null @@ -1,138 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskParamEdit.vue b/pipeline/blueflow/src/pages/task/TaskParamEdit.vue deleted file mode 100644 index ecf0a13086..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskParamEdit.vue +++ /dev/null @@ -1,233 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue deleted file mode 100644 index c87557b0b6..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue +++ /dev/null @@ -1,1244 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue deleted file mode 100644 index 28f673f1bb..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue +++ /dev/null @@ -1,577 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue deleted file mode 100644 index 600c264dd6..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue +++ /dev/null @@ -1,407 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue deleted file mode 100644 index 8658277e36..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue +++ /dev/null @@ -1,252 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue deleted file mode 100644 index c107fdeaa4..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue +++ /dev/null @@ -1,610 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue deleted file mode 100644 index 43a0627b3b..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue +++ /dev/null @@ -1,878 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue deleted file mode 100644 index f8d75b76aa..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue +++ /dev/null @@ -1,180 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue deleted file mode 100644 index a95e36bb6c..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue +++ /dev/null @@ -1,472 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue deleted file mode 100644 index 2fc4cf3745..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue +++ /dev/null @@ -1,603 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ - - - - diff --git a/pipeline/builder/builder.py b/pipeline/builder/builder.py index 6b643e0255..6aeb81413b 100644 --- a/pipeline/builder/builder.py +++ b/pipeline/builder/builder.py @@ -17,6 +17,7 @@ from pipeline.utils.uniqid import uniqid from pipeline.core.constants import PE from pipeline.builder.flow.data import Data, Params +from pipeline.parser.utils import replace_all_id __all__ = [ 'build_tree' @@ -67,7 +68,7 @@ __incoming = '__incoming' -def build_tree(start_elem, id=None, data=None): +def build_tree(start_elem, id=None, data=None, replace_id=False): tree = copy.deepcopy(__skeleton) elem_queue = Queue.Queue() processed_elem = set() @@ -98,6 +99,8 @@ def build_tree(start_elem, id=None, data=None): tree[PE.id] = id or uniqid() user_data = data.to_dict() if isinstance(data, Data) else data tree[PE.data] = user_data or tree[PE.data] + if replace_id: + replace_all_id(tree) return tree @@ -152,20 +155,27 @@ def __grow(tree, elem): subprocess_param = elem.params.to_dict() if isinstance(elem.params, Params) else elem.params - tree[PE.activities][elem.id] = { + subprocess = { PE.id: elem.id, PE.incoming: tree[__incoming][elem.id], PE.name: elem.name, PE.outgoing: outgoing, PE.type: elem.type(), - PE.pipeline: build_tree( - start_elem=elem.start, - id=elem.id, - data=elem.data - ), PE.params: subprocess_param } + if elem.template_id: + subprocess[PE.template_id] = elem.template_id + else: + subprocess[PE.pipeline] = build_tree( + start_elem=elem.start, + id=elem.id, + data=elem.data, + replace_id=elem.replace_id + ) + + tree[PE.activities][elem.id] = subprocess + next_elem = elem.outgoing[0] __grow_flow(tree, outgoing, elem, next_elem) diff --git a/pipeline/builder/flow/activity.py b/pipeline/builder/flow/activity.py index d44e72fa91..3a8fe09cde 100644 --- a/pipeline/builder/flow/activity.py +++ b/pipeline/builder/flow/activity.py @@ -40,11 +40,21 @@ def component_dict(self): class SubProcess(Element): - def __init__(self, start, data=None, params=None, global_outputs=None, *args, **kwargs): + def __init__(self, + start=None, + data=None, + params=None, + global_outputs=None, + replace_id=False, + template_id=None, + *args, + **kwargs): self.start = start self.data = data self.params = params or {} + self.replace_id = replace_id self.global_outputs = FancyDict(global_outputs or {}) + self.template_id = template_id super(SubProcess, self).__init__(*args, **kwargs) def type(self): diff --git a/pipeline/builder/flow/base.py b/pipeline/builder/flow/base.py index 2039432b58..8959e41909 100644 --- a/pipeline/builder/flow/base.py +++ b/pipeline/builder/flow/base.py @@ -58,3 +58,8 @@ def type(self): def __eq__(self, other): return self.id == other.id + + def __repr__(self): + return u"<{cls} {name}:{id}>".format(cls=type(self).__name__, + name=self.name, + id=self.id) diff --git a/pipeline/builder/flow/data.py b/pipeline/builder/flow/data.py index 1fe40de631..8b8cab15ca 100644 --- a/pipeline/builder/flow/data.py +++ b/pipeline/builder/flow/data.py @@ -79,6 +79,7 @@ class NodeOutput(Var): def __init__(self, source_act, source_key, *args, **kwargs): self.source_act = source_act self.source_key = source_key + kwargs['value'] = None super(NodeOutput, self).__init__(*args, **kwargs) def to_dict(self): diff --git a/pipeline/component_framework/admin.py b/pipeline/component_framework/admin.py index c42f7fb4c0..7fad4f0289 100644 --- a/pipeline/component_framework/admin.py +++ b/pipeline/component_framework/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/component_framework/base.py b/pipeline/component_framework/base.py index 35632fa127..96b7dc6882 100644 --- a/pipeline/component_framework/base.py +++ b/pipeline/component_framework/base.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/component_framework/component.py b/pipeline/component_framework/component.py index 22d63c6bf8..a8e22096f8 100644 --- a/pipeline/component_framework/component.py +++ b/pipeline/component_framework/component.py @@ -29,6 +29,12 @@ def outputs_format(cls): outputs = map(lambda oi: oi._asdict(), outputs) return outputs + @classmethod + def inputs_format(cls): + inputs = cls.bound_service().inputs() + inputs = map(lambda ii: ii._asdict(), inputs) + return inputs + @classmethod def form_is_embedded(cls): return getattr(cls, 'embedded_form', False) diff --git a/pipeline/components/collections/examples.py b/pipeline/components/collections/examples.py index fd3fa173c0..ed52e3bc76 100644 --- a/pipeline/components/collections/examples.py +++ b/pipeline/components/collections/examples.py @@ -19,16 +19,34 @@ logger = logging.getLogger('celery') -if settings.ENABLE_EXAMPLE_COMPONENTS: +__register_ignore__ = not settings.ENABLE_EXAMPLE_COMPONENTS - class SimpleExampleService(Service): - def execute(self, data, parent_data): - return True - def outputs_format(self): - return [] +class SimpleExampleService(Service): + def execute(self, data, parent_data): + return True - class SimpleExampleComponent(Component): - name = u'example component' - code = 'example_component' - bound_service = SimpleExampleService + def outputs_format(self): + return [] + + +class SimpleExampleComponent(Component): + name = u'example component' + code = 'example_component' + bound_service = SimpleExampleService + + +class PipeExampleService(Service): + def execute(self, data, parent_data): + for key, val in data.inputs.iteritems(): + data.set_outputs(key, val) + return True + + def outputs_format(self): + return [] + + +class PipeExampleComponent(Component): + name = u'pipe example component' + code = 'pipe_example_component' + bound_service = PipeExampleService diff --git a/pipeline/conf/default_settings.py b/pipeline/conf/default_settings.py index f58bfeace2..cf13e28486 100644 --- a/pipeline/conf/default_settings.py +++ b/pipeline/conf/default_settings.py @@ -51,3 +51,5 @@ PIPELINE_PARSER_CLASS = getattr(settings, 'PIPELINE_PARSER_CLASS', 'pipeline.parser.pipeline_parser.PipelineParser') ENABLE_EXAMPLE_COMPONENTS = getattr(settings, 'ENABLE_EXAMPLE_COMPONENTS', False) + +UUID_DIGIT_STARTS_SENSITIVE = getattr(settings, 'UUID_DIGIT_STARTS_SENSITIVE', False) diff --git a/pipeline/contrib/web/forms.py b/pipeline/contrib/web/forms.py deleted file mode 100644 index 47ea265ffe..0000000000 --- a/pipeline/contrib/web/forms.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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 ujson as json -from django import forms - -from pipeline.models import PipelineTemplate, PipelineInstance, TemplateScheme -from pipeline.component_framework.models import ComponentModel -from pipeline.service import task_service - -from django.utils.translation import ugettext_lazy as _ - - -class PipelineTemplateForm(forms.ModelForm): - class Meta: - model = PipelineTemplate - exclude = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template_id'] - - -class PipelineInstanceForm(forms.ModelForm): - class Meta: - model = PipelineInstance - exclude = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template', 'is_finished', 'is_started', - 'finish_time', 'start_time', 'instance_id'] - - -class TemplateSchemeForm(forms.ModelForm): - class Meta: - model = TemplateScheme - exclude = ['edit_time'] - - -class ActivityIDField(forms.CharField): - def validate(self, value): - super(ActivityIDField, self).validate(value) - try: - task_service.get_single_state(value) - except Exception: - raise forms.ValidationError(_(u"无效的节点 ID"), code='invalid') - - -class InstanceIDField(forms.CharField): - def validate(self, value): - super(InstanceIDField, self).validate(value) - try: - PipelineInstance.objects.get(instance_id=value) - except Exception: - raise forms.ValidationError(_(u"无效的实例 ID"), code='invalid') - - -class TemplateIDField(forms.CharField): - def validate(self, value): - super(TemplateIDField, self).validate(value) - try: - PipelineTemplate.objects.get(template_id=value) - except Exception: - raise forms.ValidationError(_(u"无效的模板 ID"), code='invalid') - - -class InstanceActionForm(forms.Form): - instance_id = InstanceIDField(max_length=32) - - -class NodeActionForm(forms.Form): - node_id = ActivityIDField(max_length=32) - - -class ComponentCodeField(forms.CharField): - def validate(self, value): - super(ComponentCodeField, self).validate(value) - try: - ComponentModel.objects.get(code=value) - except Exception: - raise forms.ValidationError(_(u"无效的组件代码"), code='invalid') - - -class JSONField(forms.CharField): - def __init__(self, assert_type, *args, **kwargs): - self.assert_type = assert_type - super(JSONField, self).__init__(*args, **kwargs) - - def validate(self, value): - super(JSONField, self).validate(value) - try: - parsed = json.loads(value) - if self.assert_type and not isinstance(parsed, self.assert_type): - raise forms.ValidationError(_(u"该字段的类型必须为 %s") % self.assert_type, code='invalid') - except Exception: - raise forms.ValidationError(_(u"JSON 格式不合法"), code='invalid') - - -class ComponentFieldForm(forms.Form): - component_code = ComponentCodeField() - field = forms.CharField() - - -class RetryFieldsForm(forms.Form): - act_id = ActivityIDField() - component_code = ComponentCodeField() - - -class SubProcessFieldsForm(forms.Form): - template_id = TemplateIDField() - - -class ActivityInputsForm(forms.Form): - act_id = forms.CharField(max_length=32) - instance_id = InstanceIDField() - component_code = ComponentCodeField() - subprocess_stack = JSONField(assert_type=list) - - def clean_subprocess_stack(self): - return json.loads(self.cleaned_data['subprocess_stack']) - - -class InstanceConstantsModifyForm(forms.Form): - instance_id = InstanceIDField() - constants = JSONField(assert_type=dict) - - def clean_constants(self): - return json.loads(self.cleaned_data['constants']) - - -class TemplateCloneForm(forms.Form): - template_id = TemplateIDField() - - -class InstanceCloneForm(forms.Form): - instance_id = InstanceIDField() - creator = forms.CharField(max_length=32) - - -class ResetTimerForm(forms.Form): - node_id = forms.CharField(max_length=32) - inputs = JSONField(assert_type=dict) diff --git a/pipeline/contrib/web/models.py b/pipeline/contrib/web/models.py deleted file mode 100644 index 90524bb0e7..0000000000 --- a/pipeline/contrib/web/models.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" diff --git a/pipeline/contrib/web/urls.py b/pipeline/contrib/web/urls.py deleted file mode 100644 index 7049de3ec0..0000000000 --- a/pipeline/contrib/web/urls.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" - -from django.conf.urls import include, url -from tastypie.api import Api - -from pipeline.contrib.web.webresource.resource import (PipelineTemplateResource, - ComponentModelResource, - PipelineInstanceResource, - TemplateSchemeResource) -from pipeline.contrib.web import urls_v1, urls_web -from pipeline_plugins.components import urls - -v1_api = Api(api_name='v1') -v1_api.register(PipelineTemplateResource()) -v1_api.register(ComponentModelResource()) -v1_api.register(PipelineInstanceResource()) -v1_api.register(TemplateSchemeResource()) - - -urlpatterns = [ - url(r'^', include(urls_web)), - url(r'^api/', include(v1_api.urls)), - url(r'^api/v1/', include(urls_v1)), - url(r'^', include(urls)), -] diff --git a/pipeline/contrib/web/urls_v1.py b/pipeline/contrib/web/urls_v1.py deleted file mode 100644 index 098fc316e1..0000000000 --- a/pipeline/contrib/web/urls_v1.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" - -from django.conf.urls import url - -from pipeline.contrib.web import views_v1 - -urlpatterns = [ - # 实例操作:启动,暂停,撤销等 - url(r'^act/instances/(?P\w+)/$', views_v1.handle_instance_action), - - # 节点操作:重试,暂停,跳过等 - url(r'^act/nodes/(?P\w+)/$', views_v1.handle_node_action), - - # 查看实例的状态信息 - url(r'^status/$', views_v1.get_state), - - # 获取某个子流程的参数填写表单 - url(r'^form/sub_proc/$', views_v1.get_form_for_subproc), - - # # 获取某个节点重试时的参数填写表单 - # url(r'^form/act_retry/$', views_v1.get_form_for_retry), - - # 获取某个节点的输入和输出 - url(r'^data/act/$', views_v1.get_data_for_activity), - - # 获取某个节点的执行详情 - url(r'^detail/act/$', views_v1.get_detail_for_activity), - - # 获取一个模板的变量列表 - url(r'^data/constants/(?P\w+)/$', views_v1.get_constants_for_subproc), - - # 修改实例的输入 - url(r'^inputs/modify/instance/$', views_v1.modify_instance_constants), - - # 克隆一个模板 - url(r'^template/clone/$', views_v1.clone_template), - - # 克隆一个实例 - url(r'^instance/clone/$', views_v1.clone_instance), - - # 重置计时器 - url(r'^spec/timer/reset/$', views_v1.reset_timer), - - # 获取template的context信息 - url(r'^context/template/$', views_v1.get_template_context), - - # 获取instance的context信息 - url(r'^context/instance/$', views_v1.get_instance_context), - - # 获取某个节点的日志 - url(r'^log/node/(?P\w+)/$', views_v1.get_node_log), -] diff --git a/pipeline/contrib/web/views_v1.py b/pipeline/contrib/web/views_v1.py deleted file mode 100644 index 191e3719e6..0000000000 --- a/pipeline/contrib/web/views_v1.py +++ /dev/null @@ -1,414 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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 ujson as json -import traceback -import logging -import functools - -from django.http.response import JsonResponse, Http404 -from django.views.decorators.csrf import csrf_exempt -from django.utils import timezone - -from pipeline.exceptions import PipelineException -from pipeline.models import PipelineInstance, PipelineTemplate -from pipeline.contrib.web import forms -from pipeline.parser import pipeline_parser -from pipeline.service import task_service -from pipeline.component_framework import library -from pipeline.utils.context import get_pipeline_context -from pipeline.log.models import LogEntry - -from django.utils.translation import ugettext_lazy as _ - -logger = logging.getLogger('root') - -actions_for_instance = { - 'start': None, - 'pause': task_service.pause_pipeline, - 'resume': task_service.resume_pipeline, - 'revoke': task_service.revoke_pipeline -} - -actions_for_node = { - 'revoke': task_service.revoke_activity, - 'retry': task_service.retry_activity, - 'skip': task_service.skip_activity, - 'call_back': task_service.callback, - 'skip_exg': task_service.skip_exclusive_gateway, - 'pause': task_service.pause_activity, - 'resume': task_service.resume_activity, - 'pause_subproc': task_service.pause_pipeline, - 'resume_subproc': task_service.resume_pipeline, -} - - -def action_result(result, message, status=200, data=None): - ret_data = { - 'result': result, - 'message': message - } - if data is not None: - ret_data['data'] = data - return JsonResponse(status=status, data=ret_data) - - -def message_result(message, status=200): - return JsonResponse(status=status, data={ - 'message': message - }) - - -def post_form_validator(form_cls): - def decorate(func): - @functools.wraps(func) - def wrapper(request, *args, **kwargs): - form = form_cls(request.POST) - if not form.is_valid(): - return JsonResponse(status=400, data=form.errors) - setattr(request, 'form', form) - return func(request, *args, **kwargs) - - return wrapper - - return decorate - - -def get_form_validator(form_cls): - def decorate(func): - @functools.wraps(func) - def wrapper(request, *args, **kwargs): - form = form_cls(request.GET) - if not form.is_valid(): - return JsonResponse(status=400, data=form.errors) - setattr(request, 'form', form) - return func(request, *args, **kwargs) - - return wrapper - - return decorate - - -@csrf_exempt -@post_form_validator(forms.InstanceActionForm) -def handle_instance_action(request, action): - form = request.form.clean() - - if action not in actions_for_instance: - raise Http404() - - instance_id = form.get('instance_id') - - if action == 'start': - return start_pipeline(instance_id, request.user.username) - - try: - result = actions_for_instance[action](instance_id) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -def start_pipeline(instance_id, username): # get pipeline obj from parser - instance = PipelineInstance.objects.get(instance_id=instance_id) - try: - result = instance.start(username) - except PipelineException as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'Invalid pipeline data.', status=400) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - - if not result.result: - return action_result(result.result, result.message, status=400) - - return action_result(result.result, result.message) - - -@csrf_exempt -@post_form_validator(forms.NodeActionForm) -def handle_node_action(request, action): - if action not in actions_for_node: - raise Http404() - - if action == 'callback': - return activity_callback(request) - - form = request.form.clean() - node_id = form.get('node_id') - - inputs = request.POST.get('inputs', '{}') - flow_id = request.POST.get('flow_id', '') - try: - inputs = json.loads(inputs) - except Exception: - return action_result(False, 'Invalid inputs format.', status=400) - - kwargs = {} - kwargs = {'inputs': inputs} if inputs else kwargs - kwargs = {'flow_id': flow_id} if flow_id else kwargs - - try: - result = actions_for_node[action](node_id, **kwargs) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -def activity_callback(request): - form = request.form.clean() - node_id = form.get('node_id') - data = request.POST.get('data') - try: - data = json.loads(data) - except Exception: - return action_result(False, 'Invalid data format.', status=400) - - try: - result = task_service.callback(node_id, data) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -@csrf_exempt -def get_state(request): - instance_id = request.GET.get('instance_id') - try: - instance = PipelineInstance.objects.get(instance_id=instance_id) - if not instance.is_started: - return JsonResponse({ - "finish_time": None, - "state": "CREATED", - "retry": 0, - "start_time": None, - "children": {}}) - except PipelineInstance.DoesNotExist: - pass - - try: - state = task_service.get_state(instance_id) - return JsonResponse(state) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return JsonResponse(status=400, data={ - 'message': 'invalid activity id.' - }) - - -@csrf_exempt -def get_form_for_retry(request): - act_id = request.GET.get('act_id') - act_data = task_service.get_inputs(act_id) - return JsonResponse(act_data, safe=True) - - -@csrf_exempt -def get_form_for_subproc(request): - template_id = request.GET.get('template_id') - template = PipelineTemplate.objects.get(template_id=template_id) - - form = template.get_form() - outputs = template.get_outputs() - return JsonResponse({ - 'form': form, - 'outputs': outputs - }) - - -@csrf_exempt -def get_constants_for_subproc(request, template_id): - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except PipelineTemplate.DoesNotExist: - return JsonResponse(status=400, data={ - 'message': 'invalid template id.' - }) - - data = template.data - constants = data['constants'] - - outputs_key = data['outputs'] - outputs = {} - for key in outputs_key: - outputs[key] = data['constants'][key] - - return JsonResponse({ - 'constants': {k: c for k, c in constants.items() if constants[k]['show_type'] == 'show'}, - 'outputs': outputs - }) - - -def form_for_activity(form): - try: - inputs = task_service.get_inputs(form['act_id']) - outputs = task_service.get_outputs(form['act_id']) - except Exception: - subprocess_stack = form['subprocess_stack'] - act_id = form['act_id'] - instance_data = PipelineInstance.objects.get(instance_id=form['instance_id']).execution_data - inputs = pipeline_parser.WebPipelineAdapter(instance_data).get_act_inputs(act_id=act_id, - subprocess_stack=subprocess_stack) - outputs = {} - - component = library.ComponentLibrary.get_component_class(form['component_code']) - # append inputs - inputs_table = inputs - - # append outputs - outputs_table = [] - outputs_format = component.outputs_format() - for outputs_item in outputs_format: - value = outputs.get('outputs', {}).get(outputs_item['key'], '') - outputs_table.append({ - 'name': outputs_item['name'], - 'value': value - }) - - data = { - 'inputs': inputs_table, - 'outputs': outputs_table, - 'ex_data': outputs.get('ex_data', '') - } - return data - - -@csrf_exempt -@get_form_validator(forms.ActivityInputsForm) -def get_data_for_activity(request): - form = request.form.clean() - return JsonResponse(form_for_activity(form)) - - -@csrf_exempt -@get_form_validator(forms.ActivityInputsForm) -def get_detail_for_activity(request): - form = request.form.clean() - data = form_for_activity(form) - result = task_service.get_state(form['act_id']) - result.update(data) - result['histories'] = task_service.get_activity_histories(form['act_id']) - return JsonResponse(result) - - -@csrf_exempt -@post_form_validator(forms.InstanceConstantsModifyForm) -def modify_instance_constants(request): - form = request.form.clean() - instance_id = form['instance_id'] - instance = PipelineInstance.objects.get(instance_id=instance_id) - if instance.is_started: - return action_result(False, 'pipeline already started.', status=400) - - exec_data = instance.execution_data - for key, value in form['constants'].items(): - if key in exec_data['constants']: - exec_data['constants'][key]['value'] = value - instance.set_execution_data(exec_data) - - return action_result(True, 'success') - - -def clone_template(request): - template_id = request.GET.get('template_id') - - # clone template - template = PipelineTemplate.objects.get(template_id=template_id) - new_data = template.clone_data() - # name = template.name[10:] if len(template.name) >= MAX_LEN_OF_NAME - 10 else template.name - name = 'clone%s' % timezone.now().strftime('%Y%m%d%H%m%S') - - return action_result(True, 'success', data={'name': name, 'data': json.dumps(new_data)}) - - -@csrf_exempt -@post_form_validator(forms.InstanceCloneForm) -def clone_instance(request): - form = request.form.clean() - instance_id = form['instance_id'] - creator = form['creator'] - - instance = PipelineInstance.objects.get(instance_id=instance_id) - new_instance = instance.clone(creator=creator) - - return action_result(True, 'success', data={'new_instance_id': new_instance.instance_id}) - - -@csrf_exempt -@post_form_validator(forms.ResetTimerForm) -def reset_timer(request): - form = request.form.clean() - node_id = form['node_id'] - - result = task_service.forced_fail(node_id) - if not result.result: - return action_result(False, _(u"计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器")) - - inputs = form['inputs'] - result = task_service.retry_activity(node_id, inputs) - if not result.result: - return action_result(False, _(u"重试计时器失败,请稍后再次尝试")) - - return action_result(True, 'success') - - -@csrf_exempt -def get_template_context(request): - template_id = request.GET.get('template_id') - if template_id: - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except PipelineTemplate.DoesNotExist: - return action_result(False, 'PipelineTemplate object of template_id:%s does not exist' % template_id) - else: - template = None - context = get_pipeline_context(template, 'template') - return JsonResponse(context) - - -@csrf_exempt -def get_instance_context(request): - instance_id = request.GET.get('instance_id') - if instance_id: - try: - instance = PipelineInstance.objects.get(instance_id=instance_id) - except PipelineInstance.DoesNotExist: - return action_result(False, 'PipelineInstance object of instance_id:%s does not exist' % instance_id) - else: - instance = None - context = get_pipeline_context(instance, 'instance') - return JsonResponse(context) - - -@csrf_exempt -def get_node_log(request, node_id): - history_id = request.GET.get('history_id', -1) - - if not node_id: - return JsonResponse({ - 'result': False, - 'data': None, - 'message': 'node_id can not be None' - }) - - plain_log = LogEntry.objects.plain_log_for_node(node_id, history_id) - return JsonResponse({ - 'result': True if plain_log else False, - 'data': plain_log, - 'message': 'node with history_id(%s) does not exist or log already expired' % history_id if not plain_log - else '' - }) diff --git a/pipeline/contrib/web/views_web.py b/pipeline/contrib/web/views_web.py deleted file mode 100644 index a832ebef67..0000000000 --- a/pipeline/contrib/web/views_web.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" - -from django.shortcuts import render - - -def home(request): - """ - 首页 - """ - return render(request, 'pipeline/home.html') - - -def template(request): - """ - 模板 - """ - return render(request, 'pipeline/template.html') - - -def instance(request): - """ - 实例 - """ - return render(request, 'pipeline/instance.html') - - -def newtask(request): - """ - 新建任務 - """ - return render(request, 'pipeline/newtask.html') diff --git a/pipeline/contrib/web/webresource/resource.py b/pipeline/contrib/web/webresource/resource.py deleted file mode 100644 index 13cbec7c28..0000000000 --- a/pipeline/contrib/web/webresource/resource.py +++ /dev/null @@ -1,306 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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 ujson as json - -from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ -from tastypie.resources import ModelResource, ALL_WITH_RELATIONS -from tastypie import fields -from tastypie.authorization import Authorization -from tastypie.serializers import Serializer -from tastypie.validation import FormValidation -from tastypie.exceptions import ImmediateHttpResponse - -from pipeline import exceptions -from pipeline.models import PipelineTemplate, Snapshot, PipelineInstance, unfold_subprocess, TemplateScheme -from pipeline.utils.uniqid import node_uniqid -from pipeline.component_framework.models import ComponentModel -from pipeline.component_framework.library import ComponentLibrary -from pipeline.contrib.web import forms -from pipeline.validators.utils import validate_converge_gateway - - -def raise_validation_error(resource, bundle, resource_name, field, message): - bundle.errors = { - resource_name: { - field: [ - message - ] - } - } - raise ImmediateHttpResponse(response=resource.error_response(bundle.request, bundle.errors)) - - -class PipelineSerializer(Serializer): - - def format_datetime(self, data): - if timezone.is_aware(data): - data = timezone.localtime(data) - return data.strftime('%Y-%m-%d %H:%M:%S') - - -class SnapshotResource(ModelResource): - class Meta: - queryset = Snapshot.objects.all() - - -class PipelineTemplateResource(ModelResource): - data = fields.ForeignKey(SnapshotResource, 'snapshot') - - class Meta: - queryset = PipelineTemplate.objects.filter(is_deleted=False) - resource_name = 'templates' - excludes = ['is_deleted'] - always_return_data = True - detail_uri_name = 'template_id' - list_allowed_methods = ['get', 'post'] - detail_allowed_methods = ['get', 'patch', 'post', 'delete'] - filtering = { - 'template_id': ALL_WITH_RELATIONS, - } - - authorization = Authorization() - serializer = PipelineSerializer() - validation = FormValidation(form_class=forms.PipelineTemplateForm) - - def dehydrate_data(self, bundle): - return json.dumps(bundle.obj.snapshot.data) - - def hydrate(self, bundle): - pop_keys = ['template_id', 'create_time', 'edit_time', 'version'] - for key in pop_keys: - if key in bundle.data: - bundle.data.pop(key) - - return super(PipelineTemplateResource, self).hydrate(bundle) - - def obj_update(self, bundle, skip_errors=False, **kwargs): - json_data = bundle.data['data'] - try: - data = json.loads(json_data) - except Exception: - raise_validation_error(self, bundle, - 'templates', 'data', _(u"JSON 格式不合法")) - - result, msg = self.subprocess_ref_validate(bundle, - data, - root_id=bundle.obj.template_id, - root_name=bundle.obj.name) - if not result: - raise_validation_error(self, bundle, 'templates', 'data', msg) - self.gateway_validate(bundle, data) - - bundle.obj.snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - bundle.data.pop('data') - return super(PipelineTemplateResource, self).obj_update(bundle, skip_errors=skip_errors, **kwargs) - - def obj_create(self, bundle, **kwargs): - json_data = bundle.data.get('data') - try: - data = json.loads(json_data) - except Exception: - raise_validation_error(self, bundle, 'templates', 'data', _(u"JSON 格式不合法")) - - result, msg = self.subprocess_ref_validate(bundle, data) - if not result: - raise_validation_error(self, bundle, 'templates', 'data', msg) - self.gateway_validate(bundle, data) - - snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - kwargs['snapshot_id'] = snapshot.id - kwargs['template_id'] = node_uniqid() - # must pop data field after the creation of snapshot is finished. - bundle.data.pop('data') - - return super(PipelineTemplateResource, self).obj_create(bundle, **kwargs) - - def obj_delete(self, bundle, **kwargs): - template_id = kwargs['template_id'] - PipelineTemplate.objects.delete_model(template_id) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('id') - bundle.data.pop('data') - bundle.data.pop('description') - bundle.data['version'] = bundle.obj.pipeline_template.version - bundle.data['subprocess_has_update'] = bundle.obj.pipeline_template.subprocess_has_update - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - bundle.data.pop('id') - bundle.data['subprocess_version_info'] = bundle.obj.pipeline_template.subprocess_version_info - - return data - - def gateway_validate(self, bundle, data): - try: - validate_converge_gateway(data) - except exceptions.ConvergeMatchError as e: - raise_validation_error(self, bundle, 'templates', 'data', e.message) - - -class PipelineInstanceResource(ModelResource): - data = fields.ForeignKey(SnapshotResource, 'snapshot') - exec_data = fields.ForeignKey(SnapshotResource, 'execution_snapshot') - template = fields.ForeignKey(PipelineTemplateResource, 'template') - - pop_keys = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template', 'is_finished', 'is_started', - 'finish_time', 'start_time', 'instance_id', 'execution_snapshot'] - - class Meta: - queryset = PipelineInstance.objects.filter(is_deleted=False) - resource_name = 'instances' - excludes = ['is_deleted', 'id'] - always_return_data = True - detail_uri_name = 'instance_id' - list_allowed_method = ['get', 'post'] - detail_allowed_methods = ['get', 'patch', 'post', 'delete'] - filtering = { - 'template': ALL_WITH_RELATIONS, - } - - authorization = Authorization() - serializer = PipelineSerializer() - - def dehydrate_data(self, bundle): - return json.dumps(bundle.obj.snapshot.data) - - def dehydrate_exec_data(self, bundle): - return json.dumps(bundle.obj.execution_snapshot.data) - - def hydrate(self, bundle): - for key in self.pop_keys: - if key in bundle.data: - bundle.data.pop(key) - - return super(PipelineInstanceResource, self).hydrate(bundle) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('data') - bundle.data.pop('exec_data') - bundle.data.pop('description') - bundle.data.pop('template') - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - bundle.data.pop('template') - - return data - - def obj_create(self, bundle, **kwargs): - template_id = bundle.data.get('template_id') - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'template_id', _(u"模板不存在")) - - exec_data = bundle.data.get('exec_data') - try: - exec_data = json.loads(exec_data) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'exec_data', _(u"JSON 格式不合法")) - - # unfold subprocess - unfold_subprocess(exec_data) - instance_id = node_uniqid() - exec_data['id'] = instance_id - exec_snapshot, __ = Snapshot.objects.create_or_get_snapshot(exec_data) - kwargs['template_id'] = template.id - kwargs['instance_id'] = instance_id - kwargs['snapshot_id'] = template.snapshot.id - kwargs['execution_snapshot_id'] = exec_snapshot.id - bundle.data.pop('exec_data') - return super(PipelineInstanceResource, self).obj_create(bundle, **kwargs) - - def obj_update(self, bundle, skip_errors=False, **kwargs): - exec_data = bundle.data['exec_data'] - try: - data = json.loads(exec_data) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'exec_data', _(u"JSON 格式不合法")) - - bundle.obj.execution_snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - bundle.data.pop('exec_data') - bundle.data.pop('data') - return super(PipelineInstanceResource, self).obj_update(bundle, skip_errors=skip_errors, **kwargs) - - def obj_delete(self, bundle, **kwargs): - instance_id = kwargs['instance_id'] - PipelineInstance.objects.delete_model(instance_id) - - -class ComponentModelResource(ModelResource): - class Meta: - queryset = ComponentModel.objects.filter(status=True) - resource_name = 'components' - excludes = ['status', 'id'] - detail_uri_name = 'code' - limit = 0 - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - component = ComponentLibrary.get_component_class(bundle.data['code']) - bundle.data['output'] = component.outputs_format() - bundle.data['form'] = component.form - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - component = ComponentLibrary.get_component_class(bundle.data['code']) - bundle.data['output'] = component.outputs_format() - bundle.data['form'] = component.form - - return data - - -class TemplateSchemeResource(ModelResource): - template = fields.ForeignKey(PipelineTemplateResource, 'template') - - class Meta: - queryset = TemplateScheme.objects.all() - resource_name = 'schemes' - - filtering = { - 'template': ALL_WITH_RELATIONS, - } - authorization = Authorization() - validation = FormValidation(form_class=forms.TemplateSchemeForm) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('data') - - return data - - def obj_create(self, bundle, **kwargs): - template_id = bundle.data.get('template_id') - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except Exception: - raise_validation_error(self, bundle, - 'schemes', 'template_id', _(u"模板不存在")) - - kwargs['template'] = template - kwargs['unique_id'] = '%s-%s' % (template_id, bundle.data.get('name')) - return super(TemplateSchemeResource, self).obj_create(bundle, **kwargs) diff --git a/pipeline/core/data/var.py b/pipeline/core/data/var.py index e5fc13e03f..d0dfcbb1c3 100644 --- a/pipeline/core/data/var.py +++ b/pipeline/core/data/var.py @@ -99,13 +99,13 @@ def __unicode__(self): return self.__repr__() -class LazyVariableMeta(type): +class RegisterVariableMeta(type): def __new__(cls, name, bases, attrs): - super_new = super(LazyVariableMeta, cls).__new__ + super_new = super(RegisterVariableMeta, cls).__new__ # Also ensure initialization is only performed for subclasses of Model # (excluding Model class itself). - parents = [b for b in bases if isinstance(b, LazyVariableMeta)] + parents = [b for b in bases if isinstance(b, RegisterVariableMeta)] if not parents: return super_new(cls, name, bases, attrs) @@ -116,7 +116,7 @@ def __new__(cls, name, bases, attrs): raise exceptions.ConstantReferenceException("LazyVariable %s: code can't be empty." % new_class.__name__) - pre_variable_register.send(sender=LazyVariable, variable_cls=new_class, variable_code=new_class.code) + pre_variable_register.send(sender=LazyVariable, variable_cls=new_class) library.VariableLibrary.variables[new_class.code] = new_class @@ -124,7 +124,7 @@ def __new__(cls, name, bases, attrs): class LazyVariable(SpliceVariable): - __metaclass__ = LazyVariableMeta + __metaclass__ = RegisterVariableMeta def __init__(self, name, value, context, pipeline_data): super(LazyVariable, self).__init__(name, value, context) diff --git a/pipeline/core/flow/activity.py b/pipeline/core/flow/activity.py index e93a198835..8294b900c2 100644 --- a/pipeline/core/flow/activity.py +++ b/pipeline/core/flow/activity.py @@ -157,21 +157,28 @@ class Service(object): ScheduleResultAttr = '__schedule_finish__' ScheduleDetermineAttr = '__need_schedule__' + InputItem = namedtuple('InputItem', 'name key type required') OutputItem = namedtuple('OutputItem', 'name key type') interval = None _result_output = OutputItem(name=_(u'执行结果'), key='_result', type='bool') def __init__(self, name=None): self.name = name + self.interval = deepcopy(getattr(type(self), 'interval')) @abstractmethod def execute(self, data, parent_data): # get params from data pass - @abstractmethod def outputs_format(self): - pass + return [] + + def inputs_format(self): + return [] + + def inputs(self): + return self.inputs_format() def outputs(self): custom_format = self.outputs_format() diff --git a/pipeline/docs/api_reference/pipeline.service.task_service.md b/pipeline/docs/api_reference/pipeline.service.task_service.md new file mode 100644 index 0000000000..d3e726f27b --- /dev/null +++ b/pipeline/docs/api_reference/pipeline.service.task_service.md @@ -0,0 +1,238 @@ +## pipeline.service.task_service + +任务服务操作接口 + +### run_pipeline(pipeline) + +执行流程对象 + +#### 参数 + +- pipeline(Pipeline):流程对象 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### pause_pipeline(pipeline_id) + +暂停一个正在执行的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### revoke_pipeline(pipeline_id) + +撤销一个正在执行的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### resume_pipeline(pipeline_id) + +继续一个已经被暂停的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### pause_activity(act_id) + +预约暂停尚未被执行的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### resume_activity(act_id) + +继续一个被暂停的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### retry_activity(act_id, inputs=None) + +重试一个执行失败的 Activity 节点,若 `inputs` 不为空则使用传入的参数重试该节点。 + +#### 参数 + +- act_id(str):Activity 节点 ID +- inputs(dict):重试参数 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### skip_activity(act_id) + +跳过一个执行失败的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### skip_exclusive_gateway(gateway_id, flow_id) + +跳过一个执行失败的分支网关 + +#### 参数 + +- gateway_id(str):分支网关 ID +- flow_id(str):流程继续推进执行的顺序流 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### forced_fail(act_id) + +强制失败一个正在执行的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### get_state(node_id) + +获取某个节点的状态信息 + +#### 参数 + +- node_id(str):节点 ID + +#### 返回值 + +dict: +- children(dict):子节点状态信息 +- finish_time(str):节点完成时间 +- id(str):节点 ID +- loop(int):循环次数 +- name(str):节点名称 +- retry(int):重试次数 +- skip(book):是否跳过 +- start_time(str):开始时间 +- state(str):节点状态 + +### get_inputs(act_id) + +获取一个 Activity 节点的输入数据 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +dict:输入数据 + +### get_outputs(act_id) + +获取一个 Activity 节点的输出数据 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +dict: +- ex_data(str):异常信息 +- outputs(dict):输出数据 + +### get_activity_histories(act_id) + +获取一个 Activity 节点的执行历史 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +list(dict): +- started_time(str):开始时间 +- finished_time(str):完成时间 +- elapsed_time(int):执行耗时 +- inputs(dict):输入数据 +- outputs(dict):输出数据 +- ex_data(str):异常信息 +- loop(int):循环次数 +- skip(bool):是否跳过 + +### callback(act_id, data=None) + +回调一个正在等待回调的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID +- data(dict):回调数据 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 diff --git a/pipeline/docs/quick_start.md b/pipeline/docs/quick_start.md new file mode 100644 index 0000000000..d154f9fad0 --- /dev/null +++ b/pipeline/docs/quick_start.md @@ -0,0 +1,119 @@ + +## pipeline + +pipeline 是标准运维 v3 内部使用的任务调度引擎,其主要职责是解析,执行,管理由用户创建的流程任务,并提供了如暂停,撤销,跳过和重试等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。 + +## 起步 + +### 1. 初始化 + +由于 pipeline 依赖 Django ORM,所以必须作为一个 Django APP 嵌入到 Django 项目中使用。 + +首先将 pipeline,django_signal_valve 项目拷贝到当前 Django 目录下,并在 Django 工程的 `INSTALLED_APPS` 中添加以下 APP: + +```python +( + ... + 'pipeline', + 'pipeline.log', + 'pipeline.engine', + 'pipeline.component_framework', + 'django_signal_valve', + 'djcelery', + ... +) +``` + +并在 Django 工程根目录下运行 `python manage.py migrate` 初始化数据库。 + +### 2. 环境准备 + +由于 pipeline 在执行中需要使用到 redis,请保证 Django Settings 中配置了 redis 的访问方式,如下所示: + +```python +REDIS = { + 'host': 'localhost', + 'port': 6379, +} +``` + +在使用 pipeline 前,需要启动 redis,rabbitmq-server 以及 celery-worker。 + +### 3. 执行一个简单的流程 + +你只需要根据规范提供一个流程描述结构,并使用 `PipelineParser` 将其转换为 `Pipeline` 对象,当然,你也可以自己组装 `Pipeline` 对象,只不过这样会比较繁琐。下面的结构就描述了一个简单的流程,流程示意图如下: + +![simple example](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/simple_example.png) + +下面让我们创建出这个流程并让他跑起来: + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser +from pipeline.service import task_service + +# 使用 builder 构造出流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 根据流程描述结构创建流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +流程开始执行后,可以通过 `task_service.get_state` 接口获取流程当前执行状态: + +```bash +>>> task_service.get_state(pipeline.id) + +{'children': {u'5740b0a1f8b03f9fb82c3690a41c6b10': {'finish_time': '2019-03-27 06:56:16', + 'id': u'5740b0a1f8b03f9fb82c3690a41c6b10', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}, + u'6930365c0c73358dbefb9c2d25922e0f': {'finish_time': '2019-03-27 06:56:16', + 'id': u'6930365c0c73358dbefb9c2d25922e0f', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}, + u'd29a8ef1ec7f367e9724415e03de22ab': {'finish_time': '2019-03-27 06:56:16', + 'id': u'd29a8ef1ec7f367e9724415e03de22ab', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}}, + 'finish_time': '2019-03-27 06:56:16', + 'id': u'3a07e1b279a83df2bf15f6b094901303', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'} +``` + +> Tips:如果在调用 `task_service.get_state` 时跑出了 InvalidOperationException: node does not exist, may have not by executed 异常,请确认 Celery Worker 是否成功启动并接收到了任务,以及检查传递给 `task_service.get_state` 的节点 ID 是否正确。 + +可以看到,整个流程很快就执行完了,恭喜你,你已经成功的把一个流程运行起来了! + +### 接下来 + +- 基础概念 +- 流程编排 +- 流程构造器 +- 流程管理 +- 自定义组件 +- API Reference \ No newline at end of file diff --git a/pipeline/docs/user_guide_basic_concept.md b/pipeline/docs/user_guide_basic_concept.md new file mode 100644 index 0000000000..c9919a7387 --- /dev/null +++ b/pipeline/docs/user_guide_basic_concept.md @@ -0,0 +1,91 @@ + +## 基本概念 + +在进行进一步的了解和使用之前,让我们先来了解一下这个流程引擎中的一些基础概念。 + +## 流程对象 + +### pipeline + +在 pipeline 流程引擎中,单个流程被称为 pipeline,每个流程在引擎内部都会拥有一个与其对应的 `Pipeline` 对象,该对象存储了一个流程中的所有信息(流程结构,流程数据),同时,这个对象也是引擎中的核心对象,这个对象会作为流程执行的依据,`Pipeline` 对象对于流程引擎来说就好像 Python 字节码对于 Python 虚拟机一样。 + +## 流程元素 + +下面这些对象被称**流程元素,流程元素指的是一个流程对象的基本组成元素。** + +### event + +一个 `Pipeline` 对象至少会拥有两个事件,一个开始事件(`StartEvent`)和结束事件(`EndEvent`),开始事件的完成标志一个 `Pipeline` 对象的执行开始,而结束事件的完成则标志一个 `Pipeline` 的执行完成。 + +### activity + +一个 `Activity` 对象代表了某项活动,比如发起网络请求,操作数据库,执行命令等等,`Activity` 的行为通常由用户来定义。 + +### gateway + +gateway 在 `Pipeline` 对象中起到了引流的作用,网关会决定一个任务流程的执行走向和行为,如分支网关(`ExclusiveGateway`)决定了接下来需要引擎需要执行的路径,并行网关(`ParallelGateway`)会增加当前 `Pipeline` 对象的执行进程数,条件并行网关(`ConditionalParallelGateway`)会根据当前上下文的信息来判断当前 `Pipeline` 对象的增加的执行进程数,而汇聚网关(`ConvergeGateway`)则会减少当前 `Pipeline` 对象的执行进程数。 + +### subprocess + +子流程(`SubProcess`)是 `Pipeline` 对象中一种特殊的节点,当一个 `Pipeline` 对象作为另一个 `Pipeline` 对象的某个节点出现在其结构中,我们就把这个前者称为后者的子流程,通过使用子流程,开发者能够对 `Pipeline` 对象重用,减少重复编码。 + +### sequence flow + +每个节点之间的连线,pipeline 将其称为顺序流。 + +### 数据交换 + +## 数据对象 + +流程对象中每个节点都拥有一个数据对象,这个数据对象用于存储节点的输入和输出数据,每个节点之间的数据对象是相互隔离的,也就是说,节点1不能直接访问节点2的输出。 + +## 数据上下文 + +在整个流程执行的过程中,节点之前并不是完全孤立的,某些时候节点需要进行通信,例如,节点2需要获取节点1的执行结果,并根据该结果来决定接下来的行为,由于在一个流程中每个节点之间的数据是相互隔离的,无法在节点内实现对其他节点数据的直接访问,所以,每个流程会拥有一个用于进行节点通信和数据传递的数据上下文。 + +节点1能够将自己在执行过程中生成的某些数据写到数据上下文中,当其他节点需要使用的时候,只需要从数据上下文中获取这些数据即可。 + +数据对象与数据上下文之间的数据交换如下图所示: + +![数据上下文](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/data_context.png) + +> 为什么不能在节点中直接访问其他节点与上下文的数据?在节点中直接访问其他节点与上下文中的数据固然方便,但是这样可能会导致在实现组件时过度依赖当前上下文的结构与流程结构,从而破坏了组件的独立性与可复用性。pipeline 中的每种活动节点都是独立的个体,即:无论在什么结构下的流程中、在流程中的什么位置都能够正确的执行。 + +## DSL + +在 pipeline 流程引擎中,使用 JSON 作为一个流程结构的 DSL,这样的好处是足够的简单和通用,在 Quick Start 中我们通过流程构造器构造出了一个流程对象,流程构造器的职责就是使用 JSON 为我们生成一个流程的描述结构,然后引擎再根据这个描述结构来生成 `Pipeline` 对象。我们可以将 Quick Start 中构造的流程描述结构打印出来看一看: + +```bash +>>> tree = builder.build_tree(start) +>>> tree +{'activities': {'d29a8ef1ec7f367e9724415e03de22ab': {'component': {'code': 'example_component', + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'd29a8ef1ec7f367e9724415e03de22ab', + 'incoming': ['ee7124a9bcf337308aff8fcc0a674782'], + 'name': None, + 'optional': False, + 'outgoing': 'c43b3a60c86b36ac91e177b02abe7800', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '6930365c0c73358dbefb9c2d25922e0f', + 'incoming': ['c43b3a60c86b36ac91e177b02abe7800'], + 'name': None, + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'c43b3a60c86b36ac91e177b02abe7800': {'id': 'c43b3a60c86b36ac91e177b02abe7800', + 'is_default': False, + 'source': 'd29a8ef1ec7f367e9724415e03de22ab', + 'target': '6930365c0c73358dbefb9c2d25922e0f'}, + 'ee7124a9bcf337308aff8fcc0a674782': {'id': 'ee7124a9bcf337308aff8fcc0a674782', + 'is_default': False, + 'source': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'target': 'd29a8ef1ec7f367e9724415e03de22ab'}}, + 'gateways': {}, + 'id': '3a07e1b279a83df2bf15f6b094901303', + 'start_event': {'id': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'incoming': '', + 'name': None, + 'outgoing': 'ee7124a9bcf337308aff8fcc0a674782', + 'type': 'EmptyStartEvent'}} +``` diff --git a/pipeline/docs/user_guide_custom_component.md b/pipeline/docs/user_guide_custom_component.md new file mode 100644 index 0000000000..811cd08fb1 --- /dev/null +++ b/pipeline/docs/user_guide_custom_component.md @@ -0,0 +1,367 @@ +## 自定义组件 + +pipeline 开放了自定义组件的能力,开发者们能够开发针对某些特定业务场景的组件,将其添加到引擎的组件库中,并在 ServiceActivity 中调用他们。如之前的示例所示: + +```python +act = ServiceActivity(component_code='example_component') +``` + +### 开发一个自定义组件 + +#### 1. 使用 APP 统一管理你的组件 + +组件开发的最佳实践是创建一个独立的 APP,并在这个 APP 中单独管理自定义的组件和组件需要使用到的一些公共逻辑。pipeline 提供了快捷命令,能够让我们快速的创建一个用于存放自定义组件的 APP,在 Django 工程根目录下执行以下命令: + +```bash +$ python manage.py create_atoms_app custom_plugins +``` + +该命令会在 Django 工程根目录下生成拥有以下目录结构的 APP: + +```text +custom_plugins +├── __init__.py +├── components +│   ├── __init__.py +│   └── collections +│   ├── __init__.py +│   └── atom.py +├── migrations +│   └── __init__.py +└── static + └── custom_plugins + └── atom.js +``` + +别忘了把新创建的 APP 添加到 Django 配置的 `INSTALLED_APPS` 中: + +```python +INSTALLED_APPS = ( + ... + 'custom_plugins', + ... +) +``` + +#### 2. 编写 Service + +组件服务 `Service` 是组件的核心,`Service` 定义了组件被调用时执行的逻辑,下面让我们实现一个计算传入的参数 `n` 的阶乘,并把结果写到输出中的 `Service`,在 `custom_plugins/components/collections/atom.py` 中输入以下代码: + +```python +import math +from pipeline.core.flow.activity import Service + + +class FactorialCalculateService(Service): + + def execute(self, data, parent_data): + n = data.get_one_of_inputs('n') + if not isinstance(n, int): + data.outputs.ex_data = 'n must be a integer!' + return False + + data.outputs.factorial_of_n = math.factorial(n) + return True + + def inputs_format(self): + return [ + Service.InputItem(name='integer n', key='n', type='int', required=True) + ] + + def outputs_format(self): + return [ + Service.OutputItem(name='factorial of n', key='factorial_of_n', type='int') + ] + +``` + +首先我们继承了 `Service` 基类,并实现了 `execute()` 和 `outputs_format()` 这两个方法,他们的作用如下: + +- `execute`:组件被调用时执行的逻辑。接收 `data` 和 `parent_data` 两个参数,`data` 是当前节点的数据对象,这个数据对象存储了用户传递给当前节点的参数的值以及当前节点输出的值。`parent_data` 则是该节点所属流程对象的数据对象,通常会将一些全局使用的常量存储在该对象中,如当前流程的执行者、流程的开始时间等。 +- `outputs_format`:组件执行成功时输出的字段,每个字段都包含字段名、字段键及字段类型的说明。这个方法必须返回一个 `OutputItem` 的数组,返回的这些信息能够用于确认某个组件在执行成功时输出的数据,便于在流程上下文或后续节点中进行引用。 +- `inputs_format`:组件所需的输入字段,每个字段都包含字段名、字段键、字段类型及是否必填的说明。这个方法必须返回一个 `InputItem` 的数组,返回的这些信息能够用于确认某个组件需要获取什么样的输入数据。 + +下面我们来看一下 `execute()` 方法内部执行的逻辑,首先我们尝试从当前节点数据对象的输出中获取输入参数 `n`,如果获取到的参数不是一个 `int` 实例,那么我们会将异常信息写入到当前节点输出的 `ex_data` 字段中,**这个字段是引擎内部的保留字段,节点执行失败时产生的异常信息都应该写入到该字段中**。随后我们返回 `False` 代表组件本次执行失败,随后节点会进入失败状态: + +``` +n = data.get_one_of_inputs('n') +if not isinstance(n, int): + data.outputs.ex_data = 'n must be a integer!' + return False +``` + +若获取到的 `n` 是一个正常的 `int`,我们就调用 `math.factorial()` 函数来计算 `n` 的阶乘,计算完成后,我们会将结果写入到输出的 `factorial_of_n` 字段中,以供流程中的其他节点使用: + +``` +data.outputs.factorial_of_n = math.factorial(n) +return True +``` + +#### 3. 编写 Component + +完成 `Service` 的编写后,我们需要将其与一个 `Component` 绑定起来,才能够注册到组件库中: + +```python +from pipeline.component_framework.component import Component + +class FactorialCalculateComponent(Component): + name = 'FactorialCalculateComponent' + code = 'fac_cal_comp' + bound_service = FactorialCalculateService + +``` + +我们定义了一个继承自基类 `Component` 的类 `FactorialCalculateComponent`,他拥有以下属性: + +- `name`:组件名。 +- `code`:组件代码,这个代码必须是全局唯一的。 +- `bound_service`:与该组件绑定的 `Service`。 + +这样一来,我们就完成了一个自定义组件的开发。 + +#### 4. 执行一下刚刚编写的组件 + +完成组件的编写后,让我们在流程中执行以下刚刚编写好的组件验证以下: + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser +from pipeline.service import task_service + +# 使用 builder 构造出流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='fac_cal_comp') +act.component.inputs.n = Var(type=Var.PLAIN, value=4) +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 根据流程描述结构创建流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +可以看到,我们能够通过 `component_code` 来引用刚刚编写的组件,然后我们将该组件的输入 `n` 的值设置为 `4`: + +```python +act = ServiceActivity(component_code='fac_cal_comp') +act.component.inputs.n = Var(type=Var.PLAIN, value=4) +``` + +流程运行完后,获取节点的执行结果,可以看到,该节点输出了 `factorial_of_n`,并且值为 24(4 * 3 * 2 *1),这正是我们需要的效果: + +```bash +>>> task_service.get_outputs(act.id) +{'ex_data': None, + 'outputs': {'_loop': 0, '_result': True, 'factorial_of_n': 24}} +``` + +### 组件的行为 + +我们在上一节中定义的 `FactorialCalculateService` 在完成 `execute()` 的执行后即认为该组件已经执行完成。但是在某些场景下,这样的行为并不能满足我们的需求,例如调用第三方系统的接口启动一个任务,并周期性的轮询该任务的状态,随后根据任务状态确认执行结果;或是调用第三方系统启动任务后等待第三方系统回调并根据回调数据确认执行结果。 + +为了满足上述的场景,pipeline 中的组件执行时的行为有以下三种: + +- 单次执行:默认的执行方式,完成 `execute()` 的执行后即认为该组件已经执行完毕。 +- 周期性轮询:完成 `execute()` 的执行后,还会周期性的执行 `schedule()` 方法,直至满足一定的条件为止。 +- 等待回调:完成 `execute()` 的执行后,会等待外部回调,接收到回调后会执行一次 `schedule()` 方法。 + +总结起来,组件的执行方式可以用一条公式概括: `execute + n * schedule`。 + + +#### 单次执行 + +这是组件默认的执行方式,在这种模式下,一旦 `execute()` 方法执行完成后,该组件即视为执行完成。执行结果会根据 `execute()` 的返回值来判断: + +- `False`:执行失败,节点会进入 FAILED 状态。 +- `True` 或 `None`:执行成功,节点会进入 FINISHED 状态。 + +#### 周期性轮询 + +如果我们需要周期性的轮询第三方平台的接口,那么可以使用周期性轮询的执行方式,下面的代码定义了一个周期性轮询的组件服务: + +```python +from pipeline.core.flow.activity import Service, StaticIntervalGenerator + +class ScheduleService(Service): + __need_schedule__ = True + interval = StaticIntervalGenerator(2) + + + def _get_poll_url(self): + pass + + def _poll_status(self, poll_url): + pass + + def execute(self, data, parent_data): + poll_url = self._get_poll_url() + data.outputs.poll_url = poll_url + return True + + def schedule(self, data, parent_data, callback_data=None): + + poll_url = data.get_one_of_outputs('poll_url') + status = self._poll_status(poll_url) + + if status == 0: + self.finish_schedule() + elif status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True + + +``` + +让我们来拆分一下这个组件服务的定义,一个周期性轮询组件服务必须包含两个类属性: + + - `__need_schedule__`: 表示当前组件服务是否需要调度,周期性轮询的方式下必须将该字段设置为 `True` + - `interval`:轮询间隔生成器,周期性轮询方式下该字段必须为 `AbstractIntervalGenerator` 的子类。 + + +我们在 `execute()` 中调用第三方系统获取了用于轮询的 `poll_url`,并将其写入到输出中(**如果在 `execute()` 方法中返回了 `False`,那么当前节点会进入 FAILED 状态,不会进入之后的轮询阶段**): + +```python + def execute(self, data, parent_data): + poll_url = self._get_poll_url() + data.outputs.poll_url = poll_url + return True +``` + +下面看看 `schedule()` 方法的定义,该方法接收三个参数: + +- `data`: 当前节点的数据对象,这个数据对象存储了用户传递给当前节点的参数的值以及当前节点输出的值。 +- `parent_data`: 该节点所属流程对象的数据对象。 +- `callback_data`:回调数据,在等待回调模式下由第三方系统传入的数据。 + +我们在 `schedule()` 方法中,使用在 `execute()` 中设置到输出中的 `poll_url` 来轮询第三方系统的状态,并根据其返回值来决定该次轮询的结果: + +- `True`:当次轮询成功,若轮询已完成则节点会进入 FINISHED 状态,否则仍然处于 RUNNING 状态,等待进入下次轮询。 +- `False`:当次轮询失败,节点会进入 FAILED 状态。 + +当轮询完成后,即可调用 `finish_schedule()` 方法: + +```python + def schedule(self, data, parent_data, callback_data=None): + + poll_url = data.get_one_of_outputs('poll_url') + status = self._poll_status(poll_url) + + if status == 0: + self.finish_schedule() + elif status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +下面让我们了解一下轮询间隔生成器,间隔生成器必须拥有 `next()` 方法,该方法返回一个整数,代表每次轮询时间的时间间隔,单位为秒。一般我们会继承 `AbstractIntervalGenerator` 来定义新的生成器。下面的代码定义了一个间隔线性增长的生成器,轮询时间间隔会根据轮询次数的增长而增长: + +```python +from pipeline.core.flow.activity import AbstractIntervalGenerator + +class LinearIntervalGenerator(AbstractIntervalGenerator): + def next(self): + super(DefaultIntervalGenerator, self).next() + return self.count + +``` + +`AbstractIntervalGenerator` 中的 `count` 属性表示本次轮询的轮次,**在实现自定义的 `next()` 方法时一定要调用父类的 `next()` 方法**。 + +#### 等待回调 + +如果第三方系统提供了回调机制,那我们就可以将组件服务设置为等待回调的模式: + +```python +from pipeline.core.flow.activity import Service + +class WaitCallbackService(Service): + __need_schedule__ = True + + def _external_api_call(self): + pass + + def execute(self, data, parent_data): + self._external_api_call() + return True + + def schedule(self, data, parent_data, callback_data=None): + + status = self.callback_data['status'] + + if status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +让我们来拆分一下这个组件服务的定义,一个等待回调型组件服务必须包含这个类属性: + +- `__need_schedule__`: 表示当前组件服务是否需要调度,等待回调的方式下必须将该字段设置为 `True` + +等待回调型的组件服务于周期轮询型的差异在于 `interval` 这个类属性,周期轮训型的服务该属性的值为间隔生成器,而回调型的服务该属性的值为 `None`。 + +我们在 `execute()` 方法中只做了一次 api 调用,然后就进入了等待回调的状态(**如果在 `execute()` 方法中返回了 `False`,那么当前节点会进入 FAILED 状态,不会进入之后的等待回调阶段**): + +```python + def execute(self, data, parent_data): + self._external_api_call() + return True +``` + +在 `schedule()` 方法中,我们检测第三方系统回调时传入的数据,来判断本次执行是否成功: + +```python + def schedule(self, data, parent_data, callback_data=None): + + status = self.callback_data['status'] + + if status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +### 组件的注册 + +pipeline 会扫描每个已经注册到 Django 中的 APP 下特定的目录来寻找用户定义的组件,这些被扫描的目录能够通过 Django settings 下的 `COMPONENT_PATH` 进行配置: + +```python +... +COMPONENT_PATH = [ + 'path.to.components', + ... +] +... +``` + +而 pipeline 还会尝试扫描已注册 APP 的 `components.collections` 目录,尝试从该目录下所有的 Python 模块中寻找用户定义的组件。 + +现在回过头来看看我们之前创建的 APP,其目录结构与 pipeline 默认扫描的路径一致,所以我们在 `custom_plugins.components.collections.atom` 模块中定义的组件就会自动的被注册到组件库中: + +```text +custom_plugins +├── __init__.py +├── components +│   ├── __init__.py +│   └── collections +│   ├── __init__.py +│   └── atom.py +├── migrations +│   └── __init__.py +└── static + └── custom_plugins + └── atom.js +``` \ No newline at end of file diff --git a/pipeline/docs/user_guide_flow_builder.md b/pipeline/docs/user_guide_flow_builder.md new file mode 100644 index 0000000000..ae62117e11 --- /dev/null +++ b/pipeline/docs/user_guide_flow_builder.md @@ -0,0 +1,283 @@ + +## 流程构造器 + +回到 Quick Start 中的例子,可以看到,流程对象的生成分为两个步骤: + +1. 构造流程描述结构 +2. 根据流程描述结构生成 `Pipeline` 对象 + + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser + +# 1. 构造流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 2. 根据流程描述结构生成流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +流程构造器的职责是降低我们构造流程描述结构的成本,可以看到上面的例子中构造的流程只有三个节点,但是通过这三个节点生成的描述结构却十分的复杂: + +```bash +>>> tree = builder.build_tree(start) +>>> tree +{'activities': {'d29a8ef1ec7f367e9724415e03de22ab': {'component': {'code': 'example_component', + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'd29a8ef1ec7f367e9724415e03de22ab', + 'incoming': ['ee7124a9bcf337308aff8fcc0a674782'], + 'name': None, + 'optional': False, + 'outgoing': 'c43b3a60c86b36ac91e177b02abe7800', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '6930365c0c73358dbefb9c2d25922e0f', + 'incoming': ['c43b3a60c86b36ac91e177b02abe7800'], + 'name': None, + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'c43b3a60c86b36ac91e177b02abe7800': {'id': 'c43b3a60c86b36ac91e177b02abe7800', + 'is_default': False, + 'source': 'd29a8ef1ec7f367e9724415e03de22ab', + 'target': '6930365c0c73358dbefb9c2d25922e0f'}, + 'ee7124a9bcf337308aff8fcc0a674782': {'id': 'ee7124a9bcf337308aff8fcc0a674782', + 'is_default': False, + 'source': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'target': 'd29a8ef1ec7f367e9724415e03de22ab'}}, + 'gateways': {}, + 'id': '3a07e1b279a83df2bf15f6b094901303', + 'start_event': {'id': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'incoming': '', + 'name': None, + 'outgoing': 'ee7124a9bcf337308aff8fcc0a674782', + 'type': 'EmptyStartEvent'}} +``` + +如果要手动去拼接这样的一个结构,这简直就是一个灾难,所以,使用流程构造器能够大大的降低我们构造复杂流程的成本。 + +## 构造元素 + +要使用流程构造器,首先我们需要创建构造流程时要使用到的构造元素,**构造元素指的是*流程元素*的替代对象**,每个构造元素都拥有一个到流程元素的唯一映射,且构造元素拥有与其所对应的流程元素相同的类名。下面所展示的代码片段中创建除了三个流程元素:`start`,`act` 及 `end`。 + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser + +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() +``` + +目前可用的构造元素(等同于可用的流程元素)如下所示: + +- event 类型 + - `EmptyStartEvent`:空开始事件。 + - `EmptyEndEvent`:空结束事件。 +- activity 类型 + - `ServiceActivity`:服务活动。 + - `SubProcess`:子流程。 +- gateway 类型 + - `ParallelGateway`:并行网关。 + - `ExclusiveGateway`:分支网关。 + - `ConditionalParallelGateway`:条件并行网关。 + - `ConvergeGateway`:汇聚网关。 + +## 连接构造元素 + +当我们创建好了构造元素之后,我们还需要将这些构造元素根据我们的需要连接起来,构造元素提供了若干方法来帮助我们应对各种场景下的元素连接操作。 + + +### extend + +`extend()` 方法会创建一条从调用者到传入元素的连接,并返回作为参数传入的构造元素: + + + +```bash +>>> from pipeline.builder import ServiceActivity +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') + +>>> act_1.extend(act_2) + +``` + +通过使用 `extend()` 链式调用能够快速构造出一个简单的串行流程: + +```bash +>>> from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +>>> start = EmptyStartEvent(name='start') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> end = EmptyEndEvent(name='end') + +>>> start.extend(act_1).extend(act_2).extend(act_3).extend(end) + + +``` + +### connect + +`connect()` 方法能够接收多个构造元素作为参数,并为每一个传入的构造元素构建一条由调用者到该元素的连接,并返回当前调用对象。当我们要构造的流程中含有分支或是并行结构时,这个方法能够帮助我们快速构造出这样的结构: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') + +>>> parallel_gateway.connect(act_1, act_2, act_3) + + +>>> parallel_gateway.outgoing +[, + , + ] +``` + +### converge + +`converge()` 方法会将所有从调用者出发的连接汇聚到传入的节点上,并返回该节点,使用 `converge()` 能够快速的实现从网关发散出去的连接的汇聚操作: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway, ConvergeGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> act_4 = ServiceActivity(name='act_4') +>>> converge_gateway = ConvergeGateway(name='converge_gateway') + +>>> act_3.extend(act_4) + + +>>> parallel_gateway.connect(act_1, act_2, act_3) + + +>>> parallel_gateway.converge(converge_gateway) + + +>>> for act in [act_1, act_2, act_4]: + print(act.outgoing) +[] +[] +[] +``` + +### to + +`to()` 方法是一个辅助方法,其内部什么都不做,只会原封不动的返回传入的构造元素。使用 `to()` 方法能够让我们在链式调用的过程中改变方法的调用者: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway, ConvergeGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> act_4 = ServiceActivity(name='act_4') + +>>> parallel_gateway.connect(act_1, act_2) \ + .to(act_1).extend(act_3) \ + .to(act_2).extend(act_4) + + +>>> parallel_gateway.outgoing +[, + ] + +>>> act_1.outgoing +[] + +>>> act_2.outgoing +[] +``` + +## 生成流程描述结构 + +当完成了构造元素的连接后,我们就能够通过构造元素来生成描述结构了,使用 `build_tree()` 函数,传入开始事件节点,流程构造器就会返回由这些构造元素连接成的流程描述结构: + +```bash +>>> from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent, build_tree +>>> start = EmptyStartEvent(name='start') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> end = EmptyEndEvent(name='end') + +>>> start.extend(act_1).extend(act_2).extend(act_3).extend(end) + + +>>> build_tree(start_elem=start) +{'activities': {'15b9a9ffcd7d3d289cb99886c4b66aa0': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': '15b9a9ffcd7d3d289cb99886c4b66aa0', + 'incoming': ['df79daafd73c36f3965a2f8b36058aa5'], + 'name': 'act_1', + 'optional': False, + 'outgoing': 'd67e43325e3b389cba471562bd7e2a73', + 'type': 'ServiceActivity'}, + '7c3cfddb114c35ecbe18b88f5a519c58': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': '7c3cfddb114c35ecbe18b88f5a519c58', + 'incoming': ['d67e43325e3b389cba471562bd7e2a73'], + 'name': 'act_2', + 'optional': False, + 'outgoing': 'abf3d80c6e363156bc4076c7dd0324c4', + 'type': 'ServiceActivity'}, + 'ffe2edb847e335c5861d35c747d6d5f9': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'ffe2edb847e335c5861d35c747d6d5f9', + 'incoming': ['abf3d80c6e363156bc4076c7dd0324c4'], + 'name': 'act_3', + 'optional': False, + 'outgoing': 'c12f7f231c353d3ab5762fe6a18f7efb', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '05c932bb9d8735729c6aaf1aba52ee53', + 'incoming': ['c12f7f231c353d3ab5762fe6a18f7efb'], + 'name': 'end', + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'abf3d80c6e363156bc4076c7dd0324c4': {'id': 'abf3d80c6e363156bc4076c7dd0324c4', + 'is_default': False, + 'source': '7c3cfddb114c35ecbe18b88f5a519c58', + 'target': 'ffe2edb847e335c5861d35c747d6d5f9'}, + 'c12f7f231c353d3ab5762fe6a18f7efb': {'id': 'c12f7f231c353d3ab5762fe6a18f7efb', + 'is_default': False, + 'source': 'ffe2edb847e335c5861d35c747d6d5f9', + 'target': '05c932bb9d8735729c6aaf1aba52ee53'}, + 'd67e43325e3b389cba471562bd7e2a73': {'id': 'd67e43325e3b389cba471562bd7e2a73', + 'is_default': False, + 'source': '15b9a9ffcd7d3d289cb99886c4b66aa0', + 'target': '7c3cfddb114c35ecbe18b88f5a519c58'}, + 'df79daafd73c36f3965a2f8b36058aa5': {'id': 'df79daafd73c36f3965a2f8b36058aa5', + 'is_default': False, + 'source': 'c582a8976e673ac39db8519a75f8baaa', + 'target': '15b9a9ffcd7d3d289cb99886c4b66aa0'}}, + 'gateways': {}, + 'id': '3149bd721e94377e8baee990e9fc4622', + 'start_event': {'id': 'c582a8976e673ac39db8519a75f8baaa', + 'incoming': '', + 'name': 'start', + 'outgoing': 'df79daafd73c36f3965a2f8b36058aa5', + 'type': 'EmptyStartEvent'}} +``` \ No newline at end of file diff --git a/pipeline/docs/user_guide_flow_management.md b/pipeline/docs/user_guide_flow_management.md new file mode 100644 index 0000000000..33da5bbd05 --- /dev/null +++ b/pipeline/docs/user_guide_flow_management.md @@ -0,0 +1,228 @@ +## 流程管理 + +在前面的章节中,我们学习了如何编排流程以及如何通过流程构造器来快速构造流程描述结构。但是在实际应用中,我们的流程结构一般不会经常发生变化,如果每次执行一个流程都要重新执行一遍流程构造逻辑未免过于麻烦。 + +好在 pipeline 提供了流程管理模型,通过使用**流程模板**和**流程实例**,能够让我们将流程管理的成本降到最低。 + +### 流程模板 + +![分支网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/exclusive_gateway.png) + +假设我们要将上述流程存储起来,并在用户发起执行操作时根据用户传入的参数来执行该流程,如果我们不使用流程模板的话,我们就需要在每次用户发起执行动作时执行以下代码: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +也就是说,我们需要每次都要进行一个流程编排的操作,但是我们的流程结构时不变的,这一步操作就显得有些多余了。但是借助**流程模板**的话,我们就不需要每次都进行流程构造的操作,我们要做的是把一个流程的结构数据保存下来,并在每次执行前根据这个结构化的数据生成流程对象: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + DataInput, + NodeOutput) +from pipeline.models import PipelineTemplate + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = DataInput(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) + +template = PipelineTemplate.objects.create_model(structure_data=tree) +template.template_id # adab2df7cca73e898f2f6c688aa37e24 +same_template = PipelineTemplate.objects.get(template_id=template.template_id) +template.template_id == same_template.template_id # True +``` + +至此,我们就完成了一个流程模板的创建,并且该模板已经被持久到数据库中。 + +### 流程实例 + +当我们拥有了流程模板后,我们就能够通过流程模板来创建流程实例。模板和实例的关系就像是面向对象设计中类和对象的关系,模板描述了一个流程的基本信息,而实例则是根据模板中所描述的信息创建出来的一个“快照”,实例在创建时会根据模板中存储的流程结构数据生成一份新的结构数据并保存下来。 + +```bash +>>> from pipeline.service import task_service +>>> from pipeline.models import PipelineTemplate +>>> template = PipelineTemplate.objects.get(template_id='adab2df7cca73e898f2f6c688aa37e24') +>>> instance = template.gen_instance(inputs={'${input_a}': -1}) +>>> instance.start(executor='me') +>>> task_service.get_state(instance.instance_id) +{'children': {u'583b521fc677309fba0216d0c04928c4': {'finish_time': '2019-04-17 07:49:00', + 'id': u'583b521fc677309fba0216d0c04928c4', + 'loop': 1L, + 'name': u'act_2 or act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'765d2b31fd273571af7bea8f5fdbd5f2': {'finish_time': '2019-04-17 07:49:00', + 'id': u'765d2b31fd273571af7bea8f5fdbd5f2', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'a055740f3a4b3e46b06bb70ff40592fb': {'finish_time': '2019-04-17 07:49:00', + 'id': u'a055740f3a4b3e46b06bb70ff40592fb', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'ad178c995d0d373e8ca13fbc2fdb048f': {'finish_time': '2019-04-17 07:49:00', + 'id': u'ad178c995d0d373e8ca13fbc2fdb048f', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'b7ffc956b27f3e3f90ba5d4803648550': {'finish_time': '2019-04-17 07:49:00', + 'id': u'b7ffc956b27f3e3f90ba5d4803648550', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}}, + 'finish_time': '2019-04-17 07:49:00', + 'id': u'1f898831a9483708851c5802aff526fa', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'} +``` + +可以看到,我们通过 `instance = template.gen_instance(inputs={'${input_a}': -1})` 来根据模板创建除了流程实例,并修改了流程实例的全局变量;随后,我们调用 `instance` 的 `start()` 方法来启动该流程。 + +这样一来,一旦我们创建了模板,每次执行流程只需要通过该模板生成一个新的实例并启动即可,同时,流程实例也能够降低我们管理已执行的流程的成本。 + +### 使用流程模板来管理子流程 + +使用流程模板来管理流程还有一个好处,即我们能够通过流程模板的 ID 来构造子流程,下面的例子就很好的展示了如何使用已有的流程模板来构造子流程: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + SubProcess, + Var, + Data, + Params, + NodeOutput) +from pipeline.models import PipelineTemplate + +start = EmptyStartEvent() +params = Params({ + '${input_a}': Var(type=Var.SPLICE, value='${constant_1}') + }) +subproc = SubProcess(template_id='adab2df7cca73e898f2f6c688aa37e24', params=params) +end = EmptyEndEvent() + +start.extend(subproc).extend(end) + +pipeline_data = Data() +pipeline_data.inputs['${constant_1}'] = Var(type=Var.PLAIN, value=-1) + +tree = builder.build_tree(start, data=pipeline_data) + +template = PipelineTemplate.objects.create_model(structure_data=tree) +instance = template.gen_instance() +instance.start(executor='me') +``` + +我们可以把注意力重点放在下面这两行代码上,首先我们创建了一个 `Params` 对象,`Params` 对象允许我们在子流程中引用父流程数据上下文中的变量,下面的代码中我们就创建了一个从子流程中的 `${input_a}` 变量到父流程中 `${constant_1}` 变量的引用。 + +然后,我们建立了一个子流程节点,这个子流程节点直接引用了模板 ID 为 `adab2df7cca73e898f2f6c688aa37e24` 的模板,这里我们直接省去了子流程结构的声明,因为子流程的结构已经存储在流程模板中了。 + +```python +params = Params({ + '${input_a}': Var(type=Var.SPLICE, value='${constant_1}') + }) +subproc = SubProcess(template_id='adab2df7cca73e898f2f6c688aa37e24', params=params) +``` + +最后我们将构造出来的流程结构保存到了一个新的模板中。其实我们可以把构造出来的流程结构打印出来看看: + +```python +{'activities': {'aa3148edbe0e3ac4ac85d60aebbeed4d': {'id': 'aa3148edbe0e3ac4ac85d60aebbeed4d', + 'incoming': ['7bdd64f816f337c4985e55a10d0da10f'], + 'name': None, + 'outgoing': '28e3c65105ae3d868479cc2c99c398fd', + 'params': {'${input_a}': {'type': 'splice', 'value': '${constant_1}'}}, + 'template_id': 'adab2df7cca73e898f2f6c688aa37e24', + 'type': 'SubProcess'}}, + ...} +``` + +不难发现,在子流程节点中我们只存储了模板 ID,而流程实例会在执行前去查询该节点所引用的模板的流程结构,并把这些结构添加到当前流程的结构中,就像我们之前手动构造的子流程节点一样。 + diff --git a/pipeline/docs/user_guide_flow_orchestration.md b/pipeline/docs/user_guide_flow_orchestration.md new file mode 100644 index 0000000000..22f0b6c7e2 --- /dev/null +++ b/pipeline/docs/user_guide_flow_orchestration.md @@ -0,0 +1,567 @@ +## 如何编排流程 + +在开始使用流程引擎之前,我们要先了解一下如何才能够编排出我们想要的流程。 + +### 开始与结束 + +在一个合法的流程中,开始事件和结束事件是必须存在的,也就是说,我们其实是在开始事件节点与结束事件节点之间自由的定义我们的流程结构,然后再将这些节点连接起来: + +```python +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent + +start = EmptyStartEvent() +act_1 = ServiceActivity() +act_2 = ServiceActivity() +... +end = EmptyEndEvent() + + +start.extend(act1) \ + .extend(act2) \ + ... \ + .extend(end) + +``` + +### 活动 + +活动是流程中最重要的元素,活动节点中能够执行任意的逻辑,例如(发起网络请求,操作数据库,执行命令等等),流程中活动节点的类型及其编排的顺序就决定了这个流程的能力,在 pipeline 中,活动本身是没有定义自身的行为的,其通过与**组件**进行绑定从而获得组件执行的能力,你可以通过开发自定义组件来扩充活动节点的能力范围,pipeline 中的每一个组件都拥有一个唯一的 `code`,通过这个 `code`,在 Quick Start 的例子中,活动通过与 `code` 为 example_component 的组件绑定而获得了该组件的执行能力: + +```python +from pipeline.builder import ServiceActivity + +act = ServiceActivity(component_code='example_component') +``` + +pipeline 提供的 example_component 这个组件在执行的过程中什么都不做: + +```python +class SimpleExampleService(Service): + def execute(self, data, parent_data): + return True + + def outputs_format(self): + return [] + +class SimpleExampleComponent(Component): + name = u'example component' + code = 'example_component' + bound_service = SimpleExampleService +``` + +关于自定义组件的知识,在后续的章节中会详细说明。 + +### 网关 + +网关在流程执行的过程中起到了引流的作用,同时,网关可能会改变流程的执行模式。目前 pipeline 中可用的网关及其作用如下: + + - 分支网关:分支网关可以发散出多条顺序流,每条顺序流会与一个布尔表达式进行绑定,当流程执行到分支网关时,引擎会在当前流程的数据上下文中执行该分支网关中的分支表达式,引擎会选择与第一个结果为真的表达式所绑定的顺序流往下继续执行,分支网关并不会改变流程的执行模式。 + - 并行网关:并行网关可以发散出多条顺序流,同时其会改变当前流程的执行模式,当流程执行到并行网关时,流程会进入并行执行的模式,此时并行网关后的每一条分支会被同时执行,直到其遇到一个汇聚网关。pipeline 中同一个并行网关发散的所有分支都必须汇聚到同一个汇聚网关中。 + - 条件并行网关:条件并行网关可以发散出多条顺序流,并且每条顺序流也会与一个布尔表达式绑定,同时其会改变当前流程的执行模式,当流程执行到条件并行网关时,流程会进入并行执行的模式,但是此时引擎只会执行在当前数据上下文中布尔表达式结果为真的分支。 + - 汇聚网关:汇聚网关能够连接多条输入顺序流,并只能输出一条顺序流。汇聚网关的作用是将其他网关发散出去的多条顺序流汇聚成一条顺序流。 + +#### 并行网关 + +并行网关允许我们让流程的执行进入并行执行的状态,系列代码创建了一个包含三个活动节点(act_1, act_2, act_3)及一个并行网关的流程,并行网关后的 act_1, act_2, act_3 会被引擎并行执行: + +![并行网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/parallel_gateway_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ParallelGateway, + ConvergeGateway) + +start = EmptyStartEvent() +pg = ParallelGateway() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +cg = ConvergeGateway() +end = EmptyEndEvent() + +start.extend(pg).connect(act_1, act_2, act_3).to(pg).converge(cg).extend(end) + +tree = builder.build_tree(start) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +这里需要注意的是,并行网关发散出去的所有分支最后都要汇聚到同一个汇聚网关中,上述代码中的 `to(pg).converge(cg)` 调用实现了这个操作。 + +#### 分支网关 + +分支网关允许我们通过当前流程数据上下文中的数据来决定之后流程执行的方向,下列代码创建了一个包含三个活动节点(act_1, act_2, act_3)及一个分支网关的流程,分支网关会根据 act_1 节点输出到数据上下文中的变量来判断接下来是执行 act_2 还是 act_3 节点: + +![分支网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/exclusive_gateway.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +我们一步步来看这个流程的声明,首先我们创建了绑定了 pipe_example_component 组件的活动节点,该组件会把其接收到的输入参数原封不动的写到当前节点的输出中: + +```python +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +``` + +然后我们创建了分支网关,并设定了其要绑定到输出顺序流中的布尔表达式,`condition` 字段接收一个字典,该字典表示将 value 指定的表达式绑定到第 key 个输出顺序流上,示例中的 `condition` 表示将 `${act_1_output} < 0` 表达式绑定到分支网关的第 `0` 个输出顺序流上。 + +```python +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +``` + +然后我们完成了流程的编排(分支网关输出顺序流的排列与节点的连接顺序相关,`connect(act_2, act_3)` 调用中参数传递的顺序决定了 `eg -> act_2` 为 eg 的第0个输出顺序流): + +```python +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) +``` + +完成了流程的编排后,我们需要配置这个流程中数据交互的方式,我们需要做两件事情: + +- 配置 act_1 的输入 +- 配置 act_1 到流程数据上下文的输出 + +首先,我们为 act_1 配置了一个 key 为 `input_a` 的输入参数,该参数会引用流程上下中的 `${input_a}` 变量: + +```python +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') +``` + +然后,我们创建了一个初始的流程数据上下文,并为其设置了一个值为 `0` key 为 `${input_a}` 的全局变量: + +```python +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +``` + +随后,我们声明了一个 key 为 `${act_1_output}` 的全局变量,该变量是对 act_1 输出数据中 key 为 `input_a` 的变量的引用: + +```python +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') +``` + +下图展示了这个流程中数据交换的过程: + +![数据交换](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/eg_data_exchange.png) + +后面就是构造流程描述结构、创建流程对象并执行了: + +```python +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +执行后获取流程状态可以看到,只有 act_2 与 act_3 中只有 act_3 执行了(`'${act_1_output} >= 0'` 绑定的 `eg -> act_3` 顺序流): + +```bash +>>> task_service.get_state(pipeline.id) +{ + ... + u'bdb6de805a183c18a131ea49509197b8': {'finish_time': '2019-03-28 08:08:54', + 'id': u'bdb6de805a183c18a131ea49509197b8', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:08:53', + 'state': 'FINISHED'}, + u'e5bce7ca4da63f6da89e47d012e2773c': {'finish_time': '2019-03-28 08:08:53', + 'id': u'e5bce7ca4da63f6da89e47d012e2773c', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:08:53', + 'state': 'FINISHED'}, + ... + }, + ... +} +``` + +把流程上下文中的全局变量 `${input_a}` 的值改为 `-1` 后再次执行上述代码,可以看到这次只有 act_2 与 act_3 中只有 act_2 执行了: + +```bash +>>> task_service.get_state(pipeline.id) +{ + ... + u'191e41ec8c06365f8d30a06b331ed533': {'finish_time': '2019-03-28 08:20:22', + 'id': u'191e41ec8c06365f8d30a06b331ed533', + 'loop': 1L, + 'name': u'act_2', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:20:22', + 'state': 'FINISHED'}, + u'efd7e68f479438f9941103a89a2130f4': {'finish_time': '2019-03-28 08:20:22', + 'id': u'efd7e68f479438f9941103a89a2130f4', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:20:22', + 'state': 'FINISHED'} + ... +} +``` + +如果分支网关中的所有表达式执行结果都不为真,那么流程会进入执行失败的状态。 + +#### 条件并行网关 + +条件并行网关允许我们只并行执行部分在当前上下文下满足特定条件的分支: + +![条件并行网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/conditional_pg_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ConditionalParallelGateway, + ConvergeGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +cpg = ConditionalParallelGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0', + 2: '${act_1_output} >= 0' + }, + name='[act_2] or [act_3 and act_4]' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +act_4 = ServiceActivity(component_code='pipe_example_component', name='act_4') +cg = ConvergeGateway() +end = EmptyEndEvent() + +start.extend(act_1).extend(cpg).connect(act_2, act_3, act_4).to(cpg).converge(cg).extend(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +首先,创建条件并行与创建分支网关类似,都需要为输出顺序流按序绑定布尔表达式: + +```python +cpg = ConditionalParallelGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0', + 2: '${act_1_output} >= 0' + }, + name='[act_2] or [act_3 and act_4]' +) +``` + +由于条件并行网关会改变流程的执行模式,所以最后还是需要将其发散出去的分支汇聚到同一个汇聚网关上: + +```python +extend(cpg).connect(act_2, act_3, act_4).to(cpg).converge(cg) +``` + +查看流程执行状态,可以发现只有 act_3 与 act_4 被执行了: + +```bash +>>> task_service.get_state(pipeline.id) +{'children': {u'377d513285963a40951eea983e62f899': {'finish_time': '2019-03-28 13:48:43', + 'id': u'377d513285963a40951eea983e62f899', + 'loop': 1L, + 'name': u'act_4', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'45d24e4595dd32b3ab65feddc73a75c3': {'finish_time': '2019-03-28 13:48:43', + 'id': u'45d24e4595dd32b3ab65feddc73a75c3', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'a4ee2f04cbdb3e87a5563f2907d5c42f': {'finish_time': '2019-03-28 13:48:43', + 'id': u'a4ee2f04cbdb3e87a5563f2907d5c42f', + 'loop': 1L, + 'name': u'[act_2] or [act_3 and act_4]', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'bacfee844f313c7285b0e3f83f187745': {'finish_time': '2019-03-28 13:48:43', + 'id': u'bacfee844f313c7285b0e3f83f187745', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + ... + } +} +``` + +同样的,如果条件并行网关中的所有表达式执行结果都不为真,那么流程会进入执行失败的状态。 + +### 子流程 + +子流程允许我们将一个包含多个节点的复杂操作放在一个节点中执行,子流程通常用于做公共流程的抽离,你可以将子流程理解为编程语言中的函数,通过将一些重复的执行逻辑放到子流程中,能够减少重复逻辑的编排: + +![子流程示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/subprocess_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + SubProcess, + Var, + Data, + NodeOutput) + + +subproc_start = EmptyStartEvent() +subproc_act = ServiceActivity(component_code='pipe_example_component', name='sub_act') +subproc_end = EmptyEndEvent() + +subproc_start.extend(subproc_act).extend(subproc_end) + +subproc_act.component.inputs.sub_input = Var(type=Var.SPLICE, value='${sub_input}') + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) + +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) + +sub_pipeline_data_2 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=2)}) +subproc_2 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_2) +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(subproc_1, subproc_2).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +首先我们创建了一个子流程,为了简单说明子流程的作用,示例中的子流程只有一个活动节点,这个节点只有一个 `sub_input` 变量,该变量引用了流程数据上下文中的 `${sub_input}` 变量,也就是说,subproc_act 节点的输出会随着 `${sub_input}` 的变化而变化: + +```python +subproc_start = EmptyStartEvent() +subproc_act = ServiceActivity(component_code='pipe_example_component', name='sub_act') +subproc_end = EmptyEndEvent() + +subproc_start.extend(subproc_act).extend(subproc_end) + +subproc_act.component.inputs.sub_input = Var(type=Var.SPLICE, value='${sub_input}') +``` + +随后,我们创建了一个带有分支网关的流程,这个流程会根据 act_1 节点的输出来选择 subproc_1 或 subproc_2 其中一个子流程执行: + +```python +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) + +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) + +sub_pipeline_data_2 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=2)}) +subproc_2 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_2) +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(subproc_1, subproc_2).converge(end) +``` + +这里需要说明一下子流程的声明方式,首先我们为子流程创建了一个数据上下文对象,这一步与流程对象的数据上下文声明一致,因为子流程本质上也是一个流程对象: + +```python +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +``` + +之后,我们创建了一个子流程节点,这个子流程节点接受子流程的开始节点,ID 替换标志和数据上下文对象。这里需要额外说明的是 `replace_id` 这个参数,由于在引擎中,所有的流程(已执行和未执行的)中的每个节点的 ID 都必须是唯一的,但是每个节点的 ID 在节点创建完成后就不会改变了,所以如果我们在一个流程中需要复用同一个子流程的话,就需要将该子流程中所有的节点 ID 进行一次替换防止节点 ID 冲突: + +```python +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) +``` + +在流程描述结构生成之后我们可以查看两个子流程中 sub_act 节点的 ID 与 subproc_act 创建时生成的 ID 互不相同: + +```bash +>>> subproc_act.id +'4befcdac9a3d39abb6f55dcb11c1e284' +>>> for act in tree['activities'].values(): + if act['type'] == 'SubProcess': + for act in act['pipeline']['activities'].values(): + if act['name'] == 'sub_act': + print act['id'] +6cba092689af3a57b2679143685dbcde +8db1749af5343ab598fe9fe46d80e234 +``` + +### 流程结构合法性 + +通过使用流程构造器,我们能够构造任意结构的流程,但是在 pipeline 流程引擎中,并不是所有的流程结构都是合法的处于引擎实现上的一些考虑,我们对流程的合法性从三个角度进行了限制: + +- 节点合法性 +- 网关配对合法性 +- 流程合法性 + +只有同时满足以上三种合法性规则的流程才算是一个合法的流程。 + +### 节点合法性 + +节点合法性是对流程中每个节点的出入度的限制: + +- StartEvent + - 入度:`0` + - 出度:`1` +- EndEvent + - 入度:`>= 1` + - 出度:`0` +- ServiceActivity + - 入度:`>= 1` + - 出度:`1` +- SubProcess + - 入度:`>= 1` + - 出度:`1` +- ParallelGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ConditionalParallelGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ExclusiveGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ConvergeGateway + - 入度:`>= 1` + - 出度:`1` + +### 网关配对合法性 + +在了解网关配对的概念前先了解正向边和反向边的概念: + +正向顺序流:源节点与开始节点的最远距离**小于**目标节点与开始节点的距离的顺序流 + +反向顺序流:源节点与开始节点的最远距离**大于**目标节点与开始节点的距离的顺序流 + +分支网关和并行只会与其正向顺序流所能够到达的汇聚网关进行匹配,只有其反向顺序流能够到达的汇聚网关不会被视为该网关匹配的汇聚网关。 + +例如,下图中的汇聚网关2不会被视与分支网关6匹配的的汇聚网关,但其会作为分支网关2的汇聚网关: + +![网关配对](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/gateway_match.png) + +在这个前提下,合法的网关的配对必须满足: + +- 并行网关必须且只能与一个汇聚网关进行配对,且汇聚网关只能与一个并行网关进行匹配,与并行网关匹配的汇聚网关必须汇聚该并行网关创建出的所有分支。 +- 分支网关可以且只能与一个汇聚网关进行匹配,也可以不进行匹配,没有匹配汇聚网关的分支网关被称为悬挂分支。(分支网关之间或分支网关与并行网关可以共享汇聚网关) + + +### 流程合法性 + +流程合法性保证了流程在执行的过程中流程合法推进。 + +由开始节点发散出的分支被称为主分支。 + +所有由并行网关发散出的分支被称为并行分支,并行网关发散出的每一个并行分支彼此之间会被判定为不同的分支。 + +流程不能改变分支的属性,分支的属性只能通过网关来进行改变,如通过并行网关将主分支扩展成多个并行分支,通过汇聚网关将来自同一个并行网关的并行分支合并成主分支。 diff --git a/pipeline/engine/admin.py b/pipeline/engine/admin.py index af01985072..7d9109e57b 100644 --- a/pipeline/engine/admin.py +++ b/pipeline/engine/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/engine/api.py b/pipeline/engine/api.py index 854110a779..45b52fb131 100644 --- a/pipeline/engine/api.py +++ b/pipeline/engine/api.py @@ -430,22 +430,6 @@ def get_activity_histories(node_id): return History.objects.get_histories(node_id) -def get_single_state(node_id): - """ - get state for single node - :param node_id: - :return: - """ - s = Status.objects.get(id=node_id) - return { - 'state': s.state, - 'started_time': s.started_time, - 'finished_time': s.archived_time, - 'retry': s.retry, - 'skip': s.skip - } - - @_frozen_check @_node_existence_check def forced_fail(node_id, kill=False, ex_data=''): diff --git a/pipeline/engine/core/runtime.py b/pipeline/engine/core/runtime.py index 2d91e373bb..3c81c48a87 100644 --- a/pipeline/engine/core/runtime.py +++ b/pipeline/engine/core/runtime.py @@ -17,11 +17,12 @@ from pipeline.core.flow.activity import SubProcess from pipeline.engine import states -from pipeline.engine.models import Status, NodeRelationship, FunctionSwitch +from pipeline.engine.models import Status, NodeRelationship, FunctionSwitch, NAME_MAX_LENGTH from pipeline.engine.core.handlers import FLOW_NODE_HANDLERS from pipeline.conf import settings as pipeline_settings logger = logging.getLogger('celery') + RERUN_MAX_LIMIT = pipeline_settings.PIPELINE_RERUN_MAX_TIMES @@ -74,7 +75,7 @@ def run_loop(process): return # try to transit current node to running state - name = (current_node.name or str(current_node.__class__))[:64] + name = (current_node.name or str(current_node.__class__))[:NAME_MAX_LENGTH] action = Status.objects.transit(id=current_node.id, to_state=states.RUNNING, start=True, name=name) # check rerun limit diff --git a/pipeline/engine/models/core.py b/pipeline/engine/models/core.py index 257dd7ba66..246ab14c4c 100644 --- a/pipeline/engine/models/core.py +++ b/pipeline/engine/models/core.py @@ -35,7 +35,9 @@ from pipeline.conf import settings as pipeline_settings logger = logging.getLogger('celery') + RERUN_MAX_LIMIT = pipeline_settings.PIPELINE_RERUN_MAX_TIMES +NAME_MAX_LENGTH = 64 class ProcessSnapshotManager(models.Manager): @@ -694,8 +696,8 @@ def states_for(self, id_list): def prepare_for_pipeline(self, pipeline): cls_str = str(pipeline.__class__) - cls_name = pipeline.__class__.__name__[:64] - self.create(id=pipeline.id, state=states.READY, name=cls_str if len(cls_str) <= 64 else cls_name) + cls_name = pipeline.__class__.__name__[:NAME_MAX_LENGTH] + self.create(id=pipeline.id, state=states.READY, name=cls_str if len(cls_str) <= NAME_MAX_LENGTH else cls_name) def fail(self, node, ex_data): action_res = self.transit(node.id, states.FAILED) @@ -807,7 +809,7 @@ def lock(self, id): class Status(models.Model): id = models.CharField(_(u"节点 ID"), unique=True, primary_key=True, max_length=32) state = models.CharField(_(u"状态"), max_length=10) - name = models.CharField(_(u"节点名称"), max_length=64, default='') + name = models.CharField(_(u"节点名称"), max_length=NAME_MAX_LENGTH, default='') retry = models.IntegerField(_(u"重试次数"), default=0) loop = models.IntegerField(_(u"循环次数"), default=1) skip = models.BooleanField(_(u"是否跳过"), default=False) @@ -946,7 +948,7 @@ def update_celery_info(self, id, lock, celery_id, schedule_date, is_scheduling=F class ScheduleService(models.Model): SCHEDULE_ID_SPLIT_DIVISION = 32 - id = models.CharField(_(u"ID 节点ID+version"), max_length=64, unique=True, primary_key=True) + id = models.CharField(_(u"ID 节点ID+version"), max_length=NAME_MAX_LENGTH, unique=True, primary_key=True) activity_id = models.CharField(_(u"节点 ID"), max_length=32, db_index=True) process_id = models.CharField(_(u"Pipeline 进程 ID"), max_length=32) schedule_times = models.IntegerField(_(u"被调度次数"), default=0) @@ -1073,7 +1075,7 @@ def start_task(self, schedule_id, start_func, kwargs): class ScheduleCeleryTask(models.Model): - schedule_id = models.CharField(_(u"schedule ID"), max_length=64, unique=True, db_index=True) + schedule_id = models.CharField(_(u"schedule ID"), max_length=NAME_MAX_LENGTH, unique=True, db_index=True) celery_task_id = models.CharField(_(u"celery 任务 ID"), max_length=40, default='') objects = ScheduleCeleryTaskManager() diff --git a/pipeline/engine/utils.py b/pipeline/engine/utils.py index 63153e6773..25df95d416 100644 --- a/pipeline/engine/utils.py +++ b/pipeline/engine/utils.py @@ -60,3 +60,16 @@ def __init__(self, result, message, extra=None): self.result = result self.message = message self.extra = extra + + def _as_dict(self): + return { + 'result': self.result, + 'message': self.message, + 'extra': self.extra + } + + def __repr__(self): + return self._as_dict().__repr__() + + def __str__(self): + return self._as_dict().__str__() diff --git a/pipeline/contrib/web/migrations/0002_auto_20180206_1955.py b/pipeline/migrations/0019_delete_variablemodel.py similarity index 79% rename from pipeline/contrib/web/migrations/0002_auto_20180206_1955.py rename to pipeline/migrations/0019_delete_variablemodel.py index 1db6c2735c..d19a2490ab 100644 --- a/pipeline/contrib/web/migrations/0002_auto_20180206_1955.py +++ b/pipeline/migrations/0019_delete_variablemodel.py @@ -10,7 +10,7 @@ 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. """ -# Generated by Django 1.11.2 on 2018-02-06 19:55 + from __future__ import unicode_literals from django.db import migrations @@ -19,15 +19,11 @@ class Migration(migrations.Migration): dependencies = [ - ('pipeline.contrib.web', '0001_initial'), + ('pipeline', '0018_set_has_subprocess'), ] operations = [ - migrations.RemoveField( - model_name='instancescheme', - name='template', - ), migrations.DeleteModel( - name='InstanceScheme', + name='VariableModel', ), ] diff --git a/pipeline/models.py b/pipeline/models.py index 17dfed1582..bc6edaafac 100644 --- a/pipeline/models.py +++ b/pipeline/models.py @@ -393,15 +393,17 @@ def update_template(self, structure_data, **kwargs): setattr(self, key, value) self.save() - def gen_instance(self, **kwargs): + def gen_instance(self, inputs=None, **kwargs): """ 使用该模板创建实例 + @param inputs: 自定义输入 @param kwargs: 其他参数 @return: 实例对象 """ return PipelineInstance.objects.create_instance( template=self, exec_data=copy.deepcopy(self.data), + inputs=inputs, **kwargs ) @@ -507,13 +509,14 @@ class TemplateScheme(models.Model): class InstanceManager(models.Manager): - def create_instance(self, template, exec_data, spread=False, **kwargs): + def create_instance(self, template, exec_data, spread=False, inputs=None, **kwargs): """ 创建流程实例对象 @param template: 流程模板 @param exec_data: 执行用流程数据 @param spread: exec_data 是否已经展开 @param kwargs: 其他参数 + @param inputs: 自定义输入 @return: 实例对象 """ if not spread: @@ -521,6 +524,12 @@ def create_instance(self, template, exec_data, spread=False, **kwargs): else: PipelineTemplate.objects.replace_id(exec_data) + inputs = inputs or {} + + for key, val in inputs.items(): + if key in exec_data['data']['inputs']: + exec_data['data']['inputs'][key]['value'] = val + instance_id = node_uniqid() exec_data['id'] = instance_id exec_snapshot, _ = Snapshot.objects.create_or_get_snapshot(exec_data) @@ -775,20 +784,3 @@ def calculate_tree_info(self, save=False): if save: self.save() - - -class VariableModel(models.Model): - """ - 注册的变量 - """ - code = models.CharField(_(u"变量编码"), max_length=255, unique=True) - status = models.BooleanField(_(u"变量是否可用"), default=True) - - class Meta: - verbose_name = _(u"Variable变量") - verbose_name_plural = _(u"Variable变量") - ordering = ['-id'] - app_label = 'pipeline' - - def __unicode__(self): - return self.code diff --git a/pipeline/service/modbpm_adapter/modbpm_adapter.py b/pipeline/service/modbpm_adapter/modbpm_adapter.py deleted file mode 100644 index aed4c6c899..0000000000 --- a/pipeline/service/modbpm_adapter/modbpm_adapter.py +++ /dev/null @@ -1,217 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" - -from modbpm.core import AbstractProcess, AbstractTask -from modbpm.core.data.base import get_data_source - -from pipeline.core.flow.activity import ServiceActivity, SubProcess -from pipeline.core.flow.event import EmptyStartEvent, EmptyEndEvent -from pipeline.core.flow.gateway import ExclusiveGateway, ParallelGateway, \ - ConvergeGateway -from pipeline.models import PipelineInstance -from pipeline.core.data import var -from pipeline import exceptions - - -class PipelineProcess(AbstractProcess): - def on_start(self, pipeline, instance_id=None): - end_event_id = pipeline.end_event.id - _auto_loop_node(self, pipeline.start_event, end_event_id, pipeline, instance_id) - self.start(act=EmptyEndEventTask, identifier_code=end_event_id)(instance_id) - # write output - pipeline.spec.context.write_output(pipeline) - # clear context: break circle reference - pipeline.spec.context.clear() - self.finish(data=pipeline.data.get_outputs()) - - -class SerialProcess(AbstractProcess): - def on_start(self, node, end_id, pipeline): - _auto_loop_node(self, node, end_id, pipeline) - self.finish() - - -class ServiceActivityTask(AbstractTask): - def on_start(self, service_act, parent_data): - if service_act.execute(parent_data): - if not service_act.need_schedule(): - self._finish(service_act, parent_data) - - data_source = get_data_source(self._get_model()) - data_source.set('service_act', service_act) - data_source.set('parent_data', parent_data) - self.set_default_scheduler(self.on_schedule) - else: - self.finish(status_code=2) - - def on_schedule(self): - data_source = get_data_source(self._get_model()) - service_act = data_source.get('service_act') - parent_data = data_source.get('parent_data') - - schedule_result = service_act.schedule(parent_data) - if not schedule_result: - self.finish(status_code=2) - if service_act.is_schedule_done(): - self._finish(service_act, parent_data) - - data_source.set('service_act', service_act) - data_source.set('parent_data', parent_data) - - def _finish(self, service_act, parent_data): - data = { - 'data': service_act.data.get_outputs(), - 'parent_data': parent_data.get_outputs() - } - self.finish(data=data) - - -class EmptyTask(AbstractTask): - def on_start(self): - self.finish() - - -class EmptyStartEventTask(EmptyTask): - def on_start(self, instance_id=None): - if instance_id: - PipelineInstance.objects.set_started(instance_id) - self.finish() - - -class EmptyEndEventTask(EmptyTask): - def on_start(self, instance_id=None): - if instance_id: - PipelineInstance.objects.set_finished(instance_id) - self.finish() - - -class EmptyExclusiveGateway(EmptyTask): - pass - - -class EmptyParallelGateway(EmptyTask): - pass - - -class EmptyConvergeGateway(EmptyTask): - pass - - -class SkipUsingTask(AbstractTask): - def on_start(self, *args, **kwargs): - self.finish() - - -def _data_transfer(origin, target_data): - for key, value in origin.items(): - target_data.set_outputs(key, value) - - -def _hydrate_data(act): - data = act.data - inputs = data.get_inputs() - hydrated = {} - for k, v in inputs.items(): - if issubclass(v.__class__, var.Variable): - hydrated[k] = v.get() - data.get_inputs().update(hydrated) - - -def _context_injection(data, context): - for k, v in data.get_inputs().items(): - context.set_global_var(k, v) - hydrated = {} - for k, v in context.variables.items(): - if issubclass(v.__class__, var.Variable): - hydrated[k] = v.get() - context.update_global_var(hydrated) - - -def _auto_loop_node(parent_act, enter_node, exit_node_id, pipeline, instance_id=None): - current_node = enter_node - - while current_node.id != exit_node_id: - if isinstance(current_node, ServiceActivity): - # hydrate all lazy variables - try: - _hydrate_data(current_node) - except Exception as e: - raise exceptions.VariableHydrateException(e.message) - - handler = parent_act.start( - act=ServiceActivityTask, - identifier_code=current_node.id - )(current_node, pipeline.data) - outputs = handler.get() - - # transfer data - if outputs: - _data_transfer(outputs['data'], current_node.data) - _data_transfer(outputs['parent_data'], pipeline.data) - # extract output - pipeline.spec.context.extract_output(current_node) - current_node = current_node.next() - - elif isinstance(current_node, SubProcess): - # inject variable to context - _hydrate_data(current_node) - _context_injection(current_node.data, current_node.pipeline.context) - - handler = parent_act.start( - act=PipelineProcess, - identifier_code=current_node.id - )(current_node.pipeline) - outputs = handler.get() - - # transfer data - if outputs: - _data_transfer(outputs, current_node.data) - - # extract output - pipeline.spec.context.extract_output(current_node) - current_node = current_node.next() - - elif isinstance(current_node, EmptyStartEvent): - parent_act.start(act=EmptyStartEventTask, identifier_code=current_node.id)(instance_id) - current_node = current_node.next() - - elif isinstance(current_node, EmptyEndEvent): - parent_act.start(act=EmptyEndEventTask, identifier_code=current_node.id)(instance_id) - current_node = current_node.next() - - elif isinstance(current_node, ExclusiveGateway): - # determine next node - parent_act.start(act=EmptyExclusiveGateway, identifier_code=current_node.id)() - current_node = current_node.next(data=pipeline.spec.context.variables) - - elif isinstance(current_node, ParallelGateway): - parent_act.start(act=EmptyParallelGateway, identifier_code=current_node.id)() - current_node = _into_parallel_gateway(parent_act, current_node, - pipeline) - - elif isinstance(current_node, ConvergeGateway): - parent_act.start(act=EmptyConvergeGateway, identifier_code=current_node.id)() - current_node = current_node.next() - - return current_node - - -def _into_parallel_gateway(parent_act, gateway, pipeline): - all_target = gateway.outgoing.all_target_node() - with parent_act.run_in_parallel(): - for target in all_target: - parent_act.start(SerialProcess)(target, - gateway.converge_gateway_id, - pipeline) - - return pipeline.node(gateway.converge_gateway_id) diff --git a/pipeline/service/pipeline_engine_adapter/adapter_api.py b/pipeline/service/pipeline_engine_adapter/adapter_api.py index fdd7ce1d95..3edf06862e 100644 --- a/pipeline/service/pipeline_engine_adapter/adapter_api.py +++ b/pipeline/service/pipeline_engine_adapter/adapter_api.py @@ -25,7 +25,7 @@ } -def run_pipeline(pipeline_instance, instance_id=None): +def run_pipeline(pipeline_instance): return api.start_pipeline(pipeline_instance) @@ -156,6 +156,7 @@ def _map(tree): tree.setdefault('children', {}) return { 'id': tree['id'], + 'name': tree['name'], 'state': _get_node_state(tree), 'start_time': _better_time_or_none(tree['started_time']), 'finish_time': _better_time_or_none(tree['archived_time']), diff --git a/pipeline/service/task_service.py b/pipeline/service/task_service.py index 72e8deb7b1..e63b89ee63 100644 --- a/pipeline/service/task_service.py +++ b/pipeline/service/task_service.py @@ -18,8 +18,8 @@ adapter_api = importlib.import_module(settings.PIPELINE_ENGINE_ADAPTER_API) -def run_pipeline(pipeline, instance_id=None): - return adapter_api.run_pipeline(pipeline, instance_id) +def run_pipeline(pipeline): + return adapter_api.run_pipeline(pipeline) def pause_pipeline(pipeline_id): @@ -62,10 +62,6 @@ def get_state(node_id): return adapter_api.get_state(node_id) -def get_topo_tree(pipeline_id): - return adapter_api.get_topo_tree(pipeline_id) - - def get_inputs(act_id): return adapter_api.get_inputs(act_id) @@ -80,7 +76,3 @@ def get_activity_histories(act_id): def callback(act_id, data=None): return adapter_api.callback(act_id, data) - - -def get_single_state(act_id): - return adapter_api.get_single_state(act_id) diff --git a/pipeline/templates/pipeline/home.html b/pipeline/templates/pipeline/home.html deleted file mode 100644 index 42107eddfe..0000000000 --- a/pipeline/templates/pipeline/home.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - - - - -
-

- 模板列表 - - 新建模板 - -

-
{{item.id}} {{item.category_name}} {{item.edit_time}} + {{getSubflowContent(item)}} {{item.creator_name}} @@ -167,8 +167,8 @@ :to="getNewTaskUrl(item.id)"> {{ i18n.newTemplate }} - - + + - + @@ -195,7 +195,7 @@
- - - - - - - - - - - - -
序号模板名称最后修改人修改时间操作
- -

- 实例列表 -

- - - - - - - - - - - - - -
序号实例名称创建者创建时间操作
- -
- - - - - - - - - diff --git a/pipeline/templates/pipeline/instance.html b/pipeline/templates/pipeline/instance.html deleted file mode 100644 index 2247b1021d..0000000000 --- a/pipeline/templates/pipeline/instance.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pipeline/templates/pipeline/newtask.html b/pipeline/templates/pipeline/newtask.html deleted file mode 100644 index 09649c55ba..0000000000 --- a/pipeline/templates/pipeline/newtask.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - diff --git a/pipeline/templates/pipeline/template.html b/pipeline/templates/pipeline/template.html deleted file mode 100644 index 94fed752b8..0000000000 --- a/pipeline/templates/pipeline/template.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - diff --git a/pipeline/tests/builder/flow/test_node_output.py b/pipeline/tests/builder/flow/test_node_output.py index b3f6cd921b..4b27a7c1cd 100644 --- a/pipeline/tests/builder/flow/test_node_output.py +++ b/pipeline/tests/builder/flow/test_node_output.py @@ -21,7 +21,7 @@ class NodeOutputTestCase(TestCase): def test_init(self): output = NodeOutput(type=NodeOutput.PLAIN, value='val', source_act='1', source_key='2') self.assertEqual(output.type, NodeOutput.PLAIN) - self.assertEqual(output.value, 'val') + self.assertEqual(output.value, None) self.assertEqual(output.source_act, '1') self.assertEqual(output.source_key, '2') diff --git a/pipeline/tests/component_framework/test_component.py b/pipeline/tests/component_framework/test_component.py index a3ba920675..adbecb6583 100644 --- a/pipeline/tests/component_framework/test_component.py +++ b/pipeline/tests/component_framework/test_component.py @@ -34,8 +34,11 @@ def outputs(self): self.OutputItem(name='key_2', key='key_2', type='str') ] - def outputs_format(self): - pass + def inputs(self): + return [ + self.InputItem(name='key_3', key='key_3', type='int', required=True), + self.InputItem(name='key_4', key='key_4', type='int', required=False), + ] class CCUpdateHostModuleComponent(Component): name = u'修改主机所属模块' @@ -68,6 +71,13 @@ def test_outputs_format(self): {'name': 'key_2', 'key': 'key_2', 'type': 'str'} ]) + def test_inputs_format(self): + inputs_format = self.component({}).inputs_format() + self.assertEqual(inputs_format, [ + {'name': 'key_3', 'key': 'key_3', 'type': 'int', 'required': True}, + {'name': 'key_4', 'key': 'key_4', 'type': 'int', 'required': False} + ]) + def test_clean_execution_data(self): data = {'test': 'test'} data_after_clean = self.component(data).clean_execute_data(None) diff --git a/pipeline/tests/engine/models/function/test_function_switch.py b/pipeline/tests/engine/models/function/test_function_switch.py index 7189d70129..92bd023e72 100644 --- a/pipeline/tests/engine/models/function/test_function_switch.py +++ b/pipeline/tests/engine/models/function/test_function_switch.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/tests/engine/test_api.py b/pipeline/tests/engine/test_api.py index 461f463b6c..66254f63bb 100644 --- a/pipeline/tests/engine/test_api.py +++ b/pipeline/tests/engine/test_api.py @@ -741,16 +741,6 @@ def test_get_activity_histories(self): history = api.get_activity_histories(self.node_id) self.assertEqual(history, self.dummy_return) - def test_get_single_state(self): - s = MockStatus() - with patch(PIPELINE_STATUS_GET, MagicMock(return_value=s)): - state = api.get_single_state(self.node_id) - self.assertEqual(state, {'state': s.state, - 'started_time': s.started_time, - 'finished_time': s.archived_time, - 'retry': s.retry, - 'skip': s.skip}) - @patch(PIPELINE_STATUS_GET, MagicMock()) @patch(PIPELINE_FUNCTION_SWITCH_IS_FROZEN, MagicMock(return_value=False)) @patch(PIPELINE_PROCESS_GET, MagicMock(side_effect=PipelineProcess.DoesNotExist)) diff --git a/pipeline/tests/mock.py b/pipeline/tests/mock.py index e3f4ecd5f2..868c575691 100644 --- a/pipeline/tests/mock.py +++ b/pipeline/tests/mock.py @@ -51,9 +51,9 @@ def get_outputs(self): class IdentifyObject(object): - def __init__(self, id=None, name=None): + def __init__(self, id=None, name=''): self.id = id or uniqid() - self.name = name or '' + self.name = name class StartEventObject(IdentifyObject): diff --git a/pipeline/utils/uniqid.py b/pipeline/utils/uniqid.py index ad79d64667..ef6559afad 100644 --- a/pipeline/utils/uniqid.py +++ b/pipeline/utils/uniqid.py @@ -13,6 +13,8 @@ import uuid +from pipeline.conf import settings + def uniqid(): return uuid.uuid3( @@ -23,11 +25,9 @@ def uniqid(): def node_uniqid(): uid = uniqid() - node_uid = 'node%s' % uid - return node_uid[:-4] + return 'n%s' % uid[1:] if settings.UUID_DIGIT_STARTS_SENSITIVE else uid def line_uniqid(): uid = uniqid() - node_uid = 'line%s' % uid - return node_uid[:-4] + return 'l%s' % uid[1:] if settings.UUID_DIGIT_STARTS_SENSITIVE else uid diff --git a/pipeline/contrib/web/__init__.py b/pipeline/variable_framework/__init__.py similarity index 90% rename from pipeline/contrib/web/__init__.py rename to pipeline/variable_framework/__init__.py index 76bf91af38..774b1d4dd3 100644 --- a/pipeline/contrib/web/__init__.py +++ b/pipeline/variable_framework/__init__.py @@ -11,4 +11,4 @@ specific language governing permissions and limitations under the License. """ -default_app_config = 'pipeline.contrib.web.apps.ContribWebConfig' +default_app_config = 'pipeline.variable_framework.apps.VariableFrameworkConfig' diff --git a/pipeline/contrib/web/apps.py b/pipeline/variable_framework/admin.py similarity index 74% rename from pipeline/contrib/web/apps.py rename to pipeline/variable_framework/admin.py index 4692b15854..271f4936ee 100644 --- a/pipeline/contrib/web/apps.py +++ b/pipeline/variable_framework/admin.py @@ -11,10 +11,13 @@ specific language governing permissions and limitations under the License. """ -from django.apps import AppConfig +from django.contrib import admin +from pipeline.variable_framework import models -class ContribWebConfig(AppConfig): - name = 'pipeline.contrib.web' - verbose_name = 'PipelineContribWeb' +@admin.register(models.VariableModel) +class VariableModelAdmin(admin.ModelAdmin): + list_display = ['id', 'code', 'status'] + search_fields = ['code'] + list_filter = ['status'] diff --git a/pipeline/variables/apps.py b/pipeline/variable_framework/apps.py similarity index 79% rename from pipeline/variables/apps.py rename to pipeline/variable_framework/apps.py index eeaa93d4bc..5f32aa3708 100644 --- a/pipeline/variables/apps.py +++ b/pipeline/variable_framework/apps.py @@ -18,20 +18,20 @@ from pipeline.utils.register import autodiscover_collections -class VariablesConfig(AppConfig): - name = 'pipeline.variables' - verbose_name = 'PipelineVariables' +class VariableFrameworkConfig(AppConfig): + name = 'pipeline.variable_framework' + verbose_name = 'PipelineVariableFramework' def ready(self): """ - @summary: 注册公共部分和OPEN_VER下的变量到数据库 + @summary: 注册公共部分和RUN_VER下的变量到数据库 @return: """ - from pipeline.variables.signals.handlers import * # noqa + from pipeline.variable_framework.signals.handlers import * # noqa for path in settings.VARIABLE_AUTO_DISCOVER_PATH: autodiscover_collections(path) - from pipeline.models import VariableModel + from pipeline.variable_framework.models import VariableModel from pipeline.core.data.library import VariableLibrary try: VariableModel.objects.exclude(code__in=VariableLibrary.variables.keys()).update(status=False) diff --git a/pipeline/contrib/web/migrations/0001_initial.py b/pipeline/variable_framework/migrations/0001_initial.py similarity index 58% rename from pipeline/contrib/web/migrations/0001_initial.py rename to pipeline/variable_framework/migrations/0001_initial.py index aa554396ad..b45ef25f55 100644 --- a/pipeline/contrib/web/migrations/0001_initial.py +++ b/pipeline/variable_framework/migrations/0001_initial.py @@ -10,12 +10,10 @@ 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. """ -# Generated by Django 1.11.2 on 2017-11-24 10:43 + from __future__ import unicode_literals from django.db import migrations, models -import django.db.models.deletion -import pipeline.models class Migration(migrations.Migration): @@ -23,19 +21,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('pipeline', '0001_initial'), ] operations = [ migrations.CreateModel( - name='InstanceScheme', + name='VariableModel', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('unique_id', models.CharField(blank=True, max_length=97, unique=True, verbose_name='\u552f\u4e00\u65b9\u6848\u540d\u79f0')), - ('name', models.CharField(max_length=64, verbose_name='\u65b9\u6848\u540d\u79f0')), - ('edit_time', models.DateTimeField(auto_now=True, verbose_name='\u4fee\u6539\u65f6\u95f4')), - ('data', pipeline.models.CompressJSONField(verbose_name='\u65b9\u6848\u6570\u636e')), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pipeline.PipelineTemplate', verbose_name='\u5bf9\u5e94\u6a21\u677f ID')), + ('code', models.CharField(max_length=255, unique=True, verbose_name='\u53d8\u91cf\u7f16\u7801')), + ('status', models.BooleanField(default=True, verbose_name='\u53d8\u91cf\u662f\u5426\u53ef\u7528')), ], + options={ + 'verbose_name': 'Variable\u53d8\u91cf', + 'verbose_name_plural': 'Variable\u53d8\u91cf', + }, ), ] diff --git a/pipeline/contrib/web/migrations/__init__.py b/pipeline/variable_framework/migrations/__init__.py similarity index 100% rename from pipeline/contrib/web/migrations/__init__.py rename to pipeline/variable_framework/migrations/__init__.py diff --git a/pipeline/variable_framework/models.py b/pipeline/variable_framework/models.py new file mode 100644 index 0000000000..fca37e844c --- /dev/null +++ b/pipeline/variable_framework/models.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +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. +""" + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from pipeline.core.data.library import VariableLibrary + + +class VariableModel(models.Model): + """ + 注册的变量 + """ + code = models.CharField(_(u"变量编码"), max_length=255, unique=True) + status = models.BooleanField(_(u"变量是否可用"), default=True) + + class Meta: + verbose_name = _(u"Variable变量") + verbose_name_plural = _(u"Variable变量") + + def __unicode__(self): + return self.code + + def get_class(self): + return VariableLibrary.get_var_class(self.code) + + @property + def name(self): + return self.get_class().name + + @property + def form(self): + return self.get_class().form + + @property + def type(self): + return self.get_class().type + + @property + def tag(self): + return self.get_class().tag + + @property + def meta_tag(self): + return getattr(self.get_class(), 'meta_tag') diff --git a/pipeline/contrib/web/webresource/__init__.py b/pipeline/variable_framework/signals/__init__.py similarity index 100% rename from pipeline/contrib/web/webresource/__init__.py rename to pipeline/variable_framework/signals/__init__.py diff --git a/pipeline/variables/signals/handlers.py b/pipeline/variable_framework/signals/handlers.py similarity index 90% rename from pipeline/variables/signals/handlers.py rename to pipeline/variable_framework/signals/handlers.py index 011edfa2cc..4521843818 100644 --- a/pipeline/variables/signals/handlers.py +++ b/pipeline/variable_framework/signals/handlers.py @@ -14,14 +14,14 @@ from django.dispatch import receiver from django.db.utils import ProgrammingError from pipeline.core.data.var import LazyVariable -from pipeline.models import VariableModel +from pipeline.variable_framework.models import VariableModel from pipeline.core.signals import pre_variable_register @receiver(pre_variable_register, sender=LazyVariable) -def pre_variable_register_handler(sender, variable_code, variable_cls, **kwargs): +def pre_variable_register_handler(sender, variable_cls, **kwargs): try: - obj, created = VariableModel.objects.get_or_create(code=variable_code, + obj, created = VariableModel.objects.get_or_create(code=variable_cls.code, defaults={ 'status': __debug__, }) diff --git a/pipeline/variables/__init__.py b/pipeline/variables/__init__.py deleted file mode 100644 index 618942a038..0000000000 --- a/pipeline/variables/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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. -""" - -default_app_config = 'pipeline.variables.apps.VariablesConfig' diff --git a/pipeline/contrib/web/urls_web.py b/pipeline_plugins/cmdb_ip_picker/constants.py similarity index 71% rename from pipeline/contrib/web/urls_web.py rename to pipeline_plugins/cmdb_ip_picker/constants.py index e9415dbc9b..b260acf9fe 100644 --- a/pipeline/contrib/web/urls_web.py +++ b/pipeline_plugins/cmdb_ip_picker/constants.py @@ -11,13 +11,15 @@ specific language governing permissions and limitations under the License. """ -from django.conf.urls import url +NO_ERROR = '0' +ERROR_CODE_PREFIX = '35' -from pipeline.contrib.web import views_web -urlpatterns = [ - url(r'^$', views_web.home), - url(r'^template/$', views_web.template), - url(r'^newtask/$', views_web.newtask), - url(r'^instance/$', views_web.instance) -] +class ErrorCode(object): + PARAMETERS_ERROR = '%s01001' % ERROR_CODE_PREFIX + API_GSE_ERROR = '%s10001' % ERROR_CODE_PREFIX + API_CMDB_ERROR = '%s11001' % ERROR_CODE_PREFIX + API_JOB_ERROR = '%s12001' % ERROR_CODE_PREFIX + + +ERROR_CODES = ErrorCode() diff --git a/pipeline_plugins/cmdb_ip_picker/query.py b/pipeline_plugins/cmdb_ip_picker/query.py index 692f07c13c..3979a3592b 100644 --- a/pipeline_plugins/cmdb_ip_picker/query.py +++ b/pipeline_plugins/cmdb_ip_picker/query.py @@ -21,6 +21,7 @@ from gcloud.conf.default_settings import ESB_GET_CLIENT_BY_REQUEST as get_client_by_request from .utils import get_cmdb_topo_tree +from .constants import NO_ERROR, ERROR_CODES def cmdb_search_topo_tree(request, bk_biz_id, bk_supplier_account=''): @@ -70,7 +71,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= host_result = client.cc.search_host(kwargs) if not host_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', kwargs, host_result['message']) - result = {'result': False, 'code': 110, 'message': message} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message} return JsonResponse(result) host_info = host_result['data']['info'] @@ -99,7 +100,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= 'gse.get_agent_status', agent_kwargs, agent_result['message']) - result = {'result': False, 'code': 111, 'message': message} + result = {'result': False, 'code': ERROR_CODES.API_GSE_ERROR, 'message': message} return JsonResponse(result) agent_data = agent_result['data'] @@ -108,7 +109,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= agent_info = agent_data.get('%s:%s' % (host['cloud'][0]['id'], host['bk_host_innerip']), {}) host['agent'] = agent_info.get('bk_agent_alive', -1) - result = {'result': True, 'code': 0, 'data': data} + result = {'result': True, 'code': NO_ERROR, 'data': data} return JsonResponse(result) diff --git a/pipeline_plugins/cmdb_ip_picker/utils.py b/pipeline_plugins/cmdb_ip_picker/utils.py index 857018890d..c82a50306f 100644 --- a/pipeline_plugins/cmdb_ip_picker/utils.py +++ b/pipeline_plugins/cmdb_ip_picker/utils.py @@ -11,75 +11,52 @@ specific language governing permissions and limitations under the License. """ +import copy + from django.utils.translation import ugettext_lazy as _ from pipeline_plugins.components.utils import handle_api_error from gcloud.conf.default_settings import ESB_GET_CLIENT_BY_USER as get_client_by_user +from .constants import NO_ERROR, ERROR_CODES -def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): - selector = kwargs['selectors'][0] - filters = kwargs['filters'] - excludes = kwargs['excludes'] - - cc_kwargs = { - 'bk_biz_id': bk_biz_id, - 'bk_supplier_account': bk_supplier_account, - 'condition': [{ - 'bk_obj_id': 'module', - 'fields': ['bk_module_id', 'bk_module_name'], - 'condition': [] - }] - } +def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): + """ + @summary:根据前端表单数据获取合法的IP + @param username: + @param bk_biz_id: + @param bk_supplier_account: + @param kwargs: + @return: + """ topo_result = get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account) if not topo_result['result']: return topo_result biz_topo_tree = topo_result['data'][0] - if selector == 'topo': - topo = kwargs['topo'] - if not topo: - return {'result': False, 'data': [], 'message': ''} - # transfer topo to modules - topo_dct = {} - for tp in topo: - topo_dct.setdefault(tp['bk_obj_id'], []).append(tp['bk_inst_id']) - topo_objects = get_objects_of_topo_tree(biz_topo_tree, topo_dct) - topo_modules = [] - for obj in topo_objects: - topo_modules += get_modules_of_bk_obj(obj) - topo_modules_id = get_modules_id(topo_modules) - - condition = [{ - 'field': 'bk_module_id', - 'operator': '$in', - 'value': topo_modules_id - }] - cc_kwargs['condition'][0]['codition'] = condition - - else: - host_list = kwargs['ip'] - if not host_list: - return [] - ip_list = ['%s:%s' % (str(host['cloud'][0]['id']), host['bk_host_innerip']) for host in host_list] - cc_kwargs['condition'].append({ - "bk_obj_id": "host", - "fields": ["bk_host_id", "bk_host_innerip", "bk_host_outerip", "bk_host_name"], - "condition": [{ - "field": "bk_host_innerip", - "operator": "$in", - "value": [host['bk_host_innerip'] for host in host_list] - }] - }) + build_result = build_cmdb_search_host_kwargs(bk_biz_id, + bk_supplier_account, + kwargs, + biz_topo_tree) + if not build_result['result']: + return {'result': False, 'code': ERROR_CODES.PARAMETERS_ERROR, 'data': [], 'message': build_result['message']} + cmdb_kwargs = build_result['data'] client = get_client_by_user(username) - host_result = client.cc.search_host(cc_kwargs) + host_result = client.cc.search_host(cmdb_kwargs) if not host_result: - message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', cc_kwargs, host_result['message']) + message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', cmdb_kwargs, host_result['message']) return {'result': False, 'data': [], 'message': message} host_info = host_result['data']['info'] + + # IP选择器 + selector = kwargs['selectors'][0] + if selector == 'ip': + ip_list = ['%s:%s' % (str(host['cloud'][0]['id']), host['bk_host_innerip']) for host in kwargs['ip']] + else: + ip_list = [] data = [] for host in host_info: host_modules_id = get_modules_id(host['module']) @@ -94,23 +71,29 @@ def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): 'host_modules_id': host_modules_id }) + # 筛选条件 + filters = kwargs['filters'] if filters: filters_dct = {} for ft in filters: filters_dct.setdefault(ft['field'], []) - filters_dct[ft['field']] += ft['value'] - filter_modules = get_modules_of_filters(biz_topo_tree, filters_dct) + filters_dct[ft['field']] += format_condition_value(ft['value']) + new_topo_tree = process_topo_tree_by_condition(biz_topo_tree, filters_dct) + filter_modules = get_modules_by_condition(new_topo_tree, filters_dct) filter_modules_id = get_modules_id(filter_modules) data = [host for host in data if set(host['host_modules_id']) & set(filter_modules_id)] if 'ip' in filters_dct: data = [host for host in data if host['bk_host_innerip'] in filters_dct['ip']] + # 过滤条件 + excludes = kwargs['excludes'] if excludes: excludes_dct = {} - for ex in filters: + for ex in excludes: excludes_dct.setdefault(ex['field'], []) - excludes_dct[ex['field']] += ex['value'] - exclude_modules = get_modules_of_filters(biz_topo_tree, excludes_dct) + excludes_dct[ex['field']] += format_condition_value(ex['value']) + new_topo_tree = process_topo_tree_by_condition(biz_topo_tree, excludes_dct) + exclude_modules = get_modules_by_condition(new_topo_tree, excludes_dct) exclude_modules_id = get_modules_id(exclude_modules) data = [host for host in data if not set(host['host_modules_id']) & set(exclude_modules_id)] if 'ip' in excludes_dct: @@ -118,32 +101,139 @@ def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): result = { 'result': True, - 'code': 0, + 'code': NO_ERROR, 'data': data, 'message': '' } return result +def format_condition_value(conditions): + """ + @summary: + ['111', '222'] -> ['111', '222'] + ['111', '222\n333'] -> ['111', '222', '333'] + ['', '222\n', ' 333 '] -> ['222', '333'] + @param conditions: + @return: + """ + formatted = [] + for val in conditions: + formatted += [item for item in val.strip().split('\n') if item] + return formatted + + +def build_cmdb_search_host_kwargs(bk_biz_id, bk_supplier_account, kwargs, biz_topo_tree): + """ + @summary: 组装配置平台请求参数 + @param bk_biz_id: + @param bk_supplier_account: + @param kwargs: + @param biz_topo_tree: + @return: + """ + cmdb_kwargs = { + 'bk_biz_id': bk_biz_id, + 'bk_supplier_account': bk_supplier_account, + 'condition': [{ + 'bk_obj_id': 'module', + 'fields': ['bk_module_id', 'bk_module_name'], + 'condition': [] + }] + } + + selector = kwargs['selectors'][0] + if selector == 'topo': + topo = kwargs['topo'] + if not topo: + return {'result': False, 'data': {}, 'message': 'dynamic topo selector is empty'} + # transfer topo to modules + topo_dct = {} + for tp in topo: + topo_dct.setdefault(tp['bk_obj_id'], []).append(tp['bk_inst_id']) + topo_objects = get_objects_of_topo_tree(biz_topo_tree, topo_dct) + topo_modules = [] + for obj in topo_objects: + topo_modules += get_modules_of_bk_obj(obj) + topo_modules_id = get_modules_id(topo_modules) + + condition = [{ + 'field': 'bk_module_id', + 'operator': '$in', + 'value': topo_modules_id + }] + cmdb_kwargs['condition'][0]['condition'] = condition + + else: + host_list = kwargs['ip'] + if not host_list: + return {'result': False, 'data': [], 'message': 'static ip is empty'} + cmdb_kwargs['condition'].append({ + "bk_obj_id": "host", + "fields": ["bk_host_id", "bk_host_innerip", "bk_host_outerip", "bk_host_name"], + "condition": [{ + "field": "bk_host_innerip", + "operator": "$in", + "value": [host['bk_host_innerip'] for host in host_list] + }] + }) + return {'result': True, 'data': cmdb_kwargs, 'message': ''} + + +def get_modules_of_bk_obj(bk_obj): + """ + @summary: 获取配置平台某个节点下的所有叶子(模块)节点 + @param bk_obj: + @return: + """ + modules = [] + if bk_obj['bk_obj_id'] == 'module': + modules.append(bk_obj) + for child in bk_obj.get('child', []): + modules += get_modules_of_bk_obj(child) + return modules + + def get_modules_id(modules): + """ + @summary: 将模块列表转换成 id 格式 + @param modules: + @return: + """ return [mod.get('bk_module_id') or mod.get('bk_inst_id') for mod in modules] -def get_modules_of_filters(bk_obj, filters_dct): +def process_topo_tree_by_condition(topo_tree, condition): + """ + @summary: 根据过滤条件保留或者排除空闲机模块 + @param topo_tree: + @param condition: + @return: + """ + # 筛选条件只包含set、module,不需要处理 topo_tree + if not (set(condition.keys()) - {'set', 'module'}): + return topo_tree + # 筛选条件包含非set、module,那么一定不包含 topo_tree 中的空闲机池集群 + new_tree = copy.deepcopy(topo_tree) + new_tree['child'] = [child for child in new_tree['child'] if child['bk_obj_id'] not in ['set', 'module']] + return new_tree + + +def get_modules_by_condition(bk_obj, condition): """ @summary: 获取拓扑树中满足条件的所有叶子(模块)节点 @param bk_obj: - @param filters_dct: + @param condition: @return: """ modules = [] if bk_obj['bk_obj_id'] == 'module': - if 'module' not in filters_dct or bk_obj['bk_inst_name'] in filters_dct['module']: + if 'module' not in condition or bk_obj['bk_inst_name'] in condition['module']: modules.append(bk_obj) else: - if bk_obj['bk_obj_id'] not in filters_dct or bk_obj['bk_inst_name'] in filters_dct[bk_obj['bk_obj_id']]: + if bk_obj['bk_obj_id'] not in condition or bk_obj['bk_inst_name'] in condition[bk_obj['bk_obj_id']]: for child in bk_obj.get('child', []): - modules += get_modules_of_filters(child, filters_dct) + modules += get_modules_by_condition(child, condition) return modules @@ -163,21 +253,14 @@ def get_objects_of_topo_tree(bk_obj, obj_dct): return bk_objects -def get_modules_of_bk_obj(bk_obj): +def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): """ - @summary: 获取配置平台某个节点下的所有叶子(模块)节点 - @param bk_obj: + @summary: 从 CMDB API 获取业务完整拓扑树,包括空闲机池 + @param username: + @param bk_biz_id: + @param bk_supplier_account: @return: """ - modules = [] - if bk_obj['bk_obj_id'] == 'module': - modules.append(bk_obj) - for child in bk_obj.get('child', []): - modules += get_modules_of_bk_obj(child) - return modules - - -def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): client = get_client_by_user(username) kwargs = { 'bk_biz_id': bk_biz_id, @@ -186,13 +269,13 @@ def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): topo_result = client.cc.search_biz_inst_topo(kwargs) if not topo_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_biz_inst_topo', kwargs, topo_result['message']) - result = {'result': False, 'code': 100, 'message': message, 'data': []} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message, 'data': []} return result inter_result = client.cc.get_biz_internal_module(kwargs) if not inter_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.get_biz_internal_module', kwargs, inter_result['message']) - result = {'result': False, 'code': 101, 'message': message, 'data': []} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message, 'data': []} return result inter_data = inter_result['data'] @@ -213,4 +296,4 @@ def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): } for mod in inter_data['module']] } data[0]['child'].insert(0, default_set) - return {'result': True, 'code': 0, 'data': data, 'messsage': ''} + return {'result': True, 'code': NO_ERROR, 'data': data, 'messsage': ''} diff --git a/pipeline_plugins/components/collections/sites/open/bk.py b/pipeline_plugins/components/collections/sites/open/bk.py index d51020d1ea..690bbc063e 100644 --- a/pipeline_plugins/components/collections/sites/open/bk.py +++ b/pipeline_plugins/components/collections/sites/open/bk.py @@ -124,7 +124,8 @@ def _email_args(self, receivers, title, content): return { 'receiver__username': receivers, 'title': title, - 'content': content + # 保留通知内容中的换行和空格 + 'content': u"
%s
" % content } def _weixin_args(self, receivers, title, content): diff --git a/pipeline_plugins/components/collections/sites/open/job.py b/pipeline_plugins/components/collections/sites/open/job.py index 2dbc2a6388..edb341c385 100644 --- a/pipeline_plugins/components/collections/sites/open/job.py +++ b/pipeline_plugins/components/collections/sites/open/job.py @@ -133,10 +133,14 @@ def execute(self, data, parent_data): ip_str=_value['value'], use_cache=False) ip_list = [{'ip': _ip['InnerIP'], 'bk_cloud_id': _ip['Source']} for _ip in var_ip['ip_result']] - global_vars.append({ - 'name': _value['name'], - 'ip_list': ip_list, - }) + if _value['value'].strip() and not ip_list: + data.outputs.ex_data = _(u"无法从配置平台(CMDB)查询到对应 IP,请确认输入的 IP 是否合法") + return False + if ip_list: + global_vars.append({ + 'name': _value['name'], + 'ip_list': ip_list, + }) else: global_vars.append({ 'name': _value['name'], diff --git a/pipeline_plugins/components/query/common_query.py b/pipeline_plugins/components/query/common_query.py deleted file mode 100644 index 24f4cd116c..0000000000 --- a/pipeline_plugins/components/query/common_query.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -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 logging - -from django.http import JsonResponse -from django.utils.translation import ugettext_lazy as _ - -from gcloud.core.models import Business -from gcloud.conf import settings as gcloud_settings - -logger = logging.getLogger('root') - - -def get_client_by_request(*args, **kwargs): - client = gcloud_settings.ESB_GET_CLIENT_BY_REQUEST(*args, **kwargs) - if hasattr(client, 'set_bk_api_ver'): - client.set_bk_api_ver('') - return client - - -def cc_get_set_list(request, biz_cc_id): - """ - @summary: 获取配置平台的业务所有集群列表 - @param request: - @param biz_cc_id: - @return: - """ - client = get_client_by_request(request) - kwargs = { - 'app_id': biz_cc_id, - } - cc_result = client.cc.get_topo_tree_by_app_id(kwargs) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - set_list = [{ - 'value': '0', - 'text': _(u"所有集群(all)"), - }] - set_data = cc_result['data'].get('Children', []) - for _set in set_data: - set_list.append({ - 'value': _set['SetID'], - 'text': _set['SetName'] - }) - return JsonResponse({'result': True, 'data': set_list}) - - -def cc_get_module_name_list(request, biz_cc_id): - """ - @summary: 获取配置平台的业务所有模块名称列表 - @param request: - @param biz_cc_id: - @return: - """ - client = get_client_by_request(request) - kwargs = { - 'app_id': biz_cc_id, - } - cc_result = client.cc.get_modules(kwargs) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - module_name_list = [_(u"所有模块(all)")] - for mod in cc_result['data']: - if mod['ModuleName'] not in module_name_list: - module_name_list.append(mod['ModuleName']) - module_name_list = [{'value': mod, 'text': mod} for mod in module_name_list] - return JsonResponse({'result': True, 'data': module_name_list}) - - -def cc_get_plat_id(request, biz_cc_id): - client = get_client_by_request(request) - biz = Business.objects.get(cc_id=biz_cc_id) - cc_owner = biz.cc_owner - cc_result = client.cc.get_plat_id({'plat_company': biz.cc_company}) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - data = [] - for plat in cc_result['data']: - if 'plat_id' in plat: - plat_id = plat['plat_id'] - plat_company = plat['plat_company'] - plat_name = plat['plat_name'] - else: - plat_id = plat['platId'] - plat_company = plat['platCompany'] - plat_name = plat['platName'] - if plat_company == cc_owner: - data.append({ - 'value': plat_id, - 'text': plat_name, - }) - return JsonResponse({'result': True, 'data': data}) diff --git a/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js b/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js index bca159a795..627a72e5e1 100644 --- a/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js +++ b/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js @@ -75,6 +75,7 @@ type: "change", action: function (value) { var $this = this; + this.changeHook(false); this.set_loading(true); $.ajax({ url: $.context.site_url + 'pipeline/job_get_job_detail_by_biz/' + $.context.biz_cc_id + '/' + value + '/', diff --git a/pipeline_plugins/components/urls.py b/pipeline_plugins/components/urls.py index ba0067dfd7..06916d5908 100644 --- a/pipeline_plugins/components/urls.py +++ b/pipeline_plugins/components/urls.py @@ -11,14 +11,6 @@ specific language governing permissions and limitations under the License. """ -from django.conf.urls import url - from pipeline_plugins.components import query -from pipeline_plugins.components.query import common_query -urlpatterns = [ - url(r'^cc_get_set_list/(?P\d+)/$', common_query.cc_get_set_list), - url(r'^cc_get_module_name_list/(?P\d+)/$', common_query.cc_get_module_name_list), - url(r'^cc_get_plat_id/(?P\d+)/$', common_query.cc_get_plat_id), -] -urlpatterns += query.urlpatterns +urlpatterns = query.urlpatterns diff --git a/pipeline_plugins/components/utils/__init__.py b/pipeline_plugins/components/utils/__init__.py index fa24f6f85a..b3d6b5c5b7 100644 --- a/pipeline_plugins/components/utils/__init__.py +++ b/pipeline_plugins/components/utils/__init__.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py b/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py index ff07c1385c..1474088ef6 100644 --- a/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py +++ b/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py @@ -15,10 +15,13 @@ from mock import patch from pipeline_plugins.cmdb_ip_picker.utils import ( get_modules_id, - get_modules_of_filters, + get_modules_by_condition, get_modules_of_bk_obj, get_objects_of_topo_tree, - get_cmdb_topo_tree) + get_cmdb_topo_tree, + process_topo_tree_by_condition, + format_condition_value +) from pipeline_plugins.tests.utils import mock_get_client_by_user @@ -112,6 +115,11 @@ def setUp(self): "bk_inst_name": u"蓝鲸" } + def test_format_condition_value(self): + self.assertEquals(format_condition_value(['111', '222']), ['111', '222']) + self.assertEquals(format_condition_value(['111', '222\n333']), ['111', '222', '333']) + self.assertEquals(format_condition_value(['', '222\n', ' 333 ']), ['222', '333']) + def test_get_modules_id(self): modules = [ { @@ -131,24 +139,39 @@ def test_get_modules_id(self): ] self.assertEquals(get_modules_id(modules), [8, 9]) - def test_get_modules_of_filters(self): + def test_process_topo_tree_by_condition(self): + condition = {'group': [1, 3]} + expected = { + "default": 0, + "bk_obj_name": u"业务", + "bk_obj_id": "biz", + "child": [], + "bk_inst_id": 2, + "bk_inst_name": u"蓝鲸" + } + self.assertEquals(process_topo_tree_by_condition(self.topo_tree, condition), expected) + + condition = {'set': [1, 3]} + self.assertEquals(process_topo_tree_by_condition(self.topo_tree, condition), self.topo_tree) + + def test_get_modules_by_condition(self): filters_dct = { 'set': [u"空闲机池", 'set3'] } - modules1 = get_modules_of_filters(self.topo_tree, filters_dct) + modules1 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules1]), {3, 4, 8, 9}) filters_dct = { 'set': [u"空闲机池", 'set3'], 'module': [u"空闲机", 'test1', 'test2'] } - modules2 = get_modules_of_filters(self.topo_tree, filters_dct) + modules2 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules2]), {3, 8, 9}) filters_dct = { 'module': [u"空闲机", 'test1', 'test2'] } - modules2 = get_modules_of_filters(self.topo_tree, filters_dct) + modules2 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules2]), {3, 5, 6, 8, 9}) def test_get_objects_of_topo_tree(self): diff --git a/pipeline/service/modbpm_adapter/__init__.py b/pipeline_plugins/tests/components/__init__.py similarity index 100% rename from pipeline/service/modbpm_adapter/__init__.py rename to pipeline_plugins/tests/components/__init__.py diff --git a/pipeline/variables/signals/__init__.py b/pipeline_plugins/tests/components/utils/sites/open/__init__.py similarity index 100% rename from pipeline/variables/signals/__init__.py rename to pipeline_plugins/tests/components/utils/sites/open/__init__.py diff --git a/pipeline_plugins/tests/components/utils/sites/open/test_utils.py b/pipeline_plugins/tests/components/utils/sites/open/test_utils.py index b67d7652c6..2062449a58 100644 --- a/pipeline_plugins/tests/components/utils/sites/open/test_utils.py +++ b/pipeline_plugins/tests/components/utils/sites/open/test_utils.py @@ -17,7 +17,6 @@ from pipeline_plugins.components import utils from pipeline_plugins.tests.utils import mock_get_client_by_user -from pipeline_plugins.tests.utils import host_list_data return_success = True @@ -41,184 +40,3 @@ def test_get_ip_by_regex(self): self.assertEqual(utils.get_ip_by_regex('1.1.1.1,2.2.2.2,3.3.3.3'), ['1.1.1.1', '2.2.2.2', '3.3.3.3']) - - def test_local_file_path_of_time(self): - self.assertEqual(utils.get_local_file_path_of_time(biz_cc_id=789, time_str='time_str'), - '/data/TEST_UPLOAD_TEST/APP_CODE/bkupload/789/time_str/') - - def test_cc_get_inner_ip_by_module_id(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_inner_ip_by_module_id(username='test', biz_cc_id=789, module_id_list=[]), - [{ - 'host': { - 'bk_host_innerip': '1.0.0.1', - 'bk_host_outerip': '1.0.0.1', - 'bk_host_name': '1.0.0.1', - 'bk_host_id': 1, - 'bk_cloud_id': { - 'bk_obj_name': '', - 'id': '0', - 'bk_obj_id': 'plat', - 'bk_obj_icon': '', - 'bk_inst_id': 0, - 'bk_inst_name': 'default area' - } - }, - 'module': [ - { - 'bk_module_id': 2, - 'bk_module_name': 'test2' - } - ] - }] - ) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_inner_ip_by_module_id(username='test', biz_cc_id=789, module_id_list=[]), []) - - def test_cc_get_set_ids_by_names(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name2']), - ['1', '2']) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name3']), - ['1']) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name1'), '1') - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name3'), '') - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name2']), - []) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name1'), '') - - def test_cc_get_ips_by_set_and_module(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=[], - set_name_list=[], - module_name_list=['1']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=None, - set_name_list=None, - module_name_list=['1']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['1'], - module_name_list=[]), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['1'], - module_name_list=None), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['0'], - set_name_list=['all'], - module_name_list=['all']), 'data') - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=[], - set_name_list=['name3'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['name3'], - module_name_list=['all']), 'data') - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['name1'], - module_name_list=['module_name']), 'data') - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['0'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name3'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name1'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name1'], - set_name_list=['all'], - module_name_list=['module_name']), []) - - def test_cc_get_role_users(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['data'], list({'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'})) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role3'], - more_users='')['data'], list({'a', 'b', 'c', 'd'})) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role3'], - more_users='')['data'], []) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['data'], []) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['result'], False) - - def test_cc_get_ip_list_by_biz_and_user(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_ip_list_by_biz_and_user(username='test', biz_cc_id=789), host_list_data) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_ip_list_by_biz_and_user(username='test', biz_cc_id=790), []) - - def test_cc_get_ips_info_by_str(self): - mock_get_client_by_user.success = True - ip_result = host_list_data - r1 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=789, - ip_str='1.1.1.1, 2.2.2.2') - r2 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=790, - ip_str='1.1.1.1, 2.2.2.2, 3.3.3.3') - r3 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=791, - ip_str='SetName1|ModuleName1|1.1.1.1, ' - 'SetName2|ModuleName2|2.2.2.2, ' - 'set|module|3.3.3.3') - r4 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=792, - ip_str='Source1:1.1.1.1, Source2:2.2.2.2, 3:3.3.3.3') - self.assertEqual(r1['ip_result'], ip_result) - self.assertEqual(r1['invalid_ip'], []) - self.assertEqual(r2['ip_result'], ip_result) - self.assertEqual(r2['invalid_ip'], ['3.3.3.3']) - self.assertEqual(r3['ip_result'], ip_result) - self.assertEqual(r3['invalid_ip'], ['3.3.3.3']) - self.assertEqual(r4['ip_result'], ip_result) - self.assertEqual(r4['invalid_ip'], ['3.3.3.3']) - mock_get_client_by_user.success = False - r5 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=793, - ip_str='1.1.1.1, 2.2.2.2, 3.3.3.3') - r6 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=794, - ip_str='SetName1|ModuleName1|1.1.1.1, ' - 'SetName2|ModuleName2|2.2.2.2, ' - 'set|module|3.3.3.3') - r7 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=795, - ip_str='Source1:1.1.1.1, Source2:2.2.2.2, 3:3.3.3.3') - self.assertEqual(r5['ip_result'], []) - self.assertEqual(r6['ip_result'], []) - self.assertEqual(r7['ip_result'], []) diff --git a/pipeline_plugins/variables/collections/common.py b/pipeline_plugins/variables/collections/common.py index 0a8e52f38c..21cb761d29 100644 --- a/pipeline_plugins/variables/collections/common.py +++ b/pipeline_plugins/variables/collections/common.py @@ -13,15 +13,60 @@ import logging +from django.utils.translation import ugettext_lazy as _ + from pipeline.conf import settings -from pipeline.core.data.var import LazyVariable +from pipeline.core.data.var import ( + SpliceVariable, + LazyVariable, + RegisterVariableMeta +) logger = logging.getLogger('root') +class CommonPlainVariable(SpliceVariable): + __metaclass__ = RegisterVariableMeta + + +class Input(CommonPlainVariable): + code = 'input' + name = _(u"输入框") + type = 'general' + tag = 'input.input' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Textarea(CommonPlainVariable): + code = 'textarea' + name = _(u"文本框") + type = 'general' + tag = 'textarea.textarea' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Datetime(CommonPlainVariable): + code = 'datetime' + name = _(u"日期时间") + type = 'general' + tag = 'datetime.datetime' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Int(CommonPlainVariable): + code = 'int' + name = _(u"整数") + type = 'general' + tag = 'int.int' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + class Password(LazyVariable): code = 'password' - form = '%svariables/password.js' % settings.STATIC_URL + name = _(u"密码") + type = 'general' + tag = 'password.password' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) def get_value(self): return self.value @@ -29,8 +74,11 @@ def get_value(self): class Select(LazyVariable): code = 'select' - meta_form = '%svariables/select_meta.js' % settings.STATIC_URL - form = '%svariables/select.js' % settings.STATIC_URL + name = _(u"下拉框") + type = 'meta' + tag = 'select.select' + meta_tag = 'select.select_meta' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) def get_value(self): # multiple select diff --git a/pipeline_plugins/variables/collections/sites/open/cc.py b/pipeline_plugins/variables/collections/sites/open/cc.py index 5c9ee74391..d249e729d9 100644 --- a/pipeline_plugins/variables/collections/sites/open/cc.py +++ b/pipeline_plugins/variables/collections/sites/open/cc.py @@ -14,6 +14,8 @@ import logging import re +from django.utils.translation import ugettext_lazy as _ + from pipeline.conf import settings from pipeline_plugins.cmdb_ip_picker.utils import get_ip_picker_result from pipeline_plugins.components.utils import ( @@ -27,7 +29,10 @@ class VarIpPickerVariable(LazyVariable): - code = 'var_ip_picker' + code = 'ip' + name = _(u"IP选择器(简单版)") + type = 'general' + tag = 'var_ip_picker.ip_picker' form = '%svariables/sites/%s/var_ip_picker.js' % (settings.STATIC_URL, settings.RUN_VER) def get_value(self): @@ -76,7 +81,10 @@ def get_value(self): class VarCmdbIpSelector(LazyVariable): - code = 'var_cmdb_ip_selector' + code = 'ip_selector' + name = _(u"IP选择器") + type = 'general' + tag = 'var_cmdb_ip_selector.ip_selector' form = '%svariables/sites/%s/var_cmdb_ip_selector.js' % (settings.STATIC_URL, settings.RUN_VER) def get_value(self): @@ -84,7 +92,7 @@ def get_value(self): bk_biz_id = self.pipeline_data['biz_cc_id'] bk_supplier_account = self.pipeline_data['biz_supplier_account'] - value = self.value - ip_result = get_ip_picker_result(username, bk_biz_id, bk_supplier_account, value) + ip_selector = self.value + ip_result = get_ip_picker_result(username, bk_biz_id, bk_supplier_account, ip_selector) ip = ','.join([host['bk_host_innerip'] for host in ip_result['data']]) return ip diff --git a/pipeline_plugins/variables/sites/__init__.py b/pipeline_plugins/variables/query/__init__.py similarity index 100% rename from pipeline_plugins/variables/sites/__init__.py rename to pipeline_plugins/variables/query/__init__.py diff --git a/pipeline_plugins/variables/sites/open/__init__.py b/pipeline_plugins/variables/query/sites/__init__.py similarity index 100% rename from pipeline_plugins/variables/sites/open/__init__.py rename to pipeline_plugins/variables/query/sites/__init__.py diff --git a/pipeline/contrib/web/admin.py b/pipeline_plugins/variables/query/sites/open/__init__.py similarity index 100% rename from pipeline/contrib/web/admin.py rename to pipeline_plugins/variables/query/sites/open/__init__.py diff --git a/pipeline_plugins/variables/sites/open/utils.py b/pipeline_plugins/variables/query/sites/open/utils.py similarity index 92% rename from pipeline_plugins/variables/sites/open/utils.py rename to pipeline_plugins/variables/query/sites/open/utils.py index e02d63b57c..44d7294b62 100644 --- a/pipeline_plugins/variables/sites/open/utils.py +++ b/pipeline_plugins/variables/query/sites/open/utils.py @@ -13,6 +13,10 @@ def get_ip_by_zoneid(): + """ + @summary: multiple versions compatible + @return: + """ result = { 'result': True, 'code': 0, diff --git a/pipeline_plugins/variables/sites/utils.py b/pipeline_plugins/variables/query/utils.py similarity index 82% rename from pipeline_plugins/variables/sites/utils.py rename to pipeline_plugins/variables/query/utils.py index 01de1c73d4..76875853e9 100644 --- a/pipeline_plugins/variables/sites/utils.py +++ b/pipeline_plugins/variables/query/utils.py @@ -15,6 +15,6 @@ from django.conf import settings -utils = importlib.import_module('pipeline_plugins.variables.sites.%s.utils' % settings.RUN_VER) +site_utils = importlib.import_module('pipeline_plugins.variables.query.sites.%s.utils' % settings.RUN_VER) -get_ip_by_zoneid = getattr(utils, 'get_ip_by_zoneid') +get_ip_by_zoneid = getattr(site_utils, 'get_ip_by_zoneid') diff --git a/pipeline_plugins/variables/static/variables/datetime.js b/pipeline_plugins/variables/static/variables/datetime.js new file mode 100644 index 0000000000..72bd325073 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/datetime.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.datetime = [ + { + tag_code: "datetime", + type: "datetime", + attrs: { + name: gettext("日期时间"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/input.js b/pipeline_plugins/variables/static/variables/input.js new file mode 100644 index 0000000000..10d8056329 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/input.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.input = [ + { + tag_code: "input", + type: "input", + attrs: { + name: gettext("输入框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/int.js b/pipeline_plugins/variables/static/variables/int.js new file mode 100644 index 0000000000..b551fde355 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/int.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.int = [ + { + tag_code: "int", + type: "int", + attrs: { + name: gettext("整数"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/select.js b/pipeline_plugins/variables/static/variables/select.js index 52f94bc5c2..6153bcc7fc 100644 --- a/pipeline_plugins/variables/static/variables/select.js +++ b/pipeline_plugins/variables/static/variables/select.js @@ -11,6 +11,70 @@ */ (function () { $.atoms.select = [ + { + tag_code: "select_meta", + type: "combine", + attrs: { + name: gettext("下拉框"), + hookable: true, + children: [ + { + tag_code: "datasource", + type: "radio", + attrs: { + name: gettext("数据源"), + hookable: true, + items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "items_text", + type: "textarea", + attrs: { + name: gettext("选项"), + hookable: true, + placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "type", + type: "radio", + attrs: { + name: gettext("类型"), + hookable: true, + items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "default", + type: "textarea", + attrs: { + name: gettext("默认值"), + placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), + hookable: true, + } + } + ] + } + + }, { tag_code: "select", meta_transform: function (variable) { diff --git a/pipeline_plugins/variables/static/variables/textarea.js b/pipeline_plugins/variables/static/variables/textarea.js new file mode 100644 index 0000000000..e6750eee98 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/textarea.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.textarea = [ + { + tag_code: "textarea", + type: "textarea", + attrs: { + name: gettext("文本框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline/contrib/web/tests.py b/pipeline_plugins/variables/urls.py similarity index 97% rename from pipeline/contrib/web/tests.py rename to pipeline_plugins/variables/urls.py index 90524bb0e7..1c56d14760 100644 --- a/pipeline/contrib/web/tests.py +++ b/pipeline_plugins/variables/urls.py @@ -10,3 +10,5 @@ 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. """ + +urlpatterns = [] diff --git a/readme.md b/readme.md index 08b55f611a..8c8b503617 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ ![](docs/resource/img/bk_sops.png) --- [![license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/Tencent/bk-sops/blob/master/LICENSE) -[![Release](https://img.shields.io/badge/release-3.3.9-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) +[![Release](https://img.shields.io/badge/release-3.3.13-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) [![travis-ci](https://travis-ci.com/Tencent/bk-sops.svg?branch=master)](https://travis-ci.com/Tencent/bk-sops) [![Coverage Status](https://codecov.io/gh/Tencent/bk-sops/branch/master/graph/badge.svg)](https://codecov.io/gh/Tencent/bk-sops) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/bk-sops/pulls) diff --git a/readme_en.md b/readme_en.md index b4955ae49f..7942e9164a 100644 --- a/readme_en.md +++ b/readme_en.md @@ -2,7 +2,7 @@ ![](docs/resource/img/bk_sops.png) --- [![license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/Tencent/bk-sops/blob/master/LICENSE) -[![Release](https://img.shields.io/badge/release-3.3.9-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) +[![Release](https://img.shields.io/badge/release-3.3.13-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) [![travis-ci](https://travis-ci.com/Tencent/bk-sops.svg?branch=master)](https://travis-ci.com/Tencent/bk-sops) [![Coverage Status](https://codecov.io/gh/Tencent/bk-sops/branch/master/graph/badge.svg)](https://codecov.io/gh/Tencent/bk-sops) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/bk-sops/pulls) diff --git a/scripts/develop/dev_settings.py b/scripts/develop/dev_settings.py index 00eb7bcc12..ba98bdf2db 100644 --- a/scripts/develop/dev_settings.py +++ b/scripts/develop/dev_settings.py @@ -10,6 +10,8 @@ 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. """ + + DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', @@ -21,5 +23,8 @@ }, } -BK_CC_HOST = '' -BK_JOB_HOST = '' +REDIS = { + 'host': 'localhost', + 'port': 6379, + 'db': 0 +} diff --git a/scripts/i18n/django_i18n.sh b/scripts/i18n/django_i18n.sh index 3209a03421..ad696a873a 100755 --- a/scripts/i18n/django_i18n.sh +++ b/scripts/i18n/django_i18n.sh @@ -4,16 +4,19 @@ WORK_PATH=`pwd` # check_vue_i18n_utils # 所有的 vue 文件都需要添加 import '@/utils/i18n.js',排除不能和项目代码耦合的独立组件 IpSelector # $1 参数表示当前目录 -for item in `find $WORK_PATH/pipeline/blueflow/src/ -name "*.vue" ! -path "*IpSelector*"`;do +for item in `find $WORK_PATH/frontend/desktop/src/ -name "*.vue" ! -path "*IpSelector*"`;do echo $item grep "i18n.js" $item || exit 1 done mkdir -p ~/Temp/gcloud_open/ -mv -f $WORK_PATH/staticfiles/ ~/Temp/gcloud_open/ -rm -rf $WORK_PATH/pipeline/blueflow/static/ +mv -f $WORK_PATH/static/ ~/Temp/gcloud_open/ +rm -rf $WORK_PATH/frontend/desktop/static/ pybabel extract -F babel.cfg --copyright-holder=blueking . -o django.pot || exit 1 +# first time +# pybabel init -i django.pot -D django -d locale -l en --no-wrap +# pybabel init -i django.pot -D django -d locale -l zh_hans --no-wrap pybabel update -i django.pot -d locale -D django --no-wrap || exit 1 django-admin makemessages -d djangojs -e vue,js -i '*node_modules*' --no-wrap || exit 1 @@ -49,4 +52,4 @@ grep -n -e 'fuzzy' $WORK_PATH/locale/zh_hans/LC_MESSAGES/djangojs.po read -rsp $'Press translate django.po and djangojs.po, then press any key to continue...\n' -n1 key django-admin compilemessages -mv -f ~/Temp/gcloud_open/staticfiles/ $WORK_PATH/ +mv -f ~/Temp/gcloud_open/static/ $WORK_PATH/ diff --git a/scripts/publish/build.sh b/scripts/publish/build.sh index 83a24d5e1c..dc7c47fb4c 100644 --- a/scripts/publish/build.sh +++ b/scripts/publish/build.sh @@ -2,7 +2,7 @@ APP_CODE="bk_sops" rm -rf $APP_CODE mkdir -p $APP_CODE/src $APP_CODE/pkgs || exit 1 -rsync -av --exclude="$APP_CODE" --exclude=".*" --exclude="*.tar.gz" --exclude="pipeline/blueflow/node_modules/" ./ $APP_CODE/src/ || exit 1 +rsync -av --exclude="$APP_CODE" --exclude=".*" --exclude="*.tar.gz" --exclude="frontend/desktop/node_modules/" ./ $APP_CODE/src/ || exit 1 cp app.yml $APP_CODE/ || exit 1 echo "libraries:" >> $APP_CODE/app.yml grep -e "^[^#].*$" requirements.txt | awk '{split($1,b,"==");printf "- name: "b[1]"\n version: "b[2]"\n"}' >> $APP_CODE/app.yml diff --git a/static/components/atoms/sites/open/job/job_execute_task.js b/static/components/atoms/sites/open/job/job_execute_task.js index bca159a795..627a72e5e1 100644 --- a/static/components/atoms/sites/open/job/job_execute_task.js +++ b/static/components/atoms/sites/open/job/job_execute_task.js @@ -75,6 +75,7 @@ type: "change", action: function (value) { var $this = this; + this.changeHook(false); this.set_loading(true); $.ajax({ url: $.context.site_url + 'pipeline/job_get_job_detail_by_biz/' + $.context.biz_cc_id + '/' + value + '/', diff --git a/static/variables/datetime.js b/static/variables/datetime.js new file mode 100644 index 0000000000..72bd325073 --- /dev/null +++ b/static/variables/datetime.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.datetime = [ + { + tag_code: "datetime", + type: "datetime", + attrs: { + name: gettext("日期时间"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/input.js b/static/variables/input.js new file mode 100644 index 0000000000..10d8056329 --- /dev/null +++ b/static/variables/input.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.input = [ + { + tag_code: "input", + type: "input", + attrs: { + name: gettext("输入框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/int.js b/static/variables/int.js new file mode 100644 index 0000000000..b551fde355 --- /dev/null +++ b/static/variables/int.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.int = [ + { + tag_code: "int", + type: "int", + attrs: { + name: gettext("整数"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/select.js b/static/variables/select.js index 52f94bc5c2..6153bcc7fc 100644 --- a/static/variables/select.js +++ b/static/variables/select.js @@ -11,6 +11,70 @@ */ (function () { $.atoms.select = [ + { + tag_code: "select_meta", + type: "combine", + attrs: { + name: gettext("下拉框"), + hookable: true, + children: [ + { + tag_code: "datasource", + type: "radio", + attrs: { + name: gettext("数据源"), + hookable: true, + items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "items_text", + type: "textarea", + attrs: { + name: gettext("选项"), + hookable: true, + placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "type", + type: "radio", + attrs: { + name: gettext("类型"), + hookable: true, + items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "default", + type: "textarea", + attrs: { + name: gettext("默认值"), + placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), + hookable: true, + } + } + ] + } + + }, { tag_code: "select", meta_transform: function (variable) { diff --git a/static/variables/select_meta.js b/static/variables/select_meta.js deleted file mode 100644 index 5dc68db17a..0000000000 --- a/static/variables/select_meta.js +++ /dev/null @@ -1,79 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* 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. -*/ -(function () { - $.atoms.select_meta = [ - { - tag_code: "select", - type: "combine", - attrs: { - name: gettext("下拉框"), - hookable: true, - children: [ - { - tag_code: "datasource", - type: "radio", - attrs: { - name: gettext("数据源"), - hookable: true, - items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], - value: "0", - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "items_text", - type: "textarea", - attrs: { - name: gettext("选项"), - hookable: true, - placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "type", - type: "radio", - attrs: { - name: gettext("类型"), - hookable: true, - items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], - value: "0", - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "default", - type: "textarea", - attrs: { - name: gettext("默认值"), - placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), - hookable: true, - } - } - ] - } - - }, - ] -})(); diff --git a/static/variables/textarea.js b/static/variables/textarea.js new file mode 100644 index 0000000000..e6750eee98 --- /dev/null +++ b/static/variables/textarea.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* 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. +*/ +(function () { + $.atoms.textarea = [ + { + tag_code: "textarea", + type: "textarea", + attrs: { + name: gettext("文本框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})();