diff --git a/application/build.gradle b/application/build.gradle index 15a1f5d4..5f16ad06 100644 --- a/application/build.gradle +++ b/application/build.gradle @@ -21,12 +21,16 @@ jacocoTestCoverageVerification { rules.forEach {rule -> rule.limits.forEach {limit -> if (limit.counter == 'INSTRUCTION') { - limit.minimum = 0.37 + limit.minimum = 0.83 } if (limit.counter == 'METHOD') { - limit.minimum = 0.50 + limit.minimum = 0.73 } } } } +} + +pitest { + testStrengthThreshold = 0 } \ No newline at end of file diff --git a/application/src/main/java/de/cotto/lndmanagej/MetricsConfiguration.java b/application/src/main/java/de/cotto/lndmanagej/MetricsConfiguration.java new file mode 100644 index 00000000..48f1a613 --- /dev/null +++ b/application/src/main/java/de/cotto/lndmanagej/MetricsConfiguration.java @@ -0,0 +1,29 @@ +package de.cotto.lndmanagej; + +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.Slf4jReporter; +import com.ryantenney.metrics.spring.config.annotation.EnableMetrics; +import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +@EnableMetrics +public class MetricsConfiguration extends MetricsConfigurerAdapter { + public MetricsConfiguration() { + super(); + } + + @Override + @SuppressWarnings("PMD.CloseResource") + public void configureReporters(MetricRegistry metricRegistry) { + Slf4jReporter reporter = Slf4jReporter.forRegistry(metricRegistry) + .outputTo(LoggerFactory.getLogger(getClass())) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build(); + registerReporter(reporter).start(1, TimeUnit.MINUTES); + } +} diff --git a/buildSrc/src/main/groovy/lnd-manageJ.java-conventions.gradle b/buildSrc/src/main/groovy/lnd-manageJ.java-conventions.gradle index 9dbb3bd6..a59f6945 100644 --- a/buildSrc/src/main/groovy/lnd-manageJ.java-conventions.gradle +++ b/buildSrc/src/main/groovy/lnd-manageJ.java-conventions.gradle @@ -35,5 +35,6 @@ dependencies { implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'io.dropwizard.metrics:metrics-core:4.2.4' + implementation 'com.ryantenney.metrics:metrics-spring:3.1.3' implementation 'com.google.guava:guava:31.0.1-jre' } \ No newline at end of file diff --git a/grpc-adapter/build.gradle b/grpc-adapter/build.gradle index cfcdc36d..1c176aab 100644 --- a/grpc-adapter/build.gradle +++ b/grpc-adapter/build.gradle @@ -6,7 +6,6 @@ dependencies { implementation project(':grpc-client') implementation project(':model') implementation project(':caching') - implementation project(':metrics') testImplementation testFixtures(project(':model')) } @@ -15,13 +14,13 @@ jacocoTestCoverageVerification { rules.forEach {rule -> rule.limits.forEach {limit -> if (limit.counter == 'INSTRUCTION') { - limit.minimum = 0.82 + limit.minimum = 0.86 } if (limit.counter == 'METHOD') { - limit.minimum = 0.78 + limit.minimum = 0.79 } if (limit.counter == 'BRANCH') { - limit.minimum = 0.92 + limit.minimum = 0.93 } } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java index d3d17f68..fae8c845 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java @@ -1,9 +1,7 @@ package de.cotto.lndmanagej.grpc; -import com.codahale.metrics.MetricRegistry; import com.google.common.annotations.VisibleForTesting; import de.cotto.lndmanagej.LndConfiguration; -import de.cotto.lndmanagej.metrics.Metrics; import io.grpc.StatusRuntimeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,12 +13,10 @@ import java.util.function.Supplier; public class GrpcBase { private final Logger logger = LoggerFactory.getLogger(getClass()); protected final StubCreator stubCreator; - private final Metrics metrics; @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") - protected GrpcBase(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { + protected GrpcBase(LndConfiguration lndConfiguration) throws IOException { stubCreator = getStubCreator(lndConfiguration); - this.metrics = metrics; } @VisibleForTesting @@ -33,16 +29,12 @@ public class GrpcBase { ); } - Optional get(String name, Supplier supplier) { + Optional get(Supplier supplier) { try { - return Optional.ofNullable(metrics.timer(getClass(), name).timeSupplier(supplier)); + return Optional.ofNullable(supplier.get()); } catch (StatusRuntimeException exception) { logger.warn("Exception while connecting to lnd: ", exception); return Optional.empty(); } } - - protected void mark(String name) { - metrics.mark(MetricRegistry.name(getClass(), name)); - } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java index 08d3b10e..9276964b 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java @@ -1,7 +1,7 @@ package de.cotto.lndmanagej.grpc; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.LndConfiguration; -import de.cotto.lndmanagej.metrics.Metrics; import org.springframework.stereotype.Component; import routerrpc.RouterGrpc; import routerrpc.RouterOuterClass; @@ -16,8 +16,8 @@ import java.util.Iterator; public class GrpcRouterService extends GrpcBase { private final RouterGrpc.RouterBlockingStub routerStub; - public GrpcRouterService(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { - super(lndConfiguration, metrics); + public GrpcRouterService(LndConfiguration lndConfiguration) throws IOException { + super(lndConfiguration); routerStub = stubCreator.getRouterStub(); } @@ -26,9 +26,9 @@ public class GrpcRouterService extends GrpcBase { stubCreator.shutdown(); } + @Timed Iterator getHtlcEvents() { - return get("subscribeHtlcEvents", - () -> routerStub.subscribeHtlcEvents(SubscribeHtlcEventsRequest.getDefaultInstance()) - ).orElse(Collections.emptyIterator()); + return get(() -> routerStub.subscribeHtlcEvents(SubscribeHtlcEventsRequest.getDefaultInstance())) + .orElse(Collections.emptyIterator()); } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java index 3ecd432d..d775bfcb 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java @@ -1,9 +1,9 @@ package de.cotto.lndmanagej.grpc; +import com.codahale.metrics.annotation.Timed; import com.github.benmanes.caffeine.cache.LoadingCache; import de.cotto.lndmanagej.LndConfiguration; import de.cotto.lndmanagej.caching.CacheBuilder; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Pubkey; import io.grpc.Status; @@ -68,8 +68,8 @@ public class GrpcService extends GrpcBase { .withExpiry(TRANSACTIONS_CACHE_EXPIRY) .build(this::getTransactionsWithoutCache); - public GrpcService(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { - super(lndConfiguration, metrics); + public GrpcService(LndConfiguration lndConfiguration) throws IOException { + super(lndConfiguration); lightningStub = stubCreator.getLightningStub(); } @@ -78,16 +78,18 @@ public class GrpcService extends GrpcBase { stubCreator.shutdown(); } + @Timed public Optional getInfo() { - return get("getInfo", () -> lightningStub.getInfo(lnrpc.GetInfoRequest.getDefaultInstance())); + return get(() -> lightningStub.getInfo(lnrpc.GetInfoRequest.getDefaultInstance())); } public List listPeers() { return listPeersCache.get(""); } + @Timed public Optional getNodeInfo(Pubkey pubkey) { - return get("getNodeInfo", () -> { + return get(() -> { try { return lightningStub.getNodeInfo(NodeInfoRequest.newBuilder().setPubKey(pubkey.toString()).build()); } catch (StatusRuntimeException exception) { @@ -100,19 +102,20 @@ public class GrpcService extends GrpcBase { }); } + @Timed public Optional getChannelEdge(ChannelId channelId) { ChanInfoRequest build = ChanInfoRequest.newBuilder().setChanId(channelId.getShortChannelId()).build(); - return get("getChanInfo", () -> lightningStub.getChanInfo(build)); + return get(() -> lightningStub.getChanInfo(build)); } public List getChannels() { return channelsCache.get(""); } + @Timed public List getClosedChannels() { - return get("closedChannels", - () -> lightningStub.closedChannels(ClosedChannelsRequest.getDefaultInstance()).getChannelsList() - ).orElse(List.of()); + return get(() -> lightningStub.closedChannels(ClosedChannelsRequest.getDefaultInstance()).getChannelsList()) + .orElse(List.of()); } public List getForceClosingChannels() { @@ -131,23 +134,25 @@ public class GrpcService extends GrpcBase { return getTransactionsCache.get(""); } + @Timed public Optional getForwardingHistory(int offset, int limit) { ForwardingHistoryRequest request = ForwardingHistoryRequest.newBuilder() .setStartTime(0) .setIndexOffset(offset) .setNumMaxEvents(limit) .build(); - return get("forwardingHistory", () -> lightningStub.forwardingHistory(request)); + return get(() -> lightningStub.forwardingHistory(request)); } + @Timed private List listPeersWithoutCache() { - return get( - "listPeers", () -> lightningStub.listPeers(ListPeersRequest.getDefaultInstance()).getPeersList() - ).orElse(List.of()); + return get(() -> lightningStub.listPeers(ListPeersRequest.getDefaultInstance()).getPeersList()) + .orElse(List.of()); } + @Timed private Optional> getTransactionsWithoutCache() { - return get("getTransactions", + return get( () -> lightningStub.getTransactions(GetTransactionsRequest.getDefaultInstance()).getTransactionsList() ); } @@ -156,15 +161,14 @@ public class GrpcService extends GrpcBase { return pendingChannelsCache.get(""); } + @Timed private Optional getPendingChannelsWithoutCache() { - return get("pendingChannels", - () -> lightningStub.pendingChannels(PendingChannelsRequest.getDefaultInstance()) - ); + return get(() -> lightningStub.pendingChannels(PendingChannelsRequest.getDefaultInstance())); } + @Timed private List getChannelsWithoutCache() { - return get("listChannels", - () -> lightningStub.listChannels(ListChannelsRequest.getDefaultInstance()).getChannelsList() - ).orElse(List.of()); + return get(() -> lightningStub.listChannels(ListChannelsRequest.getDefaultInstance()).getChannelsList()) + .orElse(List.of()); } } diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java index 4e7e80c2..57dc8bd2 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java @@ -1,61 +1,40 @@ package de.cotto.lndmanagej.grpc; import com.codahale.metrics.Timer; -import de.cotto.lndmanagej.metrics.Metrics; import io.grpc.Status; import io.grpc.StatusRuntimeException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.function.Supplier; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class GrpcBaseTest { @InjectMocks private TestableGrpcBase grpcBase; - @Mock - private Metrics metrics; - @BeforeEach void setUp() { Timer timer = mock(Timer.class); lenient().when(timer.timeSupplier(any())).then(invocation -> ((Supplier) invocation.getArgument(0)).get()); - lenient().when(metrics.timer(any(), anyString())).thenReturn(timer); } @Test void get() { - assertThat(grpcBase.get("", () -> "x")).contains("x"); - } - - @Test - void get_uses_timer() { - grpcBase.get("name", () -> "x"); - verify(metrics).timer(grpcBase.getClass(), "name"); - } - - @Test - void name() { - grpcBase.mark("foo"); - verify(metrics).mark(argThat(name -> name.endsWith(".foo"))); + assertThat(grpcBase.get(() -> "x")).contains("x"); } @Test void get_failure() { - assertThat(grpcBase.get("", () -> { + assertThat(grpcBase.get(() -> { throw new StatusRuntimeException(Status.ABORTED); })).isEmpty(); } diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcRouterServiceTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcRouterServiceTest.java index e6819602..a741bba2 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcRouterServiceTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcRouterServiceTest.java @@ -1,7 +1,6 @@ package de.cotto.lndmanagej.grpc; import de.cotto.lndmanagej.LndConfiguration; -import de.cotto.lndmanagej.metrics.Metrics; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -15,12 +14,11 @@ import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class GrpcRouterServiceTest { private final StubCreator stubCreator = mock(StubCreator.class); - private final Metrics metrics = mock(Metrics.class); private TestableGrpcRouterService grpcRouterService; @BeforeEach void setUp() throws IOException { - grpcRouterService = new TestableGrpcRouterService(mock(LndConfiguration.class), metrics); + grpcRouterService = new TestableGrpcRouterService(mock(LndConfiguration.class)); } @Test @@ -30,11 +28,8 @@ class GrpcRouterServiceTest { } public class TestableGrpcRouterService extends GrpcRouterService { - public TestableGrpcRouterService( - LndConfiguration lndConfiguration, - Metrics metrics - ) throws IOException { - super(lndConfiguration, metrics); + public TestableGrpcRouterService(LndConfiguration lndConfiguration) throws IOException { + super(lndConfiguration); } @Override diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcServiceTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcServiceTest.java index 5131459e..92e5900f 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcServiceTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcServiceTest.java @@ -1,7 +1,6 @@ package de.cotto.lndmanagej.grpc; import de.cotto.lndmanagej.LndConfiguration; -import de.cotto.lndmanagej.metrics.Metrics; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -15,12 +14,11 @@ import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class GrpcServiceTest { private final StubCreator stubCreator = mock(StubCreator.class); - private final Metrics metrics = mock(Metrics.class); private TestableGrpcService grpcService; @BeforeEach void setUp() throws IOException { - grpcService = new TestableGrpcService(mock(LndConfiguration.class), metrics); + grpcService = new TestableGrpcService(mock(LndConfiguration.class)); } @Test @@ -30,11 +28,8 @@ class GrpcServiceTest { } public class TestableGrpcService extends GrpcService { - public TestableGrpcService( - LndConfiguration lndConfiguration, - Metrics metrics - ) throws IOException { - super(lndConfiguration, metrics); + public TestableGrpcService(LndConfiguration lndConfiguration) throws IOException { + super(lndConfiguration); } @Override diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java index a646e2ac..d69bb22d 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java @@ -1,15 +1,14 @@ package de.cotto.lndmanagej.grpc; import de.cotto.lndmanagej.LndConfiguration; -import de.cotto.lndmanagej.metrics.Metrics; import java.io.IOException; import static org.mockito.Mockito.mock; public class TestableGrpcBase extends GrpcBase { - public TestableGrpcBase(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { - super(lndConfiguration, metrics); + public TestableGrpcBase(LndConfiguration lndConfiguration) throws IOException { + super(lndConfiguration); } @Override diff --git a/metrics/src/main/java/de/cotto/lndmanagej/metrics/Metrics.java b/metrics/src/main/java/de/cotto/lndmanagej/metrics/Metrics.java deleted file mode 100644 index 944d9b9a..00000000 --- a/metrics/src/main/java/de/cotto/lndmanagej/metrics/Metrics.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.cotto.lndmanagej.metrics; - -import com.codahale.metrics.Meter; -import com.codahale.metrics.MetricRegistry; -import com.codahale.metrics.Slf4jReporter; -import com.codahale.metrics.Timer; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.PreDestroy; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; - -@Component -public class Metrics { - private final MetricRegistry registry = new MetricRegistry(); - private final Slf4jReporter reporter; - private final Map meters = new ConcurrentHashMap<>(); - private final Map timers = new ConcurrentHashMap<>(); - - public Metrics() { - reporter = Slf4jReporter.forRegistry(registry) - .outputTo(LoggerFactory.getLogger(getClass())) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build(); - reporter.start(1, TimeUnit.MINUTES); - } - - @PreDestroy - public void shutdown() { - reporter.close(); - } - - public void mark(String name) { - meters.computeIfAbsent(name, registry::meter).mark(); - } - - public Timer timer(Class callingClass, String name) { - return timers.computeIfAbsent(MetricRegistry.name(callingClass, name), registry::timer); - } -} diff --git a/metrics/src/test/java/de/cotto/lndmanagej/metrics/MetricsTest.java b/metrics/src/test/java/de/cotto/lndmanagej/metrics/MetricsTest.java index 34e61794..24560724 100644 --- a/metrics/src/test/java/de/cotto/lndmanagej/metrics/MetricsTest.java +++ b/metrics/src/test/java/de/cotto/lndmanagej/metrics/MetricsTest.java @@ -7,7 +7,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; class MetricsTest { - private final Metrics metrics = new Metrics(); + private final Metrics metrics = new Metrics(registry); @Test void mark() { diff --git a/settings.gradle b/settings.gradle index 712dd013..9f1204a3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,7 +5,6 @@ include 'caching' include 'forwarding-history' include 'grpc-adapter' include 'grpc-client' -include 'metrics' include 'model' include 'statistics' include 'transactions' diff --git a/web/build.gradle b/web/build.gradle index 51e45f59..00d48ebe 100644 --- a/web/build.gradle +++ b/web/build.gradle @@ -6,6 +6,5 @@ dependencies { implementation('org.springframework.boot:spring-boot-starter-web') implementation project(':backend') implementation project(':model') - implementation project(':metrics') testImplementation testFixtures(project(':model')) } \ No newline at end of file diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java index 48ccaebc..8739feab 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelControllerIT.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.FeeReport; @@ -60,10 +59,6 @@ class ChannelControllerIT { @SuppressWarnings("unused") private ChannelIdResolver channelIdResolver; - @MockBean - @SuppressWarnings("unused") - private Metrics metrics; - @MockBean private OnChainCostService onChainCostService; diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java index f4d67461..b3e3d1da 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.NodeService; @@ -34,10 +33,6 @@ class LegacyControllerIT { @MockBean private ChannelService channelService; - @MockBean - @SuppressWarnings("unused") - private Metrics metrics; - @Test void getOpenChannelIdsPretty() throws Exception { when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL, LOCAL_OPEN_CHANNEL_3)); diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java index 308ceeff..465af26a 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.FeeReport; @@ -65,10 +64,6 @@ class NodeControllerIT { @MockBean private FeeService feeService; - @MockBean - @SuppressWarnings("unused") - private Metrics metrics; - @Test void getAlias() throws Exception { when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/OnChainCostsControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/OnChainCostsControllerIT.java index f296aa35..b6e9f32f 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/OnChainCostsControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/OnChainCostsControllerIT.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.service.OnChainCostService; @@ -36,10 +35,6 @@ class OnChainCostsControllerIT { @MockBean private OnChainCostService onChainCostService; - @MockBean - @SuppressWarnings("unused") - private Metrics metrics; - @Test void on_chain_costs_for_peer() throws Exception { when(onChainCostService.getOpenCostsWith(PUBKEY)).thenReturn(Coins.ofSatoshis(123)); diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java index dbeb5cd9..7964c7cc 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.OwnNodeService; @@ -37,10 +36,6 @@ class StatusControllerIT { @MockBean private ChannelService channelService; - @MockBean - @SuppressWarnings("unused") - private Metrics metrics; - @MockBean private OwnNodeService ownNodeService; diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java b/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java index 1c605c9a..a93c62ca 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/ChannelController.java @@ -1,6 +1,6 @@ package de.cotto.lndmanagej.controller; -import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelDetailsDto; import de.cotto.lndmanagej.controller.dto.ChannelDto; @@ -9,7 +9,6 @@ import de.cotto.lndmanagej.controller.dto.FeeReportDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; import de.cotto.lndmanagej.controller.dto.PoliciesDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.ClosedChannel; @@ -39,7 +38,6 @@ import javax.annotation.Nullable; public class ChannelController { private final ChannelService channelService; private final NodeService nodeService; - private final Metrics metrics; private final BalanceService balanceService; private final OnChainCostService onChainCostService; private final PolicyService policyService; @@ -51,8 +49,7 @@ public class ChannelController { BalanceService balanceService, OnChainCostService onChainCostService, PolicyService policyService, - FeeService feeService, - Metrics metrics + FeeService feeService ) { this.channelService = channelService; this.nodeService = nodeService; @@ -60,12 +57,11 @@ public class ChannelController { this.onChainCostService = onChainCostService; this.policyService = policyService; this.feeService = feeService; - this.metrics = metrics; } + @Timed @GetMapping("/") public ChannelDto getBasicInformation(@PathVariable ChannelId channelId) throws NotFoundException { - mark("getBasicInformation"); LocalChannel localChannel = channelService.getLocalChannel(channelId).orElse(null); if (localChannel == null) { throw new NotFoundException(); @@ -74,9 +70,9 @@ public class ChannelController { return new ChannelDto(localChannel, closeDetailsForChannel); } + @Timed @GetMapping("/details") public ChannelDetailsDto getDetails(@PathVariable ChannelId channelId) throws NotFoundException { - mark("getDetails"); LocalChannel localChannel = channelService.getLocalChannel(channelId).orElse(null); if (localChannel == null) { throw new NotFoundException(); @@ -94,24 +90,24 @@ public class ChannelController { ); } + @Timed @GetMapping("/balance") public BalanceInformationDto getBalance(@PathVariable ChannelId channelId) { - mark("getBalance"); BalanceInformation balanceInformation = balanceService.getBalanceInformation(channelId) .orElse(BalanceInformation.EMPTY); return BalanceInformationDto.createFrom(balanceInformation); } + @Timed @GetMapping("/policies") public PoliciesDto getPolicies(@PathVariable ChannelId channelId) { - mark("getPolicies"); LocalChannel localChannel = channelService.getLocalChannel(channelId).orElse(null); return getPoliciesForChannel(localChannel); } + @Timed @GetMapping("/close-details") public ClosedChannelDetailsDto getCloseDetails(@PathVariable ChannelId channelId) throws NotFoundException { - mark("getCloseDetails"); ClosedChannel closedChannel = channelService.getClosedChannel(channelId).orElse(null); if (closedChannel == null) { throw new NotFoundException(); @@ -119,9 +115,9 @@ public class ChannelController { return new ClosedChannelDetailsDto(closedChannel.getCloseInitiator(), closedChannel.getCloseHeight()); } + @Timed @GetMapping("/fee-report") public FeeReportDto getFeeReport(@PathVariable ChannelId channelId) { - mark("getFeeReport"); return getFeeReportDto(channelId); } @@ -156,8 +152,4 @@ public class ChannelController { return ClosedChannelDetailsDto.UNKNOWN; } } - - private void mark(String name) { - metrics.mark(MetricRegistry.name(getClass(), name)); - } } diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java b/web/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java index 01c6687c..69dd4f64 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java @@ -1,7 +1,6 @@ package de.cotto.lndmanagej.controller; -import com.codahale.metrics.MetricRegistry; -import de.cotto.lndmanagej.metrics.Metrics; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.model.LocalOpenChannel; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.service.ChannelService; @@ -19,21 +18,18 @@ public class LegacyController { private static final String NEWLINE = "\n"; private final NodeService nodeService; private final ChannelService channelService; - private final Metrics metrics; public LegacyController( NodeService nodeService, - ChannelService channelService, - Metrics metrics + ChannelService channelService ) { this.nodeService = nodeService; this.channelService = channelService; - this.metrics = metrics; } + @Timed @GetMapping("/open-channels/pretty") public String getOpenChannelIdsPretty() { - metrics.mark(MetricRegistry.name(getClass(), "getOpenChannelIdsPretty")); return channelService.getOpenChannels().stream() .sorted(Comparator.comparing(LocalOpenChannel::getId)) .map(localOpenChannel -> { diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/NodeController.java b/web/src/main/java/de/cotto/lndmanagej/controller/NodeController.java index d5e721ed..172f2add 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/NodeController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/NodeController.java @@ -1,13 +1,12 @@ package de.cotto.lndmanagej.controller; -import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelsForNodeDto; import de.cotto.lndmanagej.controller.dto.FeeReportDto; import de.cotto.lndmanagej.controller.dto.NodeDetailsDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.Channel; import de.cotto.lndmanagej.model.ChannelId; @@ -34,7 +33,6 @@ import java.util.stream.Collectors; @Import(ObjectMapperConfiguration.class) public class NodeController { private final NodeService nodeService; - private final Metrics metrics; private final ChannelService channelService; private final OnChainCostService onChainCostService; private final BalanceService balanceService; @@ -45,26 +43,24 @@ public class NodeController { ChannelService channelService, OnChainCostService onChainCostService, BalanceService balanceService, - FeeService feeService, - Metrics metrics + FeeService feeService ) { this.nodeService = nodeService; this.channelService = channelService; this.onChainCostService = onChainCostService; this.balanceService = balanceService; this.feeService = feeService; - this.metrics = metrics; } + @Timed @GetMapping("/alias") public String getAlias(@PathVariable Pubkey pubkey) { - mark("getAlias"); return nodeService.getAlias(pubkey); } + @Timed @GetMapping("/details") public NodeDetailsDto getDetails(@PathVariable Pubkey pubkey) { - mark("getDetails"); Node node = nodeService.getNode(pubkey); Coins openCosts = onChainCostService.getOpenCostsWith(pubkey); Coins closeCosts = onChainCostService.getCloseCostsWith(pubkey); @@ -83,29 +79,29 @@ public class NodeController { ); } + @Timed @GetMapping("/open-channels") public ChannelsForNodeDto getOpenChannelIdsForPubkey(@PathVariable Pubkey pubkey) { - mark("getOpenChannelIdsForPubkey"); List channels = toSortedList(channelService.getOpenChannelsWith(pubkey)); return new ChannelsForNodeDto(pubkey, channels); } + @Timed @GetMapping("/all-channels") public ChannelsForNodeDto getAllChannelIdsForPubkey(@PathVariable Pubkey pubkey) { - mark("getAllChannelIdsForPubkey"); List channels = toSortedList(channelService.getAllChannelsWith(pubkey)); return new ChannelsForNodeDto(pubkey, channels); } + @Timed @GetMapping("/balance") public BalanceInformationDto getBalance(@PathVariable Pubkey pubkey) { - mark("getBalance"); return BalanceInformationDto.createFrom(balanceService.getBalanceInformation(pubkey)); } + @Timed @GetMapping("/fee-report") public FeeReportDto getFeeReport(@PathVariable Pubkey pubkey) { - mark("getFeeReport"); return getFeeReportDto(pubkey); } @@ -119,9 +115,4 @@ public class NodeController { .sorted() .collect(Collectors.toList()); } - - private void mark(String getDetails) { - metrics.mark(MetricRegistry.name(getClass(), getDetails)); - } - } diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/OnChainCostsController.java b/web/src/main/java/de/cotto/lndmanagej/controller/OnChainCostsController.java index 22f4d903..c5a9fe51 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/OnChainCostsController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/OnChainCostsController.java @@ -1,8 +1,7 @@ package de.cotto.lndmanagej.controller; -import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.Pubkey; @@ -16,32 +15,30 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/api/") public class OnChainCostsController { private final OnChainCostService onChainCostService; - private final Metrics metrics; - public OnChainCostsController(OnChainCostService onChainCostService, Metrics metrics) { + public OnChainCostsController(OnChainCostService onChainCostService) { this.onChainCostService = onChainCostService; - this.metrics = metrics; } + @Timed @GetMapping("/node/{pubkey}/on-chain-costs") public OnChainCostsDto getCostsForPeer(@PathVariable Pubkey pubkey) { - metrics.mark(MetricRegistry.name(getClass(), "getCostsForPeer")); return new OnChainCostsDto( onChainCostService.getOpenCostsWith(pubkey), onChainCostService.getCloseCostsWith(pubkey) ); } + @Timed @GetMapping("/channel/{channelId}/open-costs") public long getOpenCostsForChannel(@PathVariable ChannelId channelId) throws CostException { - metrics.mark(MetricRegistry.name(getClass(), "getOpenCostsForChannel")); return onChainCostService.getOpenCosts(channelId).map(Coins::satoshis) .orElseThrow(() -> new CostException("Unable to get open costs for channel with ID " + channelId)); } + @Timed @GetMapping("/channel/{channelId}/close-costs") public long getCloseCostsForChannel(@PathVariable ChannelId channelId) throws CostException { - metrics.mark(MetricRegistry.name(getClass(), "getCloseCostsForChannel")); return onChainCostService.getCloseCosts(channelId).map(Coins::satoshis) .orElseThrow(() -> new CostException("Unable to get close costs for channel with ID " + channelId)); } diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java b/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java index ea7ed9d6..310c224a 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java @@ -1,10 +1,9 @@ package de.cotto.lndmanagej.controller; -import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.controller.dto.ChannelsDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; import de.cotto.lndmanagej.controller.dto.PubkeysDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.LocalChannel; import de.cotto.lndmanagej.model.LocalOpenChannel; @@ -25,29 +24,27 @@ import java.util.stream.Collectors; public class StatusController { private final OwnNodeService ownNodeService; private final ChannelService channelService; - private final Metrics metrics; - public StatusController(OwnNodeService ownNodeService, ChannelService channelService, Metrics metrics) { + public StatusController(OwnNodeService ownNodeService, ChannelService channelService) { this.ownNodeService = ownNodeService; this.channelService = channelService; - this.metrics = metrics; } + @Timed @GetMapping("/synced-to-chain") public boolean isSyncedToChain() { - mark("isSyncedToChain"); return ownNodeService.isSyncedToChain(); } + @Timed @GetMapping("/block-height") public int getBlockHeight() { - mark("getBlockHeight"); return ownNodeService.getBlockHeight(); } + @Timed @GetMapping("/open-channels/") public ChannelsDto getOpenChannels() { - mark("getOpenChannels"); List channelIds = channelService.getOpenChannels().stream() .map(LocalOpenChannel::getId) .sorted() @@ -56,9 +53,9 @@ public class StatusController { return new ChannelsDto(channelIds); } + @Timed @GetMapping("/open-channels/pubkeys") public PubkeysDto getPubkeysForOpenChannels() { - mark("getPubkeysForOpenChannels"); List pubkeys = channelService.getOpenChannels().stream() .map(LocalOpenChannel::getRemotePubkey) .sorted() @@ -67,9 +64,9 @@ public class StatusController { return new PubkeysDto(pubkeys); } + @Timed @GetMapping("/all-channels/") public ChannelsDto getAllChannels() { - mark("getAllChannels"); List channelIds = channelService.getAllLocalChannels() .map(LocalChannel::getId) .sorted() @@ -78,9 +75,9 @@ public class StatusController { return new ChannelsDto(channelIds); } + @Timed @GetMapping("/all-channels/pubkeys") public PubkeysDto getPubkeysForAllChannels() { - mark("getPubkeysForAllChannels"); List pubkeys = channelService.getAllLocalChannels() .map(LocalChannel::getRemotePubkey) .sorted() @@ -89,7 +86,4 @@ public class StatusController { return new PubkeysDto(pubkeys); } - private void mark(String name) { - metrics.mark(MetricRegistry.name(getClass(), name)); - } } diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java index 86c8f32d..1f5650cf 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/ChannelControllerTest.java @@ -7,7 +7,6 @@ import de.cotto.lndmanagej.controller.dto.ClosedChannelDetailsDto; import de.cotto.lndmanagej.controller.dto.FeeReportDto; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; import de.cotto.lndmanagej.controller.dto.PoliciesDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.CloseInitiator; import de.cotto.lndmanagej.model.Coins; @@ -39,9 +38,7 @@ import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static de.cotto.lndmanagej.model.WaitingCloseChannelFixtures.WAITING_CLOSE_CHANNEL; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -64,9 +61,6 @@ class ChannelControllerTest { @Mock private NodeService nodeService; - @Mock - private Metrics metrics; - @Mock private BalanceService balanceService; @@ -98,7 +92,6 @@ class ChannelControllerTest { ChannelDto basicInformation = new ChannelDto(LOCAL_OPEN_CHANNEL, ClosedChannelDetailsDto.UNKNOWN); when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); assertThat(channelController.getBasicInformation(CHANNEL_ID)).isEqualTo(basicInformation); - verify(metrics).mark(argThat(name -> name.endsWith(".getBasicInformation"))); } @Test @@ -106,7 +99,6 @@ class ChannelControllerTest { ChannelDto basicInformation = new ChannelDto(CLOSED_CHANNEL, CLOSED_CHANNEL_DETAILS_DTO); when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(CLOSED_CHANNEL)); assertThat(channelController.getBasicInformation(CHANNEL_ID)).isEqualTo(basicInformation); - verify(metrics).mark(argThat(name -> name.endsWith(".getBasicInformation"))); } @Test @@ -132,7 +124,6 @@ class ChannelControllerTest { .thenReturn(Optional.ofNullable(LOCAL_OPEN_CHANNEL.getBalanceInformation())); assertThat(channelController.getDetails(CHANNEL_ID)).isEqualTo(expectedDetails); - verify(metrics).mark(argThat(name -> name.endsWith(".getDetails"))); } @Test @@ -175,7 +166,6 @@ class ChannelControllerTest { when(balanceService.getBalanceInformation(CHANNEL_ID)).thenReturn(Optional.of(BALANCE_INFORMATION)); assertThat(channelController.getBalance(CHANNEL_ID)) .isEqualTo(BalanceInformationDto.createFrom(BALANCE_INFORMATION)); - verify(metrics).mark(argThat(name -> name.endsWith(".getBalance"))); } @Test @@ -183,7 +173,6 @@ class ChannelControllerTest { when(balanceService.getBalanceInformation(CHANNEL_ID)).thenReturn(Optional.empty()); assertThat(channelController.getBalance(CHANNEL_ID)) .isEqualTo(BalanceInformationDto.createFrom(BalanceInformation.EMPTY)); - verify(metrics).mark(argThat(name -> name.endsWith(".getBalance"))); } @Test @@ -191,7 +180,6 @@ class ChannelControllerTest { when(channelService.getLocalChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); when(policyService.getPolicies(CHANNEL_ID)).thenReturn(POLICIES); assertThat(channelController.getPolicies(CHANNEL_ID)).isEqualTo(FEE_CONFIGURATION_DTO); - verify(metrics).mark(argThat(name -> name.endsWith(".getPolicies"))); } @Test @@ -203,7 +191,6 @@ class ChannelControllerTest { void getCloseDetails() throws NotFoundException { when(channelService.getClosedChannel(CHANNEL_ID)).thenReturn(Optional.of(CLOSED_CHANNEL)); assertThat(channelController.getCloseDetails(CHANNEL_ID)).isEqualTo(CLOSED_CHANNEL_DETAILS_DTO); - verify(metrics).mark(argThat(name -> name.endsWith(".getCloseDetails"))); } @Test @@ -216,7 +203,6 @@ class ChannelControllerTest { void getFeeReport() { when(feeService.getFeeReportForChannel(CHANNEL_ID)).thenReturn(FEE_REPORT); assertThat(channelController.getFeeReport(CHANNEL_ID)).isEqualTo(FEE_REPORT_DTO); - verify(metrics).mark(argThat(name -> name.endsWith(".getFeeReport"))); } private ChannelDetailsDto mockForChannelWithoutPolicies( diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java index 1e1fed59..1e1981c9 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.controller; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.NodeService; import org.junit.jupiter.api.Test; @@ -22,8 +21,6 @@ import static de.cotto.lndmanagej.model.NodeFixtures.ALIAS_3; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_3; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -37,9 +34,6 @@ class LegacyControllerTest { @Mock private ChannelService channelService; - @Mock - private Metrics metrics; - @Test void getOpenChannelIdsPretty() { when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); @@ -49,7 +43,6 @@ class LegacyControllerTest { CHANNEL_ID_COMPACT + "\t" + PUBKEY_2 + "\t" + CAPACITY + "\t" + ALIAS_2 + "\n" + CHANNEL_ID_COMPACT_4 + "\t" + PUBKEY_3 + "\t" + CAPACITY_2 + "\t" + ALIAS_3 ); - verify(metrics).mark(argThat(name -> name.endsWith(".getOpenChannelIdsPretty"))); } @Test diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java index a006fe8a..cb3e3aa0 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java @@ -5,7 +5,6 @@ import de.cotto.lndmanagej.controller.dto.ChannelsForNodeDto; import de.cotto.lndmanagej.controller.dto.FeeReportDto; import de.cotto.lndmanagej.controller.dto.NodeDetailsDto; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.FeeReport; @@ -44,8 +43,6 @@ import static de.cotto.lndmanagej.model.WaitingCloseChannelFixtures.WAITING_CLOS import static de.cotto.lndmanagej.model.WaitingCloseChannelFixtures.WAITING_CLOSE_CHANNEL_2; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -58,9 +55,6 @@ class NodeControllerTest { @Mock private NodeService nodeService; - @Mock - private Metrics metrics; - @Mock private ChannelService channelService; @@ -78,7 +72,6 @@ class NodeControllerTest { when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); assertThat(nodeController.getAlias(PUBKEY_2)).isEqualTo(ALIAS_2); - verify(metrics).mark(argThat(name -> name.endsWith(".getAlias"))); } @Test @@ -102,7 +95,6 @@ class NodeControllerTest { when(nodeService.getNode(PUBKEY_2)).thenReturn(new Node(PUBKEY_2, ALIAS_2, 0, true)); assertThat(nodeController.getDetails(PUBKEY_2)).isEqualTo(expectedDetails); - verify(metrics).mark(argThat(name -> name.endsWith(".getDetails"))); } @Test @@ -143,7 +135,6 @@ class NodeControllerTest { when(channelService.getOpenChannelsWith(PUBKEY)).thenReturn(Set.of(LOCAL_OPEN_CHANNEL, LOCAL_OPEN_CHANNEL_3)); assertThat(nodeController.getOpenChannelIdsForPubkey(PUBKEY)) .isEqualTo(new ChannelsForNodeDto(PUBKEY, List.of(CHANNEL_ID, CHANNEL_ID_3))); - verify(metrics).mark(argThat(name -> name.endsWith(".getOpenChannelIdsForPubkey"))); } @Test @@ -158,7 +149,6 @@ class NodeControllerTest { when(channelService.getAllChannelsWith(PUBKEY)).thenReturn(Set.of(LOCAL_OPEN_CHANNEL, CLOSED_CHANNEL_3)); assertThat(nodeController.getAllChannelIdsForPubkey(PUBKEY)) .isEqualTo(new ChannelsForNodeDto(PUBKEY, List.of(CHANNEL_ID, CHANNEL_ID_3))); - verify(metrics).mark(argThat(name -> name.endsWith(".getAllChannelIdsForPubkey"))); } @Test @@ -172,13 +162,11 @@ class NodeControllerTest { void getBalance() { when(balanceService.getBalanceInformation(PUBKEY)).thenReturn(BALANCE_INFORMATION); assertThat(nodeController.getBalance(PUBKEY)).isEqualTo(BalanceInformationDto.createFrom(BALANCE_INFORMATION)); - verify(metrics).mark(argThat(name -> name.endsWith(".getBalance"))); } @Test void getFeeReport() { when(feeService.getFeeReportForPeer(PUBKEY)).thenReturn(FEE_REPORT); assertThat(nodeController.getFeeReport(PUBKEY)).isEqualTo(new FeeReportDto("1234", "567")); - verify(metrics).mark(argThat(name -> name.endsWith(".getFeeReport"))); } } \ No newline at end of file diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/OnChainCostsControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/OnChainCostsControllerTest.java index 624505d1..e2861b71 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/OnChainCostsControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/OnChainCostsControllerTest.java @@ -1,7 +1,6 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.service.OnChainCostService; import org.junit.jupiter.api.Test; @@ -16,8 +15,6 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -28,18 +25,14 @@ class OnChainCostsControllerTest { @Mock private OnChainCostService onChainCostService; - @Mock - private Metrics metrics; - @Test - void getCostsForPeer() throws CostException { + void getCostsForPeer() { Coins openCosts = Coins.ofSatoshis(123); Coins closeCosts = Coins.ofSatoshis(456); when(onChainCostService.getOpenCostsWith(PUBKEY)).thenReturn(openCosts); when(onChainCostService.getCloseCostsWith(PUBKEY)).thenReturn(closeCosts); OnChainCostsDto expected = new OnChainCostsDto(openCosts, closeCosts); assertThat(onChainCostsController.getCostsForPeer(PUBKEY)).isEqualTo(expected); - verify(metrics).mark(argThat(name -> name.endsWith(".getCostsForPeer"))); } @Test @@ -47,7 +40,6 @@ class OnChainCostsControllerTest { Coins coins = Coins.ofSatoshis(123); when(onChainCostService.getOpenCosts(CHANNEL_ID)).thenReturn(Optional.of(coins)); assertThat(onChainCostsController.getOpenCostsForChannel(CHANNEL_ID)).isEqualTo(coins.satoshis()); - verify(metrics).mark(argThat(name -> name.endsWith(".getOpenCostsForChannel"))); } @Test @@ -62,7 +54,6 @@ class OnChainCostsControllerTest { Coins coins = Coins.ofSatoshis(123); when(onChainCostService.getCloseCosts(CHANNEL_ID)).thenReturn(Optional.of(coins)); assertThat(onChainCostsController.getCloseCostsForChannel(CHANNEL_ID)).isEqualTo(coins.satoshis()); - verify(metrics).mark(argThat(name -> name.endsWith(".getCloseCostsForChannel"))); } @Test diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java index 9a0a5671..edfa7ae6 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java @@ -2,7 +2,6 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.controller.dto.ChannelsDto; import de.cotto.lndmanagej.controller.dto.PubkeysDto; -import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.service.ChannelService; @@ -24,8 +23,6 @@ import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHAN import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_TO_NODE_3; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -36,9 +33,6 @@ class StatusControllerTest { @Mock private OwnNodeService ownNodeService; - @Mock - private Metrics metrics; - @Mock private ChannelService channelService; @@ -47,7 +41,6 @@ class StatusControllerTest { when(ownNodeService.isSyncedToChain()).thenReturn(true); assertThat(statusController.isSyncedToChain()).isTrue(); - verify(metrics).mark(argThat(name -> name.endsWith(".isSyncedToChain"))); } @Test @@ -62,7 +55,6 @@ class StatusControllerTest { List expectedChannelIds = List.of(LOCAL_OPEN_CHANNEL.getId(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getId()); assertThat(statusController.getOpenChannels()).isEqualTo(new ChannelsDto(expectedChannelIds)); - verify(metrics).mark(argThat(name -> name.endsWith(".getOpenChannels"))); } @Test @@ -71,7 +63,6 @@ class StatusControllerTest { List expectedPubkeys = List.of(LOCAL_OPEN_CHANNEL.getRemotePubkey(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getRemotePubkey()); assertThat(statusController.getPubkeysForOpenChannels()).isEqualTo(new PubkeysDto(expectedPubkeys)); - verify(metrics).mark(argThat(name -> name.endsWith(".getPubkeysForOpenChannels"))); } @Test @@ -86,7 +77,6 @@ class StatusControllerTest { List expectedChannelIds = List.of(CLOSED_CHANNEL.getId(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getId()); assertThat(statusController.getAllChannels()).isEqualTo(new ChannelsDto(expectedChannelIds)); - verify(metrics).mark(argThat(name -> name.endsWith(".getAllChannels"))); } @Test @@ -95,7 +85,6 @@ class StatusControllerTest { List expectedPubkeys = List.of(CLOSED_CHANNEL.getRemotePubkey(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getRemotePubkey()); assertThat(statusController.getPubkeysForAllChannels()).isEqualTo(new PubkeysDto(expectedPubkeys)); - verify(metrics).mark(argThat(name -> name.endsWith(".getPubkeysForAllChannels"))); } @Test @@ -108,6 +97,5 @@ class StatusControllerTest { void getBlockHeight() { when(ownNodeService.getBlockHeight()).thenReturn(123_456); assertThat(statusController.getBlockHeight()).isEqualTo(123_456); - verify(metrics).mark(argThat(name -> name.endsWith(".getBlockHeight"))); } } \ No newline at end of file