diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f16cdb5c..aac6fa1f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -38,10 +38,10 @@ jobs:
services:
mysql:
- image: mysql:8
+ image: mysql:8.0
env:
# The MySQL docker container requires these environment variables to be set, so we can create and migrate the test database.
- MYSQL_DATABASE: EVENTMESH_DASHBOARD
+ MYSQL_DATABASE: eventmesh_dashboard_test
MYSQL_ROOT_PASSWORD: password
ports:
# https://docs.github.com/en/actions/using-containerized-services/about-service-containers
diff --git a/eventmesh-dashboard-console/pom.xml b/eventmesh-dashboard-console/pom.xml
index ddf65952..ac0bc7cd 100644
--- a/eventmesh-dashboard-console/pom.xml
+++ b/eventmesh-dashboard-console/pom.xml
@@ -29,6 +29,12 @@
spring-boot-starter-test
test
+
+
+ org.springframework
+ spring-aspects
+ 5.1.2.RELEASE
+
@@ -70,19 +76,38 @@
runtime
+
+
- org.springframework
- spring-aspects
- 5.1.2.RELEASE
+ org.apache.eventmesh
+ eventmesh-sdk-java
+ 1.10.0-release
+
+
+ junit
+ junit
+
+
+ junit
+ junit-dep
+
+
+
+
+ io.lettuce
+ lettuce-core
+
+
+
+
+
junit
junit
4.13.2
test
-
-
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
index d4d21c51..0a451cf1 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connection/ConnectionEntity.java
@@ -25,13 +25,17 @@
import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
/**
* A Connection is a link from a source to a sink.
*/
@Data
+@NoArgsConstructor
+@AllArgsConstructor
public class ConnectionEntity extends BaseEntity {
private static final long serialVersionUID = 6565578252656944905L;
@@ -42,6 +46,12 @@ public class ConnectionEntity extends BaseEntity {
@Schema(name = "id", description = "primary key")
private Long id;
+ /**
+ * Runtime cluster id
+ */
+ @Schema(name = "clusterId", description = "runtime cluster id")
+ private Long clusterId;
+
/**
* The type of source. Possible values are "connector" or "client".
*/
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
index 1e7cb07d..1681ac29 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/connector/ConnectorEntity.java
@@ -37,6 +37,8 @@ public class ConnectorEntity extends BaseEntity {
@Schema(name = "id", description = "primary key")
private Long id;
+ private Long clusterId;
+
private String name;
private String className;
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java
new file mode 100644
index 00000000..e8578eb0
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/health/HealthCheckResultEntity.java
@@ -0,0 +1,52 @@
+/*
+ * 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.entity.health;
+
+import org.apache.eventmesh.dashboard.console.entity.base.BaseEntity;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(name = "HealthCheckResultEntity", description = "Health check result entity")
+public class HealthCheckResultEntity extends BaseEntity {
+
+ private static final long serialVersionUID = -7350585209577598040L;
+ @Schema(name = "id", description = "primary key")
+ private Long id;
+
+ private Long clusterId;
+
+ @Schema(description = "Type of Health Check;0:Unknown, 1:Cluster, 2:Runtime, 3:Topic, 4:Storage", defaultValue = "0", allowableValues = {"0",
+ "1", "2", "3", "4"})
+ private Integer type;
+
+ @Schema(description = "Instance id(database schema) of the health check object")
+ private Long typeId;
+
+ private String resultDesc;
+
+ @Schema(description = "status of a health check, 0: failed, 1: passed, 2: doing check, 3: out of time")
+ private Integer status;
+
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckStatus.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckStatus.java
new file mode 100644
index 00000000..fd5bc125
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckStatus.java
@@ -0,0 +1,33 @@
+/*
+ * 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.enums.health;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum HealthCheckStatus {
+ FAILED(0, "failed"),
+ PASSED(1, "passed"),
+ CHECKING(2, "checking"),
+ TIMEOUT(3, "timeout");
+
+ private final Integer number;
+ private final String name;
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.java
new file mode 100644
index 00000000..3ee990bb
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/enums/health/HealthCheckType.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.console.enums.health;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+public enum HealthCheckType {
+ UNKNOWN(0, "unknown"),
+
+ CLUSTER(1, "cluster"),
+
+ RUNTIME(2, "runtime"),
+
+ TOPIC(3, "topic"),
+
+ STORAGE(4, "storage");
+
+ @Getter
+ private final Integer number;
+ @Getter
+ private final String name;
+
+ public static Integer toNumber(String name) {
+ for (HealthCheckType healthCheckTypeEnum : HealthCheckType.values()) {
+ if (healthCheckTypeEnum.name.equals(name)) {
+ return healthCheckTypeEnum.number;
+ }
+ }
+ return UNKNOWN.number;
+ }
+
+ public static String toName(Integer number) {
+ for (HealthCheckType healthCheckTypeEnum : HealthCheckType.values()) {
+ if (healthCheckTypeEnum.number.equals(number)) {
+ return healthCheckTypeEnum.name;
+ }
+ }
+ return UNKNOWN.name;
+ }
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapper.java
index 671bd81b..3adab3b2 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapper.java
@@ -19,13 +19,14 @@
import org.apache.eventmesh.dashboard.console.entity.client.ClientEntity;
-import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
+import java.util.List;
+
/**
* Mybatis Mapper for the table of client.
*/
@@ -33,27 +34,22 @@
public interface ClientMapper {
@Select("SELECT * FROM `client` WHERE `id` = #{id}")
- ClientEntity selectById(Long id);
+ ClientEntity selectById(ClientEntity clientEntity);
@Select("SELECT * FROM `client` WHERE `cluster_id` = #{clusterId}")
- ClientEntity selectByClusterId(Long clusterId);
+ List selectByClusterId(ClientEntity clientEntity);
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert(
"INSERT INTO `client` (`cluster_id`, `name`, `platform`,"
- + " `language`, `pid`, `host`, `port`, `protocol`,"
- + " `status`, `config_ids`, `description`, `end_time`) "
+ + "`language`, `pid`, `host`, `port`, `protocol`,"
+ + "`status`, `config_ids`, `description`) "
+ "VALUES (#{clusterId}, #{name}, #{platform},"
- + " #{language}, #{pid}, #{host}, #{port}, #{protocol},"
- + " #{status}, #{configIds}, #{description}, #{endTime})")
+ + "#{language}, #{pid}, #{host}, #{port}, #{protocol},"
+ + "#{status}, #{configIds}, #{description})")
void insert(ClientEntity clientEntity);
- @Update("UPDATE `client` SET status = #{status}, end_time = NOW() WHERE id = #{id}")
+ @Update("UPDATE `client` SET status = 0, end_time = NOW() WHERE id = #{id}")
void deActive(ClientEntity clientEntity);
- @Update("UPDATE `client` SET status = #{status} WHERE id = #{id}")
- void updateStatus(ClientEntity clientEntity);
-
- @Delete("DELETE FROM `client` WHERE id = #{id}")
- void deleteById(Long id);
}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapper.java
index af0a2acb..fc6756a2 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapper.java
@@ -19,13 +19,14 @@
import org.apache.eventmesh.dashboard.console.entity.connection.ConnectionEntity;
-import org.apache.ibatis.annotations.Delete;
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;
+import java.sql.Timestamp;
import java.util.List;
/**
@@ -34,51 +35,57 @@
@Mapper
public interface ConnectionMapper {
- @Select("SELECT * FROM connection WHERE id = #{id}")
- ConnectionEntity selectById(ConnectionEntity connectionEntity);
-
@Select("SELECT * FROM connection")
List selectAll();
@Select("SELECT * FROM connection WHERE cluster_id = #{clusterId}")
List selectByClusterId(ConnectionEntity connectionEntity);
+ @Select("SELECT * FROM connection WHERE cluster_id = #{clusterId} AND source_id = #{sourceId} AND source_type = #{sourceType}")
+ public List selectByClusterIdSourceTypeAndSourceId(ConnectionEntity connectionEntity);
+
+ @Select("SELECT * FROM connection WHERE cluster_id = #{clusterId} AND sink_id = #{sinkId} AND sink_type = #{sinkType}")
+ public List selectByClusterIdSinkTypeAndSinkId(ConnectionEntity connectionEntity);
+
+ @Select("SELECT * FROM connection WHERE cluster_id = #{clusterId} AND source_id = #{sourceId} AND source_type = #{sourceType} "
+ + "AND create_time > #{startTime} AND create_time < #{endTime}")
+ public List selectByClusterIdSourceTypeAndSourceIdAndCreateTimeRange(ConnectionEntity connectionEntity,
+ @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
+
+ @Select("SELECT * FROM connection WHERE cluster_id = #{clusterId} AND sink_id = #{sinkId} AND sink_type = #{sinkType} "
+ + "AND create_time > #{startTime} AND create_time < #{endTime}")
+ public List selectByClusterIdSinkTypeAndSinkIdAndCreateTimeRange(ConnectionEntity connectionEntity,
+ @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
+
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
- @Insert("INSERT INTO connection (cluster_id, source_type, source_id,"
- + " sink_type, sink_id, runtime_id, status, topic, group_id, description)"
+ @Insert("INSERT INTO connection (cluster_id, source_type, source_id," + " sink_type, sink_id, runtime_id, status, topic, group_id, description)"
+ " VALUES ( #{clusterId}, #{sourceType}, #{sourceId}, "
+ " #{sinkType}, #{sinkId}, #{runtimeId}, #{status}, #{topic}, #{groupId}, #{description})")
void insert(ConnectionEntity connectionEntity);
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
- @Insert("")
+ @Insert({
+ ""})
void batchInsert(List connectionEntityList);
- @Update("UPDATE connection SET status = #{status}, end_time = NOW() WHERE id = #{id}")
+ @Update("UPDATE connection SET status = 1, end_time = NOW() WHERE id = #{id}")
void endConnectionById(ConnectionEntity connectionEntity);
- @Delete("DELETE FROM connection WHERE cluster_id = #{clusterId}")
- void deleteAllByClusterId(ConnectionEntity connectionEntity);
-
- @Delete("DELETE FROM connection WHERE id = #{id}")
- void deleteById(ConnectionEntity connectionEntity);
-
- @Delete("")
- void batchDelete(List connectionEntityList);
+ //batch end
+ @Update({
+ ""})
+ void batchEndConnectionById(List connectionEntityList);
}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapper.java
index 07913275..2f5101a3 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapper.java
@@ -19,7 +19,6 @@
import org.apache.eventmesh.dashboard.console.entity.connector.ConnectorEntity;
-import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
@@ -38,22 +37,22 @@ public interface ConnectorMapper {
ConnectorEntity selectById(ConnectorEntity connectorEntity);
@Select("SELECT * FROM connector WHERE cluster_id = #{clusterId}")
- ConnectorEntity selectByClusterId(ConnectorEntity connectorEntity);
+ List selectByClusterId(ConnectorEntity connectorEntity);
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
- @Insert("INSERT INTO connector (cluster_id, name, class_name, type, status, pod_state, config_ids) "
- + "VALUES (#{connectClusterId}, #{name}, #{className}, #{type}, #{status}, #{podState}, #{configIds})")
+ @Insert("INSERT INTO connector (cluster_id,name, class_name, type, status, pod_state, config_ids) "
+ + "VALUES (#{clusterId}, #{name}, #{className}, #{type}, #{status}, #{podState}, #{configIds})")
void insert(ConnectorEntity connectorEntity);
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
- @Insert("")
+ @Insert({
+ ""})
void batchInsert(List connectorEntityList);
@Update("UPDATE connector SET status = #{status} WHERE id = #{id}")
@@ -65,18 +64,17 @@ public interface ConnectorMapper {
@Update("UPDATE connector SET config_ids = #{configIds} WHERE id = #{id}")
void updateConfigIds(ConnectorEntity connectorEntity);
- @Delete("DELETE FROM connector WHERE id = #{id}")
- void deleteById(ConnectorEntity connectorEntity);
+ @Update("UPDATE connector SET status = 0 WHERE cluster_id = #{clusterId}")
+ void deActiveById(ConnectorEntity connectorEntity);
- @Delete("DELETE FROM connector WHERE cluster_id = #{clusterId}")
- void deleteByClusterId(ConnectorEntity connectorEntity);
-
- @Delete("")
- void batchDelete(List connectorEntities);
+ @Update({
+ ""
+ })
+ void batchDeActive(List connectorEntities);
}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/group/OprGroupMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/group/OprGroupMapper.java
index f1a91ede..78128619 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/group/OprGroupMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/group/OprGroupMapper.java
@@ -55,19 +55,19 @@ public interface OprGroupMapper {
@Select("select * from `group` where id=#{id} and is_delete=0")
GroupEntity selectGroupById(GroupEntity groupEntity);
- @Select("")
+ @Select({
+ ""})
List selectGroup(GroupEntity groupEntity);
-
}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/groupmember/OprGroupMemberMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/groupmember/OprGroupMemberMapper.java
index 3179effc..aac0a592 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/groupmember/OprGroupMemberMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/groupmember/OprGroupMemberMapper.java
@@ -59,21 +59,22 @@ public interface OprGroupMemberMapper {
@Select("select * from group_member where id=#{id} and is_delete=0")
GroupMemberEntity selectGroupMemberById(GroupMemberEntity groupMemberEntity);
- @Select("")
+ @Select({
+ ""})
List selectMember(GroupMemberEntity groupMemberEntity);
@Update("update group_member set state=#{state} where topic_name=#{topicName}")
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapper.java
new file mode 100644
index 00000000..d5d5aab5
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapper.java
@@ -0,0 +1,91 @@
+/*
+ * 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.mapper.health;
+
+import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
+
+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;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * Mapper for health check result
+ */
+@Mapper
+public interface HealthCheckResultMapper {
+
+ @Select("SELECT * FROM health_check_result WHERE id = #{id}")
+ HealthCheckResultEntity selectById(HealthCheckResultEntity healthCheckResultEntity);
+
+ @Select("SELECT * FROM health_check_result WHERE cluster_id = #{clusterId} AND type = #{type} AND type_id = #{typeId}")
+ List selectByClusterIdAndTypeAndTypeId(HealthCheckResultEntity healthCheckResultEntity);
+
+ @Select("SELECT * FROM health_check_result WHERE cluster_id = #{clusterId} AND type = #{type}")
+ List selectByClusterIdAndType(HealthCheckResultEntity healthCheckResultEntity);
+
+ @Select("SELECT * FROM health_check_result WHERE cluster_id = #{clusterId} AND create_time > #{startTime} AND create_time < #{endTime}")
+ List selectByClusterIdAndCreateTimeRange(@Param("clusterId") Long clusterId,
+ @Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime);
+
+ @Options(useGeneratedKeys = true, keyProperty = "id")
+ @Insert("INSERT INTO health_check_result(type,type_id, cluster_id, status,result_desc)"
+ + " VALUES( #{type}, #{typeId}, #{clusterId}, #{status}, #{resultDesc})")
+ void insert(HealthCheckResultEntity healthCheckResultEntity);
+
+ @Insert({
+ ""
+ })
+ void batchInsert(List healthCheckResultEntityList);
+
+ @Update("UPDATE health_check_result SET status = #{status}, result_desc = #{resultDesc} WHERE id = #{id}")
+ void update(HealthCheckResultEntity healthCheckResultEntity);
+
+ @Update({
+ ""})
+ void batchUpdate(List healthCheckResultEntityList);
+
+ @Select({
+ ""
+ })
+ List getIdsNeedToBeUpdateByClusterIdAndTypeAndTypeId(List healthCheckResultEntityList);
+
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/log/OprLogMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/log/OprLogMapper.java
index d6c96f72..8f2dbf4e 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/log/OprLogMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/log/OprLogMapper.java
@@ -33,21 +33,22 @@
@Mapper
public interface OprLogMapper {
- @Select("")
+ @Select({
+ ""})
List getLogList(LogEntity logEntity);
@Insert("insert into operation_log ( cluster_id, operation_type,target_Type, description,operation_user,result_content)"
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
index f22bf74a..ab57fc11 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapper.java
@@ -34,7 +34,7 @@ public interface MetaMapper {
@Select("SELECT * FROM meta WHERE id = #{id}")
MetaEntity selectById(MetaEntity metaEntity);
- @Select("SELECT * FROM meta WHERE cluster_id = #{clusterId}")
+ @Select("SELECT * FROM meta WHERE cluster_id = #{clusterId} LIMIT 1")
MetaEntity selectByClusterId(MetaEntity metaEntity);
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/topic/TopicMapper.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/topic/TopicMapper.java
index 8a396be6..42d68d0d 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/topic/TopicMapper.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/topic/TopicMapper.java
@@ -35,18 +35,19 @@
@Mapper
public interface TopicMapper {
- @Select("")
+ @Select({
+ ""})
List getTopicList(TopicEntity topicEntity);
@Insert("INSERT INTO topic (cluster_id, topic_name, runtime_id, storage_id, retention_ms, type, description) "
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImpl.java
index 780ee990..cf22a831 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImpl.java
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImpl.java
@@ -61,7 +61,7 @@ public void replaceAllConnections(List connectionEntityList) {
List existingConnections = connectionMapper.selectByClusterId(connectionEntity);
// Collect connections that are not in the new list
- List connectionsToDelete = existingConnections.stream()
+ List connectionsToInactive = existingConnections.stream()
.filter(existingConnection -> !newConnections.contains(existingConnection))
.collect(Collectors.toList());
@@ -71,8 +71,8 @@ public void replaceAllConnections(List connectionEntityList) {
.collect(Collectors.toList());
// Delete connections in batch
- if (!connectionsToDelete.isEmpty()) {
- connectionMapper.batchDelete(connectionsToDelete);
+ if (!connectionsToInactive.isEmpty()) {
+ connectionMapper.batchEndConnectionById(connectionsToInactive);
}
// Insert new connections in batch
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataService.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataService.java
new file mode 100644
index 00000000..19e3715e
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataService.java
@@ -0,0 +1,40 @@
+/*
+ * 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.service.health;
+
+import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * Service providing data of HealthCheckResult.
+ */
+public interface HealthDataService {
+ HealthCheckResultEntity insertHealthCheckResult(HealthCheckResultEntity healthCheckResultEntity);
+
+ void batchInsertHealthCheckResult(List healthCheckResultEntityList);
+
+ List queryHealthCheckResultByClusterIdAndTypeAndTypeId(HealthCheckResultEntity entity);
+
+ void batchUpdateCheckResult(List healthCheckResultEntityList);
+
+ void batchUpdateCheckResultByClusterIdAndTypeAndTypeId(List healthCheckResultEntityList);
+
+ List queryHealthCheckResultByClusterIdAndTimeRange(Long clusterId, Timestamp startTime, Timestamp endTime);
+}
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataServiceMemoryStorage.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataServiceMemoryStorage.java
new file mode 100644
index 00000000..85a2667f
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/HealthDataServiceMemoryStorage.java
@@ -0,0 +1,86 @@
+/*
+ * 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.service.health;
+
+import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class HealthDataServiceMemoryStorage {
+
+ private static final List cache = new ArrayList<>();
+ private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+
+
+ public HealthCheckResultEntity insertHealthCheckResult(HealthCheckResultEntity healthCheckResultEntity) {
+ lock.writeLock().lock();
+ try {
+ healthCheckResultEntity.setCreateTime(new Timestamp(System.currentTimeMillis()));
+ cache.add(healthCheckResultEntity);
+ return healthCheckResultEntity;
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+
+ public void batchInsertHealthCheckResult(List healthCheckResultEntityList) {
+ lock.writeLock().lock();
+ try {
+ for (HealthCheckResultEntity entity : healthCheckResultEntityList) {
+ entity.setCreateTime(new Timestamp(System.currentTimeMillis()));
+ cache.add(entity);
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+
+ public List queryHealthCheckResultByClusterIdAndTimeRange(Long clusterId, Timestamp startTime, Timestamp endTime) {
+ lock.readLock().lock();
+ try {
+ List result = new ArrayList<>();
+ for (HealthCheckResultEntity entity : cache) {
+ if (entity.getClusterId().equals(clusterId) && entity.getCreateTime().after(startTime) && entity.getCreateTime().before(endTime)) {
+ result.add(entity);
+ }
+ }
+ return result;
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ public List popAll() {
+ lock.writeLock().lock();
+ try {
+ List result = new ArrayList<>(cache);
+ cache.clear();
+ return result;
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/impl/HealthDataServiceDatabaseImpl.java b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/impl/HealthDataServiceDatabaseImpl.java
new file mode 100644
index 00000000..f1593cc9
--- /dev/null
+++ b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/health/impl/HealthDataServiceDatabaseImpl.java
@@ -0,0 +1,77 @@
+/*
+ * 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.service.health.impl;
+
+import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
+import org.apache.eventmesh.dashboard.console.mapper.health.HealthCheckResultMapper;
+import org.apache.eventmesh.dashboard.console.service.health.HealthDataService;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class HealthDataServiceDatabaseImpl implements HealthDataService {
+
+ @Autowired
+ private HealthCheckResultMapper healthCheckResultMapper;
+
+ @Override
+ public HealthCheckResultEntity insertHealthCheckResult(HealthCheckResultEntity healthCheckResultEntity) {
+ healthCheckResultMapper.insert(healthCheckResultEntity);
+ return healthCheckResultEntity;
+ }
+
+ @Override
+ public void batchInsertHealthCheckResult(List healthCheckResultEntityList) {
+ healthCheckResultMapper.batchInsert(healthCheckResultEntityList);
+ }
+
+ @Override
+ public List queryHealthCheckResultByClusterIdAndTypeAndTypeId(HealthCheckResultEntity entity) {
+ return healthCheckResultMapper.selectByClusterIdAndTypeAndTypeId(entity);
+ }
+
+ @Override
+ public void batchUpdateCheckResult(List healthCheckResultEntityList) {
+ healthCheckResultMapper.batchUpdate(healthCheckResultEntityList);
+ }
+
+ @Override
+ public void batchUpdateCheckResultByClusterIdAndTypeAndTypeId(List healthCheckResultEntityList) {
+ List idsNeedToBeUpdate = healthCheckResultMapper.getIdsNeedToBeUpdateByClusterIdAndTypeAndTypeId(
+ healthCheckResultEntityList);
+ idsNeedToBeUpdate.forEach(entity -> {
+ healthCheckResultEntityList.forEach(updateEntity -> {
+ if (entity.getClusterId().equals(updateEntity.getClusterId()) && entity.getType().equals(updateEntity.getType())
+ && entity.getTypeId().equals(updateEntity.getTypeId())) {
+ updateEntity.setId(entity.getId());
+ }
+ });
+ });
+ healthCheckResultMapper.batchUpdate(healthCheckResultEntityList);
+ }
+
+
+ @Override
+ public List queryHealthCheckResultByClusterIdAndTimeRange(Long clusterId, Timestamp startTime, Timestamp endTime) {
+ return healthCheckResultMapper.selectByClusterIdAndCreateTimeRange(clusterId, startTime, endTime);
+ }
+}
diff --git a/eventmesh-dashboard-console/src/main/resources/application-dev.yml b/eventmesh-dashboard-console/src/main/resources/application-dev.yml
index 0ff18a15..d411315a 100644
--- a/eventmesh-dashboard-console/src/main/resources/application-dev.yml
+++ b/eventmesh-dashboard-console/src/main/resources/application-dev.yml
@@ -30,9 +30,9 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/eventmesh-dashboard?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
- username: root
- password: 123456
+ url: jdbc:mysql://localhost:3306/eventmesh_dashboard?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
+ username: ${DB_USERNAME}
+ password: ${DB_PASSWORD}
initial-size: 1
max-active: 50
diff --git a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
index 96cf1e3f..96d4a849 100644
--- a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
+++ b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
@@ -14,13 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+DROP TABLE IF EXISTS `group`;
CREATE TABLE `group`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`cluster_id` bigint NOT NULL DEFAULT '-1' COMMENT '集群id',
`name` varchar(192) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group名称',
`member_count` int unsigned NOT NULL DEFAULT '0' COMMENT '成员数',
- `members` text COMMENT 'group的member列表',
+ `members` varchar(1024) COMMENT 'group的member列表',
`type` tinyint NOT NULL COMMENT 'group类型 0:consumer 1:producer',
`state` varchar(64) NOT NULL DEFAULT '' COMMENT '状态',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -31,10 +32,10 @@ CREATE TABLE `group`
KEY `cluster_id` (`cluster_id`, `name`)
) ENGINE = InnoDB
AUTO_INCREMENT = 322
- DEFAULT CHARSET = utf8mb3 COMMENT ='Group信息表'
-
+ DEFAULT CHARSET = utf8mb3 COMMENT ='Group信息表';
+DROP TABLE IF EXISTS `group_member`;
CREATE TABLE `group_member`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
@@ -51,21 +52,21 @@ CREATE TABLE `group_member`
KEY `cluster_id` (`cluster_id`, `topic_name`, `group_name`)
) ENGINE = InnoDB
AUTO_INCREMENT = 257
- DEFAULT CHARSET = utf8mb3 COMMENT ='GroupMember信息表'
-
+ DEFAULT CHARSET = utf8mb3 COMMENT ='GroupMember信息表';
+DROP TABLE IF EXISTS `operation_log`;
CREATE TABLE `operation_log`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`cluster_id` bigint NOT NULL DEFAULT '-1' COMMENT '物理集群ID',
`operation_type` varchar(192) NOT NULL DEFAULT '' COMMENT '操作类型,如:启动,停止,重启,添加,删除,修改',
`status` int NOT NULL DEFAULT '0' COMMENT '操作状态 0:未知,1:执行中,2:成功,3:失败',
- `content` text COMMENT '备注信息',
+ `content` varchar(1024) COMMENT '备注信息',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`end_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间',
`operation_user` varchar(192) DEFAULT NULL,
- `result` text,
+ `result` varchar(1024),
`target_type` varchar(192) NOT NULL,
`is_delete` int NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
@@ -73,10 +74,10 @@ CREATE TABLE `operation_log`
KEY `idx_status` (`status`)
) ENGINE = InnoDB
AUTO_INCREMENT = 68
- DEFAULT CHARSET = utf8mb3 COMMENT ='操作记录信息表'
-
+ DEFAULT CHARSET = utf8mb3 COMMENT ='操作记录信息表';
+DROP TABLE IF EXISTS `topic`;
CREATE TABLE `topic`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
@@ -86,7 +87,7 @@ CREATE TABLE `topic`
`storage_id` varchar(2048) NOT NULL DEFAULT '' COMMENT 'StorageId',
`retention_ms` bigint NOT NULL DEFAULT '-2' COMMENT '保存时间,-2:未知,-1:无限制,>=0对应时间,单位ms',
`type` tinyint NOT NULL DEFAULT '0' COMMENT 'Topic类型,默认0,0:普通,1:EventMesh内部',
- `description` text COMMENT '备注信息',
+ `description` varchar(1024) DEFAULT '' COMMENT '备注信息',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(尽量与Topic实际创建时间一致)',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间(尽量与Topic实际创建时间一致)',
`is_delete` int NOT NULL DEFAULT '0',
@@ -95,8 +96,7 @@ CREATE TABLE `topic`
KEY `cluster_id` (`cluster_id`, `topic_name`)
) ENGINE = InnoDB
AUTO_INCREMENT = 562
- DEFAULT CHARSET = utf8mb3 COMMENT ='Topic信息表'
-
+ DEFAULT CHARSET = utf8mb3 COMMENT ='Topic信息表';
DROP TABLE IF EXISTS `client`;
@@ -112,8 +112,8 @@ CREATE TABLE `client`
`port` int(16) NOT NULL DEFAULT '-1' COMMENT '客户端端口',
`protocol` varchar(192) NOT NULL DEFAULT '' COMMENT '协议类型',
`status` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '状态: 1启用,0未启用',
- `config_ids` text NOT NULL DEFAULT '' COMMENT 'csv config id list, like:1,3,7',
- `description` text NOT NULL DEFAULT '' COMMENT '客户端描述',
+ `config_ids` varchar(1024) NOT NULL DEFAULT '' COMMENT 'csv config id list, like:1,3,7',
+ `description` varchar(1024) NOT NULL DEFAULT '' COMMENT '客户端描述',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
@@ -121,7 +121,7 @@ CREATE TABLE `client`
PRIMARY KEY (`id`),
INDEX `idx_cluster_id` (`cluster_id`)
) ENGINE = InnoDB
- DEFAULT CHARSET = utf8 COMMENT ='客户端信息表';
+ DEFAULT CHARSET = utf8 COMMENT ='client is an SDK application that can produce or consume events.';
@@ -135,7 +135,7 @@ CREATE TABLE `connector`
`type` varchar(32) NOT NULL DEFAULT '' COMMENT 'Connector类型',
`status` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '状态: 1启用,0未启用',
`pod_state` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'k8s pod状态。0: pending;1: running;2: success;3: failed;4: unknown',
- `config_ids` text NOT NULL DEFAULT '' COMMENT 'csv config id list, like:1,3,7',
+ `config_ids` varchar(1024) NOT NULL DEFAULT '' COMMENT 'csv config id list, like:1,3,7',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
@@ -156,7 +156,7 @@ CREATE TABLE `connection`
`status` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '状态: 1启用,0未启用',
`topic` varchar(192) NOT NULL DEFAULT '' COMMENT 'topic name',
`group_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'GroupID',
- `description` text NOT NULL DEFAULT '' COMMENT '客户端描述',
+ `description` varchar(1024) NOT NULL DEFAULT '' COMMENT '客户端描述',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
@@ -168,22 +168,22 @@ CREATE TABLE `connection`
INDEX `idx_source_id` (`source_id`),
INDEX `idx_sink_id` (`sink_id`)
) ENGINE = InnoDB
- DEFAULT CHARSET = utf8 COMMENT ='client和connector连接关系,这里的client包括runtime';
+ DEFAULT CHARSET = utf8 COMMENT ='connection from event source to event sink. event source can be a source connector or a producer client.';
DROP TABLE IF EXISTS `health_check_result`;
CREATE TABLE `health_check_result`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
- `dimension` int(11) NOT NULL DEFAULT '0' COMMENT '检查维度(0:未知,1:Cluster,2:Runtime,3:Topic,4:Group)',
- `config_name` varchar(192) NOT NULL DEFAULT '' COMMENT '配置名',
+ `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '检查维度(0:未知, 1:Cluster, 2:Runtime, 3:Topic, 4:Storage)',
+ `type_id` bigint(20) unsigned NOT NULL COMMENT '对应检查维度的实例id',
`cluster_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '集群ID',
- `res_name` varchar(192) NOT NULL DEFAULT '' COMMENT '资源名称',
- `passed` tinyint(4) NOT NULL DEFAULT '0' COMMENT '检查通过(0:未通过,1:通过)',
+ `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '检查状态(0:未通过,1:通过,2:正在检查,3:超时)',
+ `result_desc` varchar(1024) NOT NULL DEFAULT '' COMMENT '检查结果描述',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_cluster_id` (`cluster_id`),
- UNIQUE KEY `uniq_dimension_config_cluster_res` (`dimension`, `config_name`, `cluster_id`, `res_name`)
+ INDEX `idx_type` (`type`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='健康检查结果';
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapperTest.java
new file mode 100644
index 00000000..8388de66
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/client/ClientMapperTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.mapper.client;
+
+import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
+import org.apache.eventmesh.dashboard.console.entity.client.ClientEntity;
+import org.apache.eventmesh.dashboard.console.enums.StatusEnum;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = EventMeshDashboardApplication.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:client-test.sql")
+class ClientMapperTest {
+
+ @Autowired
+ private ClientMapper clientMapper;
+
+ @Test
+ public void testSelectById() {
+ ClientEntity clientEntity = new ClientEntity();
+ clientEntity.setId(1L);
+ ClientEntity result = clientMapper.selectById(clientEntity);
+ Assertions.assertEquals("java", result.getLanguage());
+ Assertions.assertEquals(3, result.getClusterId());
+ }
+
+ @Test
+ public void testSelectByClusterId() {
+ ClientEntity clientEntity = new ClientEntity();
+ clientEntity.setClusterId(3L);
+ List results = clientMapper.selectByClusterId(clientEntity);
+ Assertions.assertEquals(3, results.size());
+ Assertions.assertEquals("java", results.get(0).getLanguage());
+ Assertions.assertEquals("go", results.get(2).getLanguage());
+ }
+
+ @Test
+ public void testInsert() {
+ ClientEntity clientEntity = new ClientEntity();
+ clientEntity.setHost("127.0.0.1");
+ clientEntity.setClusterId(4L);
+ clientEntity.setName("clientName");
+ clientEntity.setDescription("");
+ clientEntity.setPid(1L);
+ clientEntity.setPort(8080);
+ clientEntity.setStatusEntity(StatusEnum.ACTIVE);
+ clientEntity.setConfigIds("");
+ clientEntity.setLanguage("rust");
+ clientEntity.setPlatform("");
+ clientEntity.setProtocol("http");
+ clientMapper.insert(clientEntity);
+
+ ClientEntity result = clientMapper.selectById(clientEntity);
+ Assertions.assertEquals("127.0.0.1", result.getHost());
+
+ Assertions.assertEquals(2, clientMapper.selectByClusterId(clientEntity).size());
+ }
+
+ @Test
+ public void testDeactivate() {
+ ClientEntity clientEntity = new ClientEntity();
+ clientEntity.setId(1L);
+ clientMapper.deActive(clientEntity);
+ ClientEntity result = clientMapper.selectById(clientEntity);
+ Assertions.assertEquals(0, result.getStatus());
+ Assertions.assertNotEquals(result.getCreateTime(), result.getEndTime());
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java
new file mode 100644
index 00000000..7087e007
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connection/ConnectionMapperTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.mapper.connection;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
+import org.apache.eventmesh.dashboard.console.entity.connection.ConnectionEntity;
+
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = EventMeshDashboardApplication.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:connection-test.sql")
+class ConnectionMapperTest {
+
+ @Autowired
+ private ConnectionMapper connectionMapper;
+
+ @Test
+ public void testSelectAll() {
+ assertEquals(6, connectionMapper.selectAll().size());
+ }
+
+ @Test
+ public void testSelectByClusterId() {
+ ConnectionEntity connectionEntity = new ConnectionEntity();
+ connectionEntity.setClusterId(1L);
+ assertEquals(3, connectionMapper.selectByClusterId(connectionEntity).size());
+ }
+
+ @Test
+ public void testSelectByClusterIdSourceTypeAndSourceId() {
+ ConnectionEntity connectionEntity = new ConnectionEntity();
+ connectionEntity.setClusterId(1L);
+ connectionEntity.setSourceId(1L);
+ connectionEntity.setSourceType("connector");
+ List results = connectionMapper.selectByClusterIdSourceTypeAndSourceId(connectionEntity);
+ assertEquals(1, results.size());
+ assertEquals("connector", results.get(0).getSinkType());
+ assertEquals(1, results.get(0).getSinkId());
+ }
+
+ @Test
+ public void testSelectByClusterIdSinkTypeAndSinkId() {
+ ConnectionEntity connectionEntity = new ConnectionEntity();
+ connectionEntity.setClusterId(1L);
+ connectionEntity.setSinkId(2L);
+ connectionEntity.setSinkType("connector");
+ List results = connectionMapper.selectByClusterIdSinkTypeAndSinkId(connectionEntity);
+ assertEquals(1, results.size());
+ assertEquals("connector", results.get(0).getSourceType());
+ assertEquals(2, results.get(0).getSourceId());
+ }
+
+ @Test
+ public void testInsert() {
+ ConnectionEntity connectionEntity = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+ connectionMapper.insert(connectionEntity);
+ assertEquals(7, connectionMapper.selectAll().size());
+ }
+
+ @Test
+ public void testBatchInsert() {
+ ConnectionEntity connectionEntity1 = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+ ConnectionEntity connectionEntity2 = new ConnectionEntity(1L, 1L, "connector", 1L, "connector", 2L, 1L, 0, "topic", 3L, null, "description");
+ connectionMapper.batchInsert(Arrays.asList(connectionEntity1, connectionEntity2));
+ assertEquals(8, connectionMapper.selectAll().size());
+ }
+
+ @Test
+ public void testEndConnectionById() {
+ ConnectionEntity connectionEntity = new ConnectionEntity();
+ connectionEntity.setId(1L);
+ connectionMapper.endConnectionById(connectionEntity);
+ List results = connectionMapper.selectAll();
+ ConnectionEntity result = results.get(0);
+ assertEquals(1, result.getStatus());
+ assertNotNull(result.getEndTime());
+ }
+
+ @Test
+ public void testBatchEndConnection() {
+ ConnectionEntity connectionEntity1 = new ConnectionEntity();
+ connectionEntity1.setId(1L);
+ ConnectionEntity connectionEntity2 = new ConnectionEntity();
+ connectionEntity2.setId(2L);
+ connectionMapper.batchEndConnectionById(Arrays.asList(connectionEntity1, connectionEntity2));
+
+ List all = connectionMapper.selectAll();
+ assertEquals(1, all.get(0).getStatus());
+ assertEquals(1, all.get(1).getStatus());
+ assertNotEquals(all.get(0).getCreateTime(), all.get(0).getEndTime());
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java
new file mode 100644
index 00000000..0bb360b1
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/connector/ConnectorMapperTest.java
@@ -0,0 +1,128 @@
+/*
+ * 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.mapper.connector;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
+import org.apache.eventmesh.dashboard.console.entity.connector.ConnectorEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = EventMeshDashboardApplication.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:connector-test.sql")
+class ConnectorMapperTest {
+
+ @Autowired
+ private ConnectorMapper connectorMapper;
+
+ @Test
+ public void testSelectById() {
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setId(1L);
+
+ connectorEntity = connectorMapper.selectById(connectorEntity);
+
+ assertNotNull(connectorEntity);
+ assertEquals(1L, connectorEntity.getClusterId());
+ assertEquals("the", connectorEntity.getClassName());
+ }
+
+ @Test
+ public void testSelectByClusterId() {
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setClusterId(1L);
+
+ List results = connectorMapper.selectByClusterId(connectorEntity);
+
+ assertEquals(3, results.size());
+ assertEquals("quick", results.get(1).getClassName());
+ }
+
+ @Test
+ public void testInsert() {
+ ConnectorEntity connectorEntity = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+ connectorMapper.insert(connectorEntity);
+
+ assertNotNull(connectorEntity);
+ assertEquals(6, connectorEntity.getId());
+ }
+
+ @Test
+ public void testBatchInsert() {
+ ConnectorEntity connectorEntity1 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+ ConnectorEntity connectorEntity2 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+ ConnectorEntity connectorEntity3 = new ConnectorEntity(1L, 1L, "test", "test", "test", 0, 2, "test");
+ List connectorEntityList = new ArrayList<>();
+ connectorEntityList.add(connectorEntity1);
+ connectorEntityList.add(connectorEntity2);
+ connectorEntityList.add(connectorEntity3);
+
+ connectorMapper.batchInsert(connectorEntityList);
+
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setClusterId(1L);
+ List results = connectorMapper.selectByClusterId(connectorEntity);
+ assertEquals(6, results.size());
+ }
+
+ @Test
+ public void testUpdateK8sStatus() {
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setId(1L);
+ connectorEntity.setPodState(3);
+ connectorMapper.updatePodState(connectorEntity);
+
+ connectorEntity = connectorMapper.selectById(connectorEntity);
+ assertEquals(3, connectorEntity.getPodState());
+ }
+
+ @Test
+ public void testUpdateConfigIds() {
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setId(1L);
+ connectorEntity.setConfigIds("1,3,4,5,6,7");
+ connectorMapper.updateConfigIds(connectorEntity);
+
+ connectorEntity = connectorMapper.selectById(connectorEntity);
+ assertEquals("1,3,4,5,6,7", connectorEntity.getConfigIds());
+ }
+
+ @Test
+ public void testDeActiveById() {
+ ConnectorEntity connectorEntity = new ConnectorEntity();
+ connectorEntity.setId(1L);
+ connectorMapper.deActiveById(connectorEntity);
+
+ connectorEntity = connectorMapper.selectById(connectorEntity);
+ assertEquals(1, connectorEntity.getStatus());
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java
new file mode 100644
index 00000000..d91cd229
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/health/HealthCheckResultMapperTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.mapper.health;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
+import org.apache.eventmesh.dashboard.console.entity.health.HealthCheckResultEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = EventMeshDashboardApplication.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:health-test.sql")
+class HealthCheckResultMapperTest {
+
+ @Autowired
+ private HealthCheckResultMapper healthCheckResultMapper;
+
+ @Test
+ public void testSelectById() {
+ HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity();
+ healthCheckResultEntity.setId(1L);
+ healthCheckResultEntity = healthCheckResultMapper.selectById(healthCheckResultEntity);
+ assertEquals(1, healthCheckResultEntity.getId());
+ assertEquals(0, healthCheckResultEntity.getStatus());
+ }
+
+ @Test
+ public void testSelectByClusterIdAndTypeAndTypeId() {
+ HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "", 1);
+ healthCheckResultEntity = healthCheckResultMapper.selectByClusterIdAndTypeAndTypeId(healthCheckResultEntity).get(0);
+ assertEquals(1, healthCheckResultEntity.getId());
+ assertEquals(0, healthCheckResultEntity.getStatus());
+ }
+
+ @Test
+ public void testSelectByClusterIdAndType() {
+ HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "", 1);
+ List results = healthCheckResultMapper.selectByClusterIdAndType(healthCheckResultEntity);
+ assertEquals(2, results.size());
+ }
+
+ @Test
+ public void testSelectByClusterIdAndTimeRange() throws ParseException {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+ Date startDate = dateFormat.parse("2024-02-02 10:56:50");
+ Timestamp startTimestamp = new Timestamp(startDate.getTime());
+ Date endDate = dateFormat.parse("2024-02-03 10:56:52");
+ Timestamp endTimestamp = new Timestamp(endDate.getTime());
+ List results = healthCheckResultMapper.selectByClusterIdAndCreateTimeRange(1L, startTimestamp, endTimestamp);
+ assertEquals(4, results.size());
+ }
+
+ @Test
+ public void testInsert() {
+ HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 5L, 1, 5L, "", 1);
+ healthCheckResultMapper.insert(healthCheckResultEntity);
+ healthCheckResultEntity = healthCheckResultMapper.selectById(healthCheckResultEntity);
+ assertEquals(7, healthCheckResultEntity.getId());
+ }
+
+ @Test
+ public void testBatchInsert() {
+ HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1L, 1, 5L, "", 1);
+ HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(1L, 1L, 1, 6L, "", 1);
+ healthCheckResultMapper.batchInsert(Arrays.asList(healthCheckResultEntity1, healthCheckResultEntity2));
+ List results = healthCheckResultMapper.selectByClusterIdAndType(healthCheckResultEntity1);
+ assertEquals(4, results.size());
+ }
+
+ @Test
+ public void testUpdate() {
+ HealthCheckResultEntity healthCheckResultEntity = new HealthCheckResultEntity(1L, 1L, 1, 1L, "reason", 0);
+ healthCheckResultMapper.update(healthCheckResultEntity);
+ healthCheckResultEntity = healthCheckResultMapper.selectByClusterIdAndTypeAndTypeId(healthCheckResultEntity).get(0);
+ assertEquals(0, healthCheckResultEntity.getStatus());
+ }
+
+ @Test
+ public void testBatchUpdate() {
+ HealthCheckResultEntity healthCheckResultEntity1 = new HealthCheckResultEntity(1L, 1L, 1, 1L, "reason", 0);
+ HealthCheckResultEntity healthCheckResultEntity2 = new HealthCheckResultEntity(2L, 1L, 1, 1L, "reason", 0);
+ healthCheckResultMapper.batchUpdate(Arrays.asList(healthCheckResultEntity1, healthCheckResultEntity2));
+ healthCheckResultEntity1 = healthCheckResultMapper.selectById(healthCheckResultEntity1);
+ healthCheckResultEntity2 = healthCheckResultMapper.selectById(healthCheckResultEntity2);
+
+ assertEquals(0, healthCheckResultEntity1.getStatus());
+ assertEquals(0, healthCheckResultEntity2.getStatus());
+ }
+
+ @Test
+ public void testUpdateByClusterIdAndTypeAndTypeId() {
+ HealthCheckResultEntity entity1 = new HealthCheckResultEntity(null, 1L, 1, 1L, "reason", 2);
+ HealthCheckResultEntity entity2 = new HealthCheckResultEntity(null, 1L, 1, 1L, "reason", 2);
+ healthCheckResultMapper.batchInsert(Arrays.asList(entity1, entity2));
+
+ List toBeUpdate = healthCheckResultMapper.getIdsNeedToBeUpdateByClusterIdAndTypeAndTypeId(
+ Arrays.asList(entity1, entity2));
+
+ toBeUpdate.forEach(entity -> entity.setStatus(2));
+
+ healthCheckResultMapper.batchUpdate(toBeUpdate);
+ entity1.setId(7L);
+ assertEquals(2, healthCheckResultMapper.selectById(entity1).getStatus());
+ entity2.setId(1L);
+ assertEquals(0, healthCheckResultMapper.selectById(entity2).getStatus());
+ }
+
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java
new file mode 100644
index 00000000..42e58f46
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/mapper/meta/MetaMapperTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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.mapper.meta;
+
+import org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication;
+import org.apache.eventmesh.dashboard.console.entity.meta.MetaEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = EventMeshDashboardApplication.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:use-test-schema.sql", "classpath:eventmesh-dashboard.sql"})
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:meta-test.sql")
+class MetaMapperTest {
+
+ @Autowired
+ private MetaMapper metaMapper;
+
+ @Test
+ public void testSelectByClusterId() {
+ MetaEntity metaEntity = new MetaEntity();
+ metaEntity.setClusterId(1L);
+ metaEntity = metaMapper.selectByClusterId(metaEntity);
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImplTest.java b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImplTest.java
new file mode 100644
index 00000000..78cee9d1
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/service/connection/impl/ConnectionDataServiceDatabaseImplTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.service.connection.impl;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.apache.eventmesh.dashboard.console.entity.connection.ConnectionEntity;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+
+
+@ExtendWith(SpringExtension.class)
+@ActiveProfiles("test")
+@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:connection-test.sql")
+@SpringBootTest
+public class ConnectionDataServiceDatabaseImplTest {
+
+ @Autowired
+ private ConnectionDataServiceDatabaseImpl connectionServiceDatabaseImpl;
+
+ @Test
+ public void testGetAllConnectionsByClusterId() {
+ List connectionEntityList = connectionServiceDatabaseImpl.getAllConnectionsByClusterId(1L);
+ assertEquals(3, connectionEntityList.size());
+ }
+
+ @Test
+ public void testGetAllConnections() {
+ List connectionEntityList = connectionServiceDatabaseImpl.getAllConnections();
+ assertEquals(6, connectionEntityList.size());
+ }
+
+ @Test
+ public void testReplaceAllConnections() {
+ List connectionEntityList = connectionServiceDatabaseImpl.getAllConnectionsByClusterId(1L);
+ //change ClusterId into 2
+ connectionEntityList.forEach(connectionEntity -> connectionEntity.setClusterId(2L));
+ connectionServiceDatabaseImpl.replaceAllConnections(connectionEntityList);
+ assertEquals(8, connectionServiceDatabaseImpl.getAllConnections().size());
+ }
+}
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/resources/application-test.yml b/eventmesh-dashboard-console/src/test/resources/application-test.yml
index 1a903d3f..b70a657c 100644
--- a/eventmesh-dashboard-console/src/test/resources/application-test.yml
+++ b/eventmesh-dashboard-console/src/test/resources/application-test.yml
@@ -21,9 +21,9 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/eventmesh-dashboard-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://localhost:3306/eventmesh_dashboard_test?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: password
initial-size: 1
max-active: 50
diff --git a/eventmesh-dashboard-console/src/test/resources/client-test.sql b/eventmesh-dashboard-console/src/test/resources/client-test.sql
new file mode 100644
index 00000000..4a652f81
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/resources/client-test.sql
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+DELETE
+FROM `eventmesh_dashboard_test`.client
+WHERE TRUE;
+ALTER TABLE `eventmesh_dashboard_test`.client
+ AUTO_INCREMENT = 1;
+
+insert into `eventmesh_dashboard_test`.client (id, cluster_id, name, platform, language, pid, host, port, protocol, status, config_ids, description,
+ create_time, end_time, update_time)
+values (1, 3, '', '', 'java', -1, '', -1, '', 1, '', '', '2024-02-02 15:15:15', '2024-02-02 15:15:15', '2024-02-02 15:15:15'),
+ (2, 3, '', '', 'java', -1, '', -1, '', 1, '', '', '2024-02-02 15:15:15', '2024-02-02 15:15:15', '2024-02-02 15:15:15'),
+ (3, 3, '', '', 'go', -1, '', -1, '', 1, '', '', '2024-02-02 15:15:15', '2024-02-02 15:15:15', '2024-02-02 15:15:15'),
+ (4, 4, '', '', 'go', -1, '', -1, '', 1, '', '', '2024-02-02 15:15:15', '2024-02-02 15:15:15', '2024-02-02 15:15:15');
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/resources/connectiontest.sql b/eventmesh-dashboard-console/src/test/resources/connection-test.sql
similarity index 90%
rename from eventmesh-dashboard-console/src/test/resources/connectiontest.sql
rename to eventmesh-dashboard-console/src/test/resources/connection-test.sql
index 641ea5fa..361700a0 100644
--- a/eventmesh-dashboard-console/src/test/resources/connectiontest.sql
+++ b/eventmesh-dashboard-console/src/test/resources/connection-test.sql
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-DELETE FROM `eventmesh-dashboard-test`.connection WHERE TRUE;
-ALTER TABLE `eventmesh-dashboard-test`.connection AUTO_INCREMENT = 1;
+DELETE FROM `eventmesh_dashboard_test`.connection WHERE TRUE;
+ALTER TABLE `eventmesh_dashboard_test`.connection AUTO_INCREMENT = 1;
-insert into `eventmesh-dashboard-test`.connection (id, cluster_id, source_type, source_id, sink_type, sink_id, runtime_id, status, topic, group_id, description, create_time, end_time, update_time)
+insert into `eventmesh_dashboard_test`.connection (id, cluster_id, source_type, source_id, sink_type, sink_id, runtime_id, status, topic, group_id, description, create_time, end_time, update_time)
values (1, 1, 'connector', 1, 'connector', 1, 1, 0, 'test-topic', -1, '', '2024-01-27 11:55:11', '2024-01-27 11:55:11', '2024-01-27 11:55:11'),
(2, 1, 'connector', 2, 'connector', 2, 2, 0, 'test-topic', -1, '', '2024-01-27 11:55:11', '2024-01-27 11:55:11', '2024-01-27 11:55:11'),
(3, 1, 'connector', 3, 'connector', 3, 3, 0, 'test-topic', -1, '', '2024-01-27 11:55:11', '2024-01-27 11:55:11', '2024-01-27 11:55:11'),
diff --git a/eventmesh-dashboard-console/src/test/resources/connector-test.sql b/eventmesh-dashboard-console/src/test/resources/connector-test.sql
new file mode 100644
index 00000000..2ebdc5f5
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/resources/connector-test.sql
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+DELETE FROM `eventmesh_dashboard_test`.connection WHERE TRUE;
+ALTER TABLE `eventmesh_dashboard_test`.connection AUTO_INCREMENT = 1;
+
+insert into `eventmesh_dashboard_test`.connector (id, cluster_id, name, class_name, type, status, pod_state, config_ids, create_time, update_time)
+values (1, 1, '', 'the', '', 1, 1, '', '2024-02-02 16:43:45', '2024-02-02 16:53:02'),
+ (2, 1, '', 'quick', '', 1, 1, '', '2024-02-02 16:43:45', '2024-02-02 16:53:02'),
+ (3, 1, '', 'brown', '', 1, 2, '', '2024-02-02 16:43:45', '2024-02-02 16:53:02'),
+ (4, 2, '', 'fox', '', 1, 2, '', '2024-02-02 16:43:45', '2024-02-02 16:53:02'),
+ (5, 3, '', 'jumps', '', 1, 3, '', '2024-02-02 16:43:45', '2024-02-02 16:53:02');
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/resources/health-test.sql b/eventmesh-dashboard-console/src/test/resources/health-test.sql
new file mode 100644
index 00000000..45c3aebc
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/resources/health-test.sql
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+DELETE FROM `eventmesh_dashboard_test`.health_check_result WHERE TRUE;
+ALTER TABLE `eventmesh_dashboard_test`.health_check_result AUTO_INCREMENT = 1;
+
+insert into `eventmesh_dashboard_test`.health_check_result (id, type, type_id, cluster_id, status, result_desc, create_time, update_time)
+values (1, 1, 1, 1, 0, '', '2024-02-02 18:56:50', '2024-02-02 18:56:50'),
+ (2, 2, 2, 1, 1, '', '2024-02-02 18:56:50', '2024-02-02 18:56:50'),
+ (3, 3, 3, 1, 1, '', '2024-02-02 18:56:50', '2024-02-02 18:56:50'),
+ (4, 4, 4, 1, 1, '', '2024-02-02 18:56:50', '2024-02-02 18:56:50'),
+ (5, 1, 2, 1, 1, '', '2024-02-04 18:56:50', '2024-02-02 19:33:13'),
+ (6, 4, 2, 2, 0, '', '2024-02-04 18:56:50', '2024-02-02 19:33:13');
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/test/resources/meta-test.sql b/eventmesh-dashboard-console/src/test/resources/meta-test.sql
new file mode 100644
index 00000000..66a63549
--- /dev/null
+++ b/eventmesh-dashboard-console/src/test/resources/meta-test.sql
@@ -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.
+ */
+
+DELETE FROM `eventmesh_dashboard_test`.meta WHERE TRUE;
+ALTER TABLE `eventmesh_dashboard_test`.meta AUTO_INCREMENT = 1;
+
+insert into `eventmesh_dashboard_test`.meta (id, name, type, version, cluster_id, host, port, role, username, params, status, create_time, update_time)
+values (1, '1', 'nacos', '1.0', 1, '', -1, '-1', '', '', 0, '2024-02-03 10:30:02', '2024-02-03 10:30:02'),
+ (2, '2', 'zookeeper', '1.0', 1, '', -1, '-1', '', '', 0, '2024-02-03 10:30:02', '2024-02-03 10:30:02');
\ No newline at end of file
diff --git a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/scheduler/health/HealthCheckScheduler.java b/eventmesh-dashboard-console/src/test/resources/use-test-schema.sql
similarity index 79%
rename from eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/scheduler/health/HealthCheckScheduler.java
rename to eventmesh-dashboard-console/src/test/resources/use-test-schema.sql
index 7263f7cd..db0c0a26 100644
--- a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/scheduler/health/HealthCheckScheduler.java
+++ b/eventmesh-dashboard-console/src/test/resources/use-test-schema.sql
@@ -15,14 +15,4 @@
* limitations under the License.
*/
-package org.apache.eventmesh.dashboard.console.scheduler.health;
-
-import org.springframework.stereotype.Component;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Component
-public class HealthCheckScheduler {
-
-}
+USE `eventmesh_dashboard_test`;