#2760 - Add ServerMetrics.asData() ... for consistency

This commit is contained in:
Rob Bygrave
2022-08-02 08:35:48 +12:00
parent 01d5aa8199
commit 47b940f672
5 changed files with 29 additions and 42 deletions
@@ -42,6 +42,11 @@ public class BasicMetricVisitor extends AbstractMetricVisitor implements ServerM
return new MetricsAsJson(this);
}
@Override
public List<MetricData> asData() {
return new MetricsAsData(this).data();
}
@Override
public List<MetaTimedMetric> timedMetrics() {
return timed;
@@ -17,21 +17,20 @@ public interface MetaInfoManager {
ServerMetrics collectMetrics();
/**
* Collect the metrics in raw JSON form.
* <pre>{@code
*
* String metricsJson = database.getMetaInfoManager()
* .collectMetricsAsJson()
* .json();
*
* }</pre>
* Deprecated migrate to collectMetrics().asJson().
*/
ServerMetricsAsJson collectMetricsAsJson();
@Deprecated
default ServerMetricsAsJson collectMetricsAsJson() {
return collectMetrics().asJson();
}
/**
* Return the metrics as a list of MetricData.
* Deprecated migrate to collectMetrics().asData().
*/
List<MetricData> collectMetricsAsData();
@Deprecated
default List<MetricData> collectMetricsAsData() {
return collectMetrics().asData();
}
/**
* Visit the metrics resetting and collecting/reporting as desired.
@@ -0,0 +1,66 @@
package io.ebean.meta;
import java.util.ArrayList;
import java.util.List;
/**
* Dump the metrics into a list of MetricData.
*/
final class MetricsAsData {
private final ServerMetrics metrics;
private final List<MetricData> list = new ArrayList<>();
MetricsAsData(ServerMetrics metrics) {
this.metrics = metrics;
}
List<MetricData> data() {
for (MetaTimedMetric metric : metrics.timedMetrics()) {
add(metric);
}
for (MetaCountMetric metric : metrics.countMetrics()) {
addCount(metric);
}
for (MetaQueryMetric metric : metrics.queryMetrics()) {
addQuery(metric);
}
return list;
}
private MetricData create(MetaMetric metric) {
MetricData data = new MetricData(metric.name());
list.add(data);
return data;
}
private void add(MetaTimedMetric metric) {
final MetricData data = create(metric);
appendCounters(data, metric);
data.setLoc(metric.location());
}
private void addCount(MetaCountMetric metric) {
final MetricData data = create(metric);
data.setCount(metric.count());
}
private void addQuery(MetaQueryMetric metric) {
final MetricData data = create(metric);
appendCounters(data, metric);
appendLocationAndSql(data, metric);
data.setHash(metric.hash());
}
private void appendLocationAndSql(MetricData data, MetaQueryMetric metric) {
data.setLoc(metric.location());
data.setSql(metric.sql());
}
private void appendCounters(MetricData data, MetaTimedMetric timedMetric) {
data.setCount(timedMetric.count());
data.setTotal(timedMetric.total());
data.setMean(timedMetric.mean());
data.setMax(timedMetric.max());
}
}
@@ -17,6 +17,11 @@ public interface ServerMetrics {
*/
ServerMetricsAsJson asJson();
/**
* Return the metrics as a list of MetricData.
*/
List<MetricData> asData();
/**
* Return timed metrics for Transactions, labelled SqlQuery, labelled SqlUpdate.
*/