From 8e3edc3f1c58d8209871d05c63cda89a98d2b8ea Mon Sep 17 00:00:00 2001 From: "jie@apache.org" <2732554140@qq.com> Date: Sat, 1 Jun 2024 17:15:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):1.=20=E9=87=8D=E6=9E=84=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=A8=A1=E5=9D=97=202.=20=E9=87=8D=E6=9E=84=20remote?= =?UTF-8?q?=20=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 66 +++- eventmesh-dashboard-common/pom.xml | 1 - .../topic/StorageTopicDifference.java | 8 + .../common/enums/ClusterTrusteeshipType.java | 15 + .../dashboard/common/enums/ClusterType.java | 117 ++++++ .../dashboard/common/enums/RemotingType.java | 20 + .../common/model/metadata/AclMetadata.java | 2 + .../common/model/metadata/ClientMetadata.java | 2 + .../model/metadata/ClusterMetadata.java | 11 +- .../metadata/ClusterRelationshipMetadata.java | 21 + .../common/model/metadata/ConfigMetadata.java | 2 + .../common/model/metadata/GroupMetadata.java | 2 + .../common/model/metadata/MetadataConfig.java | 3 + .../model/metadata/RegistryMetadata.java | 2 + .../model/metadata/RuntimeMetadata.java | 2 + .../common/model/metadata/TopicMetadata.java | 2 + .../model/remoting/BaseGlobalResult.java | 21 + .../common/model/remoting/GlobalRequest.java | 9 + .../common/model/remoting/GlobalResult.java | 43 +++ .../common/model/remoting/RemotingAction.java | 12 + .../model/remoting/RemotingOperate.java | 10 + .../model/remoting/RemotingServiceType.java | 6 + .../model/remoting/acl/GetAclsRequest.java | 5 +- .../model/remoting/acl/GetAclsResult.java | 8 +- .../remoting/config/AddConfigRequest.java | 37 ++ .../remoting/config/AddConfigResponse.java | 21 + .../remoting/config/AddConfigResult.java | 21 + .../model/remoting/config/ConfigType.java | 24 ++ .../remoting/config/DeleteConfigRequest.java | 16 +- .../remoting/config/DeleteConfigResponse.java | 21 + .../remoting/config/DeleteConfigResult.java | 21 + .../remoting/config/GetConfigRequest.java | 7 +- .../remoting/config/UpdateConfigRequest.java | 27 ++ .../remoting/config/UpdateConfigResponse.java | 21 + .../remoting/config/UpdateConfigResult.java | 21 + .../model/remoting/group/GetGroupResult.java | 7 +- .../remoting/runtime/GetRuntimeRequest.java | 3 +- .../remoting/runtime/GetRuntimeResult.java | 7 +- .../remoting/topic/CreateTopicRequest.java | 14 +- .../remoting/topic/CreateTopicResult.java | 12 +- .../remoting/topic/DeleteTopicResult.java | 12 +- .../remoting/topic/GetTopicsRequest.java | 3 +- .../model/remoting/topic/GetTopicsResult.java | 15 +- eventmesh-dashboard-console/pom.xml | 8 +- .../console/adapter/DynamicsAdapter.java | 30 ++ .../dashboard/console/cache/ClusterCache.java | 7 +- .../dashboard/console/cache/ClusterDO.java | 24 ++ .../console/cache/ClusterDoCache.java | 80 ++++ .../console/entity/base/BaseEntity.java | 11 +- .../console/entity/cluster/ClusterEntity.java | 17 +- .../cluster/ClusterRelationshipEntity.java | 18 + .../console/entity/runtime/RuntimeEntity.java | 13 +- .../console/function/ClusterInfoManager.java | 86 +++++ .../function/metadata/MetadataManager.java | 18 +- .../metadata/MetadataServiceWrapper.java | 4 +- .../metadata/SyncRelationshipConfig.java | 10 + .../handler/MetadataHandlerWrapper.java | 6 + .../db/ClusterMetadataHandlerToDbImpl.java | 2 +- .../db/ConfigMetadataHandlerToDbImpl.java | 2 +- .../db/ConnectionMetadataHandlerToDbImpl.java | 2 +- .../db/GroupMetadataHandlerToDbImpl.java | 2 +- .../db/RegistryMetadataHandlerToDbImpl.java | 2 +- .../db/RuntimeMetadataHandlerToDbImpl.java | 30 +- .../db/TopicMetadataHandlerToDbImpl.java | 2 +- .../syncservice/SyncDataServiceWrapper.java | 17 +- .../cluster/ConfigSyncFromClusterService.java | 97 ----- .../cluster/GroupSyncFromClusterService.java | 46 --- .../RuntimeSyncFromClusterService.java | 93 ----- .../cluster/TopicSyncFromClusterService.java | 87 ----- .../db/TopicSyncFromDbService.java | 2 +- .../TopicMetadataHandlerToClusterImpl.java | 2 +- .../console/mapper/cluster/ClusterMapper.java | 5 +- .../cluster/ClusterRelationshipMapper.java | 26 ++ .../cluster/ClusterRelationshipService.java | 18 + .../service/cluster/ClusterService.java | 2 + .../impl/ClusterRelationshipServiceImpl.java | 36 ++ .../cluster/impl/ClusterServiceImpl.java | 15 +- .../runtime/Impl/RuntimeServiceImpl.java | 5 + .../service/runtime/RuntimeService.java | 2 + .../main/resources/eventmesh-dashboard.sql | 21 +- .../EventMeshDashboardApplicationTest.java | 22 -- .../console/cache/ClusterCacheBase.java | 2 +- .../console/cache/ClusterCacheTest.java | 3 +- .../metadata/MetadataManagerTest.java | 6 +- .../ClusterMetadataHandlerToDbImplTest.java | 2 +- ...ConnectionMetadataHandlerToDbImplTest.java | 2 +- .../db/GroupMetadataHandlerToDbImplTest.java | 2 +- .../RegistryMetadataHandlerToDbImplTest.java | 2 +- .../RuntimeMetadataHandlerToDbImplTest.java | 2 +- .../db/TopicMetadataHandlerToDbImplTest.java | 2 +- .../TopicSyncFromClusterServiceTest.java | 1 + .../unit/cluster/TestClusterMapper.java | 2 +- eventmesh-dashboard-core/pom.xml | 9 +- .../dashboard/core/cluster/ClusterDO.java | 17 + .../core/cluster/ClusterDoCache.java | 80 ++++ .../dashboard/core/cluster/ColonyDO.java | 45 +++ .../core/function/SDK/SDKManager.java | 24 +- .../core/function/SDK/SDKTypeEnum.java | 2 + .../config/CreateRocketmqAdminSDKConfig.java | 18 + .../SDK/config/CreateRocketmqConfig.java | 8 +- .../rocketmq/RocketMQAdminOperation.java | 53 +++ .../RocketMQProduceSDKOperation.java | 2 +- .../RocketMQPushConsumerSDKOperation.java | 8 +- .../RocketMQRemotingSDKOperation.java | 2 +- .../RuntimeGrpcConsumerSDKOperation.java | 2 +- .../RuntimeGrpcProducerSDKOperation.java | 2 +- .../RuntimeHttpConsumerSDKOperation.java | 2 +- .../RuntimeHttpProducerSDKOperation.java | 2 +- .../{ => runtime}/RuntimeSDKOperation.java | 2 +- .../RuntimeTcpCloudEventSDKOperation.java | 2 +- .../RuntimeTcpEventMeshSDKOperation.java | 2 +- .../RuntimeTcpOpenMessageSDKOperation.java | 2 +- .../core/metadata}/MetadataHandler.java | 39 +- .../core/metadata/MetadataSyncManager.java | 231 +++++++++++ .../cluster/AbstractMetadataHandler.java | 36 ++ .../cluster/AclSyncFromClusterService.java | 37 +- .../cluster/ConfigSyncFromClusterService.java | 71 ++++ .../cluster/GroupSyncFromClusterService.java | 64 +++ .../InstanceUserFromClusterService.java | 2 +- .../RuntimeSyncFromClusterService.java | 57 +++ .../cluster/TopicSyncFromClusterService.java | 55 +++ .../remoting/AbstractRemotingService.java | 80 ++++ .../core/remoting/RemotingManager.java | 365 ++++++++++++++++++ .../RemotingServiceRuntimeConfig.java | 20 + .../AbstractRocketMQRemotingService.java | 92 +++++ .../rocketmq/RocketMQAclRemotingService.java | 29 ++ .../RocketMQClientRemotingService.java | 13 + .../RocketMQConfigRemotingService.java | 25 ++ .../RocketMQGroupRemotingService.java | 12 + .../RocketMQOffsetRemotingService.java | 19 + .../RocketMQSubscriptionRemotingService.java | 12 + .../RocketMQTopicRemotingService.java | 61 +++ .../rocketmq/RocketMQUserRemotingService.java | 24 ++ .../core/store/RocketmqTopicCore.java | 19 +- .../RuntimeGrpcConsumerSDKOperationTest.java | 1 + .../RuntimeGrpcProducerSDKOperationTest.java | 1 + .../RuntimeHttpConsumerSDKOperationTest.java | 1 + .../RuntimeHttpProducerSDKOperationTest.java | 1 + .../operation/RuntimeSDKOperationTest.java | 1 + .../RuntimeTcpCloudEventSDKOperationTest.java | 1 + .../RuntimeTcpEventMeshSDKOperationTest.java | 1 + ...RuntimeTcpOpenMessageSDKOperationTest.java | 1 + .../metadata/MetadataSyncManagerTest.java | 117 ++++++ .../core/remoting/RemotingManagerTest.java | 158 ++++++++ eventmesh-dashboard-observe/pom.xml | 2 +- eventmesh-dashboard-service/pom.xml | 3 +- .../remoting/ConfigRemotingService.java | 36 +- .../remoting/RemotingIntegrationService.java | 21 + .../service/remoting/RemotingOperate.java | 27 ++ .../service/remoting/RemotingServiceType.java | 23 ++ .../remoting/RuntimeRemotingService.java | 9 + .../src/routes/Routes.tsx | 18 +- 152 files changed, 3110 insertions(+), 555 deletions(-) create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/difference/topic/StorageTopicDifference.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterTrusteeshipType.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/RemotingType.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterRelationshipMetadata.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/BaseGlobalResult.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalRequest.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalResult.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingAction.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingOperate.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingServiceType.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigRequest.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResponse.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResult.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/ConfigType.java rename eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataService.java => eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigRequest.java (72%) create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResponse.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResult.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigRequest.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResponse.java create mode 100644 eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResult.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/adapter/DynamicsAdapter.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDO.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDoCache.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterRelationshipEntity.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/ClusterInfoManager.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/SyncRelationshipConfig.java delete mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/ConfigSyncFromClusterService.java delete mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/GroupSyncFromClusterService.java delete mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/RuntimeSyncFromClusterService.java delete mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterService.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java create mode 100644 eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDO.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDoCache.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ColonyDO.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqAdminSDKConfig.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQAdminOperation.java rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => rocketmq}/RocketMQProduceSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => rocketmq}/RocketMQPushConsumerSDKOperation.java (96%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => rocketmq}/RocketMQRemotingSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeGrpcConsumerSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeGrpcProducerSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeHttpConsumerSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeHttpProducerSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeTcpCloudEventSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeTcpEventMeshSDKOperation.java (99%) rename eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/{ => runtime}/RuntimeTcpOpenMessageSDKOperation.java (99%) rename {eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler => eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata}/MetadataHandler.java (70%) create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManager.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AbstractMetadataHandler.java rename {eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice => eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata}/cluster/AclSyncFromClusterService.java (60%) create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/ConfigSyncFromClusterService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/GroupSyncFromClusterService.java rename {eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice => eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata}/cluster/InstanceUserFromClusterService.java (91%) create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/RuntimeSyncFromClusterService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/TopicSyncFromClusterService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/AbstractRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManager.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingServiceRuntimeConfig.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/AbstractRocketMQRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQAclRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQClientRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQConfigRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQGroupRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQOffsetRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQSubscriptionRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQTopicRemotingService.java create mode 100644 eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQUserRemotingService.java create mode 100644 eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManagerTest.java create mode 100644 eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManagerTest.java create mode 100644 eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingIntegrationService.java create mode 100644 eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingOperate.java create mode 100644 eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingServiceType.java create mode 100644 eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RuntimeRemotingService.java diff --git a/README.md b/README.md index 09e6c118..8eeb7214 100644 --- a/README.md +++ b/README.md @@ -85,4 +85,68 @@ docker build -t yourname/eventmesh-dashboard -f docker/Dockerfile . ``` docker run -d --name eventmesh-dashboard -p 8080:8080 yourname/eventmesh-dashboard -``` \ No newline at end of file +``` + + +1. 注册中心的 创建,添加,删除, 扩容,缩容。 +2. runtime 创建,添加,删除, 扩容,缩容。 +3. 连接的 创建 , 添加,删除,扩容,缩容。 +4. rocketmq 的 创建,添加,删除。 + +### 基础页面 +1. 用户登录页面 + +### 业务方面页面 +1. 用户欢迎页面 + 2. 基础统计信息 + 3. 常用 集群,关注集群 + 4. 事件 +2. eventmesh 集群 + 1. runtime + 1. overview + 2. 列表页面 + 1. 详情 + 2. topic + 3. group + 4. config + 3. runtime操作 + 2. 注册中心 + 3. 列表 + 4. 添加注册中心 + 5. 删除注册中心 + 6. + 3. topic + 4. 消费组 + 5. 安全 + 6. 消息 + 7. 消息生产与消费 +3. eventmesh 注册中心 +4. eventmesh runtime +5. + +5. 集群 + 1. 集群创建 + 1. eventmesh and rocketmq + 1. runtime 的 自动创建 + 2. 注册中心的创建 + 3. eventmesh 的 自动创建 + 2. 手动创建 + 1. 注册中心 + 3. k8s创建 + 1. 整体集群创建 + 2. 单个集群创建 + 2. 集群暂停 + 1. 需要解除依赖,才能暂停 + 3. 集群删除 + 1. 需要解除依赖,才能暂停 + 4. 集群的关联 +6. runtime group topic + 1. 创建 + 1. 手动创建 + 2. 自动创建 + 2. 删除 + 3. 修改 + 4. config + 5. 关联 +7. 集群元数据复制并创建 +8. 集群恢复 \ No newline at end of file diff --git a/eventmesh-dashboard-common/pom.xml b/eventmesh-dashboard-common/pom.xml index 378391e2..979d549c 100644 --- a/eventmesh-dashboard-common/pom.xml +++ b/eventmesh-dashboard-common/pom.xml @@ -26,7 +26,6 @@ 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.common eventmesh-dashboard-common diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/difference/topic/StorageTopicDifference.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/difference/topic/StorageTopicDifference.java new file mode 100644 index 00000000..af91b35b --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/difference/topic/StorageTopicDifference.java @@ -0,0 +1,8 @@ +package org.apache.eventmesh.dashboard.common.difference.topic; + +public class StorageTopicDifference { + + + + +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterTrusteeshipType.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterTrusteeshipType.java new file mode 100644 index 00000000..193a2741 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterTrusteeshipType.java @@ -0,0 +1,15 @@ +package org.apache.eventmesh.dashboard.common.enums; + +public enum ClusterTrusteeshipType { + + // + FIRE_AND_FORGET_TRUSTEESHIP, + + // 发现 or 长时间没有上线 cluster sync db + TRUSTEESHIP, + + REVERSE, + + NO_TRUSTEESHIP; + +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java new file mode 100644 index 00000000..c2390378 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java @@ -0,0 +1,117 @@ +package org.apache.eventmesh.dashboard.common.enums; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public enum ClusterType { + + DEFAULT(1), + + EVENTMESH(20), + + STORAGE(21), + + DEFAULT_TYPE_NAME(1), + + CLUSTER(1), + + META(2), + + RUNTIME(3), + + + RUNTIME_EVENT_RUNTIME(ClusterType.META.code + 1), + + RUNTIME_ROCKETMQ_BROKER(ClusterType.META.code + 31), + + META_TYPE_ETCD(ClusterType.META.code + 1), + + META_TYPE_NACOS(ClusterType.META.code + 2), + + META_TYPE_ROCKETMQ_NAMESERVER(ClusterType.META.code + 31), + + + EVENTMESH_CLUSTER(EVENTMESH, EVENTMESH, CLUSTER, DEFAULT, RemotingType.EVENT_MESH_RUNTIME), + + EVENTMESH_RUNTIME(EVENTMESH, EVENTMESH, RUNTIME, DEFAULT, RemotingType.EVENT_MESH_RUNTIME), + + EVENTMESH_META_ETCD(EVENTMESH, EVENTMESH, META, META_TYPE_ETCD, RemotingType.EVENT_MESH_ETCD), + + EVENTMESH_META_NACOS(EVENTMESH, EVENTMESH, META, META_TYPE_NACOS, RemotingType.EVENT_MESH_NACOS), + + STORAGE_ROCKETMQ(ClusterType.STORAGE.code + 1), + + STORAGE_ROCKETMQ_CLUSTER(STORAGE, STORAGE_ROCKETMQ, CLUSTER, DEFAULT, RemotingType.ROCKETMQ), + + STORAGE_ROCKETMQ_NAMESERVER(STORAGE, STORAGE_ROCKETMQ, META, DEFAULT, RemotingType.ROCKETMQ_NAMESERVER), + + STORAGE_ROCKETMQ_BROKER(STORAGE, STORAGE_ROCKETMQ, RUNTIME, DEFAULT, RemotingType.ROCKETMQ); + + + public static final List STORAGE_TYPES = getStorage(); + + + private static List getStorage(){ + List list = new ArrayList<>(); + for(ClusterType clusterType : ClusterType.values()){ + if(Objects.equals(clusterType.eventmeshNodeType , ClusterType.STORAGE) && Objects.equals(clusterType.assemblyNodeType , ClusterType.CLUSTER)) { + list.add(clusterType); + } + } + return list; + } + + + @Getter + private ClusterType eventmeshNodeType; + + @Getter + private ClusterType assemblyName; + + @Getter + private ClusterType assemblyNodeType; + + @Getter + private ClusterType assemblyBusiness; + + @Getter + private RemotingType remotingType; + + @Getter + private int code; + + + + ClusterType(int code) { + this.code = code; + } + + ClusterType(ClusterType eventmeshNodeType, ClusterType assemblyName, ClusterType assemblyNodeType, ClusterType assemblyBusiness, RemotingType remotingType) { + this.eventmeshNodeType = eventmeshNodeType; + this.assemblyName = assemblyName; + this.assemblyNodeType = assemblyNodeType; + this.assemblyBusiness = assemblyBusiness; + this.remotingType = remotingType; + } + + + public boolean isMainCluster(){ + return Objects.equals(this, ClusterType.EVENTMESH_CLUSTER ) || Objects.equals(this.assemblyNodeType, ClusterType.CLUSTER ); + } + + public boolean isFirstLayer() { + return Objects.equals(this, ClusterType.EVENTMESH_META_NACOS) + || Objects.equals(this, ClusterType.EVENTMESH_META_ETCD) + || Objects.equals(this, ClusterType.EVENTMESH_RUNTIME) + || Objects.equals(this.getAssemblyNodeType(), ClusterType.CLUSTER); + } + + public boolean isSecondFloor() { + return Objects.equals(eventmeshNodeType, ClusterType.STORAGE) ? (Objects.equals(assemblyNodeType, ClusterType.RUNTIME) + || Objects.equals(assemblyNodeType, ClusterType.META)) : false; + } + +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/RemotingType.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/RemotingType.java new file mode 100644 index 00000000..c7770afc --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/RemotingType.java @@ -0,0 +1,20 @@ +package org.apache.eventmesh.dashboard.common.enums; + +public enum RemotingType { + + NOT, + + META, + + STORAGE, + + EVENT_MESH_RUNTIME, + + EVENT_MESH_NACOS, + + EVENT_MESH_ETCD, + + ROCKETMQ, + ROCKETMQ_NAMESERVER + ; +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/AclMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/AclMetadata.java index d3878dea..982fa5a9 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/AclMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/AclMetadata.java @@ -18,8 +18,10 @@ package org.apache.eventmesh.dashboard.common.model.metadata; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public class AclMetadata extends MetadataConfig { private Long clusterId; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClientMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClientMetadata.java index 15762f1d..8dd240ae 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClientMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClientMetadata.java @@ -18,8 +18,10 @@ package org.apache.eventmesh.dashboard.common.model.metadata; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public class ClientMetadata extends MetadataConfig { private String name; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterMetadata.java index 585b03dc..c1829045 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterMetadata.java @@ -17,15 +17,22 @@ package org.apache.eventmesh.dashboard.common.model.metadata; -import org.apache.eventmesh.dashboard.common.enums.StoreType; - import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.common.enums.StoreType; @Data +@EqualsAndHashCode(callSuper = true) public class ClusterMetadata extends MetadataConfig { private String clusterName; + private ClusterTrusteeshipType trusteeshipType; + + private ClusterType clusterType; + private String registryAddress; private String bootstrapServers; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterRelationshipMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterRelationshipMetadata.java new file mode 100644 index 00000000..dcb725b1 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ClusterRelationshipMetadata.java @@ -0,0 +1,21 @@ +package org.apache.eventmesh.dashboard.common.model.metadata; + +import lombok.Data; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; + +@Data +public class ClusterRelationshipMetadata extends MetadataConfig { + + private ClusterType clusterType; + + private Long relationshipId; + + private ClusterType relationshipType; + + private Integer status; + + @Override + public String getUnique() { + return null; + } +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ConfigMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ConfigMetadata.java index c956e142..3592010f 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ConfigMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/ConfigMetadata.java @@ -18,11 +18,13 @@ package org.apache.eventmesh.dashboard.common.model.metadata; import lombok.Data; +import lombok.EqualsAndHashCode; /** * Config metadata is a piece of config with key and value */ @Data +@EqualsAndHashCode(callSuper = true) public class ConfigMetadata extends MetadataConfig { /** diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/GroupMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/GroupMetadata.java index 92ff3b01..3827f93a 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/GroupMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/GroupMetadata.java @@ -18,8 +18,10 @@ package org.apache.eventmesh.dashboard.common.model.metadata; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public class GroupMetadata extends MetadataConfig { private String name; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/MetadataConfig.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/MetadataConfig.java index cbcdd9a5..09483cfd 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/MetadataConfig.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/MetadataConfig.java @@ -38,6 +38,9 @@ public abstract class MetadataConfig { //cluster id in database private Long clusterId; + + private Long id; + /** * @return A string that is unique to the source, usually a url */ diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RegistryMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RegistryMetadata.java index 0ed58ebb..31c8485e 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RegistryMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RegistryMetadata.java @@ -17,6 +17,7 @@ package org.apache.eventmesh.dashboard.common.model.metadata; +import lombok.EqualsAndHashCode; import org.apache.eventmesh.dashboard.common.enums.RecordStatus; import lombok.Data; @@ -26,6 +27,7 @@ @Data @SuperBuilder @NoArgsConstructor +@EqualsAndHashCode(callSuper = true) public class RegistryMetadata extends MetadataConfig { diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RuntimeMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RuntimeMetadata.java index e0467514..eb88e38d 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RuntimeMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/RuntimeMetadata.java @@ -46,6 +46,8 @@ public class RuntimeMetadata extends MetadataConfig { private String clusterName; + private Integer status; + @Override public String getUnique() { return host + ":" + port; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/TopicMetadata.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/TopicMetadata.java index 20df8817..b85c346f 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/TopicMetadata.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/metadata/TopicMetadata.java @@ -47,6 +47,8 @@ public class TopicMetadata extends MetadataConfig { private String description; + private String topicConfig; + @Override public String getUnique() { return topicName; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/BaseGlobalResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/BaseGlobalResult.java new file mode 100644 index 00000000..2459c79e --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/BaseGlobalResult.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting; + +public class BaseGlobalResult extends GlobalResult { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalRequest.java new file mode 100644 index 00000000..a6933760 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalRequest.java @@ -0,0 +1,9 @@ +package org.apache.eventmesh.dashboard.common.model.remoting; + +import lombok.Data; + +@Data +public class GlobalRequest { + + private Long clusterId; +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalResult.java new file mode 100644 index 00000000..d6866a33 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/GlobalResult.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GlobalResult { + + private Integer code; + + private String message; + + private String errorCode; + + private T data; + + private String errorMessages; + + private Throwable throwable; + +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingAction.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingAction.java new file mode 100644 index 00000000..527a742c --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingAction.java @@ -0,0 +1,12 @@ +package org.apache.eventmesh.dashboard.common.model.remoting; + +import org.apache.eventmesh.dashboard.common.enums.RemotingType; + +public @interface RemotingAction { + + boolean support(); + + RemotingType substitution(); + + RemotingType retrySubstitution() default RemotingType.STORAGE; +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingOperate.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingOperate.java new file mode 100644 index 00000000..cdfa5a8c --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingOperate.java @@ -0,0 +1,10 @@ +package org.apache.eventmesh.dashboard.common.model.remoting; + +public enum RemotingOperate { + + ADD, + + UPDATE, + + DELETE; +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingServiceType.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingServiceType.java new file mode 100644 index 00000000..2c9413ad --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/RemotingServiceType.java @@ -0,0 +1,6 @@ +package org.apache.eventmesh.dashboard.common.model.remoting; + +public enum RemotingServiceType { + + +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsRequest.java index 6454a2a2..37d78ecb 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsRequest.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsRequest.java @@ -17,6 +17,9 @@ package org.apache.eventmesh.dashboard.common.model.remoting.acl; -public class GetAclsRequest { +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; + +public class GetAclsRequest extends GlobalRequest { + } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsResult.java index 68f4161b..036dcd6f 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/acl/GetAclsResult.java @@ -17,6 +17,12 @@ package org.apache.eventmesh.dashboard.common.model.remoting.acl; -public class GetAclsResult { + +import org.apache.eventmesh.dashboard.common.model.metadata.AclMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; + +import java.util.List; + +public class GetAclsResult extends GlobalResult> { } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigRequest.java new file mode 100644 index 00000000..3098ae8c --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigRequest.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +import org.apache.eventmesh.dashboard.common.model.remoting.RemotingOperate; +import lombok.Data; + + + +import java.util.List; + +@Data +public class AddConfigRequest { + + protected RemotingOperate remotingOperate = RemotingOperate.ADD; + + private ConfigType configType; + + private List incrementConfig; + + private List fullConfig; +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResponse.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResponse.java new file mode 100644 index 00000000..2d358b63 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResponse.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class AddConfigResponse { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResult.java new file mode 100644 index 00000000..0929d2c8 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/AddConfigResult.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class AddConfigResult { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/ConfigType.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/ConfigType.java new file mode 100644 index 00000000..585e9328 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/ConfigType.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public enum ConfigType { + + NODE, + TOPIC +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataService.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigRequest.java similarity index 72% rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataService.java rename to eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigRequest.java index 76776e3a..c6566125 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataService.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigRequest.java @@ -15,16 +15,14 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice; +package org.apache.eventmesh.dashboard.common.model.remoting.config; -import java.util.List; +import org.apache.eventmesh.dashboard.common.model.remoting.RemotingOperate; -/** - * interface to get data from different sources, including database or eventmesh cluster - * - * @param Entity or Metadata - */ -public interface SyncDataService { +public class DeleteConfigRequest extends AddConfigRequest { - public List getData(); + { + remotingOperate = RemotingOperate.DELETE; + } } + diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResponse.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResponse.java new file mode 100644 index 00000000..afa9a4d6 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResponse.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class DeleteConfigResponse { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResult.java new file mode 100644 index 00000000..8fa13603 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/DeleteConfigResult.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class DeleteConfigResult extends AddConfigResult{ +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/GetConfigRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/GetConfigRequest.java index b5be52c3..b24ab36b 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/GetConfigRequest.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/GetConfigRequest.java @@ -17,7 +17,6 @@ package org.apache.eventmesh.dashboard.common.model.remoting.config; -import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; @@ -29,9 +28,9 @@ public class GetConfigRequest { - private List registryAddressList; + private ConfigType configType; - private List runtimeAddressList; + private String node; - private List nameServerAddressList; + private String configObjectName; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigRequest.java new file mode 100644 index 00000000..baae0023 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigRequest.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +import org.apache.eventmesh.dashboard.common.model.remoting.RemotingOperate; + +public class UpdateConfigRequest extends AddConfigRequest { + + { + remotingOperate = RemotingOperate.DELETE; + } +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResponse.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResponse.java new file mode 100644 index 00000000..2a3409fc --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResponse.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class UpdateConfigResponse { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResult.java new file mode 100644 index 00000000..d55e9da1 --- /dev/null +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/config/UpdateConfigResult.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.common.model.remoting.config; + +public class UpdateConfigResult extends AddConfigResult { +} diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/group/GetGroupResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/group/GetGroupResult.java index 75552cd8..80b50d6a 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/group/GetGroupResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/group/GetGroupResult.java @@ -17,12 +17,13 @@ package org.apache.eventmesh.dashboard.common.model.remoting.group; -import java.util.concurrent.CompletableFuture; - import lombok.Data; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; + +import java.util.concurrent.CompletableFuture; @Data -public class GetGroupResult { +public class GetGroupResult extends GlobalResult { private CompletableFuture future; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeRequest.java index 4fb5c7de..2d635d79 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeRequest.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeRequest.java @@ -18,9 +18,10 @@ package org.apache.eventmesh.dashboard.common.model.remoting.runtime; import lombok.Data; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; @Data -public class GetRuntimeRequest { +public class GetRuntimeRequest extends GlobalRequest { private String registryAddress; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeResult.java index 3fae063b..736f73a6 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/runtime/GetRuntimeResult.java @@ -17,12 +17,13 @@ package org.apache.eventmesh.dashboard.common.model.remoting.runtime; -import java.util.concurrent.CompletableFuture; - import lombok.Data; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; + +import java.util.concurrent.CompletableFuture; @Data -public class GetRuntimeResult { +public class GetRuntimeResult extends GlobalResult { private CompletableFuture future; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicRequest.java index 6eefe44f..a21e4b60 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicRequest.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicRequest.java @@ -18,16 +18,22 @@ package org.apache.eventmesh.dashboard.common.model.remoting.topic; -import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; - +import com.alibaba.fastjson2.JSONObject; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; @Data @NoArgsConstructor @AllArgsConstructor -public class CreateTopicRequest { +@EqualsAndHashCode(callSuper = true) +public class CreateTopicRequest extends GlobalRequest { + + private TopicMetadata topicMetadata; + - TopicMetadata topicMetadata; + private JSONObject topicConfig; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicResult.java index 4313b284..9fb63277 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/CreateTopicResult.java @@ -17,15 +17,9 @@ package org.apache.eventmesh.dashboard.common.model.remoting.topic; -import java.util.concurrent.CompletableFuture; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -@Data -@NoArgsConstructor -@AllArgsConstructor -public class CreateTopicResult { - CompletableFuture createTopicResponseFuture; +public class CreateTopicResult extends GlobalResult { + } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/DeleteTopicResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/DeleteTopicResult.java index b9241225..a340735d 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/DeleteTopicResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/DeleteTopicResult.java @@ -17,17 +17,9 @@ package org.apache.eventmesh.dashboard.common.model.remoting.topic; -import java.util.concurrent.CompletableFuture; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -@Data -@NoArgsConstructor -@AllArgsConstructor +public class DeleteTopicResult extends GlobalResult { -public class DeleteTopicResult { - - private CompletableFuture deleteTopicResponseFuture; } diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsRequest.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsRequest.java index 94e141cd..0858a9ce 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsRequest.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsRequest.java @@ -20,11 +20,12 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; @Data @NoArgsConstructor @AllArgsConstructor -public class GetTopicsRequest { +public class GetTopicsRequest extends GlobalRequest { private String runtimeHost; diff --git a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsResult.java b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsResult.java index effca2d1..a039d7e7 100644 --- a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsResult.java +++ b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/model/remoting/topic/GetTopicsResult.java @@ -17,15 +17,10 @@ package org.apache.eventmesh.dashboard.common.model.remoting.topic; -import java.util.concurrent.CompletableFuture; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -public class GetTopicsResult { - CompletableFuture getTopicsResponseFuture; +/** + * @author hahaha + */ +public class GetTopicsResult extends GlobalResult { } diff --git a/eventmesh-dashboard-console/pom.xml b/eventmesh-dashboard-console/pom.xml index c5fb5ee9..425ec762 100644 --- a/eventmesh-dashboard-console/pom.xml +++ b/eventmesh-dashboard-console/pom.xml @@ -26,7 +26,7 @@ 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.console + org.apache.eventmesh.dashboard eventmesh-dashboard-console @@ -38,17 +38,17 @@ - org.apache.eventmesh.dashboard.core + org.apache.eventmesh.dashboard eventmesh-dashboard-core 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.common + org.apache.eventmesh.dashboard eventmesh-dashboard-common 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.service + org.apache.eventmesh.dashboard eventmesh-dashboard-service 0.0.1-SNAPSHOT diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/adapter/DynamicsAdapter.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/adapter/DynamicsAdapter.java new file mode 100644 index 00000000..5d95049a --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/adapter/DynamicsAdapter.java @@ -0,0 +1,30 @@ +package org.apache.eventmesh.dashboard.console.adapter; + +import com.alibaba.fastjson2.JSON; +import org.checkerframework.checker.units.qual.C; + +import java.util.HashMap; +import java.util.Map; + +public class DynamicsAdapter { + + private static final DynamicsAdapter INSTANCE = new DynamicsAdapter(); + + public static final DynamicsAdapter getInstance(){ + return INSTANCE; + } + + private Map,Class> objectMapper = new HashMap<>(); + + + public DynamicsAdapter(){ + + } + + public T to(Object source,Class target){ + String sourceString = JSON.toJSONString(source); + return (T)JSON.to(target,sourceString); + } + + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterCache.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterCache.java index bde19f9b..d2602c42 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterCache.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterCache.java @@ -39,15 +39,15 @@ public class ClusterCache { private static final Object lock = new Object(); public ClusterEntity getClusterById(Long id) { - return INSTANCE.clusterIdMap.get(id); + return clusterIdMap.get(id); } public ClusterEntity getClusterByName(String name) { - return INSTANCE.clusterNameMap.get(name); + return clusterNameMap.get(name); } public ClusterEntity getClusterByRegistryAddress(String registryAddress) { - for (ClusterEntity clusterEntity : INSTANCE.clusterIdMap.values()) { + for (ClusterEntity clusterEntity : clusterIdMap.values()) { if (clusterEntity.getRegistryAddress().equals(registryAddress)) { return clusterEntity; } @@ -87,6 +87,7 @@ public void deleteClusterByName(String name) { } public void syncClusters(List clusters) { + // TODO 性能问题严总 synchronized (lock) { INSTANCE.clusterIdMap.clear(); INSTANCE.clusterNameMap.clear(); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDO.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDO.java new file mode 100644 index 00000000..49c3fcd2 --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDO.java @@ -0,0 +1,24 @@ +package org.apache.eventmesh.dashboard.console.cache; + +import lombok.Data; +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; +import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; + +import java.util.List; + +@Data +public class ClusterDO { + + private ClusterEntity clusterInfo; + + private List runtimeEntityList; + + private ClusterDO storageCluster; + + private List useClusterList; + + private ClusterEntity k8sCLuster; + + private Object RegistrationCenter; + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDoCache.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDoCache.java new file mode 100644 index 00000000..3fc3a13a --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/cache/ClusterDoCache.java @@ -0,0 +1,80 @@ +package org.apache.eventmesh.dashboard.console.cache; + + +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ClusterDoCache { + + private static final ClusterDoCache INSTANCE = new ClusterDoCache(); + + + public static final ClusterDoCache getInstance() { + return INSTANCE; + } + + + private ClusterDoCache(){} + + + private Map> clusterDoMap = new HashMap<>(); + + { + this.clusterDoMap = this.getClusterDoMap(); + } + + + public Map> getClusterDoMap(){ + Map> clusterDoMap = new HashMap<>(); + for(ClusterType clusterType : ClusterType.values()){ + clusterDoMap.put(clusterType, new HashMap<>()); + } + return clusterDoMap; + } + + + public void setClusterDoMap(Map> clusterDoMap){ + this.clusterDoMap = clusterDoMap; + } + + + public List getEventMeshClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH, clusterTrusteeshipType); + } + + public List getMetaNacosClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH_META_ETCD, clusterTrusteeshipType); + } + + public List getMetaEtcdClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH_META_NACOS, clusterTrusteeshipType); + } + + public List getRocketMQClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.STORAGE_ROCKETMQ, clusterTrusteeshipType); + } + + + private List filterate(ClusterType clusterType , ClusterTrusteeshipType... clusterTrusteeshipTypes){ + Map> clusterDoMap = new HashMap<>(); + Map clusterDOList = clusterDoMap.get(clusterType); + + if(Objects.isNull(clusterTrusteeshipTypes) || clusterTrusteeshipTypes.length == 0){ + return new ArrayList<>(clusterDOList.values()); + } + List newClusterDOList = new ArrayList<>(); + for(ClusterDO clusterDO : clusterDOList.values()){ + + newClusterDOList.add(clusterDO); + } + return newClusterDOList; + } + + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java index c7022f34..27b2dbce 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/base/BaseEntity.java @@ -17,17 +17,16 @@ package org.apache.eventmesh.dashboard.console.entity.base; -import java.io.Serializable; -import java.sql.Timestamp; - import io.swagger.v3.oas.annotations.media.Schema; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.io.Serializable; +import java.time.LocalDateTime; + /** * Base Entity provide some basic fields that every Eventmesh Dashboard Entity would have */ @@ -48,7 +47,7 @@ public class BaseEntity implements Serializable { protected Long clusterId; - protected Timestamp createTime; + protected LocalDateTime createTime; - protected Timestamp updateTime; + protected LocalDateTime updateTime; } diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterEntity.java index e0992db4..58b0a514 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterEntity.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterEntity.java @@ -17,14 +17,15 @@ package org.apache.eventmesh.dashboard.console.entity.cluster; -import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; -import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; +import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity; @Data @NoArgsConstructor @@ -35,11 +36,15 @@ public class ClusterEntity extends BaseEntity { private String name; + private ClusterTrusteeshipType trusteeshipType; + + private ClusterType clusterType; + private String registryAddress; private String bootstrapServers; - private String eventmeshVersion; + private String version; private String clientProperties; @@ -55,7 +60,6 @@ public class ClusterEntity extends BaseEntity { private Integer status; - private Integer storeType; public ClusterEntity(ClusterMetadata source) { if (source.getClusterName() != null && !source.getClusterName().isEmpty()) { @@ -63,13 +67,12 @@ public ClusterEntity(ClusterMetadata source) { setBootstrapServers(source.getBootstrapServers()); setClientProperties(source.getClientProperties()); setRegistryAddress(source.getRegistryAddress()); - setEventmeshVersion(source.getEventmeshVersion()); + setVersion(source.getEventmeshVersion()); setJmxProperties(source.getJmxProperties()); setRegProperties(source.getRegProperties()); setDescription(source.getDescription()); setAuthType(source.getAuthType()); setRunState(source.getRunState()); - setStoreType(source.getStoreType().getNumber()); setName(source.getClusterName()); } else { throw new RuntimeException("cluster name is empty"); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterRelationshipEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterRelationshipEntity.java new file mode 100644 index 00000000..a2f6613f --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/cluster/ClusterRelationshipEntity.java @@ -0,0 +1,18 @@ +package org.apache.eventmesh.dashboard.console.entity.cluster; + + +import lombok.Data; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity; + +@Data +public class ClusterRelationshipEntity extends BaseEntity { + + private ClusterType clusterType; + + private Long relationshipId; + + private ClusterType relationshipType; + + private Integer status; +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/runtime/RuntimeEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/runtime/RuntimeEntity.java index be853792..4d3901b2 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/runtime/RuntimeEntity.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/runtime/RuntimeEntity.java @@ -17,16 +17,16 @@ package org.apache.eventmesh.dashboard.console.entity.runtime; -import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; -import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity; - -import java.sql.Timestamp; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity; + +import java.sql.Timestamp; @Data @NoArgsConstructor @@ -34,8 +34,11 @@ @EqualsAndHashCode(callSuper = true, exclude = "status") @SuperBuilder public class RuntimeEntity extends BaseEntity { + private Long clusterId; + private ClusterType clusterType; + private String host; private Long storageClusterId; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/ClusterInfoManager.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/ClusterInfoManager.java new file mode 100644 index 00000000..5bc5169d --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/ClusterInfoManager.java @@ -0,0 +1,86 @@ +package org.apache.eventmesh.dashboard.console.function; + +import com.alibaba.fastjson.JSON; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterRelationshipMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterRelationshipEntity; +import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; +import org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshipService; +import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; +import org.apache.eventmesh.dashboard.console.service.runtime.RuntimeService; +import org.apache.eventmesh.dashboard.core.cluster.ColonyDO; +import org.apache.eventmesh.dashboard.core.remoting.RemotingManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class ClusterInfoManager { + + @Autowired + private ClusterService clusterService; + + @Autowired + private RuntimeService runtimeService; + + + @Autowired + private ClusterRelationshipService clusterRelationshipService; + + @Autowired + private RemotingManager remotingManager; + + private Map clusterEntityMap = new HashMap<>(); + + private Map> relationshipMap = new HashMap<>(); + + + private Map runtimeCollectMap = new HashMap<>(); + + + @PostConstruct + public void initSync() throws Exception { + this.sync(this.clusterService.selectAll(),this.runtimeService.selectAll(),this.clusterRelationshipService.selectAll()); + remotingManager.loadingCompleted(); + + } + + private void sync(List clusterEntityList, List runtimeEntityList, List clusterRelationshipEntityList){ + if(!clusterEntityList.isEmpty()) { + String jsonString = JSON.toJSONString(clusterEntityList); + List clusterMetadataList = JSON.parseArray(jsonString, ClusterMetadata.class); + remotingManager.cacheCluster(clusterMetadataList); + } + if(!runtimeEntityList.isEmpty()) { + String jsonString = JSON.toJSONString(runtimeEntityList); + List runtimeMetadataList = JSON.parseArray(jsonString, RuntimeMetadata.class); + remotingManager.cacheRuntime(runtimeMetadataList); + } + if(!clusterRelationshipEntityList.isEmpty()) { + String jsonString = JSON.toJSONString(runtimeEntityList); + List runtimeMetadataList = JSON.parseArray(jsonString, ClusterRelationshipMetadata.class); + remotingManager.cacheClusterRelationship(runtimeMetadataList); + } + } + + + @Scheduled(initialDelay = 50, fixedDelay = 30 * 1000) + public void sync() { + LocalDateTime updatedDateTime = LocalDateTime.now().minusSeconds(30); + ClusterEntity clusterEntity = new ClusterEntity(); + clusterEntity.setUpdateTime(updatedDateTime); + RuntimeEntity runtimeEntity = new RuntimeEntity(); + clusterEntity.setUpdateTime(updatedDateTime); + ClusterRelationshipEntity clusterRelationshipEntity = new ClusterRelationshipEntity(); + clusterEntity.setUpdateTime(updatedDateTime); + this.sync(clusterService.selectNewlyIncreased(clusterEntity),this.runtimeService.selectNewlyIncreased(runtimeEntity),this.clusterRelationshipService.selectNewlyIncreased(clusterRelationshipEntity)); + } +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManager.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManager.java index 261d429a..55c5b327 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManager.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManager.java @@ -30,6 +30,7 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadFactory; @@ -46,6 +47,13 @@ /** * MetadataManager is a manager for metadata service, it will sync the data between cluster service and database. database should be empty when this * manager booted + * 启动应该进行差异化对比。进行差异化增量,差异化删除 + * 表 -> increment-> remote -> function -> data -> convert + * 流程,前端页面 + * 梳理并整理现在的代码,业务,模块 + * functionManager + * + * @author hahaha */ @Slf4j public class MetadataManager { @@ -99,13 +107,16 @@ public void run() { public void run(Boolean toDbOn, Boolean toServiceOn) { try { - metaDataServiceWrapperMap.forEach((cacheId, metaDataServiceWrapper) -> handlers(cacheId, metaDataServiceWrapper, toDbOn, toServiceOn)); + CountDownLatch countDownLatch = new CountDownLatch(metaDataServiceWrapperMap.size()); + // sync + metaDataServiceWrapperMap.forEach((cacheId, metaDataServiceWrapper) -> handlers(countDownLatch,cacheId, metaDataServiceWrapper, toDbOn, toServiceOn)); + // Exclude unhealthy raw data from services } catch (Exception e) { log.error("metadata manager run error", e); } } - public void handlers(Long cacheId, MetadataServiceWrapper metaDataServiceWrapper, Boolean toDbOn, Boolean toServiceOn) { + public void handlers(CountDownLatch countDownLatch,Long cacheId, MetadataServiceWrapper metaDataServiceWrapper, Boolean toDbOn, Boolean toServiceOn) { this.threadPoolExecutor.execute(() -> { try { if (toDbOn) { @@ -116,7 +127,10 @@ public void handlers(Long cacheId, MetadataServiceWrapper metaDataServiceWrapper } } catch (Throwable e) { log.error("metadata manager handler error", e); + }finally { + countDownLatch.countDown(); } + }); } diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataServiceWrapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataServiceWrapper.java index c323cdf8..9c95acd4 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataServiceWrapper.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataServiceWrapper.java @@ -17,8 +17,8 @@ package org.apache.eventmesh.dashboard.console.function.metadata; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.SyncDataService; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/SyncRelationshipConfig.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/SyncRelationshipConfig.java new file mode 100644 index 00000000..610facc9 --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/SyncRelationshipConfig.java @@ -0,0 +1,10 @@ +package org.apache.eventmesh.dashboard.console.function.metadata; + + +public class SyncRelationshipConfig { + + private Class metadataClass; + + private Class entityClass; + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandlerWrapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandlerWrapper.java index 5722081a..03a8b160 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandlerWrapper.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandlerWrapper.java @@ -42,16 +42,22 @@ public class MetadataHandlerWrapper { @Autowired private ClusterMetadataHandlerToDbImpl clusterMetadataHandlerToDb; + @Autowired private ConfigMetadataHandlerToDbImpl configMetadataHandlerToDb; + @Autowired private ConnectionMetadataHandlerToDbImpl connectionMetadataHandlerToDb; + @Autowired private GroupMetadataHandlerToDbImpl groupMetadataHandlerToDb; + @Autowired private RegistryMetadataHandlerToDbImpl registryMetadataHandlerToDb; + @Autowired private RuntimeMetadataHandlerToDbImpl runtimeMetadataHandlerToDb; + @Autowired private TopicMetadataHandlerToDbImpl topicMetadataHandlerToDb; } diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImpl.java index eae42b4f..4faed193 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImpl.java @@ -19,7 +19,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConfigMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConfigMetadataHandlerToDbImpl.java index 5711ca16..65de1027 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConfigMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConfigMetadataHandlerToDbImpl.java @@ -19,7 +19,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.ConfigMetadata; import org.apache.eventmesh.dashboard.console.entity.config.ConfigEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.config.ConfigService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImpl.java index fb143158..4cb60511 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImpl.java @@ -22,7 +22,7 @@ import org.apache.eventmesh.dashboard.console.entity.client.ClientEntity; import org.apache.eventmesh.dashboard.console.entity.connection.ConnectionEntity; import org.apache.eventmesh.dashboard.console.entity.connector.ConnectorEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.client.ClientDataService; import org.apache.eventmesh.dashboard.console.service.connection.ConnectionDataService; import org.apache.eventmesh.dashboard.console.service.connector.ConnectorDataService; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImpl.java index 30914558..b7abf578 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImpl.java @@ -19,7 +19,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.GroupMetadata; import org.apache.eventmesh.dashboard.console.entity.group.GroupEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.group.GroupService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImpl.java index 16c3307a..b44aa7bb 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImpl.java @@ -19,7 +19,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.RegistryMetadata; import org.apache.eventmesh.dashboard.console.entity.meta.MetaEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.registry.RegistryDataService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImpl.java index d8df9f2a..130e112c 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImpl.java @@ -17,21 +17,21 @@ package org.apache.eventmesh.dashboard.console.function.metadata.handler.db; +import lombok.extern.slf4j.Slf4j; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; import org.apache.eventmesh.dashboard.console.cache.ClusterCache; import org.apache.eventmesh.dashboard.console.cache.RuntimeCache; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; import org.apache.eventmesh.dashboard.console.service.runtime.RuntimeService; - -import java.util.Objects; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; +import java.util.Objects; @Slf4j @Service @@ -50,18 +50,18 @@ public void addMetadata(RuntimeMetadata meta) { log.info("new cluster detected syncing runtime, adding cluster to db, cluster:{}", meta.getClusterName()); ClusterEntity clusterEntity = new ClusterEntity(); clusterEntity.setId(0L); + clusterEntity.setClusterType(ClusterType.EVENTMESH_CLUSTER); + clusterEntity.setTrusteeshipType(ClusterTrusteeshipType.TRUSTEESHIP); clusterEntity.setName(meta.getClusterName()); clusterEntity.setRegistryAddress(meta.getRegistryAddress()); clusterEntity.setBootstrapServers(""); - clusterEntity.setEventmeshVersion(""); + clusterEntity.setVersion(""); clusterEntity.setClientProperties(""); clusterEntity.setJmxProperties(""); clusterEntity.setRegProperties(""); clusterEntity.setDescription(""); clusterEntity.setAuthType(0); clusterEntity.setRunState(0); - clusterEntity.setStoreType(0); - clusterService.addCluster(clusterEntity); } else { cluster.setName(meta.getClusterName()); @@ -72,6 +72,20 @@ public void addMetadata(RuntimeMetadata meta) { } runtimeService.addRuntime(new RuntimeEntity(meta)); RuntimeCache.getInstance().addRuntime(new RuntimeEntity(meta)); + + // 集群存在且不过时。 直接同步就可以。 + + // 集群不存在 or 集群存在且过时。那么需要全部读出来,整理 + + // 创建 cluster do cache + + // 在一个事务中,从 runtime 同步 元数据 + + // 读取 config , topic , acl ,user , group,订阅关系, + + // 同步成功修改 状态,同步成功,修改状态 + + // } @Override diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImpl.java index b15bfa8b..a25eb45d 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImpl.java @@ -20,7 +20,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; import org.apache.eventmesh.dashboard.console.entity.storage.StoreEntity; import org.apache.eventmesh.dashboard.console.entity.topic.TopicEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.store.StoreService; import org.apache.eventmesh.dashboard.console.service.topic.TopicService; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataServiceWrapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataServiceWrapper.java index 11bd912d..061436be 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataServiceWrapper.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/SyncDataServiceWrapper.java @@ -17,12 +17,12 @@ package org.apache.eventmesh.dashboard.console.function.metadata.syncservice; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.AclSyncFromClusterService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.ConfigSyncFromClusterService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.GroupSyncFromClusterService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.InstanceUserFromClusterService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.RuntimeSyncFromClusterService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.TopicSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.AclSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.ConfigSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.GroupSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.InstanceUserFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.RuntimeSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.TopicSyncFromClusterService; import org.apache.eventmesh.dashboard.console.spring.support.FunctionManagerLoader; import org.springframework.beans.factory.annotation.Autowired; @@ -41,14 +41,19 @@ public class SyncDataServiceWrapper { @Autowired private AclSyncFromClusterService aclSyncFromClusterService; + @Autowired private ConfigSyncFromClusterService configSyncFromClusterService; + @Autowired private GroupSyncFromClusterService groupSyncFromClusterService; + @Autowired private RuntimeSyncFromClusterService runtimeSyncFromClusterService; + @Autowired private InstanceUserFromClusterService instanceUserFromClusterService; + @Autowired private TopicSyncFromClusterService topicSyncFromClusterService; } diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/ConfigSyncFromClusterService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/ConfigSyncFromClusterService.java deleted file mode 100644 index 6cbf9584..00000000 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/ConfigSyncFromClusterService.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; - -import org.apache.eventmesh.dashboard.common.model.metadata.ConfigMetadata; -import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigRequest; -import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigResponse; -import org.apache.eventmesh.dashboard.console.cache.ClusterCache; -import org.apache.eventmesh.dashboard.console.cache.RuntimeCache; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; -import org.apache.eventmesh.dashboard.console.service.store.StoreService; -import org.apache.eventmesh.dashboard.service.remoting.ConfigRemotingService; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -public class ConfigSyncFromClusterService implements SyncDataService { - - @Autowired - private StoreService storeDataService; - - @Setter - ConfigRemotingService configRemotingService; - - @Override - public List getData() { - List> futures = new ArrayList<>(); - futures.add(getConfigsFromRegistry()); - futures.add(getConfigsFromRuntime()); - futures.add(getConfigsFromKafka()); - CompletableFuture allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); - - CompletableFuture> allConfigMetadataFuture = allFutures.thenApply(v -> - futures.stream() - .map(future -> { - try { - return future.get().getConfigMetadataList(); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - }) - .flatMap(List::stream) - .collect(Collectors.toList()) - ); - - return allConfigMetadataFuture.join(); - } - - private CompletableFuture getConfigsFromRegistry() { - GetConfigRequest registryRequest = new GetConfigRequest(); - List registryList = new ArrayList<>(); - ClusterCache.getINSTANCE().getClusters().forEach(clusterEntity -> registryList.add(clusterEntity.getRegistryAddress())); - registryRequest.setRegistryAddressList(registryList); - return configRemotingService.getConfigsFromRegistry(registryRequest).getGetConfigResponseFuture(); - } - - private CompletableFuture getConfigsFromRuntime() { - GetConfigRequest runtimeRequest = new GetConfigRequest(); - List runtimeAddressList = new ArrayList<>(); - RuntimeCache.getInstance().getRuntimeList().forEach(runtimeEntity -> { - runtimeAddressList.add(runtimeEntity.getHost() + ":" + runtimeEntity.getPort()); - }); - runtimeRequest.setRuntimeAddressList(runtimeAddressList); - return configRemotingService.getConfigsFromRuntime(runtimeRequest).getGetConfigResponseFuture(); - } - - private CompletableFuture getConfigsFromKafka() { - GetConfigRequest brokerRequest = new GetConfigRequest(); - return null; - } -} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/GroupSyncFromClusterService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/GroupSyncFromClusterService.java deleted file mode 100644 index 13dc104a..00000000 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/GroupSyncFromClusterService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; - -import org.apache.eventmesh.dashboard.common.model.metadata.GroupMetadata; -import org.apache.eventmesh.dashboard.common.model.remoting.group.GetGroupsRequest; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; -import org.apache.eventmesh.dashboard.service.remoting.GroupRemotingService; - -import java.util.List; - -import org.springframework.stereotype.Service; - -import lombok.Setter; - -@Service -public class GroupSyncFromClusterService implements SyncDataService { - - @Setter - private GroupRemotingService groupRemotingService; - - @Override - public List getData() { - GetGroupsRequest getGroupsRequest = new GetGroupsRequest(); - try { - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/RuntimeSyncFromClusterService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/RuntimeSyncFromClusterService.java deleted file mode 100644 index 728ca17e..00000000 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/RuntimeSyncFromClusterService.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; - -import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; -import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeRequest; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; -import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; -import org.apache.eventmesh.dashboard.core.meta.runtime.NacosRuntimeCore; -import org.apache.eventmesh.dashboard.service.remoting.MetaRemotingService; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ForkJoinPool; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -public class RuntimeSyncFromClusterService implements SyncDataService { - - private final MetaRemotingService metaRemotingService = new NacosRuntimeCore(); - - @Autowired - private ClusterService clusterDataService; - - @Override - public List getData() { - List requestList = new ArrayList<>(); - ConcurrentLinkedDeque runtimeMetadata = new ConcurrentLinkedDeque<>(); - clusterDataService.selectAll().forEach( - clusterEntity -> { - GetRuntimeRequest request = new GetRuntimeRequest(); - request.setRegistryAddress(clusterEntity.getRegistryAddress()); - requestList.add(request); - } - ); - if (requestList.isEmpty()) { - return new ArrayList<>(); - } - CountDownLatch countDownLatch = new CountDownLatch(requestList.size()); - ForkJoinPool taskThreadPool = new ForkJoinPool(requestList.size()); - - try { - taskThreadPool.submit(() -> - requestList.parallelStream().forEach(request -> { - metaRemotingService.getRuntime(request).getFuture() - .whenComplete((result, ex) -> { - if (Objects.isNull(result)) { - log.error("Error occurred while getting topics", ex); - } - runtimeMetadata.addAll(result.getRuntimeMetadataList()); - countDownLatch.countDown(); - }); - }) - ).get(); - } catch (InterruptedException | ExecutionException e) { - log.error("Error occurred while executing parallel stream", e); - } finally { - taskThreadPool.shutdown(); - } - - try { - countDownLatch.await(); - return new ArrayList<>(runtimeMetadata); - } catch (InterruptedException e) { - log.error("sync topic data from runtime failed", e); - return new ArrayList<>(); - } - } -} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterService.java deleted file mode 100644 index 2c8b28fc..00000000 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterService.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; - -import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; -import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsRequest; -import org.apache.eventmesh.dashboard.console.cache.RuntimeCache; -import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; -import org.apache.eventmesh.dashboard.service.remoting.TopicRemotingService; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ForkJoinPool; - -import org.springframework.stereotype.Service; - -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -public class TopicSyncFromClusterService implements SyncDataService { - - @Setter - TopicRemotingService topicRemotingService; - - public List getData() { - ConcurrentLinkedDeque topicList = new ConcurrentLinkedDeque<>(); - Collection runtimeList = RuntimeCache.getInstance().getRuntimeList(); - - CountDownLatch countDownLatch = new CountDownLatch(runtimeList.size()); - ForkJoinPool taskThreadPool = new ForkJoinPool(runtimeList.size()); - try { - taskThreadPool.submit(() -> - runtimeList.parallelStream().forEach(runtimeEntity -> { - GetTopicsRequest getTopicsRequest = new GetTopicsRequest(); - getTopicsRequest.setRuntimeHost(runtimeEntity.getHost()); - getTopicsRequest.setRuntimePort(runtimeEntity.getPort()); - topicRemotingService.getAllTopics(getTopicsRequest).getGetTopicsResponseFuture() - .whenComplete((result, ex) -> { - if (Objects.isNull(result)) { - log.error("Error occurred while getting topics", ex); - } - result.getTopicMetadataList().forEach(topic -> { - topic.setRuntimeId(runtimeEntity.getId()); - topicList.add(topic); - }); - countDownLatch.countDown(); - }); - }) - ).get(); - } catch (InterruptedException | ExecutionException e) { - log.error("Error occurred while executing parallel stream", e); - } finally { - taskThreadPool.shutdown(); - } - - try { - countDownLatch.await(); - return new ArrayList<>(topicList); - } catch (InterruptedException e) { - log.error("sync topic data from runtime failed", e); - return new ArrayList<>(); - } - } -} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/db/TopicSyncFromDbService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/db/TopicSyncFromDbService.java index 4cbd1737..f50231b6 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/db/TopicSyncFromDbService.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/db/TopicSyncFromDbService.java @@ -19,7 +19,7 @@ import org.apache.eventmesh.dashboard.console.entity.topic.TopicEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; +import org.apache.eventmesh.dashboard.core.metadata.SyncDataService; import org.apache.eventmesh.dashboard.console.service.topic.TopicService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/optration/TopicMetadataHandlerToClusterImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/optration/TopicMetadataHandlerToClusterImpl.java index 6b89a58f..3e30fdd5 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/optration/TopicMetadataHandlerToClusterImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/optration/TopicMetadataHandlerToClusterImpl.java @@ -20,7 +20,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicRequest; import org.apache.eventmesh.dashboard.console.entity.topic.TopicEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.service.remoting.TopicRemotingService; import org.springframework.stereotype.Service; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java index e9850e57..afda5062 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java @@ -18,10 +18,10 @@ package org.apache.eventmesh.dashboard.console.mapper.cluster; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; - import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Options; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; @@ -36,6 +36,9 @@ public interface ClusterMapper { @Select("SELECT * FROM cluster WHERE status=1") List selectAllCluster(); + @Select("SELECT * FROM cluster where update_time > #{updateTime}") + List selectClusterByUpdate(@Param("updateTime")long updateTime); + @Select("SELECT * FROM cluster WHERE status=1 LIMIT #{rowIndex},#{pageNum}") List selectAllClusterToFront(Integer rowIndex, Integer pageNum); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java new file mode 100644 index 00000000..0995a512 --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java @@ -0,0 +1,26 @@ +package org.apache.eventmesh.dashboard.console.mapper.cluster; + +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterRelationshipEntity; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +@Mapper +public interface ClusterRelationshipMapper { + + + @Insert(" insert into cluster_relationship (cluster_type,cluster_id,relationship_type,relationship_id)values( #{clusterType},#{clusterId},#{relationshipType},#{relationshipId})") + Integer addClusterRelationshipEntry(ClusterRelationshipEntity clusterRelationshipEntity); + + @Update("update cluster_relationship set status = 3 where id = #{id} ") + Integer relieveRelationship(ClusterRelationshipEntity clusterRelationshipEntity); + + @Select(" select * from cluster_relationship where status = 3") + List selectAll(); + + @Select(" select * from cluster_relationship where update_date = #{updateData} and status in( 2 ,3)") + List selectNewlyIncreased(); +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java new file mode 100644 index 00000000..fcb78518 --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java @@ -0,0 +1,18 @@ +package org.apache.eventmesh.dashboard.console.service.cluster; + +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterRelationshipEntity; + +import java.util.List; + +public interface ClusterRelationshipService { + + + Integer addClusterRelationshipEntry(ClusterRelationshipEntity clusterRelationshipEntity); + + Integer relieveRelationship(ClusterRelationshipEntity clusterRelationshipEntity); + + List selectAll(); + + List selectNewlyIncreased(ClusterRelationshipEntity clusterRelationshipEntity); + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java index f3ba8411..6573bb7b 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java @@ -36,6 +36,8 @@ public interface ClusterService { List selectAll(); + List selectNewlyIncreased(ClusterEntity clusterEntity); + void addCluster(ClusterEntity cluster); List selectAllCluster(); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java new file mode 100644 index 00000000..30bf208d --- /dev/null +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java @@ -0,0 +1,36 @@ +package org.apache.eventmesh.dashboard.console.service.cluster.impl; + +import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterRelationshipEntity; +import org.apache.eventmesh.dashboard.console.mapper.cluster.ClusterRelationshipMapper; +import org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshipService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ClusterRelationshipServiceImpl implements ClusterRelationshipService { + + @Autowired + private ClusterRelationshipMapper clusterRelationshipMapper; + + @Override + public Integer addClusterRelationshipEntry(ClusterRelationshipEntity clusterRelationshipEntity) { + return this.clusterRelationshipMapper.addClusterRelationshipEntry(clusterRelationshipEntity); + } + + @Override + public Integer relieveRelationship(ClusterRelationshipEntity clusterRelationshipEntity) { + return clusterRelationshipMapper.relieveRelationship(clusterRelationshipEntity); + } + + @Override + public List selectAll() { + return this.clusterRelationshipMapper.selectAll(); + } + + @Override + public List selectNewlyIncreased(ClusterRelationshipEntity clusterRelationshipEntity) { + return this.clusterRelationshipMapper.selectNewlyIncreased(); + } +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java index 49fd2af0..0ab4d381 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java @@ -31,12 +31,11 @@ import org.apache.eventmesh.dashboard.console.modle.vo.cluster.GetClusterBaseMessageVO; import org.apache.eventmesh.dashboard.console.modle.vo.cluster.ResourceNumVO; import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; - -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class ClusterServiceImpl implements ClusterService { @@ -99,6 +98,11 @@ public List selectAll() { return clusterMapper.selectAllCluster(); } + @Override + public List selectNewlyIncreased(ClusterEntity clusterEntity){ + return clusterMapper.selectAllCluster(); + } + @Override public void addCluster(ClusterEntity cluster) { clusterMapper.addCluster(cluster); @@ -115,6 +119,11 @@ public ClusterEntity selectClusterById(ClusterEntity cluster) { return clusterMapper.selectClusterById(cluster); } + + public List selectIncrementCluster(){ + return null; + } + @Override public void updateClusterById(ClusterEntity cluster) { clusterMapper.updateClusterById(cluster); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/Impl/RuntimeServiceImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/Impl/RuntimeServiceImpl.java index 27fb7d80..ebe42069 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/Impl/RuntimeServiceImpl.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/Impl/RuntimeServiceImpl.java @@ -67,6 +67,11 @@ public List selectAll() { return runtimeMapper.selectAll(); } + @Override + public List selectNewlyIncreased(RuntimeEntity runtimeEntity){ + return null; + } + @Override public List getRuntimeByClusterId(Long clusterId) { RuntimeEntity runtimeEntity = new RuntimeEntity(); diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/RuntimeService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/RuntimeService.java index f5ea5edc..92f971fb 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/RuntimeService.java +++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/runtime/RuntimeService.java @@ -34,6 +34,8 @@ public interface RuntimeService { List selectAll(); + List selectNewlyIncreased(RuntimeEntity runtimeEntity); + List getRuntimeByClusterId(Long cluster); List selectByHostPort(RuntimeEntity runtimeEntity); diff --git a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql index b8ed61b9..b47768f1 100644 --- a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql +++ b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql @@ -17,8 +17,9 @@ DROP TABLE IF EXISTS `cluster`; create table cluster ( - id bigint unsigned auto_increment comment '集群id' - primary key, + id bigint unsigned auto_increment comment '集群id' primary key, + cluster_type varchar(16) not null comment '集群类型', + trusteeship_type varchar(16) not null comment '托管类型', name varchar(128) default '' not null comment '集群名称', registry_address varchar(4096) default '' not null comment '注册中心名字', bootstrap_servers varchar(2048) default '' not null comment 'server地址', @@ -40,6 +41,22 @@ create table cluster create index idx_uniq_name on cluster (name); +drop table if exists `cluster_relationship`; +create table `cluster_relationship` +( + id bigint unsigned auto_increment primary key, + cluster_type varchar(16) not null comment '集群类型', + cluster_id bigint not null comment '集群ID', + relationship_type varchar(16) not null comment '集群类型', + relationship_id bigint not null comment '集群ID', + create_time timestamp default CURRENT_TIMESTAMP not null comment '接入时间', + update_time timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '修改时间', + status int default 1 not null comment '0', + is_delete int default 0 not null comment '0', + unique key cluster_id_relationship_id_unique(`cluster_id`,`relationship_id`), + key cluster_id_key(`cluster_id`), + key relationship_id_key(`relationship_id`) +); DROP TABLE IF EXISTS `config`; create table config diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/EventMeshDashboardApplicationTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/EventMeshDashboardApplicationTest.java index 1f7fb0db..973176ab 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/EventMeshDashboardApplicationTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/EventMeshDashboardApplicationTest.java @@ -17,38 +17,16 @@ package org.apache.eventmesh.dashboard.console; -import org.apache.eventmesh.dashboard.common.enums.RecordStatus; - -import java.sql.Timestamp; - import static org.mockito.ArgumentMatchers.any; -import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; -import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeRequest; -import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeResponse; -import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeResult; -import org.apache.eventmesh.dashboard.console.cache.ClusterCache; -import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; -import org.apache.eventmesh.dashboard.console.entity.meta.MetaEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.RuntimeSyncFromClusterService; -import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; import org.apache.eventmesh.dashboard.console.service.registry.RegistryDataService; -import org.apache.eventmesh.dashboard.service.remoting.MetaRemotingService; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.jdbc.Sql; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheBase.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheBase.java index d9e02025..66f0379a 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheBase.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheBase.java @@ -28,7 +28,7 @@ public static void addTestCluster() { clusterEntity.setName("cluster1"); clusterEntity.setRegistryAddress("registryList"); clusterEntity.setBootstrapServers("server"); - clusterEntity.setEventmeshVersion("1.7.0"); + clusterEntity.setVersion("1.7.0"); clusterEntity.setClientProperties(""); clusterEntity.setJmxProperties(""); clusterEntity.setRegProperties(""); diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheTest.java index 04ec8b8d..1700f0d7 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/cache/ClusterCacheTest.java @@ -16,7 +16,6 @@ */ package org.apache.eventmesh.dashboard.console.cache; -import java.sql.Timestamp; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; @@ -31,7 +30,7 @@ public void testInsertAndDelete() { clusterEntity.setName("cl1"); clusterEntity.setRegistryAddress("registryList"); clusterEntity.setBootstrapServers("server"); - clusterEntity.setEventmeshVersion("1.7.0"); + clusterEntity.setVersion("1.7.0"); clusterEntity.setClientProperties(""); clusterEntity.setJmxProperties(""); clusterEntity.setRegProperties(""); diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManagerTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManagerTest.java index f283489c..38881465 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManagerTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/MetadataManagerTest.java @@ -25,10 +25,10 @@ import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; import org.apache.eventmesh.dashboard.console.entity.topic.TopicEntity; import org.apache.eventmesh.dashboard.console.function.metadata.MetadataServiceWrapper.SingleMetadataServiceWrapper; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; import org.apache.eventmesh.dashboard.console.function.metadata.handler.db.RuntimeMetadataHandlerToDbImpl; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster.RuntimeSyncFromClusterService; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.SyncDataService; +import org.apache.eventmesh.dashboard.core.metadata.cluster.RuntimeSyncFromClusterService; import org.apache.eventmesh.dashboard.console.function.optration.TopicMetadataHandlerToClusterImpl; import org.apache.eventmesh.dashboard.console.service.runtime.RuntimeService; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImplTest.java index ae0bb206..cdc3404f 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ClusterMetadataHandlerToDbImplTest.java @@ -23,7 +23,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImplTest.java index 36ba8f2d..c3c4eac3 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/ConnectionMetadataHandlerToDbImplTest.java @@ -24,7 +24,7 @@ import org.apache.eventmesh.dashboard.console.entity.client.ClientEntity; import org.apache.eventmesh.dashboard.console.entity.connection.ConnectionEntity; import org.apache.eventmesh.dashboard.console.entity.connector.ConnectorEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.client.ClientDataService; import org.apache.eventmesh.dashboard.console.service.connection.ConnectionDataService; import org.apache.eventmesh.dashboard.console.service.connector.ConnectorDataService; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImplTest.java index 883e08be..54c9f92c 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/GroupMetadataHandlerToDbImplTest.java @@ -22,7 +22,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.GroupMetadata; import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication; import org.apache.eventmesh.dashboard.console.entity.group.GroupEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.group.GroupService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImplTest.java index cb47f977..683a40e2 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RegistryMetadataHandlerToDbImplTest.java @@ -23,7 +23,7 @@ import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication; import org.apache.eventmesh.dashboard.console.cache.ClusterCacheBase; import org.apache.eventmesh.dashboard.console.entity.meta.MetaEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.registry.RegistryDataService; import java.util.List; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImplTest.java index 26bf690f..5d668322 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/RuntimeMetadataHandlerToDbImplTest.java @@ -22,7 +22,7 @@ import org.apache.eventmesh.dashboard.console.cache.ClusterCacheBase; import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity; import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService; import org.apache.eventmesh.dashboard.console.service.runtime.RuntimeService; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImplTest.java index 0d5efad6..67cd3b9d 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImplTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/db/TopicMetadataHandlerToDbImplTest.java @@ -23,7 +23,7 @@ import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication; import org.apache.eventmesh.dashboard.console.cache.ClusterCacheBase; -import org.apache.eventmesh.dashboard.console.function.metadata.handler.MetadataHandler; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; import org.apache.eventmesh.dashboard.console.service.topic.TopicService; import org.junit.jupiter.api.Test; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterServiceTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterServiceTest.java index 68bcbd02..e32fc108 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterServiceTest.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/TopicSyncFromClusterServiceTest.java @@ -24,6 +24,7 @@ import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsResult; import org.apache.eventmesh.dashboard.console.cache.RuntimeCache; import org.apache.eventmesh.dashboard.console.entity.runtime.RuntimeEntity; +import org.apache.eventmesh.dashboard.core.metadata.cluster.TopicSyncFromClusterService; import org.apache.eventmesh.dashboard.service.remoting.TopicRemotingService; import java.util.Arrays; diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/cluster/TestClusterMapper.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/cluster/TestClusterMapper.java index f4787073..28a50184 100644 --- a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/cluster/TestClusterMapper.java +++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/unit/cluster/TestClusterMapper.java @@ -81,7 +81,7 @@ public void testUpdateCluster() { clusterEntity.setAuthType(1); clusterEntity.setBootstrapServers("1999"); clusterEntity.setClientProperties("nothing"); - clusterEntity.setEventmeshVersion("1.10.0"); + clusterEntity.setVersion("1.10.0"); clusterEntity.setJmxProperties("nothing"); clusterEntity.setRegistryAddress("1.23.18"); clusterEntity.setRunState(1); diff --git a/eventmesh-dashboard-core/pom.xml b/eventmesh-dashboard-core/pom.xml index 135ba00d..8d519800 100644 --- a/eventmesh-dashboard-core/pom.xml +++ b/eventmesh-dashboard-core/pom.xml @@ -25,7 +25,6 @@ eventmesh-dashboard 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.core eventmesh-dashboard-core 0.0.1-SNAPSHOT eventmesh-dashboard-core @@ -51,12 +50,12 @@ - org.apache.eventmesh.dashboard.common + org.apache.eventmesh.dashboard eventmesh-dashboard-common 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.service + org.apache.eventmesh.dashboard eventmesh-dashboard-service 0.0.1-SNAPSHOT @@ -95,12 +94,12 @@ org.apache.rocketmq rocketmq-client - 4.9.8 + 5.2.0 org.apache.rocketmq rocketmq-tools - 4.9.8 + 5.2.0 diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDO.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDO.java new file mode 100644 index 00000000..222f650b --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDO.java @@ -0,0 +1,17 @@ +package org.apache.eventmesh.dashboard.core.cluster; + +import lombok.Data; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Data +public class ClusterDO { + + private ClusterMetadata clusterInfo; + + private Map runtimeMap = new ConcurrentHashMap<>(); + +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDoCache.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDoCache.java new file mode 100644 index 00000000..535f38d0 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ClusterDoCache.java @@ -0,0 +1,80 @@ +package org.apache.eventmesh.dashboard.core.cluster; + + +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ClusterDoCache { + + private static final ClusterDoCache INSTANCE = new ClusterDoCache(); + + + public static final ClusterDoCache getInstance() { + return INSTANCE; + } + + + private ClusterDoCache(){} + + + private Map> clusterDoMap = new HashMap<>(); + + { + this.clusterDoMap = this.getClusterDoMap(); + } + + + public Map> getClusterDoMap(){ + Map> clusterDoMap = new HashMap<>(); + for(ClusterType clusterType : ClusterType.values()){ + clusterDoMap.put(clusterType, new HashMap<>()); + } + return clusterDoMap; + } + + + public void setClusterDoMap(Map> clusterDoMap){ + this.clusterDoMap = clusterDoMap; + } + + + public List getEventMeshClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH, clusterTrusteeshipType); + } + + public List getMetaNacosClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH_META_NACOS, clusterTrusteeshipType); + } + + public List getMetaEtcdClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.EVENTMESH_META_ETCD, clusterTrusteeshipType); + } + + public List getRocketMQClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType){ + return this.filterate(ClusterType.STORAGE_ROCKETMQ, clusterTrusteeshipType); + } + + + private List filterate(ClusterType clusterType , ClusterTrusteeshipType... clusterTrusteeshipTypes){ + Map> clusterDoMap = new HashMap<>(); + Map clusterDOList = clusterDoMap.get(clusterType); + + if(Objects.isNull(clusterTrusteeshipTypes) || clusterTrusteeshipTypes.length == 0){ + return new ArrayList<>(clusterDOList.values()); + } + List newClusterDOList = new ArrayList<>(); + for(ColonyDO clusterDO : clusterDOList.values()){ + + newClusterDOList.add(clusterDO); + } + return newClusterDOList; + } + + +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ColonyDO.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ColonyDO.java new file mode 100644 index 00000000..9195e911 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/cluster/ColonyDO.java @@ -0,0 +1,45 @@ +package org.apache.eventmesh.dashboard.core.cluster; + +import lombok.Data; + +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * eventmesh ClusterDO + * meta ClusterDO + * runtime ClusterDO + * storage ClusterDO + * meta(注册中心,zk,) ClusterDO + * runtime(broker) ClusterDO + * + */ +@Data +public class ColonyDO { + + private Long superiorId; + + private ClusterDO clusterDO; + + // 双活集群 所以是可以是一个list的 + // 可以默认一个集群 + private Map runtimeColonyDOList = new ConcurrentHashMap<>(); + + // 只有 eventmesh 集群有这个点,其他没有。 + private Map storageColonyDOList = new ConcurrentHashMap<>(); + + /** + * A(nameserver cluster) a1 a2 a3 + * B(nameserver cluster) b1 b2 b3 + * + * rocketmq a1,a2,a3,b1,b2,b3 + */ + private Map metaColonyDOList = new ConcurrentHashMap<>(); + + + public Long getClusterId(){ + return Objects.nonNull(this.clusterDO.getClusterInfo().getClusterId())?this.clusterDO.getClusterInfo().getClusterId():this.clusterDO.getClusterInfo().getId() ; + } + +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKManager.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKManager.java index f4f8a8af..b4d1920f 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKManager.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKManager.java @@ -23,17 +23,18 @@ import org.apache.eventmesh.dashboard.core.function.SDK.operation.NacosNamingSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.operation.NacosSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.operation.RedisSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RocketMQProduceSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RocketMQPushConsumerSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RocketMQRemotingSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeGrpcConsumerSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeGrpcProducerSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeHttpConsumerSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeHttpProducerSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeTcpCloudEventSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeTcpEventMeshSDKOperation; -import org.apache.eventmesh.dashboard.core.function.SDK.operation.RuntimeTcpOpenMessageSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq.RocketMQAdminOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq.RocketMQProduceSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq.RocketMQPushConsumerSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq.RocketMQRemotingSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeGrpcConsumerSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeGrpcProducerSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeHttpConsumerSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeHttpProducerSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpCloudEventSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpEventMeshSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpOpenMessageSDKOperation; import java.util.AbstractMap.SimpleEntry; import java.util.Map; @@ -90,6 +91,7 @@ public static synchronized SDKManager getInstance() { clientCreateOperationMap.put(SDKTypeEnum.STORAGE_ROCKETMQ_REMOTING, new RocketMQRemotingSDKOperation()); clientCreateOperationMap.put(SDKTypeEnum.STORAGE_ROCKETMQ_PRODUCER, new RocketMQProduceSDKOperation()); clientCreateOperationMap.put(SDKTypeEnum.STORAGE_ROCKETMQ_CONSUMER, new RocketMQPushConsumerSDKOperation()); + clientCreateOperationMap.put(SDKTypeEnum.STORAGE_ROCKETMQ_ADMIN , new RocketMQAdminOperation()); // nacos clientCreateOperationMap.put(SDKTypeEnum.META_NACOS, new NacosSDKOperation()); diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKTypeEnum.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKTypeEnum.java index b10cde9f..4950eb1e 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKTypeEnum.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/SDKTypeEnum.java @@ -23,6 +23,8 @@ public enum SDKTypeEnum { STORAGE_ROCKETMQ_REMOTING, + STORAGE_ROCKETMQ_ADMIN, + STORAGE_ROCKETMQ_PRODUCER, STORAGE_ROCKETMQ_CONSUMER, diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqAdminSDKConfig.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqAdminSDKConfig.java new file mode 100644 index 00000000..d8982cb5 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqAdminSDKConfig.java @@ -0,0 +1,18 @@ +package org.apache.eventmesh.dashboard.core.function.SDK.config; + +import lombok.Data; + +@Data +public class CreateRocketmqAdminSDKConfig implements CreateSDKConfig{ + + private String nameServerUrl; + + private String clusterName; + + + + @Override + public String getUniqueKey() { + return nameServerUrl; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqConfig.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqConfig.java index 19ea6d49..3670d648 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqConfig.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/config/CreateRocketmqConfig.java @@ -18,7 +18,7 @@ package org.apache.eventmesh.dashboard.core.function.SDK.config; import org.apache.rocketmq.client.consumer.listener.MessageListener; -import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; +import org.apache.rocketmq.remoting.protocol.heartbeat.MessageModel; import lombok.Data; @@ -27,10 +27,12 @@ public class CreateRocketmqConfig implements CreateSDKConfig { // common private String nameServerUrl; + private String brokerUrl; //consumer private String consumerGroup; + private MessageModel messageModel = MessageModel.CLUSTERING; //producer @@ -38,11 +40,15 @@ public class CreateRocketmqConfig implements CreateSDKConfig { //topic private String topic; + private String subExpression = "*"; private MessageListener messageListener; + private String clusterName; + + @Override public String getUniqueKey() { if (nameServerUrl != null) { diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQAdminOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQAdminOperation.java new file mode 100644 index 00000000..c5486883 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQAdminOperation.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq; + +import lombok.extern.slf4j.Slf4j; +import org.apache.eventmesh.dashboard.core.function.SDK.AbstractSDKOperation; +import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRocketmqConfig; +import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.apache.rocketmq.tools.admin.DefaultMQAdminExt; +import org.checkerframework.checker.units.qual.A; + +import java.util.AbstractMap.SimpleEntry; + +@Slf4j +public class RocketMQAdminOperation extends AbstractSDKOperation { + + @Override + public SimpleEntry createClient(CreateSDKConfig clientConfig) { + DefaultMQAdminExt admin = null; + try { + + CreateRocketmqConfig config = (CreateRocketmqConfig) clientConfig; + admin = new DefaultMQAdminExt(); + admin.setNamesrvAddr(config.getNameServerUrl()); + admin.start(); + } catch (MQClientException e) { + log.error("create rocketmq producer failed", e); + } + return new SimpleEntry<>(clientConfig.getUniqueKey(), admin); + } + + @Override + public void close(Object client) { + ((DefaultMQProducer) client).shutdown(); + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQProduceSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQProduceSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQProduceSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQProduceSDKOperation.java index c1f46a74..a31aede0 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQProduceSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQProduceSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq; import org.apache.eventmesh.dashboard.core.function.SDK.AbstractSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRocketmqConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQPushConsumerSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQPushConsumerSDKOperation.java similarity index 96% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQPushConsumerSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQPushConsumerSDKOperation.java index b55a6632..b60fee8b 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQPushConsumerSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQPushConsumerSDKOperation.java @@ -15,19 +15,17 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq; +import lombok.extern.slf4j.Slf4j; import org.apache.eventmesh.dashboard.core.function.SDK.AbstractSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRocketmqConfig; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig; - import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.exception.MQClientException; import java.util.AbstractMap.SimpleEntry; -import lombok.extern.slf4j.Slf4j; - @Slf4j public class RocketMQPushConsumerSDKOperation extends AbstractSDKOperation { @@ -40,7 +38,7 @@ public SimpleEntry createClient(CreateSDKConfig c consumer.setMessageModel(config.getMessageModel()); consumer.setNamesrvAddr(config.getNameServerUrl()); consumer.subscribe(config.getTopic(), config.getSubExpression()); - consumer.registerMessageListener(config.getMessageListener()); + //consumer.registerMessageListener(config.getMessageListener()); consumer.start(); } catch (MQClientException e) { log.error("create rocketmq push consumer failed", e); diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQRemotingSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQRemotingSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQRemotingSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQRemotingSDKOperation.java index f98dc724..00ad867e 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RocketMQRemotingSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/rocketmq/RocketMQRemotingSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.rocketmq; import org.apache.eventmesh.dashboard.core.function.SDK.AbstractSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcConsumerSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcConsumerSDKOperation.java index 63e26a3b..1386020a 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcConsumerSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshGrpcConsumerConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcProducerSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcProducerSDKOperation.java index 2c46a6b8..2c4c8460 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeGrpcProducerSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshGrpcProducerConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpConsumerSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpConsumerSDKOperation.java index e6c026af..553ed3c7 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpConsumerSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshHttpConsumerConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpProducerSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpProducerSDKOperation.java index 79071c7d..6caa0b1a 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeHttpProducerSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshHttpProducerConfig; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeSDKOperation.java index 8ef5b81f..537bb312 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import org.apache.eventmesh.client.grpc.consumer.EventMeshGrpcConsumer; import org.apache.eventmesh.client.grpc.producer.EventMeshGrpcProducer; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpCloudEventSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpCloudEventSDKOperation.java index e097e2c9..1b8dd730 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpCloudEventSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshTCPClientConfig; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildUserAgent; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpEventMeshSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpEventMeshSDKOperation.java index 45f71526..e13843b9 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpEventMeshSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshTCPClientConfig; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildUserAgent; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperation.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpOpenMessageSDKOperation.java similarity index 99% rename from eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperation.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpOpenMessageSDKOperation.java index 0a281068..5086ce97 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperation.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/runtime/RuntimeTcpOpenMessageSDKOperation.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.core.function.SDK.operation; +package org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildEventMeshTCPClientConfig; import static org.apache.eventmesh.dashboard.core.function.SDK.util.RuntimeSDKOperationUtils.buildUserAgent; diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandler.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataHandler.java similarity index 70% rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandler.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataHandler.java index f0715249..86419bd1 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/handler/MetadataHandler.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataHandler.java @@ -15,19 +15,21 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.console.function.metadata.handler; +package org.apache.eventmesh.dashboard.core.metadata; + +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; import java.util.List; /** - * @param metadata type or entity type, {@code } is the source type of handler, there should be a converter in the handler to convert - * {@code } to the target type.

method in this interface should be implemented as async method, if the method is eventmesh manage + * @param metadata type or entity type, {@code } is the source type of handler, there should be a converter in the handler to convert + * {@code } to the target type.

method in this interface should be implemented as async method, if the method is eventmesh manage * operation. */ -public interface MetadataHandler { +public interface MetadataHandler { - default void handleAll(List addData, List updateData, List deleteData) { + default void handleAll(List addData, List updateData, List deleteData) { if (addData != null) { addData.forEach(this::addMetadata); } @@ -40,36 +42,36 @@ default void handleAll(List addData, List updateData, List deleteData) } default void handleAllObject(List addData, List updateData, List deleteData) { - handleAll((List) addData, (List) updateData, (List) deleteData); + handleAll((List) addData, (List) updateData, (List) deleteData); } //metaData: topic, center, etc. add meta is to create a topic. - void addMetadata(S meta); + void addMetadata(T meta); - default void addMetadata(List meta) { + default void addMetadata(List meta) { if (meta != null) { meta.forEach(this::addMetadata); } } default void addMetadataObject(Object meta) { - addMetadata((S) meta); + addMetadata((T) meta); } default void addMetadataObject(List meta) { if (meta != null) { - meta.forEach(t -> addMetadata((S) t)); + meta.forEach(t -> addMetadata((T) t)); } } default void replaceMetadata(List meta) { if (meta != null) { - deleteMetadata((List) meta); + deleteMetadata((List) meta); addMetadataObject(meta); } } - default void updateMetadata(S meta) { + default void updateMetadata(T meta) { this.addMetadata(meta); } @@ -78,27 +80,30 @@ default void updateMetadata(S meta) { * * @param meta */ - default void updateMetadata(List meta) { + default void updateMetadata(List meta) { if (meta != null) { meta.forEach(this::updateMetadata); } } default void updateMetadataObject(Object meta) { - this.addMetadata((S) meta); + this.addMetadata((T) meta); } - void deleteMetadata(S meta); + void deleteMetadata(T meta); - default void deleteMetadata(List meta) { + default void deleteMetadata(List meta) { if (meta != null) { meta.forEach(this::deleteMetadata); } } default void deleteMetadataObject(Object meta) { - deleteMetadata((S) meta); + deleteMetadata((T) meta); } + List getData(); + + List getData(GlobalRequest globalRequest); } diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManager.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManager.java new file mode 100644 index 00000000..1a4ad56a --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManager.java @@ -0,0 +1,231 @@ +package org.apache.eventmesh.dashboard.core.metadata; + +import lombok.Data; +import lombok.Setter; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.model.metadata.MetadataConfig; +import org.apache.eventmesh.dashboard.core.remoting.RemotingManager; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 启动应该进行差异化对比。进行差异化增量,差异化删除 + * 表 -> increment-> remote -> function -> data -> conver -> request + */ +public class MetadataSyncManager { + + @Setter + private Map,MetadataSyncWrapper> metadataSyncWrapperMap = new HashMap<>(); + + private final ScheduledThreadPoolExecutor scheduledExecutorService = new ScheduledThreadPoolExecutor(2); + + private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(32, 32, 10, TimeUnit.MINUTES, new LinkedBlockingQueue<>(), + new ThreadFactory() { + final AtomicInteger counter = new AtomicInteger(0); + + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "metadata-manager-" + counter.incrementAndGet()); + } + }); + + + @Setter + private RemotingManager remotingManager; + + + public void register(MetadataSyncConfig metadataSyncConfig){ + MetadataSyncWrapper metadataSyncWrapper = new MetadataSyncWrapper(); + metadataSyncWrapper.setMetadataClass(metadataSyncConfig.getMetadataClass()); + metadataSyncWrapper.setEntityClass(metadataSyncConfig.getEntityClass()); + metadataSyncWrapper.setDataBasesHandler(metadataSyncConfig.getDataBasesHandler()); + metadataSyncWrapper.setClusterService(metadataSyncConfig.getClusterService()); + metadataSyncWrapperMap.put(metadataSyncWrapper.getMetadataClass(),metadataSyncWrapper); + } + + public void init(Integer initialDelay, Integer period){ + scheduledExecutorService.scheduleAtFixedRate(this::run , initialDelay, period,TimeUnit.SECONDS); + } + + + public void run(){ + for(MetadataSyncWrapper metadataSyncWrapper : metadataSyncWrapperMap.values()){ + // 一个MetadataSyncWrapper 一个线程 + threadPoolExecutor.execute(metadataSyncWrapper); + } + } + + + @Data + public static class MetadataSyncConfig{ + + private Class metadataClass; + + private Class entityClass; + + private MetadataHandler dataBasesHandler; + + // 直接映射 api? config 是直接读取整个runtime 里面的数据 + // 还是封装一层? + // 这里如何变简单。直接 remote api? + private MetadataHandler clusterService; + } + + @Data + public class MetadataSyncWrapper implements Runnable{ + + private Class metadataClass; + + private Class entityClass; + + private MetadataHandler dataBasesHandler; + + // 直接映射 api? config 是直接读取整个runtime 里面的数据 + // 还是封装一层? + // 这里如何变简单。直接 remote api? + private MetadataHandler clusterService; + + private CountDownLatch countDownLatch = new CountDownLatch(2); + + + private Map clusterData = new HashMap<>(); + + private Map dataBasesData = new HashMap<>(); + + private List toClusterUpdate = new ArrayList<>(); + + + private List toDataUpdate = new ArrayList<>(); + + private List toDelete = new ArrayList<>(); + + private List toInsert = new ArrayList<>(); + + private long lastTime = System.currentTimeMillis(); + + @Override + public void run(){ + + try { + // 全程托管,托管都需要,异步 读取 cluster 信息 + threadPoolExecutor.execute(this::syncClusterData); + // 异步 读取数据库信息。是否进行增量处理 + threadPoolExecutor.execute(this::syncDatabasesData); + this.lastTime = System.currentTimeMillis(); + countDownLatch.await(); + // 对读取的数据进行分类, + this.difference(); + // 托管的进行差异化之后。进行写库。 + if(this.toInsert.isEmpty() && this.toClusterUpdate.isEmpty() && this.toDelete.isEmpty() && this.toDataUpdate.isEmpty()){ + return; + } + this.toTrusteeship(); + this.toFullTrusteeship(); + // 全程托管的 cluster 存在,数据库不存在就删除。 进行删除, 新增的直接操作 cluster + + } catch (InterruptedException e) { + throw new RuntimeException(e); + }finally { + countDownLatch = new CountDownLatch(2); + clusterData.clear(); + dataBasesData.clear(); + } + + + } + + public void syncClusterData(){ + try { + List metadataConfigList = this.clusterService.getData(); + this.arrange(this.clusterData , metadataConfigList); + }finally { + countDownLatch.countDown(); + } + + } + + public void syncDatabasesData(){ + try { + List metadataConfigList = this.dataBasesHandler.getData(); + this.arrange(this.dataBasesData, metadataConfigList); + }finally { + countDownLatch.countDown(); + } + } + + public void arrange(Map data , List metadataConfigList){ + for(MetadataConfig metadataConfig : metadataConfigList){ + data.put(metadataConfig.getUnique(), metadataConfig); + } + } + + /** + * TODO 一定要注意。这个就得是 cluster 的差集。如果要对 database 操作 就要反翻过啦 + */ + public void difference(){ + Map newClusterData = new HashMap<>(this.clusterData); + Map newDataBasesData = new HashMap<>(this.dataBasesData); + this.toDataUpdate = new ArrayList<>(); + this.toClusterUpdate = new ArrayList<>(); + this.toDelete = new ArrayList<>(); + this.toInsert = new ArrayList<>(); + for(Map.Entry entry : newClusterData.entrySet()){ + MetadataConfig serviceObject = newDataBasesData.remove(entry.getKey()); + if (Objects.isNull(serviceObject)) { + toDelete.add(entry.getValue()); + } else { + if (!serviceObject.equals(entry.getValue())) { + this.toClusterUpdate.add(entry.getValue()); + this.toDataUpdate.add(serviceObject); + } + } + } + this.toInsert = new ArrayList<>(newDataBasesData.values()); + + } + + public void toTrusteeship(){ + // 如果 update 中 cluster 与 databases 数据不一致。 以谁为主 + // + this.dataBasesHandler.updateMetadata(this.filterTrusteeship(this.toClusterUpdate)); + this.dataBasesHandler.addMetadata(this.filterTrusteeship(this.toDelete)); + } + + public void toFullTrusteeship(){ + // + this.clusterService.addMetadata(this.filterFullTrusteeship(this.toInsert)); + this.clusterService.addMetadata(this.filterFullTrusteeship(this.toDataUpdate)); + this.clusterService.deleteMetadata(this.filterTrusteeship(this.toDelete)); + } + + private List filterFullTrusteeship(List metadataConfigList){ + return this.filter(metadataConfigList,ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP); + } + + private List filterTrusteeship(List metadataConfigList){ + return this.filter(metadataConfigList,ClusterTrusteeshipType.TRUSTEESHIP); + } + + private List filter(List metadataConfigList,ClusterTrusteeshipType clusterTrusteeshipType){ + List newMetadataConfigList = new ArrayList<>(); + for(MetadataConfig metadataConfig: metadataConfigList){ + if(remotingManager.isClusterTrusteeshipType(metadataConfig.getClusterId(), clusterTrusteeshipType)){ + newMetadataConfigList.add(metadataConfig); + } + } + return newMetadataConfigList; + } + } + +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AbstractMetadataHandler.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AbstractMetadataHandler.java new file mode 100644 index 00000000..ee236d26 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AbstractMetadataHandler.java @@ -0,0 +1,36 @@ +package org.apache.eventmesh.dashboard.core.metadata.cluster; + +import lombok.Setter; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.core.metadata.MetadataHandler; +import org.apache.eventmesh.dashboard.core.remoting.RemotingManager; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractMetadataHandler implements MetadataHandler ,RemotingManager.RemotingRequestWrapper{ + + + @Setter + private RemotingManager remotingManager; + + protected S request; + + public void init(){ + this.request = (S)remotingManager.getProxyObject(); + } + + + /** + * 同步的时候,只同步runtime 的数据,还是会同步 storage 的数据。这个可以进行配置。 + * @return + */ + @Override + public List getData(){ + List remotingWrapperList = new ArrayList<>(); + remotingWrapperList.addAll(remotingManager.getEventMeshClusterDO(ClusterTrusteeshipType.TRUSTEESHIP, ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP)); + remotingWrapperList.addAll(remotingManager.getStorageCluster(ClusterTrusteeshipType.TRUSTEESHIP, ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP)); + return remotingManager.request(this, remotingManager.getEventMeshClusterDO(ClusterTrusteeshipType.TRUSTEESHIP, ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP)); + } + +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/AclSyncFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AclSyncFromClusterService.java similarity index 60% rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/AclSyncFromClusterService.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AclSyncFromClusterService.java index 97e43a3c..0dbd1965 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/AclSyncFromClusterService.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/AclSyncFromClusterService.java @@ -15,29 +15,46 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; +package org.apache.eventmesh.dashboard.core.metadata.cluster; +import lombok.Setter; import org.apache.eventmesh.dashboard.common.model.metadata.AclMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; import org.apache.eventmesh.dashboard.common.model.remoting.acl.GetAclsRequest; -import org.apache.eventmesh.dashboard.console.function.metadata.syncservice.SyncDataService; import org.apache.eventmesh.dashboard.service.remoting.AclRemotingService; - -import java.util.List; - import org.springframework.stereotype.Service; -import lombok.Setter; +import java.util.List; @Service -public class AclSyncFromClusterService implements SyncDataService { +public class AclSyncFromClusterService extends AbstractMetadataHandler { @Setter private AclRemotingService aclRemotingService; @Override - public List getData() { + public void addMetadata(AclMetadata meta) { + + } + + @Override + public void deleteMetadata(AclMetadata meta) { + + } + + + + @Override + public List getData(GlobalRequest globalRequest) { GetAclsRequest getAclsRequest = new GetAclsRequest(); - // aclRemotingService.getAllAcls(getAclsRequest). - return null; + getAclsRequest.setClusterId(globalRequest.getClusterId()); + return (List)this.request(this.request,getAclsRequest).getData(); + } + + + @Override + public GlobalResult request(AclRemotingService key, GetAclsRequest getAclsRequest) { + return key.getAllAcls(getAclsRequest); } } diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/ConfigSyncFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/ConfigSyncFromClusterService.java new file mode 100644 index 00000000..079e2cd0 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/ConfigSyncFromClusterService.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.core.metadata.cluster; + +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.eventmesh.dashboard.common.model.metadata.ConfigMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeRequest; +import org.apache.eventmesh.dashboard.service.remoting.ConfigRemotingService; +import org.apache.eventmesh.dashboard.service.remoting.RuntimeRemotingService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class ConfigSyncFromClusterService extends AbstractMetadataHandler { + + @Setter + ConfigRemotingService configRemotingService; + + @Override + public void addMetadata(ConfigMetadata meta) { + + } + + @Override + public void deleteMetadata(ConfigMetadata meta) { + + } + + @Override + public List getData() { + // topic + // group + // runtime + // broker + + return null; + } + + @Override + public List getData(GlobalRequest globalRequest) { + return null; + } + + + @Override + public GlobalResult request(ConfigRemotingService configRemotingService, GetConfigRequest key) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/GroupSyncFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/GroupSyncFromClusterService.java new file mode 100644 index 00000000..27edeba3 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/GroupSyncFromClusterService.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.core.metadata.cluster; + +import org.apache.eventmesh.dashboard.common.model.metadata.GroupMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.group.GetGroupsRequest; +import org.apache.eventmesh.dashboard.core.remoting.RemotingManager; +import org.apache.eventmesh.dashboard.service.remoting.GroupRemotingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class GroupSyncFromClusterService extends AbstractMetadataHandler{ + + @Autowired + private RemotingManager remotingManager; + + @Override + public void addMetadata(GroupMetadata meta) { + + } + + @Override + public void deleteMetadata(GroupMetadata meta) { + + } + + @Override + public List getData() { + List eventMeshGroupList = this.remotingManager.request(this,remotingManager.getEventMeshClusterDO()); + //List rocketMQMeshGroupList = this.remotingManager.request(this,remotingManager.getRocketMQClusterDO() ); + //eventMeshGroupList.addAll(rocketMQMeshGroupList); + return eventMeshGroupList; + } + + @Override + public List getData(GlobalRequest globalRequest) { + return null; + } + + @Override + public GlobalResult request(GroupRemotingService groupRemotingService, GetGroupsRequest key) { + return null; + } +} diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/InstanceUserFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/InstanceUserFromClusterService.java similarity index 91% rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/InstanceUserFromClusterService.java rename to eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/InstanceUserFromClusterService.java index 88b4808d..5d6ddb81 100644 --- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/function/metadata/syncservice/cluster/InstanceUserFromClusterService.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/InstanceUserFromClusterService.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.eventmesh.dashboard.console.function.metadata.syncservice.cluster; +package org.apache.eventmesh.dashboard.core.metadata.cluster; import org.springframework.stereotype.Service; diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/RuntimeSyncFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/RuntimeSyncFromClusterService.java new file mode 100644 index 00000000..d89a8508 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/RuntimeSyncFromClusterService.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.core.metadata.cluster; + +import lombok.extern.slf4j.Slf4j; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeRequest; +import org.apache.eventmesh.dashboard.service.remoting.RuntimeRemotingService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class RuntimeSyncFromClusterService extends AbstractMetadataHandler{ + + + + @Override + public void addMetadata(RuntimeMetadata meta) { + + } + + @Override + public void deleteMetadata(RuntimeMetadata meta) { + + } + + @Override + public List getData(GlobalRequest globalRequest) { + GetRuntimeRequest getRuntimeRequest = new GetRuntimeRequest(); + getRuntimeRequest.setClusterId(globalRequest.getClusterId()); + return (List)this.request(this.request,getRuntimeRequest).getData(); + } + + @Override + public GlobalResult request( RuntimeRemotingService runtimeRemotingService,GetRuntimeRequest key) { + return runtimeRemotingService.getRuntimeMetadata(key); + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/TopicSyncFromClusterService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/TopicSyncFromClusterService.java new file mode 100644 index 00000000..0be9cf93 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/metadata/cluster/TopicSyncFromClusterService.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.core.metadata.cluster; + +import lombok.extern.slf4j.Slf4j; +import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsRequest; +import org.apache.eventmesh.dashboard.service.remoting.TopicRemotingService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class TopicSyncFromClusterService extends AbstractMetadataHandler { + + @Override + public void addMetadata(TopicMetadata meta) { + + } + + @Override + public void deleteMetadata(TopicMetadata meta) { + + } + + + @Override + public List getData(GlobalRequest globalRequest) { + return null; + } + + + @Override + public GlobalResult request(TopicRemotingService topicRemotingService, GetTopicsRequest key) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/AbstractRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/AbstractRemotingService.java new file mode 100644 index 00000000..c9f8bc49 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/AbstractRemotingService.java @@ -0,0 +1,80 @@ +package org.apache.eventmesh.dashboard.core.remoting; + +import com.alibaba.fastjson.JSONObject; +import lombok.Setter; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.core.cluster.ClusterDO; +import org.apache.eventmesh.dashboard.core.cluster.ColonyDO; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 默认是一个集群,操作是基于集群操作还是单个操作 + */ +public abstract class AbstractRemotingService { + + @Setter + protected ColonyDO colonyDO; + + protected ClusterDO clusterDO; + + + public void init(){ + this.clusterDO = colonyDO.getClusterDO(); + this.createConfig(); + this.doInit(); + } + + public abstract void createConfig(); + + public List getMeta(){ + List list = new ArrayList<>(); + for(ColonyDO c : colonyDO.getMetaColonyDOList().values()){ + for(RuntimeMetadata runtimeMetadata : c.getClusterDO().getRuntimeMap().values()){ + list.add(runtimeMetadata.getHost()+":"+runtimeMetadata.getPort()); + } + } + return list; + } + + public String getMetaString(){ + StringBuilder sb = new StringBuilder(); + List list = new ArrayList<>(); + for(ColonyDO c : colonyDO.getMetaColonyDOList().values()){ + for(RuntimeMetadata runtimeMetadata : c.getClusterDO().getRuntimeMap().values()){ + sb.append(runtimeMetadata.getHost()+":"+runtimeMetadata.getPort()); + sb.append(";"); + } + } + return sb.toString().substring(0, sb.length() - 1); + } + + public void update(){ + + } + + public Long getClusterId(){ + return clusterDO.getClusterInfo().getClusterId(); + } + + public Long getId(){ + return clusterDO.getClusterInfo().getId(); + } + + public T toDataOjbect(Object object,Class clazz){ + if (object instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) object; + return (T) jsonObject.toJavaObject(clazz); + }else if(object instanceof String){ + return (T)JSONObject.parseObject((String)object,clazz); + }else if(object instanceof Map){ + + } + return null; + } + + + protected abstract void doInit(); +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManager.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManager.java new file mode 100644 index 00000000..3a8ff7c9 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManager.java @@ -0,0 +1,365 @@ +package org.apache.eventmesh.dashboard.core.remoting; + +import lombok.Data; +import lombok.Getter; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.common.enums.RemotingType; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterRelationshipMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.RemotingAction; +import org.apache.eventmesh.dashboard.core.cluster.ClusterDO; +import org.apache.eventmesh.dashboard.core.cluster.ColonyDO; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQAclRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQClientRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQConfigRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQGroupRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQOffsetRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQSubscriptionRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQTopicRemotingService; +import org.apache.eventmesh.dashboard.core.remoting.rocketmq.RocketMQUserRemotingService; +import org.apache.eventmesh.dashboard.service.remoting.RemotingIntegrationService; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Proxy; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + + +/** + * @author hahaha + */ +public class RemotingManager { + + + private final Map>> remotingServiceClasses = new HashMap<>(); + + /** + * key clusterId + */ + private final Map remotingWrapperMap = new ConcurrentHashMap<>(); + + @Getter + private final Object proxyObject; + + + /** + * Long key is clusterId + */ + private final Map colonyDOMap = new HashMap<>(); + + private AtomicBoolean loading = new AtomicBoolean(true); + + + { + for (RemotingType remotingType : RemotingType.values()) { + remotingServiceClasses.put(remotingType, new ArrayList<>()); + } + this.registerService(RemotingType.ROCKETMQ, RocketMQAclRemotingService.class, RocketMQConfigRemotingService.class, RocketMQClientRemotingService.class + , RocketMQGroupRemotingService.class, RocketMQOffsetRemotingService.class, RocketMQSubscriptionRemotingService.class + , RocketMQTopicRemotingService.class, RocketMQUserRemotingService.class); + + this.registerService(RemotingType.EVENT_MESH_RUNTIME, RocketMQAclRemotingService.class, RocketMQConfigRemotingService.class, RocketMQClientRemotingService.class + , RocketMQGroupRemotingService.class, RocketMQOffsetRemotingService.class, RocketMQSubscriptionRemotingService.class + , RocketMQTopicRemotingService.class, RocketMQUserRemotingService.class); + + RemotingServiceHandler remotingServiceHandler = new RemotingServiceHandler(); + Class[] clazzList = new Class[]{RemotingIntegrationService.class}; + proxyObject = Proxy.newProxyInstance(this.getClass().getClassLoader(), clazzList, remotingServiceHandler); + } + + public void registerService(RemotingType remotingType, Class... clazzs) { + List> serviceList = this.remotingServiceClasses.get(remotingType); + Collections.addAll(serviceList, clazzs); + } + + + public void registerColony(ColonyDO colonyDO) throws Exception { + if (loading.get() == true) { + return; + } + + if (colonyDO.getClusterDO().getClusterInfo().getClusterType().isMainCluster()) { + ClusterType clusterType = colonyDO.getClusterDO().getClusterInfo().getClusterType(); + RemotingType remotingType = clusterType.getRemotingType(); + List> remotingServersClassList = remotingServiceClasses.get(remotingType); + Map, Object> remotingServersMap = new HashMap<>(); + for (Class clazz : remotingServersClassList) { + AbstractRemotingService abstractRemotingService = (AbstractRemotingService) clazz.newInstance(); + abstractRemotingService.setColonyDO(colonyDO); + abstractRemotingService.init(); + remotingServersMap.put(clazz.getInterfaces()[0], abstractRemotingService); + } + RemotingWrapper remotingWrapper = new RemotingWrapper(); + remotingWrapper.setColonyDO(colonyDO); + remotingWrapper.setObject(remotingServersMap); + this.remotingWrapperMap.put(colonyDO.getClusterId(), remotingWrapper); + } else { + this.updateColony(colonyDO); + } + + } + + public void updateColony(ColonyDO colonyDO) { + RemotingWrapper remotingWrapper = this.getMainRemotingWrapper(colonyDO); + /* + There is a delay + */ + if (Objects.isNull(remotingWrapper)) { + return; + } + ColonyDO mainColonyDO = this.getMainColonyDO(colonyDO); + for (Object object : remotingWrapper.getObject().values()) { + AbstractRemotingService abstractRemotingService = (AbstractRemotingService) object; + abstractRemotingService.setColonyDO(mainColonyDO); + abstractRemotingService.update(); + } + } + + public RemotingWrapper getMainRemotingWrapper(ColonyDO colonyDO) { + Long clusterId = colonyDO.getClusterDO().getClusterInfo().getClusterType().isMainCluster() ? colonyDO.getClusterId() : colonyDO.getSuperiorId(); + if (Objects.isNull(clusterId)) { + return null; + } + return remotingWrapperMap.get(clusterId); + } + + public ColonyDO getMainColonyDO(ColonyDO colonyDO) { + Long clusterId = colonyDO.getClusterDO().getClusterInfo().getClusterType().isMainCluster() ? colonyDO.getClusterId() : colonyDO.getSuperiorId(); + return colonyDOMap.get(clusterId); + } + + public void unregister(ColonyDO colonyDO) { + remotingWrapperMap.remove(colonyDO.getClusterId()); + } + + public void loadingCompleted() throws Exception { + this.loading.set(false); + for (ColonyDO colonyDO : colonyDOMap.values()) { + if (colonyDO.getClusterDO().getClusterInfo().getClusterType().isMainCluster()) { + this.registerColony(colonyDO); + } + } + } + + + /** + * 解除玩关系,才能删除 + * + * @param clusterEntityList + */ + public void cacheCluster(List clusterEntityList) { + for (ClusterMetadata cluster : clusterEntityList) { + Long clusterId = cluster.getId(); + if (cluster.getStatus() == 1) { + ColonyDO colonyDO = colonyDOMap.remove(cluster.getClusterId()); + this.unregister(colonyDO); + continue; + } + ColonyDO colonyDO = this.colonyDOMap.computeIfAbsent(clusterId, key -> { + ColonyDO newColonyDO = new ColonyDO(); + ClusterDO newClusterDO = new ClusterDO(); + newColonyDO.setClusterDO(newClusterDO); + return newColonyDO; + }); + if (Objects.isNull(colonyDO.getClusterDO().getClusterInfo())) { + colonyDO.getClusterDO().setClusterInfo(cluster); + + try { + this.registerColony(colonyDO); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } else { + colonyDO.getClusterDO().setClusterInfo(cluster); + this.updateColony(colonyDO); + } + } + } + + public void cacheRuntime(List runtimeMeatadataList) { + for (RuntimeMetadata runtimeMetadata : runtimeMeatadataList) { + ColonyDO colonyDO = this.colonyDOMap.get(runtimeMetadata.getClusterId()); + if (Objects.equals(runtimeMetadata.getStatus(), 1)) { + colonyDO.getClusterDO().getRuntimeMap().put(runtimeMetadata.getId(), runtimeMetadata); + } else { + colonyDO.getClusterDO().getRuntimeMap().remove(runtimeMetadata.getId()); + } + } + } + + /** + * 解除关系是解除关系,不是删除 + * + * @param clusterRelationshipEntityList + */ + public void cacheClusterRelationship(List clusterRelationshipEntityList) { + for (ClusterRelationshipMetadata clusterRelationshipEntity : clusterRelationshipEntityList) { + ClusterType relationshipType = clusterRelationshipEntity.getRelationshipType(); + ColonyDO colonyDO = this.colonyDOMap.get(clusterRelationshipEntity.getClusterId()); + if (Objects.equals(relationshipType.getAssemblyNodeType(), ClusterType.META)) { + this.relationship(colonyDO, colonyDO.getMetaColonyDOList(), clusterRelationshipEntity); + } else if (Objects.equals(relationshipType.getAssemblyNodeType(), ClusterType.RUNTIME)) { + this.relationship(colonyDO, colonyDO.getRuntimeColonyDOList(), clusterRelationshipEntity); + } else if (Objects.equals(relationshipType.getAssemblyNodeType(), ClusterType.STORAGE)) { + this.relationship(colonyDO, colonyDO.getStorageColonyDOList(), clusterRelationshipEntity); + } + } + } + + private void relationship(ColonyDO colonyDO, Map clusterDOList, ClusterRelationshipMetadata clusterRelationshipMetadata) { + if (Objects.equals(clusterRelationshipMetadata.getStatus(), 2)) { + clusterDOList.remove(clusterRelationshipMetadata.getRelationshipId()); + } else { + ColonyDO relationshiCcolonyDO = this.colonyDOMap.get(clusterRelationshipMetadata.getRelationshipId()); + clusterDOList.put(clusterRelationshipMetadata.getRelationshipId(), relationshiCcolonyDO); + relationshiCcolonyDO.setSuperiorId(colonyDO.getClusterId()); + } + this.updateColony(colonyDO); + } + + public List getEventMeshClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType) { + return this.filterer(ClusterType.EVENTMESH, clusterTrusteeshipType); + } + + public List getMetaNacosClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType) { + return this.filterer(ClusterType.EVENTMESH_META_ETCD, clusterTrusteeshipType); + } + + public List getMetaEtcdClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType) { + return this.filterer(ClusterType.EVENTMESH_META_NACOS, clusterTrusteeshipType); + } + + public List getRocketMQClusterDO(ClusterTrusteeshipType... clusterTrusteeshipType) { + return this.filterer(ClusterType.STORAGE_ROCKETMQ, clusterTrusteeshipType); + } + public List getStorageCluster(ClusterTrusteeshipType... clusterTrusteeshipType) { + List list = new ArrayList<>(); + for(ClusterType clusterType : ClusterType.STORAGE_TYPES){ + list.addAll(this.filterer(clusterType, clusterTrusteeshipType)); + } + return list; + } + + + public boolean isClusterTrusteeshipType(Long clusterId, ClusterTrusteeshipType clusterTrusteeshipType){ + ColonyDO colonyDO = this.colonyDOMap.get(clusterId ); + if(Objects.isNull(colonyDO)){ + return false; + } + return Objects.equals(colonyDO.getClusterDO().getClusterInfo().getTrusteeshipType() , clusterTrusteeshipType); + } + + + private List filterer(ClusterType clusterType, ClusterTrusteeshipType... clusterTrusteeshipTypes) { + Set clusterTrusteeshipType = new HashSet<>(); + clusterTrusteeshipType.addAll(Arrays.asList(clusterTrusteeshipTypes)); + List remotingWrapperList = new ArrayList<>(); + for (RemotingWrapper remotingWrapper : remotingWrapperMap.values()) { + ClusterMetadata clusterMetadata = remotingWrapper.getColonyDO().getClusterDO().getClusterInfo(); + if (Objects.equals(clusterMetadata.getClusterType(), clusterType)) { + if (clusterTrusteeshipType.contains(clusterMetadata.getTrusteeshipType())) { + remotingWrapperList.add(remotingWrapper); + } + } + } + return remotingWrapperList; + } + + + public T request(RemotingRequestWrapper remotingRequestWrapper, List remotingWrapperList) { + List resultData = new ArrayList<>(); + + Class clazz = remotingRequestWrapper.getClass(); + Type superclass = clazz.getGenericSuperclass(); + Class globalRequestClass = null; + Class executeClass = null; + if (superclass instanceof ParameterizedType) { + ParameterizedType parameterizedType = (ParameterizedType) superclass; + Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); + executeClass = (Class)actualTypeArguments[0]; + globalRequestClass = (Class)actualTypeArguments[1]; + } + RemotingRequestWrapper remotingRequestWrapper1 = (RemotingRequestWrapper)remotingRequestWrapper; + for (RemotingWrapper remotingWrapper : remotingWrapperList) { + try { + GlobalRequest globalRequest = globalRequestClass.newInstance(); + globalRequest.setClusterId(remotingWrapper.getColonyDO().getClusterId()); + GlobalResult globalResult = remotingRequestWrapper1.request(globalRequest,executeClass); + if(globalResult.getData() instanceof List){ + resultData.addAll((List)globalResult.getData()); + }else{ + resultData.add(globalResult.getData()); + } + } catch (Exception e) { + //TODO There should be no abnormal occurrence of InstantiationException, IllegalAccessException, Exception + // + } + } + return (T) resultData; + + } + + public interface RemotingRequestWrapper { + + GlobalResult request(T t,RE key); + } + + @Data + public static class RemotingWrapper { + private ColonyDO colonyDO; + + private Map, Object> object = new HashMap<>(); + } + + + public class RemotingServiceHandler implements InvocationHandler { + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + + GlobalRequest globalRequest = (GlobalRequest) args[0]; + Long clusterId = globalRequest.getClusterId(); + // ClusterDO + RemotingWrapper remotingWrapper = remotingWrapperMap.get(clusterId); + // 完整执行对象 + Class declaringClass = method.getDeclaringClass(); + Object object = remotingWrapper.getObject().get(declaringClass); + if (Objects.isNull(object)) { + + } + + Method currentMethod = object.getClass().getMethod(method.getName(), method.getParameterTypes()); + RemotingAction annotations = currentMethod.getAnnotation(RemotingAction.class); + if (Objects.nonNull(annotations)) { + if (!annotations.support()) { + ColonyDO colonyDO = remotingWrapper.getColonyDO(); + Map colonyDOMap1 = colonyDO.getStorageColonyDOList(); + for (ColonyDO c : colonyDOMap1.values()) { + RemotingWrapper newRemotingWrapper = remotingWrapperMap.get(c.getClusterId()); + Object newObject = newRemotingWrapper.getObject().get(declaringClass); + return method.invoke(newObject, args); + } + } + } + return method.invoke(object, args); + + } + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingServiceRuntimeConfig.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingServiceRuntimeConfig.java new file mode 100644 index 00000000..938e1bf4 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/RemotingServiceRuntimeConfig.java @@ -0,0 +1,20 @@ +package org.apache.eventmesh.dashboard.core.remoting; + +import lombok.Data; +import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig; +import org.apache.eventmesh.dashboard.service.remoting.RemotingServiceType; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class RemotingServiceRuntimeConfig { + + + + private CreateSDKConfig runtimeConfig; + + private CreateSDKConfig storageConfig; + + private Map remotingServiceTypeStringMap = new HashMap<>(); +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/AbstractRocketMQRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/AbstractRocketMQRemotingService.java new file mode 100644 index 00000000..405518a1 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/AbstractRocketMQRemotingService.java @@ -0,0 +1,92 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.core.function.SDK.SDKManager; +import org.apache.eventmesh.dashboard.core.function.SDK.SDKTypeEnum; +import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRocketmqConfig; +import org.apache.eventmesh.dashboard.core.remoting.AbstractRemotingService; +import org.apache.rocketmq.tools.admin.DefaultMQAdminExt; +import org.apache.rocketmq.tools.command.CommandUtil; + +import java.util.AbstractMap; +import java.util.Objects; +import java.util.Set; + +/** + * rocketmq 其他不同的是。 以nameservier 为主。那么可以多集群。一个eventmesh 可以操作多个集群 + */ +public abstract class AbstractRocketMQRemotingService extends AbstractRemotingService { + + + protected DefaultMQAdminExt defaultMQAdminExt; + + protected CreateRocketmqConfig createRocketmqConfig; + + + @Override + public void createConfig(){ + createRocketmqConfig = new CreateRocketmqConfig(); + createRocketmqConfig.setNameServerUrl(this.getMetaString()); + } + + @Override + protected void doInit() { + AbstractMap.SimpleEntry clientSimple = SDKManager.getInstance().createClient(SDKTypeEnum.STORAGE_ROCKETMQ_ADMIN, createRocketmqConfig); + this.defaultMQAdminExt = clientSimple.getValue(); + } + + protected T cluster(GlobalResult t, Function function) { + try { + + /*for(ColonyDO clusterDO : this.cache.getClusterDOList()){ + for(RuntimeMetadata runtimeMetadata : clusterDO.getRuntimeEntityList()){ + + } + }*/ + + Set masterSet = + CommandUtil.fetchMasterAddrByClusterName(defaultMQAdminExt, createRocketmqConfig.getClusterName()); + for (String masterName : masterSet) { + Object newResult = function.apply(masterName, t); + if (Objects.nonNull(newResult)) { + return (T) newResult; + } + } + t.setCode(200); + } catch (Exception exception) { + t.setCode(400); + t.setErrorMessages(exception.getMessage()); + t.setThrowable(exception); + } finally { + return (T) t; + } + } + + ; + + protected T clusterName(GlobalResult t, Function function) { + try { + + + + Object newResult = function.apply(createRocketmqConfig.getClusterName(), t); + if (Objects.nonNull(newResult)) { + return (T) newResult; + } + t.setCode(200); + } catch (Exception exception) { + t.setCode(400); + t.setErrorMessages(exception.getMessage()); + t.setThrowable(exception); + } finally { + return (T) t; + } + } + + protected interface Function { + + T apply(String masterName, T t) throws Exception; + } + + +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQAclRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQAclRemotingService.java new file mode 100644 index 00000000..aa799281 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQAclRemotingService.java @@ -0,0 +1,29 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.acl.CreateAclRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.acl.CreateAclResult; +import org.apache.eventmesh.dashboard.common.model.remoting.acl.DeleteAclRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.acl.DeleteAclResult; +import org.apache.eventmesh.dashboard.common.model.remoting.acl.GetAclsRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.acl.GetAclsResult; +import org.apache.eventmesh.dashboard.service.remoting.AclRemotingService; + +public class RocketMQAclRemotingService extends AbstractRocketMQRemotingService implements AclRemotingService { + + + @Override + public CreateAclResult createAcl(CreateAclRequest createAclRequest) { + //this.defaultMQAdminExt.createAndUpdatePlainAccessConfig(); + return null; + } + + @Override + public DeleteAclResult deleteAcl(DeleteAclRequest deleteAclRequest) { + return null; + } + + @Override + public GetAclsResult getAllAcls(GetAclsRequest getAclsRequest) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQClientRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQClientRemotingService.java new file mode 100644 index 00000000..d17372fa --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQClientRemotingService.java @@ -0,0 +1,13 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.metadata.ClientMetadata; +import org.apache.eventmesh.dashboard.service.remoting.ClientRemotingService; + +import java.util.List; + +public class RocketMQClientRemotingService extends AbstractRocketMQRemotingService implements ClientRemotingService { + @Override + public List getClientList() { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQConfigRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQConfigRemotingService.java new file mode 100644 index 00000000..d08f2cae --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQConfigRemotingService.java @@ -0,0 +1,25 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.BaseGlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.config.AddConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsResult; +import org.apache.eventmesh.dashboard.service.remoting.ConfigRemotingService; + +public class RocketMQConfigRemotingService extends AbstractRocketMQRemotingService implements ConfigRemotingService { + @Override + public BaseGlobalResult addConfig(AddConfigRequest addConfigRequest) { + return null; + } + + @Override + public GetTopicsResult getConfig(GetConfigRequest getConfigRequest) { + return null; + } + + @Override + public GetTopicsResult getAllTopics(GetTopicsRequest getTopicsRequest) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQGroupRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQGroupRemotingService.java new file mode 100644 index 00000000..6b05f44d --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQGroupRemotingService.java @@ -0,0 +1,12 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.group.GetGroupResult; +import org.apache.eventmesh.dashboard.common.model.remoting.group.GetGroupsRequest; +import org.apache.eventmesh.dashboard.service.remoting.GroupRemotingService; + +public class RocketMQGroupRemotingService extends AbstractRocketMQRemotingService implements GroupRemotingService { + @Override + public GetGroupResult getAllGroups(GetGroupsRequest getGroupsRequest) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQOffsetRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQOffsetRemotingService.java new file mode 100644 index 00000000..36881f5d --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQOffsetRemotingService.java @@ -0,0 +1,19 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.offset.GetOffsetRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.offset.GetOffsetResult; +import org.apache.eventmesh.dashboard.common.model.remoting.offset.ResetOffsetRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.offset.ResetOffsetResult; +import org.apache.eventmesh.dashboard.service.remoting.OffsetRemotingService; + +public class RocketMQOffsetRemotingService extends AbstractRocketMQRemotingService implements OffsetRemotingService { + @Override + public GetOffsetResult getOffset(GetOffsetRequest getOffsetRequest) { + return null; + } + + @Override + public ResetOffsetResult resetOffset(ResetOffsetRequest resetOffsetRequest) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQSubscriptionRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQSubscriptionRemotingService.java new file mode 100644 index 00000000..342126e3 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQSubscriptionRemotingService.java @@ -0,0 +1,12 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.subscription.GetSubscriptionRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.subscription.GetSubscriptionResult; +import org.apache.eventmesh.dashboard.service.remoting.SubscriptionRemotingService; + +public class RocketMQSubscriptionRemotingService extends AbstractRocketMQRemotingService implements SubscriptionRemotingService { + @Override + public GetSubscriptionResult getSubscription(GetSubscriptionRequest request) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQTopicRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQTopicRemotingService.java new file mode 100644 index 00000000..31905e41 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQTopicRemotingService.java @@ -0,0 +1,61 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.enums.RemotingType; +import org.apache.eventmesh.dashboard.common.model.metadata.TopicMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.RemotingAction; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.DeleteTopicRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.DeleteTopicResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsResponse; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsResult; +import org.apache.eventmesh.dashboard.service.remoting.TopicRemotingService; +import org.apache.rocketmq.common.TopicConfig; +import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + + +public class RocketMQTopicRemotingService extends AbstractRocketMQRemotingService implements TopicRemotingService { + @Resource + @Override + @RemotingAction(support = false,substitution = RemotingType.STORAGE) + public CreateTopicResult createTopic(CreateTopicRequest createTopicRequest) { + CreateTopicResult createTopicResult = new CreateTopicResult(); + TopicConfig topicConfig = this.toDataOjbect(createTopicRequest.getTopicMetadata().getTopicConfig(), TopicConfig.class); + return this.cluster(createTopicResult,( master, result) -> { + this.defaultMQAdminExt.createAndUpdateTopicConfig(master,topicConfig); + return null; + }); + } + + @Override + public DeleteTopicResult deleteTopic(DeleteTopicRequest deleteTopicRequest) { + DeleteTopicResult deleteTopicResult = new DeleteTopicResult(); + return this.clusterName(deleteTopicResult,(master,result ) -> { + this.defaultMQAdminExt.deleteTopic(deleteTopicRequest.getTopicMetadata().getTopicName(), master); + return null; + }); + } + + @Override + public GetTopicsResult getAllTopics(GetTopicsRequest getTopicsRequest) { + GetTopicsResult getTopicsResult = new GetTopicsResult(); + GetTopicsResponse getTopicsResponse = new GetTopicsResponse(); + List list = new ArrayList<>(); + getTopicsResult.setData(getTopicsResponse); + return this.cluster(getTopicsResult,( master, result ) -> { + TopicConfigSerializeWrapper topicConfigSerializeWrapper = this.defaultMQAdminExt.getAllTopicConfig(master, 3000); + if( !topicConfigSerializeWrapper.getTopicConfigTable().isEmpty()){ + topicConfigSerializeWrapper.getTopicConfigTable().forEach( (k , v) ->{ + TopicMetadata topicMetadata = new TopicMetadata(); + //topicMetadata.setClusterId(); + }); + } + return null; + }); + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQUserRemotingService.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQUserRemotingService.java new file mode 100644 index 00000000..3e0eda94 --- /dev/null +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/remoting/rocketmq/RocketMQUserRemotingService.java @@ -0,0 +1,24 @@ +package org.apache.eventmesh.dashboard.core.remoting.rocketmq; + +import org.apache.eventmesh.dashboard.common.model.remoting.user.CreateUserRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.user.DeleterUserRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.user.GetUserRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.user.GetUserResult; +import org.apache.eventmesh.dashboard.service.remoting.UserRemotingService; + +public class RocketMQUserRemotingService extends AbstractRocketMQRemotingService implements UserRemotingService { + @Override + public CreateUserRequest createInstanceUser(CreateUserRequest request) { + return null; + } + + @Override + public DeleterUserRequest deleteInstanceUser(DeleterUserRequest request) { + return null; + } + + @Override + public GetUserResult getInstanceUser(GetUserRequest request) { + return null; + } +} diff --git a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/store/RocketmqTopicCore.java b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/store/RocketmqTopicCore.java index b3810f0c..d7f816f6 100644 --- a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/store/RocketmqTopicCore.java +++ b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/store/RocketmqTopicCore.java @@ -17,34 +17,31 @@ package org.apache.eventmesh.dashboard.core.store; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.eventmesh.dashboard.core.function.SDK.SDKManager; import org.apache.eventmesh.dashboard.core.function.SDK.SDKTypeEnum; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig; import org.apache.eventmesh.dashboard.service.dto.RocketmqProperties; import org.apache.eventmesh.dashboard.service.dto.TopicProperties; import org.apache.eventmesh.dashboard.service.store.TopicCore; - -import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.common.TopicConfig; import org.apache.rocketmq.common.TopicFilterType; import org.apache.rocketmq.common.constant.PermName; -import org.apache.rocketmq.common.protocol.RequestCode; -import org.apache.rocketmq.common.protocol.body.TopicConfigSerializeWrapper; -import org.apache.rocketmq.common.protocol.header.CreateTopicRequestHeader; -import org.apache.rocketmq.common.protocol.header.DeleteTopicRequestHeader; import org.apache.rocketmq.remoting.CommandCustomHeader; import org.apache.rocketmq.remoting.RemotingClient; import org.apache.rocketmq.remoting.protocol.RemotingCommand; +import org.apache.rocketmq.remoting.protocol.RequestCode; +import org.apache.rocketmq.remoting.protocol.body.TopicConfigSerializeWrapper; +import org.apache.rocketmq.remoting.protocol.header.CreateTopicRequestHeader; +import org.apache.rocketmq.remoting.protocol.header.DeleteTopicRequestHeader; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentMap; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; - -import lombok.extern.slf4j.Slf4j; - @Slf4j @Service public class RocketmqTopicCore implements TopicCore { diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperationTest.java index 42f2d002..1e46942f 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcConsumerSDKOperationTest.java @@ -22,6 +22,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeGrpcConsumerSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperationTest.java index 826e4e28..796ac256 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeGrpcProducerSDKOperationTest.java @@ -22,6 +22,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeGrpcProducerSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperationTest.java index d6808c4c..bb930ecf 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpConsumerSDKOperationTest.java @@ -24,6 +24,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeHttpConsumerSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperationTest.java index 728364a3..9b8674ba 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeHttpProducerSDKOperationTest.java @@ -24,6 +24,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeHttpProducerSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperationTest.java index 68b190d9..5966bb3f 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeSDKOperationTest.java @@ -21,6 +21,7 @@ import org.apache.eventmesh.common.Constants; import org.apache.eventmesh.common.protocol.tcp.UserAgent; import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRuntimeConfig; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeSDKOperation; import org.apache.eventmesh.dashboard.core.function.SDK.wrapper.RuntimeSDKWrapper; import java.util.AbstractMap.SimpleEntry; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperationTest.java index f2a1a528..2a757c59 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpCloudEventSDKOperationTest.java @@ -24,6 +24,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpCloudEventSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperationTest.java index 29e71010..bc09e6c9 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpEventMeshSDKOperationTest.java @@ -24,6 +24,7 @@ import java.util.AbstractMap.SimpleEntry; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpEventMeshSDKOperation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperationTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperationTest.java index caf73020..22ab936f 100644 --- a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperationTest.java +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/function/SDK/operation/RuntimeTcpOpenMessageSDKOperationTest.java @@ -18,6 +18,7 @@ package org.apache.eventmesh.dashboard.core.function.SDK.operation; +import org.apache.eventmesh.dashboard.core.function.SDK.operation.runtime.RuntimeTcpOpenMessageSDKOperation; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManagerTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManagerTest.java new file mode 100644 index 00000000..5c4114b8 --- /dev/null +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/metadata/MetadataSyncManagerTest.java @@ -0,0 +1,117 @@ +package org.apache.eventmesh.dashboard.core.metadata; + +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType; +import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata; +import org.apache.eventmesh.dashboard.core.remoting.RemotingManager; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@RunWith(MockitoJUnitRunner.class) +public class MetadataSyncManagerTest { + + private MetadataSyncManager metadataSyncManager = new MetadataSyncManager(); + + private Map, MetadataSyncManager.MetadataSyncWrapper> metadataSyncWrapperMap; + + + @Mock + private RemotingManager remotingManager; + + @Mock + private MetadataHandler dataBasesHandler; + + @Mock + private MetadataHandler clusterHandler; + + private List databasesList = new ArrayList<>(); + private List clusterList = new ArrayList<>(); + + @Before + public void init() throws IllegalAccessException { + MetadataSyncManager.MetadataSyncConfig metadataSyncConfig = new MetadataSyncManager.MetadataSyncConfig(); + metadataSyncConfig.setDataBasesHandler(dataBasesHandler); + metadataSyncConfig.setClusterService(clusterHandler); + metadataSyncConfig.setMetadataClass(RuntimeMetadata.class ); + metadataSyncManager.setRemotingManager(this.remotingManager); + metadataSyncManager.register(metadataSyncConfig); + + Field metadataSyncWrapperMapField = FieldUtils.getField(MetadataSyncManager.class, "metadataSyncWrapperMap", true); + metadataSyncWrapperMap = (Map, MetadataSyncManager.MetadataSyncWrapper>)metadataSyncWrapperMapField.get(metadataSyncManager); + + } + + + @Test + public void test_sync_mock(){ + // + // ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP 3 + // databases cluster + // A 5 3 2 + // B 3 5 -2 + // C 5(2) 5(2) 2 + // ClusterTrusteeshipType.TRUSTEESHIP 3 + // databases cluster + // E 5 5 0 + // F 3 5 -2 + // G 5 3 2 + + this.mock_data(1 , 5,3); + this.mock_data(2 , 3,5); + this.mock_data(3 , 5,5); + this.mock_data(5 , 5,3); + this.mock_data(6 , 3,5); + this.mock_data(7 , 5,5); + MetadataSyncManager.MetadataSyncWrapper metadataSyncWrapper = this.metadataSyncWrapperMap.get(RuntimeMetadata.class); + Mockito.when(this.dataBasesHandler.getData()).thenReturn(this.databasesList); + Mockito.when(this.clusterHandler.getData()).thenReturn(this.clusterList); + Mockito.when(this.remotingManager.isClusterTrusteeshipType(Mockito.anyLong(),Mockito.any())).thenAnswer((invocation)->{ + Long clusterId = (Long)invocation.getArgument(0); + ClusterTrusteeshipType clusterTrusteeshipType = (ClusterTrusteeshipType) invocation.getArgument(1); + if(Objects.equals(clusterTrusteeshipType,ClusterTrusteeshipType.FIRE_AND_FORGET_TRUSTEESHIP)&& clusterId < 4){ + return true; + } + if(Objects.equals(clusterTrusteeshipType,ClusterTrusteeshipType.TRUSTEESHIP)&& clusterId > 4){ + return true; + } + return false; + }); + + metadataSyncWrapper.run(); + } + + private void mock_data(long clusterId , int databasesCount,int clusterCount){ + int index = databasesCount > clusterCount? databasesCount : clusterCount; + for(int i = 0; i < index ; i++){ + RuntimeMetadata runtimeMetadata = new RuntimeMetadata(); + runtimeMetadata.setClusterId(clusterId); + runtimeMetadata.setPort(i); + runtimeMetadata.setHost(clusterId+"."+i+""); + if(i < databasesCount){ + this.databasesList.add( runtimeMetadata ); + } + if(i < clusterCount){ + if( databasesCount == clusterCount){ + if( i == 0 ||i == 1){ + runtimeMetadata = new RuntimeMetadata(); + runtimeMetadata.setClusterId(clusterId); + runtimeMetadata.setPort(i); + runtimeMetadata.setHost(clusterId+".."+i+" " +i); + } + } + this.clusterList.add(runtimeMetadata); + } + + } + } +} diff --git a/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManagerTest.java b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManagerTest.java new file mode 100644 index 00000000..b826ea4d --- /dev/null +++ b/eventmesh-dashboard-core/src/test/java/org/apache/eventmesh/dashboard/core/remoting/RemotingManagerTest.java @@ -0,0 +1,158 @@ +package org.apache.eventmesh.dashboard.core.remoting; + +import org.apache.eventmesh.dashboard.common.enums.ClusterType; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata; +import org.apache.eventmesh.dashboard.common.model.metadata.ClusterRelationshipMetadata; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicRequest; +import org.apache.eventmesh.dashboard.service.remoting.RemotingIntegrationService; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +public class RemotingManagerTest { + + private RemotingManager remotingManager = new RemotingManager(); + + + @Test + public void init_test(){ + RemotingIntegrationService proxyObject = (RemotingIntegrationService)remotingManager.getProxyObject(); + + CreateTopicRequest createTopicRequest = new CreateTopicRequest(); + createTopicRequest.setClusterId(1L); + + proxyObject.createTopic(createTopicRequest); + + } + + @Test + public void mock_overall_logic(){ + List clusterRelationshipMetadataList = new ArrayList<>(); + AtomicLong clusterId = new AtomicLong(1); + List clusterMetadataList = new ArrayList<>(); + + // 两个 eventmesh 集群 + ClusterMetadata eventMeshCluster1 = new ClusterMetadata(); + eventMeshCluster1.setClusterType(ClusterType.EVENTMESH_CLUSTER); + eventMeshCluster1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshCluster1); + + ClusterMetadata eventMeshCluster2 = new ClusterMetadata(); + eventMeshCluster2.setClusterType(ClusterType.EVENTMESH_CLUSTER); + eventMeshCluster2.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshCluster2); + + + // 两个注册中心 + ClusterMetadata eventMeshMetaNacos1 = new ClusterMetadata(); + eventMeshMetaNacos1.setClusterType(ClusterType.EVENTMESH_META_NACOS); + eventMeshMetaNacos1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshMetaNacos1); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster1,eventMeshMetaNacos1); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster2,eventMeshMetaNacos1); + + ClusterMetadata eventMeshMetaNacos2 = new ClusterMetadata(); + eventMeshMetaNacos2.setClusterType(ClusterType.EVENTMESH_META_NACOS); + eventMeshMetaNacos2.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshMetaNacos2); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster1,eventMeshMetaNacos2); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster2,eventMeshMetaNacos2); + + + + // 2个 eventmesh runtime + ClusterMetadata eventMeshRuntime1 = new ClusterMetadata(); + eventMeshRuntime1.setClusterType(ClusterType.EVENTMESH_RUNTIME); + eventMeshRuntime1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshRuntime1); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster1,eventMeshRuntime1); + + ClusterMetadata eventMeshRuntime2 = new ClusterMetadata(); + eventMeshRuntime2.setClusterType(ClusterType.EVENTMESH_RUNTIME); + eventMeshRuntime2.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(eventMeshRuntime2); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster2,eventMeshRuntime2); + + // 两个个 rocketmq 集群 + ClusterMetadata rocketMCluster = new ClusterMetadata(); + rocketMCluster.setClusterType(ClusterType.STORAGE_ROCKETMQ_CLUSTER); + rocketMCluster.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketMCluster); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster1,rocketMCluster); + + ClusterMetadata rocketMCluster1 = new ClusterMetadata(); + rocketMCluster1.setClusterType(ClusterType.STORAGE_ROCKETMQ_CLUSTER); + rocketMCluster1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketMCluster1); + this.relationship(clusterRelationshipMetadataList, eventMeshCluster2,rocketMCluster1); + + // 2个 rocketmq broker 集群 + ClusterMetadata rocketBroker = new ClusterMetadata(); + rocketBroker.setClusterType(ClusterType.STORAGE_ROCKETMQ_BROKER); + rocketBroker.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketBroker); + this.relationship(clusterRelationshipMetadataList, rocketMCluster,rocketBroker); + + ClusterMetadata rocketBroker1 = new ClusterMetadata(); + rocketBroker1.setClusterType(ClusterType.STORAGE_ROCKETMQ_BROKER); + rocketBroker1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketBroker1); + this.relationship(clusterRelationshipMetadataList, rocketMCluster1,rocketBroker1); + + // 两个 nameservier + ClusterMetadata rocketMQNameserver = new ClusterMetadata(); + rocketMQNameserver.setClusterType(ClusterType.STORAGE_ROCKETMQ_NAMESERVER); + rocketMQNameserver.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketMQNameserver); + this.relationship(clusterRelationshipMetadataList, rocketBroker,rocketMQNameserver); + this.relationship(clusterRelationshipMetadataList, rocketBroker1,rocketMQNameserver); + + + ClusterMetadata rocketMQNameserver1 = new ClusterMetadata(); + rocketMQNameserver1.setClusterType(ClusterType.STORAGE_ROCKETMQ_NAMESERVER); + rocketMQNameserver1.setId(clusterId.incrementAndGet()); + clusterMetadataList.add(rocketMQNameserver1); + this.relationship(clusterRelationshipMetadataList, rocketBroker,rocketMQNameserver1); + this.relationship(clusterRelationshipMetadataList, rocketBroker1,rocketMQNameserver1); + + + + + + + + try { + remotingManager.cacheCluster(clusterMetadataList); + remotingManager.cacheClusterRelationship(clusterRelationshipMetadataList); + remotingManager.loadingCompleted(); + + RemotingIntegrationService proxyObject = (RemotingIntegrationService)remotingManager.getProxyObject(); + CreateTopicRequest createTopicRequest = new CreateTopicRequest(); + createTopicRequest.setClusterId(9L); + proxyObject.createTopic(createTopicRequest); + + } catch (Exception e) { + throw new RuntimeException(e); + } + + + } + + + private void relationship(List clusterRelationshipMetadataList , ClusterMetadata clusterMetadata , ClusterMetadata relationship){ + clusterMetadata.setStatus(0); + relationship.setStatus(0); + + ClusterRelationshipMetadata clusterRelationshipMetadata = new ClusterRelationshipMetadata(); + clusterRelationshipMetadata.setClusterType(clusterMetadata.getClusterType()); + clusterRelationshipMetadata.setClusterId(clusterMetadata.getId()); + clusterRelationshipMetadata.setRelationshipId(relationship.getId()); + clusterRelationshipMetadata.setRelationshipType(relationship.getClusterType()); + clusterRelationshipMetadataList.add(clusterRelationshipMetadata); + } + + + +} diff --git a/eventmesh-dashboard-observe/pom.xml b/eventmesh-dashboard-observe/pom.xml index 07c2ac94..1b7db14e 100644 --- a/eventmesh-dashboard-observe/pom.xml +++ b/eventmesh-dashboard-observe/pom.xml @@ -26,7 +26,7 @@ 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.observe + org.apache.eventmesh.dashboard eventmesh-dashboard-observe diff --git a/eventmesh-dashboard-service/pom.xml b/eventmesh-dashboard-service/pom.xml index c5c2be22..c5a6f410 100644 --- a/eventmesh-dashboard-service/pom.xml +++ b/eventmesh-dashboard-service/pom.xml @@ -25,7 +25,6 @@ eventmesh-dashboard 0.0.1-SNAPSHOT - org.apache.eventmesh.dashboard.service eventmesh-dashboard-service 0.0.1-SNAPSHOT eventmesh-dashboard-service @@ -38,7 +37,7 @@ - org.apache.eventmesh.dashboard.common + org.apache.eventmesh.dashboard eventmesh-dashboard-common 0.0.1-SNAPSHOT diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/ConfigRemotingService.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/ConfigRemotingService.java index 7a7448e0..2b6abd41 100644 --- a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/ConfigRemotingService.java +++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/ConfigRemotingService.java @@ -17,19 +17,45 @@ package org.apache.eventmesh.dashboard.service.remoting; +import org.apache.eventmesh.dashboard.common.model.remoting.BaseGlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.GlobalResult; +import org.apache.eventmesh.dashboard.common.model.remoting.config.AddConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.config.AddConfigResponse; +import org.apache.eventmesh.dashboard.common.model.remoting.config.AddConfigResult; +import org.apache.eventmesh.dashboard.common.model.remoting.config.DeleteConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.config.DeleteConfigResult; import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigRequest; import org.apache.eventmesh.dashboard.common.model.remoting.config.GetConfigResult; +import org.apache.eventmesh.dashboard.common.model.remoting.config.UpdateConfigRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.config.UpdateConfigResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.CreateTopicResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.DeleteTopicRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.DeleteTopicResult; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.topic.GetTopicsResult; /** * A remoting service for config operations. Getting configs from different sources + * 1. runtime + * 2. RocketMQ + * 3. connector to db */ public interface ConfigRemotingService { - // get from meta service - public GetConfigResult getConfigsFromRegistry(GetConfigRequest getConfigRequest); - public GetConfigResult getConfigsFromRuntime(GetConfigRequest getConfigRequest); - public GetConfigResult getConfigsFromKafka(GetConfigRequest getConfigRequest); - public GetConfigResult getConfigsFromRocketMQ(GetConfigRequest getConfigRequest); + BaseGlobalResult addConfig(AddConfigRequest addConfigRequest); + + default BaseGlobalResult updateConfig(UpdateConfigRequest updateConfigRequest){ + return addConfig(updateConfigRequest); + } + + default BaseGlobalResult deleteConfig(DeleteConfigRequest deleteConfigRequest){ + return addConfig(deleteConfigRequest); + } + + GetTopicsResult getConfig(GetConfigRequest getConfigRequest); + + GetTopicsResult getAllTopics(GetTopicsRequest getTopicsRequest); } diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingIntegrationService.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingIntegrationService.java new file mode 100644 index 00000000..a07f2f97 --- /dev/null +++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingIntegrationService.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.service.remoting; + +public interface RemotingIntegrationService extends AclRemotingService, ClientRemotingService, ConfigRemotingService, ConnectorRemotingService, GroupRemotingService, MetaRemotingService, OffsetRemotingService, SubscriptionRemotingService, TopicRemotingService, UserRemotingService { +} diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingOperate.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingOperate.java new file mode 100644 index 00000000..24cf7f89 --- /dev/null +++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingOperate.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.service.remoting; + +public enum RemotingOperate { + + ADD, + + UPDATE, + + DELETE; +} diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingServiceType.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingServiceType.java new file mode 100644 index 00000000..2da47e62 --- /dev/null +++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RemotingServiceType.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.eventmesh.dashboard.service.remoting; + +public enum RemotingServiceType { + + +} diff --git a/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RuntimeRemotingService.java b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RuntimeRemotingService.java new file mode 100644 index 00000000..40a6b2f8 --- /dev/null +++ b/eventmesh-dashboard-service/src/main/java/org/apache/eventmesh/dashboard/service/remoting/RuntimeRemotingService.java @@ -0,0 +1,9 @@ +package org.apache.eventmesh.dashboard.service.remoting; + +import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeRequest; +import org.apache.eventmesh.dashboard.common.model.remoting.runtime.GetRuntimeResult; + +public interface RuntimeRemotingService { + + GetRuntimeResult getRuntimeMetadata(GetRuntimeRequest request); +} diff --git a/eventmesh-dashboard-view/src/routes/Routes.tsx b/eventmesh-dashboard-view/src/routes/Routes.tsx index c951105e..664080bf 100644 --- a/eventmesh-dashboard-view/src/routes/Routes.tsx +++ b/eventmesh-dashboard-view/src/routes/Routes.tsx @@ -30,10 +30,26 @@ import Users from './users/Users' import Logs from './logs/Logs' import Settings from './settings/Settings' +// 登录,修改修改密码 +// 首页 +// 个人路由 +// 注册中心路由 +// 集群路由 +// 管理路由 + +// 集群 +// 注册中心 +// 1. 注册信息( 增删改查 ) +// 2. 集群列表 +// 3. 空间名 +// k8s 运动 +// 连接器集群 -> k8s +// 设置 + const AppRoutes = () => { return useRoutes([ { - path: '/', + path: '/cluster/{clusterid}', element: , children: [ {