Commit 03ce78a5 authored by wenmo's avatar wenmo

会话重构

parent c0a20894
......@@ -101,21 +101,6 @@ public class JobManager extends RunTime {
}
}
/*private boolean checkSession() {
if (config != null) {
String session = config.getSession();
if (session != null && !"".equals(session)) {
String[] keys = session.split("_");
if (keys.length > 1 && !"".equals(keys[1])) {
isSession = true;
return true;
}
}
}
isSession = false;
return false;
}*/
private Executor createExecutorWithSession() {
if(config.isUseSession()) {
ExecutorEntity executorEntity = SessionPool.get(config.getSession());
......@@ -355,7 +340,7 @@ public class JobManager extends RunTime {
return ResultPool.get(jobId);
}
/*public static void cancel(String jobId){
SelectResult selectResult = ResultPool.get(jobId);
}*/
public static void createSession(String session){
}
}
package com.dlink.session;
import com.dlink.executor.Executor;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* FlinkEntity
......@@ -8,28 +12,35 @@ import com.dlink.executor.Executor;
* @author wenmo
* @since 2021/5/25 14:45
**/
@Setter
@Getter
public class ExecutorEntity {
private String sessionId;
private SessionType type;
private boolean useRemote;
private String address;
private String createUser;
private LocalDateTime createTime;
private Executor executor;
public enum SessionType{
PUBLIC,
PRIVATE
}
public ExecutorEntity(String sessionId, Executor executor) {
this.sessionId = sessionId;
this.executor = executor;
}
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId) {
public ExecutorEntity(String sessionId, SessionType type, boolean useRemote, String address, String createUser, LocalDateTime createTime, Executor executor) {
this.sessionId = sessionId;
}
public Executor getExecutor() {
return executor;
}
public void setExecutor(Executor executor) {
this.type = type;
this.useRemote = useRemote;
this.address = address;
this.createUser = createUser;
this.createTime = createTime;
this.executor = executor;
}
}
......@@ -44,4 +44,8 @@ public class SessionPool {
}
return null;
}
public static List<ExecutorEntity> list(){
return executorList;
}
}
......@@ -49,16 +49,16 @@ export function removeTable(tablename:string,task:TaskType,dispatch:any) {
});
}
export function clearSession(task:TaskType,dispatch:any) {
export function clearSession(session:string,task:TaskType,dispatch:any) {
Modal.confirm({
title: '确认清空会话【'+task.session+'】?',
title: '确认清空会话【'+session+'】?',
okText: '确认',
cancelText: '取消',
onOk:async () => {
let session = {
id:task.session,
let para = {
id:session,
};
const res = handleRemove('/api/studio/clearSession',[session]);
const res = handleRemove('/api/studio/clearSession',[para]);
res.then((result)=>{
showTables(task,dispatch);
});
......
......@@ -4,12 +4,14 @@ import {StateType} from "@/pages/FlinkSqlStudio/model";
import {connect} from "umi";
import {useState} from "react";
import styles from "./index.less";
import { SearchOutlined,DownOutlined,DeleteOutlined,CommentOutlined } from '@ant-design/icons';
import { SearchOutlined,DownOutlined,DeleteOutlined,CommentOutlined ,MessageOutlined} from '@ant-design/icons';
import React from "react";
import {executeDDL} from "@/pages/FlinkSqlStudio/service";
import {handleRemove} from "@/components/Common/crud";
import {removeTable, showTables,clearSession} from "@/components/Studio/StudioEvent/DDL";
import {
ModalForm,
} from '@ant-design/pro-form';
import ProDescriptions from '@ant-design/pro-descriptions';
import ProTable from '@ant-design/pro-table';
const StudioConnector = (props:any) => {
......@@ -19,7 +21,8 @@ const StudioConnector = (props:any) => {
const [searchText,setSearchText] = useState<string>('');
const [searchedColumn,setSearchedColumn] = useState<string>('');
const [modalVisit, setModalVisit] = useState(false);
const [row, setRow] = useState<{}>();
const [type, setType] = useState<number>();
const [sessionData, setSessionData] = useState<{}>();
const getColumnSearchProps = (dIndex) => ({
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (
......@@ -111,25 +114,20 @@ const StudioConnector = (props:any) => {
}
};
const keySessionsEvent=(key, item)=>{
if(key=='delete'){
clearSession(item.session,current.task,dispatch);
}else{
message.warn("敬请期待");
}
};
const getTables = () => {
showTables(current.task,dispatch);
};
const onClearSession = () => {
/*let newLoadings = [...loadings];
newLoadings[2] = true;
setLoadings(newLoadings);
let session = {
id:current.task.clusterId+'_'+current.task.session,
};
const res = handleRemove('/api/studio/clearSession',[session]);
res.then((result)=>{
getTables();
let newLoadings = [...loadings];
newLoadings[2] = false;
setLoadings(newLoadings);
});*/
clearSession(current.task,dispatch);
clearSession(current.task.session,current.task,dispatch);
};
const getColumns=()=>{
......@@ -162,9 +160,49 @@ const StudioConnector = (props:any) => {
return columns;
};
const getSessionsColumns=()=>{
let columns:any=[{
title: "会话 Key",
dataIndex: "session",
key: "session",
sorter: true,
...getColumnSearchProps("session"),
},{
title: '操作',
dataIndex: 'option',
valueType: 'option',
render: (_, record) => [
<a
onClick={() => {
message.warn('敬请期待');
}}
>
描述
</a>,<Divider type="vertical" />,<a
onClick={() => {
keySessionsEvent('delete',record);
}}
>
删除
</a>
],
},];
return columns;
};
const showSessions=()=>{
};
return (
<>
<div style={{float: "right"}}>
<Tooltip title="切换会话">
<Button
type="text"
icon={<CommentOutlined />}
onClick={showSessions}
/>
</Tooltip>
<Tooltip title="刷新连接器">
<Button
type="text"
......@@ -181,11 +219,40 @@ const StudioConnector = (props:any) => {
</Tooltip>
</div>
<Breadcrumb className={styles["session-path"]}>
<CommentOutlined />
<MessageOutlined />
<Divider type="vertical" />
<Breadcrumb.Item>{currentSessionCluster.session}</Breadcrumb.Item>
</Breadcrumb>
{currentSessionCluster.connectors&&currentSessionCluster.connectors.length>0?(<Table dataSource={currentSessionCluster.connectors} columns={getColumns()} size="small" />):(<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />)}
<ModalForm
// title="新建表单"
visible={modalVisit}
onFinish={async () => {
setSessionData(undefined);
}}
onVisibleChange={setModalVisit}
submitter={{
submitButtonProps: {
style: {
display: 'none',
},
},
}}
>
{type==1&&
(<ProDescriptions
column={2}
title='全部共享会话'
>
<ProDescriptions.Item span={2} >
{sessionData?
(<Table dataSource={sessionData} columns={getSessionsColumns} size="small"
/>):(<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />)}
</ProDescriptions.Item>
</ProDescriptions>
)
}
</ModalForm>
</>
);
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment