@Override public void execute(PerfTestRunContext context) { MetricsQuery metricsQuery = this.processEngine.getManagementService().createMetricsQuery(); if (name != null) { metricsQuery.name(name); } if (startDate != null) { metricsQuery.startDate(startDate); } if (endDate != null) { metricsQuery.endDate(endDate); } metricsQuery.sum(); } }
@Test public void testGetIntervalWithAll() { given() .queryParam("name", MockProvider.EXAMPLE_METRICS_NAME) .queryParam("reporter", MockProvider.EXAMPLE_METRICS_REPORTER) .queryParam("maxResults", 10) .queryParam("firstResult", 10) .queryParam("startDate", DATE_FORMAT_WITH_TIMEZONE.format(new Date(0))) .queryParam("endDate", DATE_FORMAT_WITH_TIMEZONE.format(new Date(15 * 60 * 1000))) .queryParam("aggregateByReporter", true) .queryParam("interval", 300) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(MockProvider.EXAMPLE_METRICS_NAME); verify(meterQueryMock).reporter(MockProvider.EXAMPLE_METRICS_REPORTER); verify(meterQueryMock).offset(10); verify(meterQueryMock).limit(10); verify(meterQueryMock).startDate(new Date(0)); verify(meterQueryMock).endDate(new Date(15 * 60 * 1000)); verify(meterQueryMock).aggregateByReporter(); verify(meterQueryMock, times(1)).interval(300); verifyNoMoreInteractions(meterQueryMock); }
protected void applyQueryParams(MetricsQuery query, UriInfo uriInfo) { MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters(); DateConverter dateConverter = new DateConverter(); dateConverter.setObjectMapper(objectMapper); if(queryParameters.getFirst("startDate") != null) { Date startDate = dateConverter.convertQueryParameterToType(queryParameters.getFirst("startDate")); query.startDate(startDate); } if(queryParameters.getFirst("endDate") != null) { Date endDate = dateConverter.convertQueryParameterToType(queryParameters.getFirst("endDate")); query.endDate(endDate); } }
protected void applyQueryParams(MetricsQuery query, MultivaluedMap<String, String> queryParameters) { DateConverter dateConverter = new DateConverter(); dateConverter.setObjectMapper(objectMapper); if(queryParameters.getFirst(QUERY_PARAM_START_DATE) != null) { Date startDate = dateConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_START_DATE)); query.startDate(startDate); } if(queryParameters.getFirst(QUERY_PARAM_END_DATE) != null) { Date endDate = dateConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_END_DATE)); query.endDate(endDate); } IntegerConverter intConverter = new IntegerConverter(); intConverter.setObjectMapper(objectMapper); if (queryParameters.getFirst(QUERY_PARAM_FIRST_RESULT) != null) { int firstResult = intConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_FIRST_RESULT)); query.offset(firstResult); } if (queryParameters.getFirst(QUERY_PARAM_MAX_RESULTS) != null) { int maxResults = intConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_MAX_RESULTS)); query.limit(maxResults); } if(queryParameters.getFirst(QUERY_PARAM_AGG_BY_REPORTER) != null) { query.aggregateByReporter(); } }
public static MetricsQuery createMockMeterQuery() { MetricsQuery query = mock(MetricsQuery.class); when(query.name(anyString())).thenReturn(query); when(query.reporter(any(String.class))).thenReturn(query); when(query.limit(any(Integer.class))).thenReturn(query); when(query.offset(any(Integer.class))).thenReturn(query); when(query.startDate(any(Date.class))).thenReturn(query); when(query.endDate(any(Date.class))).thenReturn(query); return query; }
@Override public List<MetricsIntervalResultDto> interval(UriInfo uriInfo) { MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters(); MetricsQuery query = processEngine.getManagementService() .createMetricsQuery() .name(queryParameters.getFirst(QUERY_PARAM_NAME)) .reporter(queryParameters.getFirst(QUERY_PARAM_REPORTER)); applyQueryParams(query, queryParameters); List<MetricIntervalValue> metrics; LongConverter longConverter = new LongConverter(); longConverter.setObjectMapper(objectMapper); if (queryParameters.getFirst(QUERY_PARAM_INTERVAL) != null) { long interval = longConverter.convertQueryParameterToType(queryParameters.getFirst(QUERY_PARAM_INTERVAL)); metrics = query.interval(interval); } else { metrics = query.interval(); } return convertToDtos(metrics); }
@Test public void testMeterQueryDefaultIntervalWhereStartAndEndDate() { //given metric data created for 15 min intervals //when query metric interval data with start and end date in where clause DateTime endDate = firstInterval.plusMinutes(DEFAULT_INTERVAL); DateTime startDate = firstInterval; List<MetricIntervalValue> metrics = managementService.createMetricsQuery().startDate(startDate.toDate()).endDate(endDate.toDate()).interval(); //then result contains 9 entries since 9 different metrics are created //and start date is inclusive and end date exclusive assertEquals(metricsCount, metrics.size()); }
@Test public void testReportWithReporterId() { // indicate that db metrics reporter is active (although it is not) processEngineConfiguration.setDbMetricsReporterActivate(true); // given // when processEngineConfiguration.getDbMetricsReporter().setReporterId("reporter1"); runtimeService.startProcessInstanceByKey("testProcess"); managementService.reportDbMetricsNow(); // and processEngineConfiguration.getDbMetricsReporter().setReporterId("reporter2"); runtimeService.startProcessInstanceByKey("testProcess"); managementService.reportDbMetricsNow(); // then the metrics have been reported assertEquals(6l, managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START) .sum()); // and are grouped by reporter assertEquals(3l, managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START).reporter("reporter1") .sum()); assertEquals(3l, managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START).reporter("reporter2") .sum()); assertEquals(0l, managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START).reporter("aNonExistingReporter") .sum()); // cleanup processEngineConfiguration.setDbMetricsReporterActivate(false); processEngineConfiguration.getDbMetricsReporter().setReporterId(null); }
@Test public void testMeterQueryDefaultIntervalWhereReporterNotExist() { //given metric data //when query metric interval data with not existing reporter in where clause List<MetricIntervalValue> metrics = managementService.createMetricsQuery().reporter("notExist").interval(); //then result contains no metrics from given reporter assertEquals(0, metrics.size()); }
@Test public void testGetIntervalWithStartDate() { given() .queryParam("startDate", DATE_FORMAT_WITH_TIMEZONE.format(new Date(0))) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(null); verify(meterQueryMock).reporter(null); verify(meterQueryMock).startDate(new Date(0)); verify(meterQueryMock, times(1)).interval(); verifyNoMoreInteractions(meterQueryMock); }
@Test public void testGetIntervalWithEndDate() { given() .queryParam("endDate", DATE_FORMAT_WITH_TIMEZONE.format(new Date(15 * 60 * 1000))) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(null); verify(meterQueryMock).reporter(null); verify(meterQueryMock).endDate(new Date(15 * 60 * 1000)); verify(meterQueryMock, times(1)).interval(); verifyNoMoreInteractions(meterQueryMock); }
@Test public void testGetIntervalAggregation() { given() .queryParam("aggregateByReporter", true) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(null); verify(meterQueryMock).reporter(null); verify(meterQueryMock).aggregateByReporter(); verify(meterQueryMock, times(1)).interval(); verifyNoMoreInteractions(meterQueryMock); }
@Test public void testGetIntervalWithOffset() { given() .queryParam("firstResult", 10) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(null); verify(meterQueryMock).reporter(null); verify(meterQueryMock).offset(10); verify(meterQueryMock, times(1)).interval(); verifyNoMoreInteractions(meterQueryMock); }
@Test public void testGetIntervalWithLimit() { given() .queryParam("maxResults", 10) .then() .expect() .statusCode(Status.OK.getStatusCode()) .when() .get(METRICS_URL); verify(meterQueryMock).name(null); verify(meterQueryMock).reporter(null); verify(meterQueryMock).limit(10); verify(meterQueryMock, times(1)).interval(); verifyNoMoreInteractions(meterQueryMock); }
@Test public void testMetricQueryAggregatedByReporterLimitAndTwoReporters() { // clean up default recorded metrics clearLocalMetrics(); // given // generate data for reporter1 processEngineConfiguration.getDbMetricsReporter().setReporterId("reporter1"); generateMeterData(10, DEFAULT_INTERVAL_MILLIS); // generate data for reporter2 processEngineConfiguration.getDbMetricsReporter().setReporterId("reporter2"); generateMeterData(10, DEFAULT_INTERVAL_MILLIS); int limit = 10; // when List<MetricIntervalValue> metrics = managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START).limit(limit).interval(); List<MetricIntervalValue> aggregatedMetrics = managementService.createMetricsQuery().name(Metrics.ACTIVTY_INSTANCE_START).limit(limit).aggregateByReporter().interval(); // then aggregatedMetrics contains wider time interval assertTrue(metrics.get(limit - 1).getTimestamp().getTime() > aggregatedMetrics.get(limit - 1).getTimestamp().getTime()); assertEquals(metrics.size(), aggregatedMetrics.size()); }
@Test public void testQueryEndDateExclusive() { // given // note: dates should be exact seconds due to missing milliseconds precision on // older mysql versions // cannot insert 1970-01-01 00:00:00 into MySQL ClockUtil.setCurrentTime(new Date(5000L)); runtimeService.startProcessInstanceByKey("testProcess"); processEngineConfiguration.getDbMetricsReporter().reportNow(); ClockUtil.setCurrentTime(new Date(6000L)); runtimeService.startProcessInstanceByKey("testProcess"); processEngineConfiguration.getDbMetricsReporter().reportNow(); ClockUtil.setCurrentTime(new Date(7000L)); runtimeService.startProcessInstanceByKey("testProcess"); processEngineConfiguration.getDbMetricsReporter().reportNow(); // then Query#startDate is inclusive and Query#endDate is exclusive assertEquals(18l, managementService.createMetricsQuery().sum()); assertEquals(18l, managementService.createMetricsQuery().startDate(new Date(0)).sum()); assertEquals(12l, managementService.createMetricsQuery().startDate(new Date(0)).endDate(new Date(7000L)).sum()); assertEquals(18l, managementService.createMetricsQuery().startDate(new Date(0)).endDate(new Date(8000L)).sum()); }
@Test public void testMeterQueryCustomIntervalWhereStartDate() { //given metric data created for 15 min intervals //when query metric interval data with custom interval and second last interval as start date in where clause Date startDate = firstInterval.plusMinutes(DEFAULT_INTERVAL).toDate(); List<MetricIntervalValue> metrics = managementService.createMetricsQuery().startDate(startDate).interval(300); //then result contains 4 intervals * the metrics count //15 20 25 30 35 40 assertEquals(6 * metricsCount, metrics.size()); }
@Test public void testMeterQueryDefaultIntervalWhereEndDate() { //given metric data created for 15 min intervals //when query metric interval data with second interval as end date in where clause //second interval = first interval - default interval DateTime endDate = firstInterval.plusMinutes(DEFAULT_INTERVAL); List<MetricIntervalValue> metrics = managementService.createMetricsQuery().endDate(endDate.toDate()).interval(); //then result contains one interval with entry for each metric //and end time is exclusive assertEquals(metricsCount, metrics.size()); }