This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 71a7a52d669f3c33b6efd7f9bbc80a5b1dfd894a
Author: lixiang <447399...@qq.com>
AuthorDate: Wed Jul 5 19:47:38 2023 +0800

    KYLIN-5763 Fix query history model filter
---
 .../metadata/query/JdbcQueryHistoryStore.java      | 13 +-----
 .../kylin/metadata/query/QueryHistoryDAO.java      |  2 +-
 .../kylin/metadata/query/RDBMSQueryHistoryDAO.java |  4 +-
 .../metadata/query/RDBMSQueryHistoryDaoTest.java   |  5 +--
 .../kylin/rest/controller/NQueryController.java    | 37 +++++++--------
 .../rest/controller/NQueryControllerTest.java      | 20 ++++++---
 .../rest/response/QueryHistoryFiltersResponse.java | 49 ++++++++++++++++++++
 .../kylin/rest/service/QueryHistoryService.java    | 52 +++++++++++-----------
 .../rest/service/QueryHistoryServiceTest.java      | 26 +++++++----
 9 files changed, 131 insertions(+), 77 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
index da5b152073..6ffbd9eac0 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/JdbcQueryHistoryStore.java
@@ -214,7 +214,7 @@ public class JdbcQueryHistoryStore {
         }
     }
 
-    public List<QueryStatistics> 
queryQueryHistoriesModelIds(QueryHistoryRequest request, int size) {
+    public List<QueryStatistics> 
queryQueryHistoriesModelIds(QueryHistoryRequest request) {
         try (SqlSession session = sqlSessionFactory.openSession()) {
             QueryStatisticsMapper mapper = 
session.getMapper(QueryStatisticsMapper.class);
             SelectStatementProvider statementProvider1 = 
selectDistinct(queryHistoryTable.engineType)
@@ -222,16 +222,7 @@ public class JdbcQueryHistoryStore {
                     .where(queryHistoryTable.engineType, 
isNotEqualTo("NATIVE")) //
                     .and(queryHistoryTable.projectName, 
isEqualTo(request.getProject())) //
                     .build().render(RenderingStrategies.MYBATIS3);
-            List<QueryStatistics> engineTypes = 
mapper.selectMany(statementProvider1);
-
-            SelectStatementProvider statementProvider2 = 
selectDistinct(queryHistoryRealizationTable.model)
-                    .from(queryHistoryRealizationTable) //
-                    .where(queryHistoryRealizationTable.projectName, 
isEqualTo(request.getProject())) //
-                    .limit(size) //
-                    .build().render(RenderingStrategies.MYBATIS3);
-            List<QueryStatistics> modelIds = 
mapper.selectMany(statementProvider2);
-            engineTypes.addAll(modelIds);
-            return engineTypes;
+            return mapper.selectMany(statementProvider1);
         }
     }
 
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
index 882dc78477..66f1d4aa22 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/QueryHistoryDAO.java
@@ -63,7 +63,7 @@ public interface QueryHistoryDAO {
 
     List<QueryHistory> getQueryHistoriesSubmitters(QueryHistoryRequest 
request, int size);
 
-    List<QueryStatistics> getQueryHistoriesModelIds(QueryHistoryRequest 
request, int size);
+    List<QueryStatistics> getQueryHistoriesModelIds(QueryHistoryRequest 
request);
 
     String getRealizationMetricMeasurement();
 
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
index 64d874d1e6..3592dbec22 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDAO.java
@@ -184,8 +184,8 @@ public class RDBMSQueryHistoryDAO implements 
QueryHistoryDAO {
         return jdbcQueryHisStore.queryQueryHistoriesSubmitters(request, size);
     }
 
-    public List<QueryStatistics> getQueryHistoriesModelIds(QueryHistoryRequest 
request, int size) {
-        return jdbcQueryHisStore.queryQueryHistoriesModelIds(request, size);
+    public List<QueryStatistics> getQueryHistoriesModelIds(QueryHistoryRequest 
request) {
+        return jdbcQueryHisStore.queryQueryHistoriesModelIds(request);
     }
 
     public QueryStatistics getQueryCountAndAvgDuration(long startTime, long 
endTime, String project) {
diff --git 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
index 2651f64b81..30cd2d37d0 100644
--- 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
+++ 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/query/RDBMSQueryHistoryDaoTest.java
@@ -722,11 +722,10 @@ public class RDBMSQueryHistoryDaoTest extends 
NLocalFileMetadataTestCase {
         queryHistoryRequest.setAdmin(true);
         queryHistoryRequest.setUsername(ADMIN);
         queryHistoryRequest.setProject(PROJECT);
-        List<QueryStatistics> modelList = 
queryHistoryDAO.getQueryHistoriesModelIds(queryHistoryRequest, 5);
-        Assert.assertEquals(3, modelList.size());
+        List<QueryStatistics> modelList = 
queryHistoryDAO.getQueryHistoriesModelIds(queryHistoryRequest);
+        Assert.assertEquals(2, modelList.size());
         Assert.assertEquals("RDBMS", modelList.get(0).getEngineType());
         Assert.assertEquals("HIVE", modelList.get(1).getEngineType());
-        Assert.assertEquals("82fa7671-a935-45f5-8779-85703601f49a.json", 
modelList.get(2).getModel());
     }
 
     @Test
diff --git 
a/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
 
b/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
index d6ca97cecc..9f16d94e68 100644
--- 
a/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
+++ 
b/src/query-server/src/main/java/org/apache/kylin/rest/controller/NQueryController.java
@@ -18,12 +18,12 @@
 
 package org.apache.kylin.rest.controller;
 
+import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
+import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.FAILED_DOWNLOAD_FILE;
 import static org.apache.kylin.common.exception.ServerErrorCode.INVALID_NAME;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.PERMISSION_DENIED;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.REDIS_CLEAR_ERROR;
-import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
-import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON;
 
 import java.io.IOException;
 import java.io.OutputStreamWriter;
@@ -53,31 +53,34 @@ import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.exception.KylinTimeoutException;
 import org.apache.kylin.common.exception.QueryErrorCode;
 import org.apache.kylin.common.msg.MsgPicker;
+import 
org.apache.kylin.common.persistence.transaction.StopQueryBroadcastEventNotifier;
+import org.apache.kylin.common.scheduler.EventBusFactory;
+import org.apache.kylin.guava30.shaded.common.base.Preconditions;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
+import org.apache.kylin.metadata.query.QueryHistoryRequest;
+import org.apache.kylin.metadata.query.util.QueryHisTransformStandardUtil;
 import org.apache.kylin.metadata.querymeta.SelectedColumnMeta;
 import org.apache.kylin.metadata.querymeta.TableMetaWithType;
+import org.apache.kylin.query.plugin.asyncprofiler.AsyncProfiling;
+import org.apache.kylin.rest.cluster.ClusterManager;
 import org.apache.kylin.rest.exception.ForbiddenException;
 import org.apache.kylin.rest.exception.InternalErrorException;
 import org.apache.kylin.rest.model.Query;
 import org.apache.kylin.rest.request.PrepareSqlRequest;
+import org.apache.kylin.rest.request.SQLFormatRequest;
 import org.apache.kylin.rest.request.SQLRequest;
 import org.apache.kylin.rest.request.SaveSqlRequest;
 import org.apache.kylin.rest.response.DataResult;
 import org.apache.kylin.rest.response.EnvelopeResponse;
+import org.apache.kylin.rest.response.QueryHistoryFiltersResponse;
+import org.apache.kylin.rest.response.QueryStatisticsResponse;
 import org.apache.kylin.rest.response.SQLResponse;
 import org.apache.kylin.rest.response.ServerExtInfoResponse;
-import org.apache.kylin.rest.service.QueryService;
-import org.apache.kylin.rest.util.AclEvaluate;
-import 
org.apache.kylin.common.persistence.transaction.StopQueryBroadcastEventNotifier;
-import org.apache.kylin.common.scheduler.EventBusFactory;
-import org.apache.kylin.metadata.query.QueryHistoryRequest;
-import org.apache.kylin.metadata.query.util.QueryHisTransformStandardUtil;
-import org.apache.kylin.query.plugin.asyncprofiler.AsyncProfiling;
-import org.apache.kylin.rest.cluster.ClusterManager;
-import org.apache.kylin.rest.request.SQLFormatRequest;
-import org.apache.kylin.rest.response.QueryStatisticsResponse;
 import org.apache.kylin.rest.response.ServerInfoResponse;
 import org.apache.kylin.rest.service.QueryCacheManager;
 import org.apache.kylin.rest.service.QueryHistoryService;
+import org.apache.kylin.rest.service.QueryService;
+import org.apache.kylin.rest.util.AclEvaluate;
 import org.apache.kylin.util.DataRangeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,9 +103,6 @@ import org.supercsv.io.CsvListWriter;
 import org.supercsv.io.ICsvListWriter;
 import org.supercsv.prefs.CsvPreference;
 
-import org.apache.kylin.guava30.shaded.common.base.Preconditions;
-import org.apache.kylin.guava30.shaded.common.collect.Maps;
-
 import io.swagger.annotations.ApiOperation;
 import lombok.val;
 import redis.clients.jedis.exceptions.JedisException;
@@ -414,15 +414,16 @@ public class NQueryController extends NBasicController {
     @ApiOperation(value = "getQueryHistoryModels", tags = { "QE" }, notes = 
"Update Param: project, model_name")
     @GetMapping(value = "/query_history_models")
     @ResponseBody
-    public EnvelopeResponse<List<String>> 
getQueryHistoryModels(@RequestParam(value = "project") String project,
+    public EnvelopeResponse<QueryHistoryFiltersResponse> getQueryHistoryModels(
+            @RequestParam(value = "project") String project,
             @RequestParam(value = "model_name", required = false) String 
modelAlias,
             @RequestParam(value = "page_size", required = false, defaultValue 
= "100") Integer size) {
         checkProjectName(project);
         QueryHistoryRequest request = new QueryHistoryRequest();
         request.setProject(project);
         request.setFilterModelName(modelAlias);
-        List<String> modelNames = 
queryHistoryService.getQueryHistoryModels(request, size);
-        return new EnvelopeResponse<>(KylinException.CODE_SUCCESS, modelNames, 
"");
+        return new EnvelopeResponse<>(KylinException.CODE_SUCCESS,
+                queryHistoryService.getQueryHistoryModels(request, size), "");
     }
 
     @ApiOperation(value = "queryHistoryTiredStorageMetrics", tags = {"QE"}, 
notes = "Update Param: project, query_id")
diff --git 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryControllerTest.java
 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryControllerTest.java
index 51cef2da6f..d6e96b7baf 100644
--- 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryControllerTest.java
+++ 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryControllerTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -36,6 +37,8 @@ import org.apache.kylin.common.exception.QueryErrorCode;
 import org.apache.kylin.common.msg.MsgPicker;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.guava30.shaded.common.collect.Maps;
 import org.apache.kylin.metadata.query.NativeQueryRealization;
 import org.apache.kylin.metadata.query.QueryHistory;
 import org.apache.kylin.metadata.query.QueryHistoryInfo;
@@ -46,6 +49,7 @@ import org.apache.kylin.rest.model.Query;
 import org.apache.kylin.rest.request.PrepareSqlRequest;
 import org.apache.kylin.rest.request.SQLRequest;
 import org.apache.kylin.rest.request.SaveSqlRequest;
+import org.apache.kylin.rest.response.QueryHistoryFiltersResponse;
 import org.apache.kylin.rest.response.ServerInfoResponse;
 import org.apache.kylin.rest.service.QueryCacheManager;
 import org.apache.kylin.rest.service.QueryHistoryService;
@@ -67,9 +71,6 @@ import 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-import org.apache.kylin.guava30.shaded.common.collect.Maps;
-
 import redis.clients.jedis.exceptions.JedisException;
 
 /**
@@ -581,15 +582,20 @@ public class NQueryControllerTest extends 
NLocalFileMetadataTestCase {
         final List<String> models = Lists.newArrayList();
         models.add("MODEL1");
         models.add("MODEL2");
+        Map<String, List<String>> result = Maps.newHashMap();
+        result.put("MODEL", models);
 
-        Mockito.when(queryHistoryService.getQueryHistoryModels(request, 
3)).thenReturn(models);
+        Mockito.when(queryHistoryService.getQueryHistoryModels(request, 3))
+                .thenReturn(new QueryHistoryFiltersResponse(10, 15, 
Collections.EMPTY_LIST, models));
         
mockMvc.perform(MockMvcRequestBuilders.get("/api/query/query_history_models")
                 .contentType(MediaType.APPLICATION_JSON).param("project", 
PROJECT).param("model_name", "MODEL")
                 .param("page_size", 
"3").accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_JSON)))
                 .andExpect(MockMvcResultMatchers.status().isOk())
-                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.length()").value(2))
-                
.andExpect(MockMvcResultMatchers.jsonPath("$.data[0]").value("MODEL1"))
-                
.andExpect(MockMvcResultMatchers.jsonPath("$.data[1]").value("MODEL2"));
+                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.total_model_count").value(15))
+                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.search_count").value(10))
+                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.engines.length()").value(0))
+                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.models[0]").value("MODEL1"))
+                
.andExpect(MockMvcResultMatchers.jsonPath("$.data.models[1]").value("MODEL2"));
         Mockito.verify(nQueryController).getQueryHistoryModels(PROJECT, 
request.getFilterModelName(), 3);
     }
 
diff --git 
a/src/query-service/src/main/java/org/apache/kylin/rest/response/QueryHistoryFiltersResponse.java
 
b/src/query-service/src/main/java/org/apache/kylin/rest/response/QueryHistoryFiltersResponse.java
new file mode 100644
index 0000000000..f907d00220
--- /dev/null
+++ 
b/src/query-service/src/main/java/org/apache/kylin/rest/response/QueryHistoryFiltersResponse.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.rest.response;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@AllArgsConstructor
+@NoArgsConstructor
+public class QueryHistoryFiltersResponse {
+
+    //for frontend display
+    @JsonProperty("search_count")
+    private Integer searchCount;
+
+    //for frontend display
+    @JsonProperty("total_model_count")
+    private Integer totalModelCount;
+
+    @JsonProperty("engines")
+    private List<String> engines;
+
+    @JsonProperty("models")
+    private List<String> models;
+}
diff --git 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
index 929bc5228d..0200c2f080 100644
--- 
a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
+++ 
b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java
@@ -26,6 +26,7 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -37,6 +38,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -53,6 +55,7 @@ import 
org.apache.kylin.guava30.shaded.common.base.Preconditions;
 import org.apache.kylin.guava30.shaded.common.collect.ImmutableMap;
 import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.guava30.shaded.common.collect.Maps;
+import org.apache.kylin.metadata.cube.model.NDataflow;
 import org.apache.kylin.metadata.cube.model.NDataflowManager;
 import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
 import org.apache.kylin.metadata.favorite.QueryHistoryIdOffset;
@@ -70,6 +73,7 @@ import org.apache.kylin.metadata.query.QueryStatistics;
 import org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO;
 import org.apache.kylin.rest.exception.ForbiddenException;
 import org.apache.kylin.rest.response.NDataModelResponse;
+import org.apache.kylin.rest.response.QueryHistoryFiltersResponse;
 import org.apache.kylin.rest.response.QueryStatisticsResponse;
 import org.apache.kylin.rest.util.AclEvaluate;
 import org.slf4j.Logger;
@@ -165,9 +169,9 @@ public class QueryHistoryService extends BasicService 
implements AsyncTaskQueryH
             return ImmutableMap.of("total_scan_count", 0L, 
"source_result_count", 0L, "total_scan_bytes", 0L);
         }
 
-        return ImmutableMap.of("total_scan_count", 
queryHistories.get(0).getTotalScanCount(),
-                "source_result_count", 
queryHistories.get(0).getQueryHistoryInfo().getSourceResultCount(),
-                "total_scan_bytes", queryHistories.get(0).getTotalScanBytes());
+        return ImmutableMap.of("total_scan_count", 
queryHistories.get(0).getTotalScanCount(), "source_result_count",
+                
queryHistories.get(0).getQueryHistoryInfo().getSourceResultCount(), 
"total_scan_bytes",
+                queryHistories.get(0).getTotalScanBytes());
     }
 
     private void processRequestParams(QueryHistoryRequest request) {
@@ -264,31 +268,27 @@ public class QueryHistoryService extends BasicService 
implements AsyncTaskQueryH
         return 
queryHistories.stream().map(QueryHistory::getQuerySubmitter).collect(Collectors.toList());
     }
 
-    public List<String> getQueryHistoryModels(QueryHistoryRequest request, int 
size) {
+    public QueryHistoryFiltersResponse 
getQueryHistoryModels(QueryHistoryRequest request, int size) {
         QueryHistoryDAO queryHistoryDAO = getQueryHistoryDao();
-        
request.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
-        if (aclEvaluate.hasProjectAdminPermission(
-                
NProjectManager.getInstance(KylinConfig.getInstanceFromEnv()).getProject(request.getProject())))
 {
-            request.setAdmin(true);
-        }
-        List<QueryStatistics> queryStatistics = 
queryHistoryDAO.getQueryHistoriesModelIds(request, size);
+        List<QueryStatistics> queryStatistics = 
queryHistoryDAO.getQueryHistoriesModelIds(request);
+        val dataFlowManager = 
NDataflowManager.getInstance(KylinConfig.getInstanceFromEnv(), 
request.getProject());
+        Stream<String> engineStream = 
queryStatistics.stream().map(QueryStatistics::getEngineType);
+        List<NDataflow> models = dataFlowManager.listAllDataflows();
+        Stream<String> modelStream = models.stream()
+                .sorted(Comparator.comparing(NDataflow::getQueryHitCount, 
Comparator.reverseOrder()))
+                .map(NDataflow::getModel).map(NDataModel::getAlias);
+        List<String> engineList = filterByName(engineStream, 
request.getFilterModelName());
+        List<String> modelList = filterByName(modelStream, 
request.getFilterModelName());
+        Integer count = engineList.size() + modelList.size();
+        return new QueryHistoryFiltersResponse(count, models.size(), 
engineList,
+                modelList.stream().limit(size).collect(Collectors.toList()));
+    }
 
-        val dataflowManager = 
NDataflowManager.getInstance(KylinConfig.getInstanceFromEnv(), 
request.getProject());
-        val modelAliasMap = 
dataflowManager.listUnderliningDataModels().stream()
-                .collect(Collectors.toMap(RootPersistentEntity::getUuid, 
NDataModel::getAlias));
-
-        return queryStatistics.stream().map(query -> {
-            // engineType && modelId are both saved into queryStatistics
-            if (!StringUtils.isEmpty(query.getEngineType())) {
-                return query.getEngineType();
-            } else if (!StringUtils.isEmpty(query.getModel()) && 
modelAliasMap.containsKey(query.getModel())) {
-                return modelAliasMap.get(query.getModel());
-            } else {
-                return null;
-            }
-        }).filter(alias -> !StringUtils.isEmpty(alias) && 
(StringUtils.isEmpty(request.getFilterModelName())
-                || 
alias.toLowerCase(Locale.ROOT).contains(request.getFilterModelName().toLowerCase(Locale.ROOT))))
-                .limit(size).collect(Collectors.toList());
+    private List<String> filterByName(Stream<String> stream, String name) {
+        return stream
+                .filter(alias -> !StringUtils.isEmpty(alias) && 
(StringUtils.isEmpty(name)
+                        || 
alias.toLowerCase(Locale.ROOT).contains(name.toLowerCase(Locale.ROOT))))
+                .collect(Collectors.toList());
     }
 
     private boolean haveSpaces(String text) {
diff --git 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
index 5cd5ff6655..e93b35dcce 100644
--- 
a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
+++ 
b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java
@@ -43,6 +43,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.common.util.ProcessUtils;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
 import org.apache.kylin.metadata.cube.model.NDataflowManager;
 import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
 import org.apache.kylin.metadata.model.NDataModelManager;
@@ -56,6 +57,7 @@ import org.apache.kylin.metadata.query.QueryStatistics;
 import org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO;
 import org.apache.kylin.metadata.query.RDBMSQueryHistoryDaoTest;
 import org.apache.kylin.rest.constant.Constant;
+import org.apache.kylin.rest.response.QueryHistoryFiltersResponse;
 import org.apache.kylin.rest.response.QueryStatisticsResponse;
 import org.apache.kylin.rest.util.AclEvaluate;
 import org.apache.kylin.rest.util.AclUtil;
@@ -72,8 +74,6 @@ import 
org.springframework.security.authentication.TestingAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.util.ReflectionTestUtils;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-
 import lombok.val;
 import lombok.var;
 
@@ -717,15 +717,23 @@ public class QueryHistoryServiceTest extends 
NLocalFileMetadataTestCase {
 
         RDBMSQueryHistoryDAO queryHistoryDAO = 
Mockito.mock(RDBMSQueryHistoryDAO.class);
         Mockito.doReturn(Lists.newArrayList(queryStatistics, queryStatistics1, 
queryStatistics2, queryStatistics3))
-                
.when(queryHistoryDAO).getQueryHistoriesModelIds(Mockito.any(), 
Mockito.anyInt());
+                
.when(queryHistoryDAO).getQueryHistoriesModelIds(Mockito.any());
         
Mockito.doReturn(queryHistoryDAO).when(queryHistoryService).getQueryHistoryDao();
 
-        List<String> models = 
queryHistoryService.getQueryHistoryModels(request, 10);
-        Assert.assertEquals(3, models.size());
-        Assert.assertEquals("HIVE", models.get(0));
-        Assert.assertEquals("CONSTANTS", models.get(1));
-        Assert.assertEquals("ut_inner_join_cube_partial", models.get(2));
-
+        QueryHistoryFiltersResponse response = 
queryHistoryService.getQueryHistoryModels(request, 10);
+        assertEquals(10, (int) response.getSearchCount());
+        Assert.assertEquals(8, (int) response.getTotalModelCount());
+        Assert.assertEquals(10, response.getEngines().size() + 
response.getModels().size());
+        Assert.assertEquals("HIVE", response.getEngines().get(0));
+        Assert.assertEquals("CONSTANTS", response.getEngines().get(1));
+        Assert.assertEquals("nmodel_basic", response.getModels().get(2));
+
+        request.setFilterModelName("nmodel");
+        QueryHistoryFiltersResponse response1 = 
queryHistoryService.getQueryHistoryModels(request, 2);
+        Assert.assertEquals(8, (int) response.getTotalModelCount());
+        assertEquals(3, (int) response1.getSearchCount());
+        Assert.assertEquals(2, response1.getEngines().size() + 
response1.getModels().size());
+        Assert.assertEquals("nmodel_basic", response1.getModels().get(1));
     }
 
     @Test

Reply via email to