Repository: incubator-griffin Updated Branches: refs/heads/master f690644a5 -> d8193a0f8
api update 1. add optional filter param 'type' to get all measures method 2. add optional filter param 'tmst' to get metric values method 3. modify related ut Author: He Wang <[email protected]> Closes #213 from whhe/master. Project: http://git-wip-us.apache.org/repos/asf/incubator-griffin/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-griffin/commit/d8193a0f Tree: http://git-wip-us.apache.org/repos/asf/incubator-griffin/tree/d8193a0f Diff: http://git-wip-us.apache.org/repos/asf/incubator-griffin/diff/d8193a0f Branch: refs/heads/master Commit: d8193a0f8ec79744d78028f0cebeff1255270196 Parents: f690644 Author: He Wang <[email protected]> Authored: Wed Feb 7 11:16:18 2018 +0800 Committer: Lionel Liu <[email protected]> Committed: Wed Feb 7 11:16:18 2018 +0800 ---------------------------------------------------------------------- .../griffin/core/measure/MeasureController.java | 4 ++-- .../apache/griffin/core/measure/MeasureService.java | 2 +- .../griffin/core/measure/MeasureServiceImpl.java | 13 ++++++++++++- .../griffin/core/metric/MetricController.java | 5 +++-- .../apache/griffin/core/metric/MetricService.java | 2 +- .../griffin/core/metric/MetricServiceImpl.java | 6 +++--- .../org/apache/griffin/core/metric/MetricStore.java | 2 +- .../apache/griffin/core/metric/MetricStoreImpl.java | 16 +++++++++++----- .../griffin/core/measure/MeasureControllerTest.java | 8 +++++--- .../core/measure/MeasureServiceImplTest.java | 5 ++--- .../griffin/core/metric/MetricControllerTest.java | 4 ++-- .../griffin/core/metric/MetricServiceImplTest.java | 12 ++++++------ 12 files changed, 49 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/measure/MeasureController.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/measure/MeasureController.java b/service/src/main/java/org/apache/griffin/core/measure/MeasureController.java index eda0a1f..d7917e4 100644 --- a/service/src/main/java/org/apache/griffin/core/measure/MeasureController.java +++ b/service/src/main/java/org/apache/griffin/core/measure/MeasureController.java @@ -33,8 +33,8 @@ public class MeasureController { private MeasureService measureService; @RequestMapping(value = "/measures", method = RequestMethod.GET) - public Iterable<Measure> getAllAliveMeasures() { - return measureService.getAllAliveMeasures(); + public List<? extends Measure> getAllAliveMeasures(@RequestParam(value = "type", defaultValue = "") String type) { + return measureService.getAllAliveMeasures(type); } @RequestMapping(value = "/measures/{id}", method = RequestMethod.GET) http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/measure/MeasureService.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/measure/MeasureService.java b/service/src/main/java/org/apache/griffin/core/measure/MeasureService.java index a3d9640..37942bf 100644 --- a/service/src/main/java/org/apache/griffin/core/measure/MeasureService.java +++ b/service/src/main/java/org/apache/griffin/core/measure/MeasureService.java @@ -26,7 +26,7 @@ import java.util.List; public interface MeasureService { - List<Measure> getAllAliveMeasures(); + List<? extends Measure> getAllAliveMeasures(String type); Measure getMeasureById(long id); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java b/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java index 66d7252..bd24be3 100644 --- a/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java +++ b/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java @@ -23,6 +23,8 @@ package org.apache.griffin.core.measure; import org.apache.griffin.core.exception.GriffinException; import org.apache.griffin.core.measure.entity.GriffinMeasure; import org.apache.griffin.core.measure.entity.Measure; +import org.apache.griffin.core.measure.repo.ExternalMeasureRepo; +import org.apache.griffin.core.measure.repo.GriffinMeasureRepo; import org.apache.griffin.core.measure.repo.MeasureRepo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +44,10 @@ public class MeasureServiceImpl implements MeasureService { @Autowired private MeasureRepo<Measure> measureRepo; @Autowired + private GriffinMeasureRepo griffinMeasureRepo; + @Autowired + private ExternalMeasureRepo externalMeasureRepo; + @Autowired @Qualifier("griffinOperation") private MeasureOperation griffinOp; @Autowired @@ -49,7 +55,12 @@ public class MeasureServiceImpl implements MeasureService { private MeasureOperation externalOp; @Override - public List<Measure> getAllAliveMeasures() { + public List<? extends Measure> getAllAliveMeasures(String type) { + if (type.equals("griffin")) { + return griffinMeasureRepo.findByDeleted(false); + } else if (type.equals("external")) { + return externalMeasureRepo.findByDeleted(false); + } return measureRepo.findByDeleted(false); } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/metric/MetricController.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/metric/MetricController.java b/service/src/main/java/org/apache/griffin/core/metric/MetricController.java index 6a2c51c..c2f56ad 100644 --- a/service/src/main/java/org/apache/griffin/core/metric/MetricController.java +++ b/service/src/main/java/org/apache/griffin/core/metric/MetricController.java @@ -44,8 +44,9 @@ public class MetricController { @RequestMapping(value = "/metrics/values", method = RequestMethod.GET) public List<MetricValue> getMetricValues(@RequestParam("metricName") String metricName, @RequestParam("size") int size, - @RequestParam(value = "offset", defaultValue = "0") int offset) { - return metricService.getMetricValues(metricName, offset, size); + @RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "tmst", defaultValue = "0") long tmst) { + return metricService.getMetricValues(metricName, offset, size, tmst); } @RequestMapping(value = "/metrics/values", method = RequestMethod.POST) http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/metric/MetricService.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/metric/MetricService.java b/service/src/main/java/org/apache/griffin/core/metric/MetricService.java index f68d83c..6442f61 100644 --- a/service/src/main/java/org/apache/griffin/core/metric/MetricService.java +++ b/service/src/main/java/org/apache/griffin/core/metric/MetricService.java @@ -31,7 +31,7 @@ public interface MetricService { Map<String, List<Metric>> getAllMetrics(); - List<MetricValue> getMetricValues(String metricName, int offset, int size); + List<MetricValue> getMetricValues(String metricName, int offset, int size, long tmst); ResponseEntity addMetricValues(List<MetricValue> values); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/metric/MetricServiceImpl.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/metric/MetricServiceImpl.java b/service/src/main/java/org/apache/griffin/core/metric/MetricServiceImpl.java index 77cc168..c126e29 100644 --- a/service/src/main/java/org/apache/griffin/core/metric/MetricServiceImpl.java +++ b/service/src/main/java/org/apache/griffin/core/metric/MetricServiceImpl.java @@ -70,7 +70,7 @@ public class MetricServiceImpl implements MetricService { List<AbstractJob> jobList = entry.getValue(); List<Metric> metrics = new ArrayList<>(); for (AbstractJob job : jobList) { - List<MetricValue> metricValues = getMetricValues(job.getMetricName(), 0, 300); + List<MetricValue> metricValues = getMetricValues(job.getMetricName(), 0, 300, job.getCreatedDate().getTime()); metrics.add(new Metric(job.getMetricName(), measure.getDqType(), measure.getOwner(), metricValues)); } metricMap.put(measure.getName(), metrics); @@ -80,7 +80,7 @@ public class MetricServiceImpl implements MetricService { } @Override - public List<MetricValue> getMetricValues(String metricName, int offset, int size) { + public List<MetricValue> getMetricValues(String metricName, int offset, int size, long tmst) { if (offset < 0) { throw new GriffinException.BadRequestException(INVALID_METRIC_RECORDS_OFFSET); } @@ -88,7 +88,7 @@ public class MetricServiceImpl implements MetricService { throw new GriffinException.BadRequestException(INVALID_METRIC_RECORDS_SIZE); } try { - return metricStore.getMetricValues(metricName, offset, size); + return metricStore.getMetricValues(metricName, offset, size, tmst); } catch (IOException e) { LOGGER.error("Failed to get metric values named {}. {}", metricName, e.getMessage()); throw new GriffinException.ServiceException("Failed to get metric values", e); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/metric/MetricStore.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/metric/MetricStore.java b/service/src/main/java/org/apache/griffin/core/metric/MetricStore.java index dacac1d..5424ae7 100644 --- a/service/src/main/java/org/apache/griffin/core/metric/MetricStore.java +++ b/service/src/main/java/org/apache/griffin/core/metric/MetricStore.java @@ -27,7 +27,7 @@ import java.util.List; public interface MetricStore { - List<MetricValue> getMetricValues(String metricName, int from, int size) throws IOException; + List<MetricValue> getMetricValues(String metricName, int from, int size, long tmst) throws IOException; ResponseEntity addMetricValues(List<MetricValue> metricValues) throws IOException; http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/main/java/org/apache/griffin/core/metric/MetricStoreImpl.java ---------------------------------------------------------------------- diff --git a/service/src/main/java/org/apache/griffin/core/metric/MetricStoreImpl.java b/service/src/main/java/org/apache/griffin/core/metric/MetricStoreImpl.java index a080f30..e33da9e 100644 --- a/service/src/main/java/org/apache/griffin/core/metric/MetricStoreImpl.java +++ b/service/src/main/java/org/apache/griffin/core/metric/MetricStoreImpl.java @@ -86,8 +86,8 @@ public class MetricStoreImpl implements MetricStore { } @Override - public List<MetricValue> getMetricValues(String metricName, int from, int size) throws IOException { - HttpEntity entity = getHttpEntityForSearch(metricName, from, size); + public List<MetricValue> getMetricValues(String metricName, int from, int size, long tmst) throws IOException { + HttpEntity entity = getHttpEntityForSearch(metricName, from, size, tmst); try { Response response = client.performRequest("GET", urlGet, Collections.emptyMap(), entity); return getMetricValuesFromResponse(response); @@ -99,11 +99,17 @@ public class MetricStoreImpl implements MetricStore { } } - private HttpEntity getHttpEntityForSearch(String metricName, int from, int size) throws JsonProcessingException { + private HttpEntity getHttpEntityForSearch(String metricName, int from, int size, long tmst) throws JsonProcessingException { Map<String, Object> map = new HashMap<>(); - Map<String, Object> queryParam = Collections.singletonMap("term", Collections.singletonMap("name.keyword", metricName)); + Map<String, Object> queryParam = new HashMap<>(); + if (tmst != 0) { + Map<String, Object> rangeQuery = Collections.singletonMap("tmst", Collections.singletonMap("gte", tmst)); + queryParam.put("must", Collections.singletonMap("range", rangeQuery)); + } + Map<String, Object> termQuery = Collections.singletonMap("name.keyword", metricName); + queryParam.put("filter", Collections.singletonMap("term", termQuery)); Map<String, Object> sortParam = Collections.singletonMap("tmst", Collections.singletonMap("order", "desc")); - map.put("query", queryParam); + map.put("query", Collections.singletonMap("bool", queryParam)); map.put("sort", sortParam); map.put("from", from); map.put("size", size); http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java index 863c252..5bf6161 100644 --- a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java +++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java @@ -31,12 +31,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -45,6 +47,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -72,7 +75,7 @@ public class MeasureControllerTest { @Test public void testGetAllMeasures() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); - given(service.getAllAliveMeasures()).willReturn(Arrays.asList(measure)); + Mockito.<List<? extends Measure>>when(service.getAllAliveMeasures("")).thenReturn(Collections.singletonList(measure)); mvc.perform(get(URLHelper.API_VERSION_PATH + "/measures")) .andExpect(status().isOk()) @@ -87,8 +90,7 @@ public class MeasureControllerTest { mvc.perform(get(URLHelper.API_VERSION_PATH + "/measures/1")) .andExpect(status().isOk()) - .andExpect(jsonPath("$.name", is("view_item_hourly"))) - ; + .andExpect(jsonPath("$.name", is("view_item_hourly"))); } @Test http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java index 7dc979f..ff5cf1e 100644 --- a/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java +++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java @@ -32,7 +32,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.springframework.test.context.junit4.SpringRunner; -import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -68,7 +67,7 @@ public class MeasureServiceImplTest { Measure measure = createGriffinMeasure("view_item_hourly"); given(measureRepo.findByDeleted(false)).willReturn(Collections.singletonList(measure)); - List<Measure> measures = service.getAllAliveMeasures(); + List<? extends Measure> measures = service.getAllAliveMeasures(""); assertEquals(measures.size(), 1); assertEquals(measures.get(0).getName(), "view_item_hourly"); } @@ -83,7 +82,7 @@ public class MeasureServiceImplTest { } @Test(expected = GriffinException.NotFoundException.class) - public void testGetMeasuresByIdWithFileNotFoundException(){ + public void testGetMeasuresByIdWithFileNotFoundException() { given(measureRepo.findByIdAndDeleted(1L, false)).willReturn(null); service.getMeasureById(1); } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/test/java/org/apache/griffin/core/metric/MetricControllerTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/metric/MetricControllerTest.java b/service/src/test/java/org/apache/griffin/core/metric/MetricControllerTest.java index 84c8fb3..088144c 100644 --- a/service/src/test/java/org/apache/griffin/core/metric/MetricControllerTest.java +++ b/service/src/test/java/org/apache/griffin/core/metric/MetricControllerTest.java @@ -95,7 +95,7 @@ public class MetricControllerTest { @Test public void testGetMetricValuesSuccess() throws Exception { MetricValue value = new MetricValue("jobName", 1L, new HashMap<>()); - given(service.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(service.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willReturn(Collections.singletonList(value)); mvc.perform(get(URLHelper.API_VERSION_PATH + "/metrics/values") @@ -106,7 +106,7 @@ public class MetricControllerTest { @Test public void testGetMetricValuesFailureWithException() throws Exception { - given(service.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(service.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willThrow(new GriffinException.ServiceException("Failed to get metric values", new IOException())); mvc.perform(get(URLHelper.API_VERSION_PATH + "/metrics/values") http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/d8193a0f/service/src/test/java/org/apache/griffin/core/metric/MetricServiceImplTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/metric/MetricServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/metric/MetricServiceImplTest.java index a7084da..8cf3762 100644 --- a/service/src/test/java/org/apache/griffin/core/metric/MetricServiceImplTest.java +++ b/service/src/test/java/org/apache/griffin/core/metric/MetricServiceImplTest.java @@ -74,7 +74,7 @@ public class MetricServiceImplTest { MetricValue value = new MetricValue("jobName", 1L, new HashMap<>()); given(jobRepo.findByDeleted(false)).willReturn(Collections.singletonList(job)); given(measureRepo.findByDeleted(false)).willReturn(Collections.singletonList(measure)); - given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willReturn(Collections.singletonList(value)); Map<String, List<Metric>> metricMap = service.getAllMetrics(); @@ -88,7 +88,7 @@ public class MetricServiceImplTest { AbstractJob job = createGriffinJob(); given(jobRepo.findByDeleted(false)).willReturn(Collections.singletonList(job)); given(measureRepo.findByDeleted(false)).willReturn(Collections.singletonList(measure)); - given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willThrow(new IOException()); service.getAllMetrics(); @@ -97,20 +97,20 @@ public class MetricServiceImplTest { @Test public void testGetMetricValuesSuccess() throws IOException { MetricValue value = new MetricValue("jobName", 1L, new HashMap<>()); - given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willReturn(Collections.singletonList(value)); - List<MetricValue> values = service.getMetricValues("jobName", 0, 300); + List<MetricValue> values = service.getMetricValues("jobName", 0, 300, 0); assertEquals(values.size(), 1); assertEquals(values.get(0).getName(), "jobName"); } @Test(expected = GriffinException.ServiceException.class) public void testGetMetricValuesFailureWithException() throws IOException { - given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt())) + given(metricStore.getMetricValues(Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyLong())) .willThrow(new IOException()); - service.getMetricValues("jobName", 0, 300); + service.getMetricValues("jobName", 0, 300, 0); } @Test
