Browse Source

Merge branch 'master' of http://gogsb.soaringnova.com/liutao/ai-proj-demo

Zhang Li 2 years ago
parent
commit
d8621c8c5f

+ 29 - 3
src/module/datasource/component/DatasourceAdd.jsx

@@ -30,6 +30,8 @@ export default function DatasourceAdd({ updateDataSource }) {
 
   const [keytabFile, setKeytabFile] = useState([])
   const [krd5File, setKrd5File] = useState([])
+
+  const [useSSL, setUseSSL] = useState(false)
   // Form表单
   const [form] = Form.useForm()
   // 测试连接
@@ -52,6 +54,7 @@ export default function DatasourceAdd({ updateDataSource }) {
         ...testData,
         tag: form.getFieldValue('tag').join('/'),
       }
+      params['use_ssl'] = useSSL ? 1 : 0
       params['kerberos'] = kerbsValid ? 1 : 0
       if (kerbsValid) {
         const keytab = await uploadKerbFile(keytabFile)
@@ -276,7 +279,32 @@ export default function DatasourceAdd({ updateDataSource }) {
         name="comments"
         fieldProps={{ autoSize: true }}
       />
-      {dataType === 'hive' ? (
+      {dataType === 'mysql' && (
+        <ProFormRadio.Group
+          label="use SSL"
+          name="use_ssl"
+          rules={[
+            {
+              required: true,
+              message: '请选择是否使用SSL!',
+            },
+          ]}
+          fieldProps={{
+            onChange: e => setUseSSL(e.target.value),
+          }}
+          options={[
+            {
+              label: '是',
+              value: true,
+            },
+            {
+              label: '否',
+              value: false,
+            },
+          ]}
+        />
+      )}
+      {dataType === 'hive' && (
         <ProFormRadio.Group
           label="kerberos验证"
           name="kerberosValid"
@@ -294,8 +322,6 @@ export default function DatasourceAdd({ updateDataSource }) {
             },
           ]}
         />
-      ) : (
-        <></>
       )}
 
       <Col span={12} style={{ paddingLeft: '22.5px', paddingRight: '22.5px' }}>

+ 8 - 4
src/module/datasource/component/DatasourceLog.jsx

@@ -100,13 +100,13 @@ const DatasourceLog = ({ onRef, logId }) => {
           {/* <a href="/#" onClick={editData} style={{ color: '#1881DA' }}>
             编辑
           </a> */}
-          <span
+          {/* <span
             onClick={() => {
               changeTask(record.key)
             }}
             style={{ color: '#1881DA', cursor: 'pointer' }}>
             终止任务
-          </span>
+          </span> */}
         </Space>
       ),
     },
@@ -135,11 +135,15 @@ const DatasourceLog = ({ onRef, logId }) => {
           afJobId: item.af_job_id,
           runId: item.run_id,
           triggerTime: item.trigger_time
-            ? moment(item.trigger_time * 1000).format('YYYY.MM.DD HH:MM')
+            ? moment(Math.round(item.trigger_time) * 1000).format(
+                'YYYY.MM.DD HH:mm:ss'
+              )
             : '无',
           triggerResult: item.trigger_result,
           handleTime: item.execute_time
-            ? moment(item.execute_time * 1000).format('YYYY.MM.DD HH:MM')
+            ? moment(Math.round(item.execute_time) * 1000).format(
+                'YYYY.MM.DD HH:mm:ss'
+              )
             : '无',
           handleResult: item.execute_result,
         }

+ 6 - 6
src/module/tasklog/component/LogTable.jsx

@@ -101,13 +101,13 @@ const LogTable = () => {
             style={{ color: '#1881DA', cursor: 'pointer' }}>
             查看
           </span>
-          <span
+          {/* <span
             onClick={() => {
               changeTask(record.key)
             }}
             style={{ color: '#1881DA', cursor: 'pointer' }}>
             终止任务
-          </span>
+          </span> */}
         </Space>
       ),
     },
@@ -132,12 +132,12 @@ const LogTable = () => {
         return {
           key: item.id,
           jobName: item.job_name,
-          triggerTime: moment(Number(item.trigger_time) * 1000).format(
-            'YYYY.MM.DD HH:MM'
+          triggerTime: moment(Math.round(item.trigger_time) * 1000).format(
+            'YYYY.MM.DD HH:mm:ss'
           ),
           triggerResult: item.trigger_result,
-          handleTime: moment(Number(item.execute_time) * 1000).format(
-            'YYYY.MM.DD HH:MM'
+          handleTime: moment(Math.round(item.execute_time) * 1000).format(
+            'YYYY.MM.DD HH:mm:ss'
           ),
           handleResult: item.execute_result,
           taskType: item.job_type,

+ 4 - 5
src/module/tasklog/component/TaskLogWatcher.jsx

@@ -76,9 +76,9 @@ const TaskLogWatcher = () => {
       render: code => (
         <span
           style={{
-            color: code === 0 ? '#FF4D4F' : code === 1 ? '#52C41A' : '#4A4A4A',
+            color: code === 3 ? '#FF4D4F' : code === 2 ? '#52C41A' : '#4A4A4A',
           }}>
-          {code === 0 ? '失败' : code === 1 ? '成功' : '无'}
+          {code === 3 ? '失败' : code === 2 ? '成功' : '无'}
         </span>
       ),
     },
@@ -99,13 +99,12 @@ const TaskLogWatcher = () => {
   }
 
   const formatSingleTask = data => {
-    console.log(data)
     const list = data.map((item, index) => ({
       key: index,
       id: item.id,
       index: index + 1,
-      executeTime: moment(Number(item.execute_time) * 1000).format(
-        'YYYY.MM.DD HH:MM'
+      executeTime: moment(Math.round(item.execute_time) * 1000).format(
+        'YYYY.MM.DD HH:mm:ss'
       ),
       log: item.log,
       handleResult: item.execute_result,

+ 23 - 3
src/module/workmgmt/component/JobStepOne.jsx

@@ -1,7 +1,12 @@
 import { Button, Form, Input, Select, Space, Divider, message } from 'antd'
 import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'
 import React, { useState, useEffect, useRef } from 'react'
-import { getConstantsTypes, getFileUri, deleteTag } from '../services'
+import {
+  getConstantsTypes,
+  getFileUri,
+  deleteTag,
+  deleteFile,
+} from '../services'
 const { Option } = Select
 const FormItem = Form.Item
 
@@ -89,6 +94,17 @@ export default function JobStepOne({ ConfigDataForm, SelectDag }) {
     }
   }
 
+  const onDeleteDag = async val => {
+    const { data } = await deleteFile(val)
+    if (data.code === 200) {
+      ConfigDataForm.setFieldValue('dag_url', null)
+      message.success('删除成功')
+      getDags()
+    } else {
+      message.error(data.msg)
+    }
+  }
+
   return (
     <>
       <Form {...layout} form={ConfigDataForm} name="control-hooks">
@@ -172,10 +188,14 @@ export default function JobStepOne({ ConfigDataForm, SelectDag }) {
           <Select
             placeholder="请选择DAG算子"
             allowClear
+            optionLabelProp="label"
             onSelect={val => SelectDag(val)}>
             {dags.map(item => (
-              <Option key={item.uri} value={item.uri}>
-                {item.name}
+              <Option key={item.uri} value={item.uri} label={item.name}>
+                <Space>
+                  <DeleteOutlined onClick={() => onDeleteDag(item.uri)} />
+                  <span>{item.name}</span>
+                </Space>
               </Option>
             ))}
           </Select>

+ 25 - 7
src/module/workmgmt/component/JobStepThree.jsx

@@ -135,6 +135,8 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
   // 所有预览map
   const [nodeSchemas, setNodeSchemas] = useState({})
 
+  const [schemasPreview, setSchemasPreview] = useState({})
+
   const [nodeSchema, setNodeSchema] = useState({})
 
   //所有节点预览状态
@@ -162,17 +164,22 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
     const { data } = await getDataSourceInfo(params)
     if (data.code === 200) {
       setDatasources(data.data.items)
+    } else {
+      message.error(data.msg)
     }
   }
-  const onDatasourcesSelect = async val => {
+  const onDatasourcesSelect = async (val, index) => {
     if (val !== undefined) {
       const { data } = await getTableNameInfo(val)
       if (data.code === 200) {
         setTableData(data.data)
+      } else {
+        message.error(data.msg)
       }
     }
   }
   const onTableSelect = async (val, index) => {
+    formatSchemaPreview(nodeState.index, false)
     if (val !== undefined) {
       const { data } = await getTableSchemaInfo({
         id: OutputDataForm.getFieldValue(`datasource${index}`),
@@ -184,6 +191,8 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
           return { dataField: strs[1], dataType: strs[2] }
         })
         handleSyncData(schemas, nodes[index]?.data.output_source, index)
+      } else {
+        message.error(data.msg)
       }
     }
   }
@@ -230,6 +239,7 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
     }
 
     setNodeSchema({ index, list: syncList })
+    formatSchemaPreview(index, true)
   }
 
   const showStructure = index => {
@@ -247,11 +257,18 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
     nodes.forEach((_, index) => {
       const datasource = OutputDataForm.getFieldValue(`datasource${index}`)
       const table = OutputDataForm.getFieldValue(`sourceTable${index}`)
-      onDatasourcesSelect(datasource)
+      onDatasourcesSelect(datasource, index)
       onTableSelect(table, index)
     })
   }, [nodes])
 
+  const formatSchemaPreview = (index, status) => {
+    const prewStatus = { ...schemasPreview }
+    prewStatus[index] = status
+    console.log(prewStatus)
+    setSchemasPreview(prewStatus)
+  }
+
   useEffect(() => {
     const states = { ...nodeStates }
     states[nodeState.index] = nodeState.state
@@ -286,7 +303,7 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
                     rules={[{ required: true, message: '请选择数据源!' }]}
                     label={item.name}
                     className="dtsource">
-                    <Select allowClear onSelect={onDatasourcesSelect}>
+                    <Select onSelect={val => onDatasourcesSelect(val, index)}>
                       {datasources.map(item => (
                         <Option key={item.id} value={item.id}>
                           {item.datasource_name}
@@ -299,9 +316,7 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
                     label="选择表"
                     rules={[{ required: true, message: '请选择表!' }]}
                     className="item-choseList">
-                    <Select
-                      allowClear
-                      onSelect={val => onTableSelect(val, index)}>
+                    <Select onSelect={val => onTableSelect(val, index)}>
                       {tableData.map(item => (
                         <Option key={item} value={item}>
                           {item}
@@ -313,7 +328,10 @@ export default function JobStepTwo({ OutputDataForm, dagData, checkSync }) {
                     type={nodeStates[index] ? 'success' : 'warning'}
                     showIcon
                     className="stateIcon"></Alert>
-                  <Button type="primary" onClick={() => showStructure(index)}>
+                  <Button
+                    type="primary"
+                    disabled={!schemasPreview[index]}
+                    onClick={() => showStructure(index)}>
                     结构预览
                   </Button>
                 </Row>

+ 24 - 7
src/module/workmgmt/component/JobStepTwo.jsx

@@ -135,6 +135,8 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
   // 所有预览map
   const [nodeSchemas, setNodeSchemas] = useState({})
 
+  const [schemasPreview, setSchemasPreview] = useState({})
+
   const [nodeSchema, setNodeSchema] = useState({})
 
   //所有节点预览状态
@@ -160,17 +162,22 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
     const { data } = await getDataSourceInfo(params)
     if (data.code === 200) {
       setDatasources(data.data.items)
+    } else {
+      message.error(data.msg)
     }
   }
-  const onDatasourcesSelect = async val => {
+  const onDatasourcesSelect = async (val, index) => {
     if (val !== undefined) {
       const { data } = await getTableNameInfo(val)
       if (data.code === 200) {
         setTableData(data.data)
+      } else {
+        message.error(data.msg)
       }
     }
   }
   const onTableSelect = async (val, index) => {
+    formatSchemaPreview(nodeState.index, false)
     if (val !== undefined) {
       const { data } = await getTableSchemaInfo({
         id: InputDataForm.getFieldValue(`datasource${index}`),
@@ -182,6 +189,8 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
           return { dataField: strs[1], dataType: strs[2] }
         })
         handleSyncData(schemas, nodes[index]?.data.input_source, index)
+      } else {
+        message.error(data.msg)
       }
     }
   }
@@ -228,6 +237,7 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
     }
 
     setNodeSchema({ index, list: syncList })
+    formatSchemaPreview(index, true)
   }
 
   const showStructure = index => {
@@ -245,11 +255,17 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
     nodes.forEach((_, index) => {
       const datasource = InputDataForm.getFieldValue(`datasource${index}`)
       const table = InputDataForm.getFieldValue(`sourceTable${index}`)
-      onDatasourcesSelect(datasource)
+      onDatasourcesSelect(datasource, index)
       onTableSelect(table, index)
     })
   }, [nodes])
 
+  const formatSchemaPreview = (index, status) => {
+    const prewStatus = { ...schemasPreview }
+    prewStatus[index] = status
+    setSchemasPreview(prewStatus)
+  }
+
   useEffect(() => {
     const states = { ...nodeStates }
     states[nodeState.index] = nodeState.state
@@ -284,7 +300,7 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
                     rules={[{ required: true, message: '请选择数据源!' }]}
                     label={item.name}
                     className="dtsource">
-                    <Select allowClear onSelect={onDatasourcesSelect}>
+                    <Select onSelect={val => onDatasourcesSelect(val, index)}>
                       {datasources.map(item => (
                         <Option key={item.id} value={item.id}>
                           {item.datasource_name}
@@ -297,9 +313,7 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
                     label="选择表"
                     rules={[{ required: true, message: '请选择表!' }]}
                     className="item-choseList">
-                    <Select
-                      allowClear
-                      onSelect={val => onTableSelect(val, index)}>
+                    <Select onSelect={val => onTableSelect(val, index)}>
                       {tableData.map(item => (
                         <Option key={item} value={item}>
                           {item}
@@ -311,7 +325,10 @@ export default function JobStepTwo({ InputDataForm, dagData, checkSync }) {
                     type={nodeStates[index] ? 'success' : 'warning'}
                     showIcon
                     className="stateIcon"></Alert>
-                  <Button type="primary" onClick={() => showStructure(index)}>
+                  <Button
+                    type="primary"
+                    onClick={() => showStructure(index)}
+                    disabled={!schemasPreview[index]}>
                     结构预览
                   </Button>
                 </Row>

+ 6 - 0
src/module/workmgmt/services/index.js

@@ -90,3 +90,9 @@ export const uploadFile = params =>
     method: 'post',
     data: params,
   })
+
+export const deleteFile = uri =>
+  request({
+    url: `/jpt/files/dag?uri=${uri}`,
+    method: 'delete',
+  })