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 552409185 fix(web): key the protocol tag map by the values the API
returns (#4741)
552409185 is described below
commit 5524091858e9aa7217d524539447819d6db718a2
Author: Apulupie <[email protected]>
AuthorDate: Mon Sep 21 21:12:30 2026 +0800
fix(web): key the protocol tag map by the values the API returns (#4741)
`PROTOCOL_MAP` in `web/src/constants/theme.ts` was keyed by `REMOTING` and
`GRPC`, but `Protocol` is `{ gRPC, Remoting }` with no `@JsonValue` or custom
serializer, so `ConsumerInstanceVO.protocol` reaches the browser as the enum
name. The consumer page looks the value up with a fallback that real data
always took: `t()`'s key fallback happened to render the label correctly, which
hid the fact that the colour degraded to the grey default. Mock mode looked
fine because `mock/consumers. [...]
The map is rekeyed to the enum names, and the mock union type, the mock
rows and the two `ConsumerPage` fixtures that copied the uppercase spelling
follow. `cluster/clients.tsx` keeps its own local `protocolConfig`, which was
already keyed correctly, and a new case in `theme.test.ts` pins the key set so
the map cannot drift from the enum again.
Two inert fixtures in `consumerGroupDiagnostics.test.ts` still spell the
protocol in uppercase; that util never reads the field, so they are a cosmetic
follow-up.
Fixes #4742
---
web/src/constants/__tests__/theme.test.ts | 7 ++
web/src/constants/theme.ts | 4 +-
web/src/mock/consumers.ts | 82 +++++++++++-----------
.../pages/instance/__tests__/ConsumerPage.test.tsx | 4 +-
4 files changed, 52 insertions(+), 45 deletions(-)
diff --git a/web/src/constants/__tests__/theme.test.ts
b/web/src/constants/__tests__/theme.test.ts
index c3945f0dd..789322570 100644
--- a/web/src/constants/__tests__/theme.test.ts
+++ b/web/src/constants/__tests__/theme.test.ts
@@ -84,6 +84,13 @@ describe('theme constants', () => {
expect(val.color, `PROTOCOL_MAP[${key}].color should
exist`).toBeDefined();
}
});
+
+ it('is keyed by the values the Protocol enum returns on the wire', () => {
+ // The server serializes
org.apache.rocketmq.studio.common.domain.enums.Protocol
+ // by its enum name, which is `gRPC` / `Remoting` — not the uppercase
shells this
+ // map used to be keyed by.
+ expect(Object.keys(PROTOCOL_MAP).sort()).toEqual(['Remoting', 'gRPC']);
+ });
});
describe('THEME_COLORS', () => {
diff --git a/web/src/constants/theme.ts b/web/src/constants/theme.ts
index 58ff5406e..08ea91088 100644
--- a/web/src/constants/theme.ts
+++ b/web/src/constants/theme.ts
@@ -64,6 +64,6 @@ export const TOPIC_TYPE_MAP: Record<string, { labelKey:
string; color: TagProps[
* Protocol map — labels are i18n keys, resolved at render time via t().
*/
export const PROTOCOL_MAP: Record<string, { labelKey: string; color:
TagProps['color'] }> = {
- REMOTING: { labelKey: 'theme.protocolRemoting', color: 'geekblue' },
- GRPC: { labelKey: 'theme.protocolGrpc', color: 'green' },
+ Remoting: { labelKey: 'theme.protocolRemoting', color: 'geekblue' },
+ gRPC: { labelKey: 'theme.protocolGrpc', color: 'green' },
};
diff --git a/web/src/mock/consumers.ts b/web/src/mock/consumers.ts
index 1898563de..9275aa797 100644
--- a/web/src/mock/consumers.ts
+++ b/web/src/mock/consumers.ts
@@ -19,7 +19,7 @@
export interface ConsumerInstance {
clientId: string;
- protocol: 'REMOTING' | 'GRPC';
+ protocol: 'gRPC' | 'Remoting';
address: string;
subscribedTopics: string[];
lastHeartbeat: string;
@@ -82,7 +82,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.1.12:49152',
subscribedTopics: ['order-create', 'order-status-change'],
lastHeartbeat: '2026-07-01 18:32:05',
@@ -90,7 +90,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.1.13:49200',
subscribedTopics: ['order-create', 'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:03',
@@ -98,7 +98,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.1.14:49300',
subscribedTopics: ['order-status-change', 'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:01',
@@ -106,7 +106,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.1.15:49400',
subscribedTopics: ['order-create', 'order-status-change',
'payment-callback'],
lastHeartbeat: '2026-07-01 18:31:58',
@@ -114,7 +114,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.1.16:49500',
subscribedTopics: ['order-create'],
lastHeartbeat: '2026-07-01 18:32:04',
@@ -122,7 +122,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.1.17:49600',
subscribedTopics: ['order-status-change', 'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:02',
@@ -148,7 +148,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.2.10:50100',
subscribedTopics: ['payment-callback', 'refund-event'],
lastHeartbeat: '2026-07-01 18:32:00',
@@ -156,7 +156,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.2.11:50200',
subscribedTopics: ['payment-callback'],
lastHeartbeat: '2026-07-01 18:31:58',
@@ -164,7 +164,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.2.12:50300',
subscribedTopics: ['refund-event'],
lastHeartbeat: '2026-07-01 18:32:02',
@@ -172,7 +172,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.2.13:50400',
subscribedTopics: ['payment-callback', 'refund-event'],
lastHeartbeat: '2026-07-01 18:31:55',
@@ -198,7 +198,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.3.20:51100',
subscribedTopics: ['user-activity-log', 'user-profile-change'],
lastHeartbeat: '2026-07-01 18:31:50',
@@ -206,7 +206,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.3.21:51200',
subscribedTopics: ['user-activity-log'],
lastHeartbeat: '2026-07-01 18:31:48',
@@ -214,7 +214,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.3.22:51300',
subscribedTopics: ['user-activity-log', 'user-profile-change'],
lastHeartbeat: '2026-07-01 18:31:52',
@@ -241,7 +241,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.4.30:52100',
subscribedTopics: ['inventory-sync', 'stock-alert'],
lastHeartbeat: '2026-07-01 18:31:45',
@@ -249,7 +249,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.4.31:52200',
subscribedTopics: ['inventory-sync'],
lastHeartbeat: '2026-07-01 18:31:42',
@@ -275,7 +275,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.40:53100',
subscribedTopics: ['app-log', 'access-log'],
lastHeartbeat: '2026-07-01 18:32:08',
@@ -283,7 +283,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.41:53200',
subscribedTopics: ['app-log', 'error-log'],
lastHeartbeat: '2026-07-01 18:32:06',
@@ -291,7 +291,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.42:53300',
subscribedTopics: ['access-log', 'error-log'],
lastHeartbeat: '2026-07-01 18:32:04',
@@ -299,7 +299,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.43:53400',
subscribedTopics: ['app-log'],
lastHeartbeat: '2026-07-01 18:32:02',
@@ -307,7 +307,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.44:53500',
subscribedTopics: ['access-log'],
lastHeartbeat: '2026-07-01 18:32:00',
@@ -315,7 +315,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.45:53600',
subscribedTopics: ['error-log'],
lastHeartbeat: '2026-07-01 18:31:58',
@@ -323,7 +323,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.5.46:53700',
subscribedTopics: ['app-log', 'access-log', 'error-log'],
lastHeartbeat: '2026-07-01 18:31:55',
@@ -331,7 +331,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.5.47:53800',
subscribedTopics: ['app-log', 'error-log'],
lastHeartbeat: '2026-07-01 18:31:52',
@@ -357,7 +357,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.6.50:54100',
subscribedTopics: ['notification-push'],
lastHeartbeat: '2026-07-01 18:32:10',
@@ -365,7 +365,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.6.51:54200',
subscribedTopics: ['notification-push', 'sms-gateway'],
lastHeartbeat: '2026-07-01 18:32:08',
@@ -373,7 +373,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.6.52:54300',
subscribedTopics: ['sms-gateway'],
lastHeartbeat: '2026-07-01 18:32:06',
@@ -399,7 +399,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.7.60:55100',
subscribedTopics: ['ai-task-dispatch', 'model-inference-request'],
lastHeartbeat: '2026-07-01 18:32:12',
@@ -407,7 +407,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.7.61:55200',
subscribedTopics: ['ai-task-dispatch'],
lastHeartbeat: '2026-07-01 18:32:10',
@@ -415,7 +415,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.7.62:55300',
subscribedTopics: ['model-inference-request'],
lastHeartbeat: '2026-07-01 18:32:08',
@@ -423,7 +423,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.7.63:55400',
subscribedTopics: ['ai-task-dispatch', 'model-inference-request'],
lastHeartbeat: '2026-07-01 18:32:06',
@@ -449,7 +449,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.8.70:56100',
subscribedTopics: ['metrics-raw', 'trace-span'],
lastHeartbeat: '2026-07-01 18:31:40',
@@ -457,7 +457,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.8.71:56200',
subscribedTopics: ['metrics-raw', 'trace-span'],
lastHeartbeat: '2026-07-01 18:31:38',
@@ -483,7 +483,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.9.80:57100',
subscribedTopics: ['transaction-event', 'login-event'],
lastHeartbeat: '2026-07-01 18:32:15',
@@ -491,7 +491,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.9.81:57200',
subscribedTopics: ['transaction-event', 'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:13',
@@ -499,7 +499,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.9.82:57300',
subscribedTopics: ['login-event', 'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:11',
@@ -507,7 +507,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.9.83:57400',
subscribedTopics: ['transaction-event', 'login-event',
'payment-callback'],
lastHeartbeat: '2026-07-01 18:32:09',
@@ -515,7 +515,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.9.84:57500',
subscribedTopics: ['transaction-event'],
lastHeartbeat: '2026-07-01 18:32:07',
@@ -542,7 +542,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.10.90:58100',
subscribedTopics: ['binlog-event', 'schema-change'],
lastHeartbeat: '2026-07-01 18:31:55',
@@ -550,7 +550,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.10.91:58200',
subscribedTopics: ['binlog-event'],
lastHeartbeat: '2026-07-01 18:31:53',
@@ -558,7 +558,7 @@ export const mockConsumerGroups: ConsumerGroup[] = [
},
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.10.92:58300',
subscribedTopics: ['binlog-event', 'schema-change'],
lastHeartbeat: '2026-07-01 18:31:50',
diff --git a/web/src/pages/instance/__tests__/ConsumerPage.test.tsx
b/web/src/pages/instance/__tests__/ConsumerPage.test.tsx
index f77e4477c..1873a3993 100644
--- a/web/src/pages/instance/__tests__/ConsumerPage.test.tsx
+++ b/web/src/pages/instance/__tests__/ConsumerPage.test.tsx
@@ -710,7 +710,7 @@ describe('Consumer page', () => {
instances: [
{
clientId: '[email protected]',
- protocol: 'GRPC',
+ protocol: 'gRPC',
address: '10.0.0.1:49152',
subscribedTopics: ['remote-topic'],
lastHeartbeat: '2026-07-23T00:00:00Z',
@@ -718,7 +718,7 @@ describe('Consumer page', () => {
},
{
clientId: '[email protected]',
- protocol: 'REMOTING',
+ protocol: 'Remoting',
address: '10.0.0.2:49152',
subscribedTopics: [],
lastHeartbeat: '2026-07-23T00:00:00Z',