From 5819605ab495162929f0e453a9fa6ef3c684c9d7 Mon Sep 17 00:00:00 2001 From: aelamrani Date: Sun, 10 Dec 2017 18:13:57 +0100 Subject: [PATCH] feat: Added a chart to display global Health Check average\nThis closes gravitee-io/issues#889 --- .../query/response/histogram/Data.java | 10 ++-- .../healthcheck/query/AbstractQuery.java | 12 ++++ .../query/AbstractQueryBuilder.java | 17 ++++++ .../healthcheck/query/DateHistogramQuery.java | 40 ++++++++++++++ .../query/DateHistogramQueryBuilder.java | 55 +++++++++++++++++++ .../healthcheck/query/QueryBuilders.java | 4 ++ .../histogram/DateHistogramResponse.java | 40 ++++++++++++++ 7 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQuery.java create mode 100644 src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQueryBuilder.java create mode 100644 src/main/java/io/gravitee/repository/healthcheck/query/response/histogram/DateHistogramResponse.java diff --git a/src/main/java/io/gravitee/repository/analytics/query/response/histogram/Data.java b/src/main/java/io/gravitee/repository/analytics/query/response/histogram/Data.java index 88a61e38..138a76f1 100644 --- a/src/main/java/io/gravitee/repository/analytics/query/response/histogram/Data.java +++ b/src/main/java/io/gravitee/repository/analytics/query/response/histogram/Data.java @@ -23,18 +23,18 @@ public class Data { private final long timestamp; - private final long count; + private final Number value; - public Data(long timestamp, long count) { + public Data(long timestamp, Number value) { this.timestamp = timestamp; - this.count = count; + this.value = value; } public long timestamp() { return timestamp; } - public long count() { - return count; + public Number value() { + return value; } } diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQuery.java b/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQuery.java index 2423387b..e9ad3abd 100644 --- a/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQuery.java +++ b/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQuery.java @@ -15,6 +15,8 @@ */ package io.gravitee.repository.healthcheck.query; +import io.gravitee.repository.analytics.query.TimeRangeFilter; + /** * @author David BRASSELY (david.brassely at graviteesource.com) * @author GraviteeSource Team @@ -23,6 +25,8 @@ public abstract class AbstractQuery implements Query { private RootFilter rootFilter; + private TimeRangeFilter timeRangeFilter; + private QueryFilter queryFilter; public RootFilter root() { @@ -33,6 +37,14 @@ void root(RootFilter rootFilter) { this.rootFilter = rootFilter; } + public TimeRangeFilter timeRange() { + return timeRangeFilter; + } + + void timeRange(TimeRangeFilter timeRangeFilter) { + this.timeRangeFilter = timeRangeFilter; + } + public QueryFilter query() { return queryFilter; } diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQueryBuilder.java b/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQueryBuilder.java index 411548c6..6673a4ec 100644 --- a/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQueryBuilder.java +++ b/src/main/java/io/gravitee/repository/healthcheck/query/AbstractQueryBuilder.java @@ -15,6 +15,10 @@ */ package io.gravitee.repository.healthcheck.query; +import io.gravitee.repository.analytics.query.DateRange; +import io.gravitee.repository.analytics.query.Interval; +import io.gravitee.repository.analytics.query.TimeRangeFilter; + /** * @author David BRASSELY (david.brassely at graviteesource.com) * @author GraviteeSource Team @@ -40,9 +44,22 @@ public QB query(String query) { return (QB) this; } + public QB timeRange(DateRange dateRange, Interval interval) { + this.query.timeRange(new TimeRangeFilter(dateRange, interval)); + return (QB) this; + } + public QB api(String api) { this.query.root(new RootFilter("api", api)); return (QB) this; } + + public QB root(String field, String id) { + if (field != null && id != null) { + this.query.root(new RootFilter(field, id)); + } + + return (QB) this; + } } diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQuery.java b/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQuery.java new file mode 100644 index 00000000..a7d3f040 --- /dev/null +++ b/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQuery.java @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2015 The Gravitee team (http://gravitee.io) + * + * Licensed 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 io.gravitee.repository.healthcheck.query; + +import io.gravitee.repository.analytics.query.Aggregation; +import io.gravitee.repository.healthcheck.query.response.histogram.DateHistogramResponse; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Azize ELAMRANI (azize.elamrani at graviteesource.com) + * @author GraviteeSource Team + */ +public class DateHistogramQuery extends AbstractQuery { + + private List aggregations = new ArrayList<>(); + + @Override + public Class responseType() { + return DateHistogramResponse.class; + } + + public List aggregations() { + return aggregations; + } +} diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQueryBuilder.java b/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQueryBuilder.java new file mode 100644 index 00000000..6584cb8e --- /dev/null +++ b/src/main/java/io/gravitee/repository/healthcheck/query/DateHistogramQueryBuilder.java @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2015 The Gravitee team (http://gravitee.io) + * + * Licensed 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 io.gravitee.repository.healthcheck.query; + +import io.gravitee.repository.analytics.query.Aggregation; +import io.gravitee.repository.analytics.query.AggregationType; + +/** + * @author Azize ELAMRANI (azize.elamrani at graviteesource.com) + * @author GraviteeSource Team + */ +public class DateHistogramQueryBuilder extends AbstractQueryBuilder { + + protected DateHistogramQueryBuilder(DateHistogramQuery query) { + super(query); + } + + static DateHistogramQueryBuilder query() { + return new DateHistogramQueryBuilder(new DateHistogramQuery()); + } + + public DateHistogramQueryBuilder aggregation(Aggregation aggregation) { + query.aggregations().add(aggregation); + return this; + } + + public DateHistogramQueryBuilder aggregation(AggregationType type, String field) { + query.aggregations().add(new Aggregation() { + @Override + public AggregationType type() { + return type; + } + + @Override + public String field() { + return field; + } + }); + + return this; + } +} diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/QueryBuilders.java b/src/main/java/io/gravitee/repository/healthcheck/query/QueryBuilders.java index d6e29f10..496c7772 100644 --- a/src/main/java/io/gravitee/repository/healthcheck/query/QueryBuilders.java +++ b/src/main/java/io/gravitee/repository/healthcheck/query/QueryBuilders.java @@ -36,4 +36,8 @@ public static AverageResponseTimeQueryBuilder responseTime() { public static LogsQueryBuilder logs() { return LogsQueryBuilder.query(); } + + public static DateHistogramQueryBuilder dateHistogram() { + return DateHistogramQueryBuilder.query(); + } } diff --git a/src/main/java/io/gravitee/repository/healthcheck/query/response/histogram/DateHistogramResponse.java b/src/main/java/io/gravitee/repository/healthcheck/query/response/histogram/DateHistogramResponse.java new file mode 100644 index 00000000..2bed29b5 --- /dev/null +++ b/src/main/java/io/gravitee/repository/healthcheck/query/response/histogram/DateHistogramResponse.java @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2015 The Gravitee team (http://gravitee.io) + * + * Licensed 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 io.gravitee.repository.healthcheck.query.response.histogram; + +import io.gravitee.repository.healthcheck.query.Response; +import io.gravitee.repository.analytics.query.response.histogram.Bucket; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Azize ELAMRANI (azize.elamrani at graviteesource.com) + * @author GraviteeSource Team + */ +public class DateHistogramResponse implements Response { + + private final List timestamps = new ArrayList<>(); + private final List values = new ArrayList<>(); + + public List values() { + return values; + } + + public List timestamps() { + return timestamps; + } +}