Update InMemoryRichGaugeRepository to support increments
Closes gh-2902
This commit is contained in:
parent
cb7ae2e60a
commit
5c9aa41c07
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2016 the original author or authors.
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -24,19 +24,32 @@ import org.springframework.boot.actuate.metrics.writer.MetricWriter;
|
|||
|
||||
/**
|
||||
* In memory implementation of {@link MetricWriter} and {@link RichGaugeReader}. When you
|
||||
* set a metric value (using {@link MetricWriter#set(Metric)}) it is used to update a rich
|
||||
* gauge (increment is a no-op). Gauge values can then be read out using the reader
|
||||
* operations.
|
||||
* {@link MetricWriter#set(Metric) set} or {@link MetricWriter#increment(Delta) increment}
|
||||
* a metric value it is used to update a {@link RichGauge}. Gauge values can then be read
|
||||
* out using the reader operations.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public class InMemoryRichGaugeRepository implements RichGaugeRepository {
|
||||
|
||||
private final SimpleInMemoryRepository<RichGauge> repository = new SimpleInMemoryRepository<RichGauge>();
|
||||
|
||||
@Override
|
||||
public void increment(Delta<?> delta) {
|
||||
// No-op
|
||||
public void increment(final Delta<?> delta) {
|
||||
this.repository.update(delta.getName(), new Callback<RichGauge>() {
|
||||
|
||||
@Override
|
||||
public RichGauge modify(RichGauge current) {
|
||||
double value = ((Number) delta.getValue()).doubleValue();
|
||||
if (current == null) {
|
||||
return new RichGauge(delta.getName(), value);
|
||||
}
|
||||
current.set(current.getValue() + value);
|
||||
return current;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2016 the original author or authors.
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,12 +19,16 @@ package org.springframework.boot.actuate.metrics.rich;
|
|||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.actuate.metrics.Metric;
|
||||
import org.springframework.boot.actuate.metrics.writer.Delta;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.offset;
|
||||
|
||||
/**
|
||||
* Tests for {@link InMemoryRichGaugeRepository}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public class InMemoryRichGaugeRepositoryTests {
|
||||
|
||||
|
|
@ -38,4 +42,19 @@ public class InMemoryRichGaugeRepositoryTests {
|
|||
assertThat(this.repository.findOne("foo").getValue()).isEqualTo(2d, offset(0.01));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void incrementExisting() {
|
||||
this.repository.set(new Metric<Double>("foo", 1d));
|
||||
this.repository.increment(new Delta<Double>("foo", 2d));
|
||||
assertThat(this.repository.findOne("foo").getCount()).isEqualTo(2L);
|
||||
assertThat(this.repository.findOne("foo").getValue()).isEqualTo(3d, offset(0.01));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void incrementNew() {
|
||||
this.repository.increment(new Delta<Double>("foo", 2d));
|
||||
assertThat(this.repository.findOne("foo").getCount()).isEqualTo(1L);
|
||||
assertThat(this.repository.findOne("foo").getValue()).isEqualTo(2d, offset(0.01));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue