public List<BadQueryEntry> getQueriesByType(List<BadQueryEntry> allBadEntries, String queryType) throws IOException { List<BadQueryEntry> filteredEntries = Lists.newArrayList(); for (BadQueryEntry entry : allBadEntries) { if (null != entry && entry.getAdj().equals(queryType)) { filteredEntries.add(entry); } } return filteredEntries; }
public BadQueryHistory upsertEntryToProject(BadQueryEntry badQueryEntry, String project) throws IOException { if (StringUtils.isEmpty(project) || badQueryEntry.getAdj() == null || badQueryEntry.getSql() == null) throw new IllegalArgumentException(); BadQueryHistory badQueryHistory = getBadQueriesForProject(project); NavigableSet<BadQueryEntry> entries = badQueryHistory.getEntries(); entries.remove(badQueryEntry); // in case the entry already exists and this call means to update entries.add(badQueryEntry); int maxSize = kylinConfig.getBadQueryHistoryNum(); if (entries.size() > maxSize) { entries.pollFirst(); } getStore().checkAndPutResource(badQueryHistory.getResourcePath(), badQueryHistory, BAD_QUERY_INSTANCE_SERIALIZER); return badQueryHistory; }
@Test public void testBasics() throws Exception { BadQueryHistory history = BadQueryHistoryManager.getInstance(getTestConfig()) .getBadQueriesForProject("default"); System.out.println(JsonUtil.writeValueAsIndentString(history)); NavigableSet<BadQueryEntry> entries = history.getEntries(); assertEquals(3, entries.size()); BadQueryEntry entry1 = entries.first(); assertEquals("Pushdown", entry1.getAdj()); assertEquals("sandbox.hortonworks.com", entry1.getServer()); assertEquals("select * from test_kylin_fact limit 10", entry1.getSql()); entries.pollFirst(); BadQueryEntry entry2 = entries.first(); assertTrue(entry2.getStartTime() > entry1.getStartTime()); }
@Test public void testAddEntryToProject() throws IOException { KylinConfig kylinConfig = getTestConfig(); BadQueryHistoryManager manager = BadQueryHistoryManager.getInstance(kylinConfig); BadQueryEntry entry = new BadQueryEntry("sql", "adj", 1459362239992L, 100, "server", "t-0", "user", RandomUtil.randomUUID().toString()); BadQueryHistory history = manager.upsertEntryToProject(entry, "default"); NavigableSet<BadQueryEntry> entries = history.getEntries(); assertEquals(4, entries.size()); BadQueryEntry newEntry = entries.last(); System.out.println(newEntry); assertEquals("sql", newEntry.getSql()); assertEquals("adj", newEntry.getAdj()); assertEquals(1459362239992L, newEntry.getStartTime()); assertEquals("server", newEntry.getServer()); assertEquals("user", newEntry.getUser()); assertEquals("t-0", newEntry.getThread()); for (int i = 0; i < kylinConfig.getBadQueryHistoryNum(); i++) { BadQueryEntry tmp = new BadQueryEntry("sql", "adj", 1459362239993L + i, 100 + i, "server", "t-0", "user", RandomUtil.randomUUID().toString()); history = manager.upsertEntryToProject(tmp, "default"); } assertEquals(kylinConfig.getBadQueryHistoryNum(), history.getEntries().size()); }
@Test public void testUpdateEntryToProject() throws IOException { KylinConfig kylinConfig = getTestConfig(); BadQueryHistoryManager manager = BadQueryHistoryManager.getInstance(kylinConfig); String queryId = RandomUtil.randomUUID().toString(); manager.upsertEntryToProject( new BadQueryEntry("sql", "adj", 1459362239000L, 100, "server", "t-0", "user", queryId), "default"); BadQueryHistory history = manager.upsertEntryToProject( new BadQueryEntry("sql", "adj2", 1459362239000L, 120, "server2", "t-1", "user", queryId), "default"); NavigableSet<BadQueryEntry> entries = history.getEntries(); BadQueryEntry newEntry = entries .floor(new BadQueryEntry("sql", "adj2", 1459362239000L, 120, "server2", "t-1", "user", queryId)); System.out.println(newEntry); assertEquals("adj2", newEntry.getAdj()); assertEquals("server2", newEntry.getServer()); assertEquals("t-1", newEntry.getThread()); assertEquals("user", newEntry.getUser()); assertEquals(120, (int) newEntry.getRunningSec()); }
public BadQueryHistory upsertEntryToProject(BadQueryEntry badQueryEntry, String project) throws IOException { if (StringUtils.isEmpty(project) || badQueryEntry.getAdj() == null || badQueryEntry.getSql() == null) throw new IllegalArgumentException(); BadQueryHistory badQueryHistory = getBadQueriesForProject(project); NavigableSet<BadQueryEntry> entries = badQueryHistory.getEntries(); entries.remove(badQueryEntry); // in case the entry already exists and this call means to update entries.add(badQueryEntry); int maxSize = kylinConfig.getBadQueryHistoryNum(); if (entries.size() > maxSize) { entries.pollFirst(); } getStore().checkAndPutResource(badQueryHistory.getResourcePath(), badQueryHistory, BAD_QUERY_INSTANCE_SERIALIZER); return badQueryHistory; }