This is an automated email from the ASF dual-hosted git repository.
tkalkirill pushed a commit to branch ignite-26036
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/ignite-26036 by this push:
new 3c2da078310 IGNITE-26036 wip
3c2da078310 is described below
commit 3c2da0783103008bd768b983c0fd24cd597107a0
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Tue Jul 29 11:55:18 2025 +0300
IGNITE-26036 wip
---
.../ignite/internal/cli/CliIntegrationTest.java | 8 +++++++-
.../metric/ItClusterMetricCommandTest.java | 23 +++++++++++++++++++---
.../rest/metrics/ClusterMetricController.java | 12 +++++++++--
.../rest/metrics/NodeMetricController.java | 14 +++++++++----
4 files changed, 47 insertions(+), 10 deletions(-)
diff --git
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/CliIntegrationTest.java
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/CliIntegrationTest.java
index 69a19ee0989..974d2fe5504 100644
---
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/CliIntegrationTest.java
+++
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/CliIntegrationTest.java
@@ -104,7 +104,7 @@ public abstract class CliIntegrationTest extends
ClusterPerClassIntegrationTest
private CommandLine cmd;
- private StringWriter sout;
+ public StringWriter sout;
private StringWriter serr;
@@ -292,6 +292,12 @@ public abstract class CliIntegrationTest extends
ClusterPerClassIntegrationTest
.isEmpty();
}
+ protected void assertOutputContainsSubsequence(Iterable<String>
substrings) {
+ assertThat(sout.toString())
+ .as("Expected command output will contain the substrings in
the given order")
+ .containsSubsequence(substrings);
+ }
+
protected void assertErrOutputIsNotEmpty() {
assertThat(serr.toString())
.as("Expected command error output not to be empty")
diff --git
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/metric/ItClusterMetricCommandTest.java
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/metric/ItClusterMetricCommandTest.java
index 78ee7e7c35e..d9e76e4edf8 100644
---
a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/metric/ItClusterMetricCommandTest.java
+++
b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/metric/ItClusterMetricCommandTest.java
@@ -17,13 +17,16 @@
package org.apache.ignite.internal.cli.commands.metric;
+import static java.util.stream.Collectors.toList;
import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
+import org.apache.ignite.Ignite;
import org.apache.ignite.internal.cli.CliIntegrationTest;
import org.apache.ignite.internal.metrics.MetricSource;
import org.junit.jupiter.api.Test;
@@ -79,15 +82,29 @@ class ItClusterMetricCommandTest extends CliIntegrationTest
{
execute("cluster", "metric", "source", "list", "--plain", "--url",
NODE_URL);
// Then
- List<Executable> assertions = new ArrayList<>();
+ List<String> sourceNames = Arrays.stream(ALL_METRIC_SOURCES)
+
.map(org.apache.ignite.rest.client.model.MetricSource::getName).sorted()
+ .collect(toList());
+
+ List<String> nodeNames = CLUSTER.nodes().stream()
+ .map(Ignite::name)
+ .sorted()
+ .collect(toList());
+
+ var assertions = new ArrayList<Executable>();
+
assertions.add(this::assertExitCodeIsZero);
assertions.add(this::assertErrOutputIsEmpty);
assertions.add(() -> assertOutputContains("Node\tSource
name\tAvailability"));
- for (org.apache.ignite.rest.client.model.MetricSource source :
ALL_METRIC_SOURCES) {
- assertions.add(() -> assertOutputContains(source.getName() +
"\tenabled" + NL));
+ for (String sourceName : sourceNames) {
+ assertions.add(() -> assertOutputContains(sourceName + "\tenabled"
+ NL));
}
// Header + number of nodes * (node name header + metric sources)
assertions.add(() -> assertOutputHasLineCount(1 + initialNodes() *
(ALL_METRIC_SOURCES.length + 1)));
+ // Let's check that the substrings are in the correct order.
+ assertions.add(() -> assertOutputContainsSubsequence(nodeNames));
+ assertions.add(() -> assertOutputContainsSubsequence(sourceNames));
+
assertAll(assertions);
}
diff --git
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/ClusterMetricController.java
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/ClusterMetricController.java
index 867930f1173..d0a8d2f0cd0 100644
---
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/ClusterMetricController.java
+++
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/ClusterMetricController.java
@@ -22,6 +22,7 @@ import static
org.apache.ignite.internal.util.ExceptionUtils.sneakyThrow;
import io.micronaut.http.annotation.Controller;
import java.util.Collection;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -62,11 +63,18 @@ public class ClusterMetricController implements
ClusterMetricApi, ResourceHolder
}
private static List<NodeMetricSources> fromDto(Map<String,
Collection<MetricSourceDto>> sources) {
- return
sources.entrySet().stream().map(ClusterMetricController::fromDto).collect(toList());
+ return sources.entrySet().stream()
+ .map(ClusterMetricController::fromDto)
+ .sorted(Comparator.comparing(NodeMetricSources::node))
+ .collect(toList());
}
private static NodeMetricSources fromDto(Entry<String,
Collection<MetricSourceDto>> entry) {
- List<MetricSource> sources =
entry.getValue().stream().map(ClusterMetricController::fromDto).collect(toList());
+ List<MetricSource> sources = entry.getValue().stream()
+ .map(ClusterMetricController::fromDto)
+ .sorted(Comparator.comparing(MetricSource::name))
+ .collect(toList());
+
return new NodeMetricSources(entry.getKey(), sources);
}
diff --git
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/NodeMetricController.java
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/NodeMetricController.java
index 600fa5d38db..ee70038b052 100644
---
a/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/NodeMetricController.java
+++
b/modules/rest/src/main/java/org/apache/ignite/internal/rest/metrics/NodeMetricController.java
@@ -17,10 +17,12 @@
package org.apache.ignite.internal.rest.metrics;
+import static java.util.stream.Collectors.toList;
+
import io.micronaut.http.annotation.Controller;
import java.util.Collection;
+import java.util.Comparator;
import java.util.List;
-import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.apache.ignite.internal.metrics.MetricManager;
import org.apache.ignite.internal.rest.ResourceHolder;
@@ -61,7 +63,8 @@ public class NodeMetricController implements NodeMetricApi,
ResourceHolder {
public Collection<MetricSource> listMetricSources() {
return metricManager.metricSources().stream()
.map(source -> new MetricSource(source.name(),
source.enabled()))
- .collect(Collectors.toList());
+ .sorted(Comparator.comparing(MetricSource::name))
+ .collect(toList());
}
@Override
@@ -70,10 +73,13 @@ public class NodeMetricController implements NodeMetricApi,
ResourceHolder {
.map(metricSet -> {
List<Metric> metricDtos =
StreamSupport.stream(metricSet.spliterator(), false)
.map(metric -> new Metric(metric.name(),
metric.description()))
- .collect(Collectors.toList());
+ .sorted(Comparator.comparing(Metric::name))
+ .collect(toList());
+
return new MetricSet(metricSet.name(), metricDtos);
})
- .collect(Collectors.toList());
+ .sorted(Comparator.comparing(MetricSet::name))
+ .collect(toList());
}
@Override