feat: 修改分支
This commit is contained in:
parent
edfdbfd8f9
commit
acba77a8da
|
|
@ -14,6 +14,7 @@ from fastapi import FastAPI, Depends, HTTPException
|
|||
from models.schemas.system import InitStatusResponse, InitConfigRequest, BaseResponse, TableResponse
|
||||
from models.schemas.user import LoginRequest, LoginResponse
|
||||
from models.schemas.client import ClientRequest
|
||||
from models.schemas.work import WorkRequest
|
||||
from core.config import load_init_config, save_init_config
|
||||
from core.db import init_tortoise, close_tortoise
|
||||
from core.logger import logger
|
||||
|
|
@ -77,131 +78,6 @@ async def is_init():
|
|||
return init_status
|
||||
|
||||
|
||||
async def _create_demo_records(app: FastAPI):
|
||||
"""创建测试用的"""
|
||||
if await DB.Work.exists():
|
||||
return
|
||||
async with in_transaction():
|
||||
work = DB.Work(
|
||||
uuid=uuid.uuid4().hex,
|
||||
creator_id=1,
|
||||
work_title="pai-beta",
|
||||
work_desc="大白智护beta环境",
|
||||
)
|
||||
|
||||
await work.save()
|
||||
work_content = DB.WorkContent(
|
||||
user_id=work.creator_id,
|
||||
work_id=work.id,
|
||||
content=[
|
||||
{
|
||||
"type": "git",
|
||||
"title": "同步前端仓库",
|
||||
"description": "clone 分支 pai-beta-build",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"git_path": "/data/wrok-flow/dbpai-web",
|
||||
"git_user": "liruwei",
|
||||
"git_password": "Wsad.8246",
|
||||
"git_url": "https://tencentgit.dabby.com.cn/dbpai/dbpai-web.git",
|
||||
"git_branch": "pai-beta-build",
|
||||
"git_clone_type": "http/https",
|
||||
"git_clone_depth": 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"title": "同步后端仓库",
|
||||
"description": "clone 分支 v3.4.2",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"git_path": "/data/wrok-flow/dbpai-server",
|
||||
"git_user": "liruwei",
|
||||
"git_password": "Wsad.8246",
|
||||
"git_url": "https://tencentgit.dabby.com.cn/dbpai/dbpai-server.git",
|
||||
"git_branch": "v3.4.2",
|
||||
"git_clone_type": "http/https",
|
||||
"git_clone_depth": 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"title": "同步项目集合仓库",
|
||||
"description": "clone 分支 v3.4.2",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"git_path": "/data/wrok-flow/dbpai-jenkins",
|
||||
"git_user": "liruwei",
|
||||
"git_password": "Wsad.8246",
|
||||
"git_url": "https://tencentgit.dabby.com.cn/dbpai/dbpai-jenkins.git",
|
||||
"git_branch": "v3.4.2",
|
||||
"git_clone_type": "http/https",
|
||||
"git_clone_depth": 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "cmd",
|
||||
"title": "更新项目集合仓库",
|
||||
"description": "更新 server/ html/ 内容",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"cmd": ("cd /data/wrok-flow/dbpai-jenkins" " && rm -fr ./server" " && cp -r ../dbpai-server ./server" " && rm -fr ./html" " && cp -r ../dbpai-web/dist ./html" " && git add ." ' && git commit -m "build"' " && git push"),
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "cmd",
|
||||
"title": "部署",
|
||||
"description": "重新运行 pai-beta 分支 v3.4.2",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"cmd": ("cd /data/PAI/dbpai-beta/dbpai-jenkins;" " git stash;" " git pull origin v3.4.2;" " git stash pop;" " docker-compose restart;"),
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "status",
|
||||
"title": "健康监测",
|
||||
"description": "检测服务是否成功运行",
|
||||
"uuid": uuid.uuid4().hex,
|
||||
"detail": {
|
||||
"host": "58.214.239.10",
|
||||
"user": "dgx07",
|
||||
"password": "f=bHt/.7kRo:KIXq",
|
||||
"port": 6378,
|
||||
"sudo": True,
|
||||
"status_url": "http://localhost:1336/api/system/license_info",
|
||||
},
|
||||
},
|
||||
],
|
||||
)
|
||||
await work_content.save()
|
||||
logger.debug("创建")
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
tasks = {}
|
||||
|
|
@ -220,8 +96,6 @@ async def lifespan(app: FastAPI):
|
|||
# 读取上一次登录状态
|
||||
await load_session_from_file(app)
|
||||
|
||||
await _create_demo_records(app)
|
||||
|
||||
yield
|
||||
|
||||
for _, v in tasks.items():
|
||||
|
|
@ -416,7 +290,21 @@ def create_app():
|
|||
return TableResponse(data=res, total=len(res))
|
||||
|
||||
@app.put("/api/flows", tags=["Flow"], description="任务修改", response_model=BaseResponse)
|
||||
async def update_flow(work_uuid: int, body: ClientRequest, user: DB.User = Depends(get_current_user)):
|
||||
async def update_flow(work_uuid: str, body: WorkRequest, user: DB.User = Depends(get_current_user)):
|
||||
work = await DB.Work.filter(uuid=work_uuid).first()
|
||||
if not work:
|
||||
return BaseResponse(success=False, message="Not Found")
|
||||
work_content = await DB.WorkContent.filter(work_id=work.id).first()
|
||||
if not work_content:
|
||||
work_content = DB.WorkContent(
|
||||
user_id=work.creator_id,
|
||||
content=body.content,
|
||||
is_deleted=0,
|
||||
work_id=work.id,
|
||||
)
|
||||
work_content.content = body.content
|
||||
work_content.update_time = datetime.datetime.now()
|
||||
await work_content.save()
|
||||
return BaseResponse()
|
||||
|
||||
@app.get("/api/flows/detail", tags=["Flow"], description="任务详情", response_model=BaseResponse)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
from pydantic import BaseModel
|
||||
|
||||
class WorkRequest(BaseModel):
|
||||
work_title: str
|
||||
work_desc: str
|
||||
content: list
|
||||
|
|
@ -16,6 +16,10 @@ export const flowDetail = async (id) => {
|
|||
return request("/api/flows/detail?work_uuid=" + id, "GET")
|
||||
}
|
||||
|
||||
export const flowUpdate = async (id, data = {}) => {
|
||||
return request("/api/flows?work_uuid=" + id, "PUT", data)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import {
|
|||
ReactFlowProvider,
|
||||
} from '@xyflow/react';
|
||||
import '@xyflow/react/dist/style.css';
|
||||
import { flowDetail } from "../../api/flow";
|
||||
import { flowDetail, flowUpdate } from "../../api/flow";
|
||||
import EditNode from "./components/EditNode";
|
||||
import CustomNode from "./components/CustomNode";
|
||||
import { ProForm, ProFormText, ProFormTextArea } from "@ant-design/pro-components";
|
||||
|
|
@ -101,41 +101,27 @@ const FlowDetail = () => {
|
|||
try {
|
||||
const res = await flowDetail(work_uuid);
|
||||
const { data: { content: { content: infoList } } } = res;
|
||||
let startX = 0;
|
||||
let startIndex = 1;
|
||||
if (res?.success) {
|
||||
setRecord(res.data);
|
||||
formRef?.current?.setFieldsValue(res?.data || {});
|
||||
const tempEdges = [];
|
||||
const tempNodes = [{
|
||||
id: '1',
|
||||
position: { x: startX, y: 0 },
|
||||
sourcePosition: 'right',
|
||||
type: 'first',
|
||||
data: { label: '开始', style: { backgroundColor: COLORS['first'] }, position: POSITION['first'] },
|
||||
}]
|
||||
const tempNodes = [];
|
||||
infoList.forEach((e, i) => {
|
||||
tempNodes.push({
|
||||
id: e.uuid,
|
||||
position: { x: startX + 200, y: 0 },
|
||||
position: e.position,
|
||||
sourcePosition: 'right',
|
||||
targetPosition: 'left',
|
||||
type: e.type,
|
||||
data: { label: e.title, style: { backgroundColor: COLORS[e.type] }, position: POSITION[e.type] },
|
||||
detail: e
|
||||
})
|
||||
|
||||
const sourceNode = tempNodes[startIndex - 1];
|
||||
const targetNode = tempNodes[startIndex];
|
||||
tempEdges.push({
|
||||
id: `${sourceNode.id}-${targetNode.id}`,
|
||||
source: sourceNode.id,
|
||||
target: targetNode.id
|
||||
})
|
||||
|
||||
startX += 200;
|
||||
startIndex += 1;
|
||||
|
||||
if (e.edge) {
|
||||
tempEdges.push({
|
||||
...e.edge,
|
||||
id: tempEdges.length + 1 + ""
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
setNodes(tempNodes);
|
||||
|
|
@ -155,7 +141,7 @@ const FlowDetail = () => {
|
|||
content: "确认保存修改内容?",
|
||||
onOk: async () => {
|
||||
const content = [];
|
||||
nodes.filter(e => e.type != 'first').forEach(e => {
|
||||
nodes.forEach(e => {
|
||||
const edge = edges.find(obj => obj.target === e.id);
|
||||
content.push({
|
||||
...e.detail,
|
||||
|
|
@ -163,7 +149,15 @@ const FlowDetail = () => {
|
|||
edge: edge ? { source: edge.source, target: edge.target } : undefined
|
||||
})
|
||||
});
|
||||
console.log(content);
|
||||
const res = await flowUpdate(record.uuid, {
|
||||
content,
|
||||
...formRef.current.getFieldsValue()
|
||||
})
|
||||
if (res?.success) {
|
||||
message.success("保持成功");
|
||||
} else {
|
||||
message.error(res.message);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ const EditNode = forwardRef(({ onFinish }, ref) => {
|
|||
<ProFormSelect label="节点" rules={[{ required: true }]} name={["detail", "client"]} options={clients} request={onRequest} width='md' />
|
||||
<ProFormText name='title' rules={[{ required: true }]} label='标题' fieldProps={{ maxLength: 20 }} width='md' />
|
||||
<ProFormText fieldProps={{ maxLength: 50 }} name='description' label='描述' width="md" />
|
||||
<div style={{ display: 'none'}}>
|
||||
<ProFormText name='type' label='描述'/>
|
||||
</div>
|
||||
</ProFormGroup>
|
||||
{record?.type === 'git' && <>
|
||||
<Divider orientation="left">Git</Divider>
|
||||
|
|
|
|||
Loading…
Reference in New Issue