Merge pull request #59 from TeslaCN/fixes-54
Support job name input suggestions fo history status page
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/dao/search/JobStatusTraceLogRepository.java b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/dao/search/JobStatusTraceLogRepository.java
index 378968d..e8165c9 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/dao/search/JobStatusTraceLogRepository.java
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/dao/search/JobStatusTraceLogRepository.java
@@ -20,6 +20,20 @@
import org.apache.shardingsphere.elasticjob.lite.ui.domain.JobStatusTraceLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
public interface JobStatusTraceLogRepository extends JpaRepository<JobStatusTraceLog, String>, JpaSpecificationExecutor<JobStatusTraceLog> {
+
+ /**
+ * Find all job names in job status trace log with specific prefix.
+ *
+ * @param prefix job name prefix
+ * @return matched job names
+ */
+ @SuppressWarnings("SpringDataRepositoryMethodReturnTypeInspection")
+ @Query("select distinct l.jobName from JobStatusTraceLog l where l.jobName like :prefix%")
+ List<String> findJobNameByJobNameLike(@Param("prefix") String prefix);
}
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/domain/JobStatusTraceLog.java b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/domain/JobStatusTraceLog.java
index 6f804b1..d0e62f3 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/domain/JobStatusTraceLog.java
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/domain/JobStatusTraceLog.java
@@ -23,10 +23,12 @@
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
+import javax.persistence.Table;
import java.util.Date;
@Data
-@Entity(name = "JOB_STATUS_TRACE_LOG")
+@Table(name = "JOB_STATUS_TRACE_LOG")
+@Entity
public class JobStatusTraceLog {
@Id
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/EventTraceHistoryService.java b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/EventTraceHistoryService.java
index 2630de8..c880079 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/EventTraceHistoryService.java
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/EventTraceHistoryService.java
@@ -61,4 +61,12 @@
* @return job status trace events
*/
Page<JobStatusTraceEvent> findJobStatusTraceEvents(FindJobStatusTraceEventsRequest findJobStatusTraceEventsRequest);
+
+ /**
+ * Find job names with specific prefix in status trace log.
+ *
+ * @param jobNamePrefix job name prefix
+ * @return matched job names
+ */
+ List<String> findJobNamesInStatusTraceLog(String jobNamePrefix);
}
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/impl/EventTraceHistoryServiceImpl.java b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/impl/EventTraceHistoryServiceImpl.java
index 5c3c234..db55b9d 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/impl/EventTraceHistoryServiceImpl.java
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/service/impl/EventTraceHistoryServiceImpl.java
@@ -91,6 +91,11 @@
return new PageImpl<>(page.getContent().stream().map(JobStatusTraceLog::toJobStatusTraceEvent).collect(Collectors.toList()), null, page.getTotalElements());
}
+ @Override
+ public List<String> findJobNamesInStatusTraceLog(final String jobNamePrefix) {
+ return jobStatusTraceLogRepository.findJobNameByJobNameLike(jobNamePrefix);
+ }
+
private <T> Pageable getPageable(final BasePageRequest pageRequest, final Class<T> clazz) {
int page = 0;
int perPage = BasePageRequest.DEFAULT_PAGE_SIZE;
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/web/controller/EventTraceHistoryController.java b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/web/controller/EventTraceHistoryController.java
index 19e5de8..d40c200 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/web/controller/EventTraceHistoryController.java
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-backend/src/main/java/org/apache/shardingsphere/elasticjob/lite/ui/web/controller/EventTraceHistoryController.java
@@ -98,6 +98,17 @@
return ResponseResultUtil.build(BasePageResponse.of(jobStatusTraceEvents));
}
+ /**
+ * Find all job names with specific prefix in status trace log.
+ *
+ * @param jobNamePrefix job name prefix
+ * @return matched job names
+ */
+ @GetMapping(value = {"/status/jobNames", "/status/jobNames/{jobNamePrefix}"})
+ public ResponseResult<List<String>> findJobNamesByPrefixInStatusTraceLog(@PathVariable(required = false) final String jobNamePrefix) {
+ return ResponseResultUtil.build(eventTraceHistoryService.findJobNamesInStatusTraceLog(Optional.ofNullable(jobNamePrefix).orElse("")));
+ }
+
@ModelAttribute
private void initDataSource() {
eventTraceDataSourceConfigurationService.loadActivated().ifPresent(SessionEventTraceDataSourceConfiguration::setDataSourceConfiguration);
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/api.js b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/api.js
index a473778..cb33005 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/api.js
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/api.js
@@ -18,5 +18,6 @@
import API from '@/utils/api'
export default {
- loadStatus: (params = {}) => API.post(`/api/event-trace/status`, params)
+ loadStatus: (params = {}) => API.post(`/api/event-trace/status`, params),
+ getStatusJobNameSuggestions: (jobNamePrefix = '') => API.get(`/api/event-trace/status/jobNames/${jobNamePrefix}`)
}
diff --git a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/module/historyStatus.vue b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/module/historyStatus.vue
index bf4505a..e7a5676 100644
--- a/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/module/historyStatus.vue
+++ b/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/src/views/history-status/module/historyStatus.vue
@@ -18,11 +18,12 @@
<template>
<el-row class="box-card">
<div class="btn-group" style="">
- <el-input
+ <el-autocomplete
:placeholder="$t('historyStatus.searchForm.jobName')"
+ :fetch-suggestions="fetchJobNameSuggestions"
v-model="searchForm.jobName"
clearable>
- </el-input>
+ </el-autocomplete>
<el-date-picker
:placeholder="$t('historyStatus.searchForm.startTime')"
v-model="searchForm.start"
@@ -152,6 +153,13 @@
},
methods: {
...mapActions(['setRegCenterActivated']),
+ fetchJobNameSuggestions(jobNamePrefix, callback) {
+ API.getStatusJobNameSuggestions(jobNamePrefix).then(res => {
+ const jobNames = res.model
+ const suggestions = jobNames.map(jobName => ({value: jobName}))
+ callback(suggestions)
+ })
+ },
handleCurrentChange(val) {
const page = {
pageSize: this.pageSize,