This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/rocketmq-studio by this push:
new 1dbb2bedb fix(apache): report a Node.js client language instead of
dropping it (#4846)
1dbb2bedb is described below
commit 1dbb2bedb6b3ece13853ebc257dcf1b30958af4d
Author: Wang1rrr <[email protected]>
AuthorDate: Thu Sep 24 10:45:58 2026 +0800
fix(apache): report a Node.js client language instead of dropping it (#4846)
`RocketMQClientProvider.mapLanguage` is the only mapping from the broker's
`LanguageCode` to Studio's `ClientLanguage` and covered seven of the eight
members, so a broker-reported `LanguageCode.NODE_JS` (which rocketmq-remoting
5.5.0 does emit) fell through to null. A Node.js client therefore rendered as
an empty tag, was unfilterable, was bucketed under a literal null in the
distribution panel, exported an empty CSV cell and raised a false
UNKNOWN_LANGUAGE finding against a healthy f [...]
---
.../provider/apache/RocketMQClientProvider.java | 4 ++++
.../apache/RocketMQClientProviderTest.java | 26 ++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProvider.java
b/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProvider.java
index 9978ee2a5..f89a84401 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProvider.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProvider.java
@@ -455,7 +455,11 @@ public class RocketMQClientProvider implements
ClientProvider {
return ClientLanguage.CSharp;
case PHP:
return ClientLanguage.PHP;
+ case NODE_JS:
+ return ClientLanguage.NodeJS;
default:
+ // LanguageCode values with no ClientLanguage counterpart
(RUBY, HTTP, OMS, OTHER,
+ // DELPHI, ERLANG) stay unmapped; the client diagnostics
report them as unknown.
return null;
}
}
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProviderTest.java
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProviderTest.java
index 2bf3a429b..a6ac4bff6 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProviderTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQClientProviderTest.java
@@ -32,6 +32,7 @@ import
org.apache.rocketmq.studio.cluster.client.ClientConnectionVO;
import org.apache.rocketmq.studio.cluster.client.ProducerConnectionScanResult;
import org.apache.rocketmq.studio.cluster.broker.MqAdminExtFactory;
import org.apache.rocketmq.studio.cluster.broker.RuntimeAdminClientResolver;
+import org.apache.rocketmq.studio.common.domain.enums.ClientLanguage;
import org.apache.rocketmq.studio.common.exception.BusinessException;
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
import org.junit.jupiter.api.BeforeEach;
@@ -45,6 +46,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -115,6 +117,30 @@ class RocketMQClientProviderTest {
.isEqualTo(org.apache.rocketmq.common.MQVersion.getVersionDesc(500));
}
+ @Test
+ void connectionScanShouldReportEveryStudioClientLanguageTest() throws
Exception {
+ Map<String, String> clusters = new HashMap<>();
+ clusters.put("10.0.0.11:10911", "cluster-a");
+
when(adminExt.examineBrokerClusterInfo()).thenReturn(clusterInfo(clusters));
+ List<LanguageCode> languageCodes = List.of(
+ LanguageCode.JAVA, LanguageCode.GO, LanguageCode.PYTHON,
LanguageCode.RUST,
+ LanguageCode.CPP, LanguageCode.DOTNET, LanguageCode.PHP,
LanguageCode.NODE_JS);
+ List<ProducerInfo> producers = IntStream.range(0, languageCodes.size())
+ .mapToObj(index -> new ProducerInfo("client-" + index,
"10.0.0.2" + index + ":49152",
+ languageCodes.get(index), 500, 1000L))
+ .toList();
+ Map<String, List<ProducerInfo>> data = new HashMap<>();
+ data.put("pg-language", producers);
+ when(adminExt.getAllProducerInfo("10.0.0.11:10911")).thenReturn(new
ProducerTableInfo(data));
+
+ List<ClientConnectionVO> connections =
provider.findConnectionsAt("10.0.1.31:9876", null, "Producer");
+
+ assertThat(connections).hasSize(languageCodes.size());
+ assertThat(connections)
+ .extracting(ClientConnectionVO::getLanguage)
+ .containsExactlyInAnyOrder(ClientLanguage.values());
+ }
+
@Test
void producerScanTreatsMissingBrokerMetadataAsEmpty() throws Exception {
ClusterInfo clusterInfo = new ClusterInfo();