Add additional details and metrics/statistics about the QueryService, ContinuousQuery (CQ) Service.

This commit is contained in:
John Blum
2018-09-20 17:55:31 -07:00
parent bc210872d0
commit 3cb5bbc373
2 changed files with 30 additions and 2 deletions

View File

@@ -89,14 +89,27 @@ public class GeodeContinuousQueriesHealthIndicator extends AbstractGeodeHealthIn
if (getContinuousQueryListenerContainer().isPresent()) {
List<CqQuery> continuousQueries = getContinuousQueryListenerContainer()
.map(ContinuousQueryListenerContainer::getQueryService)
Optional<QueryService> queryService = getContinuousQueryListenerContainer()
.map(ContinuousQueryListenerContainer::getQueryService);
List<CqQuery> continuousQueries = queryService
.map(QueryService::getCqs)
.map(Arrays::asList)
.orElseGet(Collections::emptyList);
builder.withDetail("geode.continuous-query.count", continuousQueries.size());
queryService
.map(QueryService::getCqStatistics)
.ifPresent(cqServiceStatistics -> {
builder.withDetail("geode.continuous-query.number-of-active", cqServiceStatistics.numCqsActive())
.withDetail("geode.continuous-query.number-of-closed", cqServiceStatistics.numCqsClosed())
.withDetail("geode.continuous-query.number-of-created", cqServiceStatistics.numCqsCreated())
.withDetail("geode.continuous-query.number-of-stopped", cqServiceStatistics.numCqsStopped())
.withDetail("geode.continuous-query.number-on-client", cqServiceStatistics.numCqsOnClient());
});
continuousQueries.stream()
.filter(Objects::nonNull)
.forEach(continuousQuery -> {

View File

@@ -25,6 +25,7 @@ import static org.mockito.Mockito.when;
import java.util.Map;
import org.apache.geode.cache.query.CqQuery;
import org.apache.geode.cache.query.CqServiceStatistics;
import org.apache.geode.cache.query.CqState;
import org.apache.geode.cache.query.CqStatistics;
import org.apache.geode.cache.query.Query;
@@ -112,6 +113,15 @@ public class GeodeContinuousQueriesHealthIndicatorUnitTests {
when(this.mockQueryService.getCqs()).thenReturn(mockContinuousQueries);
CqServiceStatistics mockContinuousQueryServiceStatistics = mock(CqServiceStatistics.class);
when(mockContinuousQueryServiceStatistics.numCqsActive()).thenReturn(42L);
when(mockContinuousQueryServiceStatistics.numCqsClosed()).thenReturn(8L);
when(mockContinuousQueryServiceStatistics.numCqsCreated()).thenReturn(51L);
when(mockContinuousQueryServiceStatistics.numCqsStopped()).thenReturn(16L);
when(mockContinuousQueryServiceStatistics.numCqsOnClient()).thenReturn(64L);
when(this.mockQueryService.getCqStatistics()).thenReturn(mockContinuousQueryServiceStatistics);
Health.Builder builder = new Health.Builder();
this.continuousQueriesHealthIndicator.doHealthCheck(builder);
@@ -126,6 +136,11 @@ public class GeodeContinuousQueriesHealthIndicatorUnitTests {
assertThat(healthDetails).isNotNull();
assertThat(healthDetails).isNotEmpty();
assertThat(healthDetails).containsEntry("geode.continuous-query.count", mockContinuousQueries.length);
assertThat(healthDetails).containsEntry("geode.continuous-query.number-of-active", 42L);
assertThat(healthDetails).containsEntry("geode.continuous-query.number-of-closed", 8L);
assertThat(healthDetails).containsEntry("geode.continuous-query.number-of-created", 51L);
assertThat(healthDetails).containsEntry("geode.continuous-query.number-of-stopped", 16L);
assertThat(healthDetails).containsEntry("geode.continuous-query.number-on-client", 64L);
assertThat(healthDetails).containsEntry("geode.continuous-query.MockContinuousQuery.oql-query-string", "SELECT * FROM /Example WHERE status = 'RUNNING'");
assertThat(healthDetails).containsEntry("geode.continuous-query.MockContinuousQuery.closed", "No");
assertThat(healthDetails).containsEntry("geode.continuous-query.MockContinuousQuery.closing", "No");