LogTable.jsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. import React, { useState, useEffect } from 'react'
  2. import { Table, Space, message } from 'antd'
  3. import moment from 'moment'
  4. import { useNavigate, useLocation } from 'react-router-dom'
  5. import { getLogList, refreshLogsStatus } from '../services/index'
  6. import styled from 'styled-components'
  7. const LogList = styled.div``
  8. const LogTable = () => {
  9. // 初始化日志列表
  10. const [logList, setLogList] = useState([])
  11. // 表格Loading状态
  12. const [dataLoading, setDataLoading] = useState(false)
  13. const [currentPage, setCurrentPage] = useState(1)
  14. const [currentPageSize, setCurrentPageSize] = useState(10)
  15. const [dataTotal, setDataTotal] = useState(0)
  16. const navigate = useNavigate()
  17. const { state } = useLocation()
  18. const changeTask = () => {
  19. message.success('终止成功')
  20. }
  21. const checkLog = id => {
  22. navigate('/task-log/log-watcher', {
  23. state: { id },
  24. })
  25. }
  26. const columns = [
  27. {
  28. title: '任务名称',
  29. dataIndex: 'jobName',
  30. key: 'jobName',
  31. },
  32. {
  33. title: '任务类型',
  34. dataIndex: 'taskType',
  35. key: 'taskType',
  36. },
  37. {
  38. title: '任务标签',
  39. dataIndex: 'taskTag',
  40. key: 'taskTag',
  41. },
  42. {
  43. title: '调度时间',
  44. dataIndex: 'triggerTime',
  45. key: 'triggerTime',
  46. },
  47. {
  48. title: '调度结果',
  49. dataIndex: 'triggerResult',
  50. key: 'triggerResult',
  51. render: code => (
  52. <span
  53. style={{
  54. color: code === 0 ? '#FF4D4F' : code === 1 ? '#52C41A' : '#4A4A4A',
  55. }}>
  56. {code === 0 ? '失败' : code === 1 ? '成功' : '无'}
  57. </span>
  58. ),
  59. },
  60. {
  61. title: '执行时间',
  62. dataIndex: 'handleTime',
  63. key: 'handleTime',
  64. },
  65. {
  66. title: '执行结果',
  67. dataIndex: 'handleResult',
  68. key: 'handleResult',
  69. render: code => (
  70. <span
  71. style={{
  72. color: code === 3 ? '#FF4D4F' : code === 2 ? '#52C41A' : '#4A4A4A',
  73. }}>
  74. {code === 3
  75. ? '失败'
  76. : code === 2
  77. ? '成功'
  78. : code === 1
  79. ? '运行中'
  80. : code === 0
  81. ? '队列中'
  82. : '暂无'}
  83. </span>
  84. ),
  85. },
  86. {
  87. title: '操作',
  88. key: 'operation',
  89. render: (_, record) => (
  90. <Space size="middle">
  91. <span
  92. onClick={() => {
  93. checkLog(record.key)
  94. }}
  95. style={{ color: '#1881DA', cursor: 'pointer' }}>
  96. 查看
  97. </span>
  98. {/* <span
  99. onClick={() => {
  100. changeTask(record.key)
  101. }}
  102. style={{ color: '#1881DA', cursor: 'pointer' }}>
  103. 终止任务
  104. </span> */}
  105. </Space>
  106. ),
  107. },
  108. ]
  109. const fetchJoblog = async (page = 1, pageSize = 10) => {
  110. setDataLoading(true)
  111. const { data } = await getLogList({
  112. page: page,
  113. size: pageSize,
  114. id: state?.id,
  115. })
  116. if (data.code === 200) {
  117. setDataTotal(data.data.extra_data.total)
  118. setCurrentPage(data.data.extra_data.page)
  119. setCurrentPageSize(data.data.extra_data.size)
  120. const refreshLogs = []
  121. const list = data.data.item.map(item => {
  122. if ([0, 1].includes(item.execute_result)) {
  123. refreshLogs.push(item.id)
  124. }
  125. return {
  126. key: item.id,
  127. jobName: item.job_name,
  128. triggerTime: moment(Math.round(item.trigger_time) * 1000).format(
  129. 'YYYY.MM.DD HH:mm:ss'
  130. ),
  131. triggerResult: item.trigger_result,
  132. handleTime: moment(Math.round(item.execute_time) * 1000).format(
  133. 'YYYY.MM.DD HH:mm:ss'
  134. ),
  135. handleResult: item.execute_result,
  136. taskType: item.job_type,
  137. taskTag: item.job_tag,
  138. afJobId: item.af_job_id,
  139. runId: item.run_id,
  140. }
  141. })
  142. setLogList(list)
  143. refreshStatus(refreshLogs)
  144. }
  145. setDataLoading(false)
  146. }
  147. const refreshStatus = async refreshLogs => {
  148. if (refreshLogs.length !== 0) {
  149. const { data } = await refreshLogsStatus(refreshLogs.toString())
  150. if (data.code === 200) {
  151. const list = []
  152. let logs = []
  153. console.log(data.data)
  154. const keys = Object.keys(data.data)
  155. keys.forEach(item => {
  156. if ([2, 3].includes(data.data[item])) {
  157. logs = logList.map(logData => {
  158. if (logData.id === item) {
  159. logData.execute_result = data.data[item]
  160. }
  161. return logData
  162. })
  163. } else {
  164. list.push(item)
  165. }
  166. })
  167. if (logs.length !== 0) {
  168. setLogList(logs)
  169. }
  170. setTimeout(() => {
  171. refreshStatus(list)
  172. }, 10000)
  173. } else {
  174. message.error(data.msg)
  175. }
  176. }
  177. }
  178. const pageChange = (page, pageSize) => {
  179. fetchJoblog(page, pageSize)
  180. }
  181. useEffect(() => {
  182. fetchJoblog()
  183. }, [])
  184. return (
  185. <LogList>
  186. <Table
  187. columns={columns}
  188. dataSource={logList}
  189. bordered
  190. loading={dataLoading}
  191. pagination={{
  192. current: currentPage,
  193. total: dataTotal,
  194. pageSize: currentPageSize,
  195. onChange: pageChange,
  196. }}
  197. />
  198. </LogList>
  199. )
  200. }
  201. export default LogTable