diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTask.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTask.java index 2bfdadad33e..bfae75fdfe9 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTask.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTask.java @@ -42,14 +42,15 @@ public abstract class AbstractEthTask implements EthTask { private final Collection> subTaskFutures = new ConcurrentLinkedDeque<>(); protected AbstractEthTask(final MetricsSystem metricsSystem) { - this(buildOperationTimer(metricsSystem)); + this.taskTimer = buildOperationTimer(metricsSystem, getClass().getSimpleName()); } protected AbstractEthTask(final OperationTimer taskTimer) { this.taskTimer = taskTimer; } - private static OperationTimer buildOperationTimer(final MetricsSystem metricsSystem) { + private static OperationTimer buildOperationTimer( + final MetricsSystem metricsSystem, final String taskName) { final LabelledMetric ethTasksTimer = metricsSystem.createLabelledTimer( BesuMetricCategory.SYNCHRONIZER, "task", "Internal processing tasks", "taskName"); @@ -64,7 +65,7 @@ public double stopTimer() { } }; } else { - return ethTasksTimer.labels(AbstractEthTask.class.getSimpleName()); + return ethTasksTimer.labels(taskName); } } diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTaskTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTaskTest.java index 79a9a6789b6..44b9e11a0ed 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTaskTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/manager/task/AbstractEthTaskTest.java @@ -19,6 +19,9 @@ import static org.mockito.Mockito.when; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; +import org.hyperledger.besu.plugin.services.MetricsSystem; +import org.hyperledger.besu.plugin.services.metrics.LabelledMetric; +import org.hyperledger.besu.plugin.services.metrics.MetricCategory; import org.hyperledger.besu.plugin.services.metrics.OperationTimer; import java.util.Arrays; @@ -104,6 +107,33 @@ protected void executeTask() {} verify(mockTimingContext).stopTimer(); } + @Test + public void shouldHaveSpecificMetricsLabels() { + // seed with a failing value so that a no-op also trips the failure. + final String[] lastLabelNames = {"AbstractEthTask"}; + final MetricsSystem instrumentedLabeler = + new NoOpMetricsSystem() { + @Override + public LabelledMetric createLabelledTimer( + final MetricCategory category, + final String name, + final String help, + final String... labelNames) { + return names -> { + lastLabelNames[0] = names[0]; + return null; + }; + } + }; + new AbstractEthTask<>(instrumentedLabeler) { + @Override + protected void executeTask() { + // no-op + } + }; + assertThat(lastLabelNames[0]).isNotEqualTo("AbstractEthTask"); + } + private class EthTaskWithMultipleSubtasks extends AbstractEthTask { private final List> subtasks;