mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-22 17:31:03 +01:00
278 lines
7.0 KiB
Go
278 lines
7.0 KiB
Go
import request from '../../api/request'
|
|
|
|
const state = {
|
|
// TaskList
|
|
taskList: [],
|
|
taskListTotalCount: 0,
|
|
taskForm: {},
|
|
taskResultsData: [],
|
|
taskResultsColumns: [],
|
|
taskResultsTotalCount: 0,
|
|
// filter
|
|
filter: {
|
|
node_id: '',
|
|
spider_id: '',
|
|
status: '',
|
|
schedule_id: '',
|
|
type: 'spider'
|
|
},
|
|
// pagination
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
// log
|
|
currentLogIndex: 0,
|
|
logKeyword: '',
|
|
errorLogData: [],
|
|
isLogAutoScroll: false,
|
|
isLogAutoFetch: false,
|
|
isLogFetchLoading: false,
|
|
taskLog: [],
|
|
taskLogTotal: 0,
|
|
taskLogPage: 1,
|
|
taskLogPageSize: 5000,
|
|
activeErrorLogItem: {},
|
|
// results
|
|
resultsPageNum: 1,
|
|
resultsPageSize: 10,
|
|
// batch crawl
|
|
batchCrawlList: []
|
|
}
|
|
|
|
const getters = {
|
|
taskResultsColumns(state) {
|
|
if (!state.taskResultsData || !state.taskResultsData.length) {
|
|
return []
|
|
}
|
|
const keys = []
|
|
const item = state.taskResultsData[0]
|
|
for (const key in item) {
|
|
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
keys.push(key)
|
|
}
|
|
}
|
|
return keys
|
|
},
|
|
logData(state) {
|
|
const data = state.taskLog
|
|
.map((d, i) => {
|
|
return {
|
|
index: i + 1,
|
|
active: state.currentLogIndex === i + 1,
|
|
data: d.msg,
|
|
...d
|
|
}
|
|
})
|
|
if (state.taskForm && state.taskForm.status === 'running') {
|
|
data.push({
|
|
index: data.length + 1,
|
|
data: '###LOG_END###'
|
|
})
|
|
data.push({
|
|
index: data.length + 1,
|
|
data: ''
|
|
})
|
|
}
|
|
return data
|
|
},
|
|
errorLogData(state, getters) {
|
|
const idxList = getters.logData.map(d => d._id)
|
|
return state.errorLogData.map(d => {
|
|
const idx = idxList.indexOf(d._id)
|
|
d.index = getters.logData[idx].index
|
|
return d
|
|
})
|
|
}
|
|
}
|
|
|
|
const mutations = {
|
|
SET_TASK_FORM(state, value) {
|
|
state.taskForm = value
|
|
},
|
|
SET_TASK_LIST(state, value) {
|
|
state.taskList = value
|
|
},
|
|
SET_TASK_LOG(state, value) {
|
|
state.taskLog = value
|
|
},
|
|
SET_TASK_LOG_TOTAL(state, value) {
|
|
state.taskLogTotal = value
|
|
},
|
|
SET_CURRENT_LOG_INDEX(state, value) {
|
|
state.currentLogIndex = value
|
|
},
|
|
SET_TASK_RESULTS_DATA(state, value) {
|
|
state.taskResultsData = value
|
|
},
|
|
SET_TASK_RESULTS_COLUMNS(state, value) {
|
|
state.taskResultsColumns = value
|
|
},
|
|
SET_PAGE_NUM(state, value) {
|
|
state.pageNum = value
|
|
},
|
|
SET_PAGE_SIZE(state, value) {
|
|
state.pageSize = value
|
|
},
|
|
SET_TASK_LIST_TOTAL_COUNT(state, value) {
|
|
state.taskListTotalCount = value
|
|
},
|
|
SET_RESULTS_PAGE_NUM(state, value) {
|
|
state.resultsPageNum = value
|
|
},
|
|
SET_RESULTS_PAGE_SIZE(state, value) {
|
|
state.resultsPageSize = value
|
|
},
|
|
SET_TASK_RESULTS_TOTAL_COUNT(state, value) {
|
|
state.taskResultsTotalCount = value
|
|
},
|
|
SET_LOG_KEYWORD(state, value) {
|
|
state.logKeyword = value
|
|
},
|
|
SET_ERROR_LOG_DATA(state, value) {
|
|
state.errorLogData = value
|
|
},
|
|
SET_TASK_LOG_PAGE(state, value) {
|
|
state.taskLogPage = value
|
|
},
|
|
SET_TASK_LOG_PAGE_SIZE(state, value) {
|
|
state.taskLogPageSize = value
|
|
},
|
|
SET_IS_LOG_AUTO_SCROLL(state, value) {
|
|
state.isLogAutoScroll = value
|
|
},
|
|
SET_IS_LOG_AUTO_FETCH(state, value) {
|
|
state.isLogAutoFetch = value
|
|
},
|
|
SET_IS_LOG_FETCH_LOADING(state, value) {
|
|
state.isLogFetchLoading = value
|
|
},
|
|
SET_ACTIVE_ERROR_LOG_ITEM(state, value) {
|
|
state.activeErrorLogItem = value
|
|
},
|
|
SET_BATCH_CRAWL_LIST(state, value) {
|
|
state.batchCrawlList = value
|
|
},
|
|
SET_IS_BATCH_CRAWL_DIALOG_VISIBLE(state, value) {
|
|
state.isBatchCrawlDialogVisible = value
|
|
}
|
|
}
|
|
|
|
const actions = {
|
|
getTaskData({ state, dispatch, commit }, id) {
|
|
return request.get(`/tasks/${id}`)
|
|
.then(response => {
|
|
const data = response.data.data
|
|
commit('SET_TASK_FORM', data)
|
|
dispatch('spider/getSpiderData', data.spider_id, { root: true })
|
|
if (data.node_id && data.node_id !== '000000000000000000000000') {
|
|
dispatch('node/getNodeData', data.node_id, { root: true })
|
|
}
|
|
})
|
|
},
|
|
getTaskList({ state, commit }) {
|
|
return request.get('/tasks', {
|
|
page_num: state.pageNum,
|
|
page_size: state.pageSize,
|
|
node_id: state.filter.node_id || undefined,
|
|
spider_id: state.filter.spider_id || undefined,
|
|
status: state.filter.status || undefined,
|
|
schedule_id: state.filter.schedule_id || undefined,
|
|
type: state.filter.type || undefined
|
|
})
|
|
.then(response => {
|
|
commit('SET_TASK_LIST', response.data.data || [])
|
|
commit('SET_TASK_LIST_TOTAL_COUNT', response.data.total)
|
|
})
|
|
},
|
|
deleteTask({ state, dispatch }, id) {
|
|
return request.delete(`/tasks/${id}`)
|
|
.then(() => {
|
|
dispatch('getTaskList')
|
|
})
|
|
},
|
|
deleteTaskMultiple({ state }, ids) {
|
|
return request.delete(`/tasks`, {
|
|
ids: ids
|
|
})
|
|
},
|
|
restartTask({ state, dispatch }, id) {
|
|
return request.post(`/tasks/${id}/restart`)
|
|
.then(() => {
|
|
dispatch('getTaskList')
|
|
})
|
|
},
|
|
getTaskLog({ state, commit }, { id, keyword }) {
|
|
return request.get(`/tasks/${id}/log`, {
|
|
keyword,
|
|
page_num: state.taskLogPage,
|
|
page_size: state.taskLogPageSize
|
|
})
|
|
.then(response => {
|
|
commit('SET_TASK_LOG', response.data.data || [])
|
|
commit('SET_TASK_LOG_TOTAL', response.data.total || 0)
|
|
|
|
// auto switch to next page if not reaching the end
|
|
if (state.isLogAutoScroll && state.taskLogTotal >
|
|
(state.taskLogPage * state.taskLogPageSize)) {
|
|
commit('SET_TASK_LOG_PAGE',
|
|
Math.ceil(state.taskLogTotal / state.taskLogPageSize))
|
|
}
|
|
})
|
|
},
|
|
getTaskErrorLog({ state, commit }, id) {
|
|
return request.get(`/tasks/${id}/error-log`, {})
|
|
.then(response => {
|
|
commit('SET_ERROR_LOG_DATA', response.data.data || [])
|
|
})
|
|
},
|
|
getTaskResults({ state, commit }, id) {
|
|
return request.get(`/tasks/${id}/results`, {
|
|
page_num: state.resultsPageNum,
|
|
page_size: state.resultsPageSize
|
|
})
|
|
.then(response => {
|
|
commit('SET_TASK_RESULTS_DATA', response.data.data)
|
|
// commit('SET_TASK_RESULTS_COLUMNS', response.data.fields)
|
|
commit('SET_TASK_RESULTS_TOTAL_COUNT', response.data.total)
|
|
})
|
|
},
|
|
async getTaskResultExcel({ state, commit }, id) {
|
|
const { data } = await request.get('/tasks/' + id + '/results/download', {}, {
|
|
responseType: 'blob' // important
|
|
})
|
|
const downloadUrl = window.URL.createObjectURL(new Blob([data]))
|
|
|
|
const link = document.createElement('a')
|
|
|
|
link.href = downloadUrl
|
|
|
|
link.setAttribute('download', 'data.csv') // any other extension
|
|
|
|
document.body.appendChild(link)
|
|
link.click()
|
|
link.remove()
|
|
},
|
|
async cancelTask({ state, dispatch }, id) {
|
|
const res = await request.post(`/tasks/${id}/cancel`)
|
|
dispatch('getTaskData', id)
|
|
return res
|
|
},
|
|
async cancelTaskMultiple({ dispatch }, ids) {
|
|
return await request.post(`/tasks-cancel`, {
|
|
ids
|
|
})
|
|
},
|
|
async restartTaskMultiple({ dispatch }, ids) {
|
|
return await request.post(`/tasks-restart`, {
|
|
ids
|
|
})
|
|
}
|
|
}
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
mutations,
|
|
actions
|
|
}
|