This is an automated email from the ASF dual-hosted git repository.

gongchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 388d616d0 [improve] refactor code (#1901)
388d616d0 is described below

commit 388d616d06b7eb3cef02a3e98ef7c75f4434a68e
Author: Ceilzcx <[email protected]>
AuthorDate: Sat May 4 10:49:05 2024 +0800

    [improve] refactor code (#1901)
---
 .../hertzbeat/common/entity/dto/CollectorInfo.java |   3 -
 .../apache/hertzbeat/common/entity/job/Job.java    |  10 +-
 .../manager/scheduler/CollectorJobScheduler.java   | 170 ++++++++++-----------
 .../org/apache/hertzbeat/manager/ManagerTest.java  |  16 +-
 .../{config => }/WarehouseAutoConfiguration.java   |   2 +-
 .../warehouse/config/entrance/KafkaProperties.java |  33 ----
 .../controller/MetricsDataController.java          |  16 +-
 .../warehouse/service/WarehouseServiceImpl.java    |   8 +-
 .../warehouse/store/DataStorageDispatch.java       |  50 +++---
 .../{ => history}/AbstractHistoryDataStorage.java  |   4 +-
 .../greptime/GrepTimeDbDataStorage.java}           |  13 +-
 .../history}/greptime/GreptimeProperties.java      |   2 +-
 .../influxdb/InfluxdbDataStorage.java}             |  13 +-
 .../history}/influxdb/InfluxdbProperties.java      |   2 +-
 .../iotdb/IotDbDataStorage.java}                   |  14 +-
 .../history}/iotdb/IotDbProperties.java            |   2 +-
 .../history}/iotdb/IotDbVersion.java               |   2 +-
 .../jpa/JpaDatabaseDataStorage.java}               |  15 +-
 .../store => store/history}/jpa/JpaProperties.java |   2 +-
 .../tdengine/TdEngineDataStorage.java}             |   8 +-
 .../history}/tdengine/TdEngineProperties.java      |   2 +-
 .../vm/VictoriaMetricsClusterDataStorage.java}     |  12 +-
 .../vm}/VictoriaMetricsClusterProperties.java      |   2 +-
 .../vm/VictoriaMetricsDataStorage.java}            |  11 +-
 .../vm}/VictoriaMetricsInsertProperties.java       |   2 +-
 .../history}/vm/VictoriaMetricsProperties.java     |   2 +-
 .../vm}/VictoriaMetricsSelectProperties.java       |   2 +-
 .../AbstractRealTimeDataStorage.java               |   4 +-
 .../memory/MemoryDataStorage.java}                 |  11 +-
 .../realtime}/memory/MemoryProperties.java         |   2 +-
 .../redis}/MetricsDataRedisCodec.java              |   2 +-
 .../redis/RedisDataStorage.java}                   |  11 +-
 .../realtime}/redis/RedisProperties.java           |   2 +-
 .../src/main/resources/META-INF/spring.factories   |   2 +-
 .../controller/MetricsDataControllerTest.java      |   4 +-
 ...StorageTest.java => MemoryDataStorageTest.java} |   5 +-
 .../warehouse/store/MetricsDataRedisCodecTest.java |   1 +
 ...aStorageTest.java => RedisDataStorageTest.java} |   5 +-
 ...orageTest.java => TdEngineDataStorageTest.java} |   5 +-
 39 files changed, 220 insertions(+), 252 deletions(-)

diff --git 
a/common/src/main/java/org/apache/hertzbeat/common/entity/dto/CollectorInfo.java
 
b/common/src/main/java/org/apache/hertzbeat/common/entity/dto/CollectorInfo.java
index b92893c26..47abb6ae8 100644
--- 
a/common/src/main/java/org/apache/hertzbeat/common/entity/dto/CollectorInfo.java
+++ 
b/common/src/main/java/org/apache/hertzbeat/common/entity/dto/CollectorInfo.java
@@ -44,7 +44,4 @@ public class CollectorInfo {
     
     @NotNull
     private String mode = CommonConstants.MODE_PUBLIC;
-    
-    // todo more
-    
 }
diff --git 
a/common/src/main/java/org/apache/hertzbeat/common/entity/job/Job.java 
b/common/src/main/java/org/apache/hertzbeat/common/entity/job/Job.java
index 2becfa052..10299a5d6 100644
--- a/common/src/main/java/org/apache/hertzbeat/common/entity/job/Job.java
+++ b/common/src/main/java/org/apache/hertzbeat/common/entity/job/Job.java
@@ -65,7 +65,7 @@ public class Job {
      */
     private boolean hide = true;
     /**
-     * Large categories of monitoring   
+     * Large categories of monitoring
      * service-application service monitoring db-database
      * monitoring custom-custom monitoring os-operating system monitoring...
      */
@@ -126,7 +126,7 @@ public class Job {
      */
     @JsonIgnore
     private transient long dispatchTime;
-    
+
     /**
      * collector usage - metric group task execution priority view
      * 0 - availability
@@ -183,8 +183,8 @@ public class Job {
      * collector use - to get the next set of priority metric group tasks
      *
      * @param metrics Current Metrics
-     * @param first   Is it the first time to get  
-     * @return Metrics Tasks       
+     * @param first   Is it the first time to get
+     * @return Metrics Tasks
      * Returning null means: the job has been completed, and the collection of 
all metrics has ended
      * Returning the empty set metrics that there are still metrics collection 
tasks at the current
      * level that have not been completed,and the next level metrics task 
collection cannot be performed.
@@ -238,7 +238,7 @@ public class Job {
         if (this.envConfigmaps == null) {
             this.envConfigmaps = envConfigmaps;
         } else {
-            this.envConfigmaps.putAll(envConfigmaps);   
+            this.envConfigmaps.putAll(envConfigmaps);
         }
     }
 
diff --git 
a/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java
 
b/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java
index c2c63dee0..dfb4fc4b0 100644
--- 
a/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java
+++ 
b/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java
@@ -92,6 +92,10 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
 
     @Override
     public void collectorGoOnline(String identity, CollectorInfo 
collectorInfo) {
+        if (identity == null) {
+            log.error("identity can not be null if collector not existed");
+            return;
+        }
         Optional<Collector> collectorOptional = 
collectorDao.findCollectorByName(identity);
         Collector collector;
         if (collectorOptional.isPresent()) {
@@ -109,9 +113,12 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
                 log.error("collectorInfo can not null when collector not 
existed");
                 return;
             }
-            collector = 
Collector.builder().name(identity).ip(collectorInfo.getIp())
+            collector = Collector.builder()
+                    .name(identity)
+                    .ip(collectorInfo.getIp())
                     .mode(collectorInfo.getMode())
-                    .status(CommonConstants.COLLECTOR_STATUS_ONLINE).build();
+                    .status(CommonConstants.COLLECTOR_STATUS_ONLINE)
+                    .build();
         }
         collectorDao.save(collector);
         ConsistentHash.Node node = new ConsistentHash.Node(identity, 
collector.getMode(),
@@ -122,42 +129,42 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
         List<CollectorMonitorBind> binds = 
collectorMonitorBindDao.findCollectorMonitorBindsByCollector(identity);
         for (CollectorMonitorBind bind : binds) {
             Optional<Monitor> monitorOptional = 
monitorDao.findById(bind.getMonitorId());
-            if (monitorOptional.isPresent()) {
-                Monitor monitor = monitorOptional.get();
-                if (monitor.getStatus() == CommonConstants.UN_MANAGE_CODE) {
-                    continue;
+            if (monitorOptional.isEmpty()) {
+                continue;
+            }
+            Monitor monitor = monitorOptional.get();
+            if (monitor.getStatus() == CommonConstants.UN_MANAGE_CODE) {
+                continue;
+            }
+            try {
+                // build collect job entity
+                Job appDefine = appService.getAppDefine(monitor.getApp());
+                if (CommonConstants.PROMETHEUS.equals(monitor.getApp())) {
+                    appDefine.setApp(CommonConstants.PROMETHEUS_APP_PREFIX + 
monitor.getName());
                 }
-                try {
-                    // build collect job entity
-                    Job appDefine = appService.getAppDefine(monitor.getApp());
-                    if (CommonConstants.PROMETHEUS.equals(monitor.getApp())) {
-                        appDefine.setApp(CommonConstants.PROMETHEUS_APP_PREFIX 
+ monitor.getName());
+                appDefine.setMonitorId(monitor.getId());
+                appDefine.setInterval(monitor.getIntervals());
+                appDefine.setCyclic(true);
+                appDefine.setTimestamp(System.currentTimeMillis());
+                List<Param> params = 
paramDao.findParamsByMonitorId(monitor.getId());
+                List<Configmap> configmaps = params.stream()
+                        .map(param -> new Configmap(param.getField(), 
param.getParamValue(),
+                                param.getType())).collect(Collectors.toList());
+                List<ParamDefine> paramDefaultValue = 
appDefine.getParams().stream()
+                        .filter(item -> 
StringUtils.hasText(item.getDefaultValue()))
+                        .toList();
+                paramDefaultValue.forEach(defaultVar -> {
+                    if (configmaps.stream().noneMatch(item -> 
item.getKey().equals(defaultVar.getField()))) {
+                        Configmap configmap = new 
Configmap(defaultVar.getField(), defaultVar.getDefaultValue(), (byte) 1);
+                        configmaps.add(configmap);
                     }
-                    appDefine.setMonitorId(monitor.getId());
-                    appDefine.setInterval(monitor.getIntervals());
-                    appDefine.setCyclic(true);
-                    appDefine.setTimestamp(System.currentTimeMillis());
-                    List<Param> params = 
paramDao.findParamsByMonitorId(monitor.getId());
-                    List<Configmap> configmaps = params.stream()
-                            .map(param -> new Configmap(param.getField(), 
param.getParamValue(),
-                                    
param.getType())).collect(Collectors.toList());
-                    List<ParamDefine> paramDefaultValue = 
appDefine.getParams().stream()
-                            .filter(item -> 
StringUtils.hasText(item.getDefaultValue()))
-                            .collect(Collectors.toList());
-                    paramDefaultValue.forEach(defaultVar -> {
-                        if (configmaps.stream().noneMatch(item -> 
item.getKey().equals(defaultVar.getField()))) {
-                            // todo type
-                            Configmap configmap = new 
Configmap(defaultVar.getField(), defaultVar.getDefaultValue(), (byte) 1);
-                            configmaps.add(configmap);
-                        }
-                    });
-                    appDefine.setConfigmap(configmaps);
-                    long jobId = addAsyncCollectJob(appDefine, identity);
-                    monitor.setJobId(jobId);
-                    monitorDao.save(monitor);
-                } catch (Exception e) {
-                    log.error("insert pinned monitor job: {} in collector: {} 
error,continue next monitor", monitor, identity, e);
-                }
+                });
+                appDefine.setConfigmap(configmaps);
+                long jobId = addAsyncCollectJob(appDefine, identity);
+                monitor.setJobId(jobId);
+                monitorDao.save(monitor);
+            } catch (Exception e) {
+                log.error("insert pinned monitor job: {} in collector: {} 
error,continue next monitor", monitor, identity, e);
             }
         }
     }
@@ -165,14 +172,16 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
     @Override
     public void collectorGoOffline(String identity) {
         Optional<Collector> collectorOptional = 
collectorDao.findCollectorByName(identity);
-        if (collectorOptional.isPresent()) {
-            log.info("the collector: {} is going offline now.", identity);
-            Collector collector = collectorOptional.get();
-            collector.setStatus(CommonConstants.COLLECTOR_STATUS_OFFLINE);
-            collectorDao.save(collector);
-            consistentHash.removeNode(identity);
-            reBalanceCollectorAssignJobs();
+        if (collectorOptional.isEmpty()) {
+            log.info("the collector : {} not found.", identity);
+            return;
         }
+        Collector collector = collectorOptional.get();
+        collector.setStatus(CommonConstants.COLLECTOR_STATUS_OFFLINE);
+        collectorDao.save(collector);
+        consistentHash.removeNode(identity);
+        reBalanceCollectorAssignJobs();
+        log.info("the collector: {} go offline success.", identity);
     }
 
     @Override
@@ -180,56 +189,44 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
         consistentHash.getAllNodes().entrySet().parallelStream().forEach(entry 
-> {
             String collectorName = entry.getKey();
             AssignJobs assignJobs = entry.getValue().getAssignJobs();
-            if (assignJobs != null) {
-                if (CommonConstants.MAIN_COLLECTOR_NODE.equals(collectorName)) 
{
-                    if (!assignJobs.getAddingJobs().isEmpty()) {
-                        Set<Long> addedJobIds = new HashSet<>(8);
-                        for (Long addingJobId : assignJobs.getAddingJobs()) {
-                            Job job = jobContentCache.get(addingJobId);
-                            if (job == null) {
-                                log.error("assigning job {} content is null.", 
addingJobId);
-                                continue;
-                            }
-                            addedJobIds.add(addingJobId);
-                            collectJobService.addAsyncCollectJob(job);
-                        }
-                        assignJobs.addAssignJobs(addedJobIds);
-                        assignJobs.removeAddingJobs(addedJobIds);
-                    }
-                    if (!assignJobs.getRemovingJobs().isEmpty()) {
-                        assignJobs.getRemovingJobs().forEach(jobId -> 
collectJobService.cancelAsyncCollectJob(jobId));
-                        assignJobs.clearRemovingJobs();
-                    }
-                } else {
-                    if (!assignJobs.getAddingJobs().isEmpty()) {
-                        Set<Long> addedJobIds = new HashSet<>(8);
-                        for (Long addingJobId : assignJobs.getAddingJobs()) {
-                            Job job = jobContentCache.get(addingJobId);
-                            if (job == null) {
-                                log.error("assigning job {} content is null.", 
addingJobId);
-                                continue;
-                            }
-                            addedJobIds.add(addingJobId);
-                            ClusterMsg.Message message = 
ClusterMsg.Message.newBuilder()
-                                    .setDirection(ClusterMsg.Direction.REQUEST)
-                                    
.setType(ClusterMsg.MessageType.ISSUE_CYCLIC_TASK)
-                                    .setMsg(JsonUtil.toJson(job))
-                                    .build();
-                            this.manageServer.sendMsg(collectorName, message);
-                        }
-                        assignJobs.addAssignJobs(addedJobIds);
-                        assignJobs.removeAddingJobs(addedJobIds);
+            if (collectorName == null || assignJobs == null) {
+                return;
+            }
+            if (assignJobs.getAddingJobs() != null && 
!assignJobs.getAddingJobs().isEmpty()) {
+                Set<Long> addedJobIds = new HashSet<>(8);
+                for (Long addingJobId : assignJobs.getAddingJobs()) {
+                    Job job = jobContentCache.get(addingJobId);
+                    if (job == null) {
+                        log.error("assigning job {} content is null.", 
addingJobId);
+                        continue;
                     }
-                    if (!assignJobs.getRemovingJobs().isEmpty()) {
+                    addedJobIds.add(addingJobId);
+                    if 
(CommonConstants.MAIN_COLLECTOR_NODE.equals(collectorName)) {
+                        collectJobService.addAsyncCollectJob(job);
+                    } else {
                         ClusterMsg.Message message = 
ClusterMsg.Message.newBuilder()
                                 .setDirection(ClusterMsg.Direction.REQUEST)
-                                
.setType(ClusterMsg.MessageType.DELETE_CYCLIC_TASK)
-                                
.setMsg(JsonUtil.toJson(assignJobs.getRemovingJobs()))
+                                
.setType(ClusterMsg.MessageType.ISSUE_CYCLIC_TASK)
+                                .setMsg(JsonUtil.toJson(job))
                                 .build();
                         this.manageServer.sendMsg(collectorName, message);
-                        assignJobs.clearRemovingJobs();
                     }
                 }
+                assignJobs.addAssignJobs(addedJobIds);
+                assignJobs.removeAddingJobs(addedJobIds);
+            }
+            if (assignJobs.getRemovingJobs() != null && 
!assignJobs.getRemovingJobs().isEmpty()) {
+                if (CommonConstants.MAIN_COLLECTOR_NODE.equals(collectorName)) 
{
+                    assignJobs.getRemovingJobs().forEach(jobId -> 
collectJobService.cancelAsyncCollectJob(jobId));
+                } else {
+                    ClusterMsg.Message message = 
ClusterMsg.Message.newBuilder()
+                            .setDirection(ClusterMsg.Direction.REQUEST)
+                            .setType(ClusterMsg.MessageType.DELETE_CYCLIC_TASK)
+                            
.setMsg(JsonUtil.toJson(assignJobs.getRemovingJobs()))
+                            .build();
+                    this.manageServer.sendMsg(collectorName, message);
+                }
+                assignJobs.clearRemovingJobs();
             }
         });
     }
@@ -461,5 +458,4 @@ public class CollectorJobScheduler implements 
CollectorScheduling, CollectJobSch
     public void setManageServer(ManageServer manageServer) {
         this.manageServer = manageServer;
     }
-
 }
diff --git 
a/manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java 
b/manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java
index 79d8f5285..b962b2583 100644
--- a/manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java
+++ b/manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java
@@ -46,10 +46,10 @@ import org.apache.hertzbeat.common.service.TencentSmsClient;
 import org.apache.hertzbeat.common.support.SpringContextHolder;
 import org.apache.hertzbeat.warehouse.WarehouseWorkerPool;
 import org.apache.hertzbeat.warehouse.controller.MetricsDataController;
-import org.apache.hertzbeat.warehouse.store.HistoryIotDbDataStorage;
-import org.apache.hertzbeat.warehouse.store.HistoryTdEngineDataStorage;
-import org.apache.hertzbeat.warehouse.store.RealTimeMemoryDataStorage;
-import org.apache.hertzbeat.warehouse.store.RealTimeRedisDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.iotdb.IotDbDataStorage;
+import 
org.apache.hertzbeat.warehouse.store.history.tdengine.TdEngineDataStorage;
+import org.apache.hertzbeat.warehouse.store.realtime.memory.MemoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.realtime.redis.RedisDataStorage;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
@@ -99,10 +99,10 @@ class ManagerTest extends AbstractSpringIntegrationTest {
         assertNotNull(ctx.getBean(WarehouseWorkerPool.class));
 
         // default DataStorage is RealTimeMemoryDataStorage
-        assertNotNull(ctx.getBean(RealTimeMemoryDataStorage.class));
-        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(RealTimeRedisDataStorage.class));
-        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(HistoryTdEngineDataStorage.class));
-        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(HistoryIotDbDataStorage.class));
+        assertNotNull(ctx.getBean(MemoryDataStorage.class));
+        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(RedisDataStorage.class));
+        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(TdEngineDataStorage.class));
+        assertThrows(NoSuchBeanDefinitionException.class, () -> 
ctx.getBean(IotDbDataStorage.class));
 
         assertNotNull(ctx.getBean(MetricsDataController.class));
     }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/WarehouseAutoConfiguration.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/WarehouseAutoConfiguration.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/WarehouseAutoConfiguration.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/WarehouseAutoConfiguration.java
index 23e3feb22..498e487e1 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/WarehouseAutoConfiguration.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/WarehouseAutoConfiguration.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config;
+package org.apache.hertzbeat.warehouse;
 
 import org.springframework.context.annotation.ComponentScan;
 
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/entrance/KafkaProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/entrance/KafkaProperties.java
deleted file mode 100644
index a15807054..000000000
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/entrance/KafkaProperties.java
+++ /dev/null
@@ -1,33 +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.hertzbeat.warehouse.config.entrance;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.boot.context.properties.bind.DefaultValue;
-
-/**
- * kafka configuration information
- */
-@ConfigurationProperties(prefix = "warehouse.entrance.kafka")
-@ConfigurationPropertiesScan("org.apache.hertzbeat.warehouse.config")
-public record KafkaProperties(@DefaultValue("true") boolean enabled,
-                              @DefaultValue("127.0.0.1:9092") String servers,
-                              String topic,
-                              String groupId) {
-}
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/controller/MetricsDataController.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/controller/MetricsDataController.java
index 71647b794..cdab3eb3d 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/controller/MetricsDataController.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/controller/MetricsDataController.java
@@ -35,10 +35,10 @@ import 
org.apache.hertzbeat.common.entity.dto.MetricsHistoryData;
 import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.dto.ValueRow;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.apache.hertzbeat.warehouse.store.AbstractHistoryDataStorage;
-import org.apache.hertzbeat.warehouse.store.AbstractRealTimeDataStorage;
-import org.apache.hertzbeat.warehouse.store.HistoryJpaDatabaseDataStorage;
-import org.apache.hertzbeat.warehouse.store.RealTimeMemoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.jpa.JpaDatabaseDataStorage;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
+import org.apache.hertzbeat.warehouse.store.realtime.memory.MemoryDataStorage;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -90,9 +90,9 @@ public class MetricsDataController {
         AbstractRealTimeDataStorage realTimeDataStorage = 
realTimeDataStorages.stream()
                 .filter(AbstractRealTimeDataStorage::isServerAvailable)
                 .max((o1, o2) -> {
-                    if (o1 instanceof RealTimeMemoryDataStorage) {
+                    if (o1 instanceof MemoryDataStorage) {
                         return -1;
-                    } else if (o2 instanceof RealTimeMemoryDataStorage) {
+                    } else if (o2 instanceof MemoryDataStorage) {
                         return 1;
                     } else {
                         return 0;
@@ -156,9 +156,9 @@ public class MetricsDataController {
     ) {
         AbstractHistoryDataStorage historyDataStorage = 
historyDataStorages.stream()
                 
.filter(AbstractHistoryDataStorage::isServerAvailable).max((o1, o2) -> {
-                    if (o1 instanceof HistoryJpaDatabaseDataStorage) {
+                    if (o1 instanceof JpaDatabaseDataStorage) {
                         return -1;
-                    } else if (o2 instanceof HistoryJpaDatabaseDataStorage) {
+                    } else if (o2 instanceof JpaDatabaseDataStorage) {
                         return 1;
                     } else {
                         return 0;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/WarehouseServiceImpl.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/WarehouseServiceImpl.java
index 69f3e6187..63a0d802c 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/WarehouseServiceImpl.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/WarehouseServiceImpl.java
@@ -21,8 +21,8 @@ import java.util.Collections;
 import java.util.List;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.apache.hertzbeat.warehouse.store.AbstractRealTimeDataStorage;
-import org.apache.hertzbeat.warehouse.store.RealTimeMemoryDataStorage;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
+import org.apache.hertzbeat.warehouse.store.realtime.memory.MemoryDataStorage;
 import org.springframework.stereotype.Service;
 
 /**
@@ -43,9 +43,9 @@ public class WarehouseServiceImpl implements WarehouseService 
{
         AbstractRealTimeDataStorage realTimeDataStorage = 
realTimeDataStorages.stream()
                 .filter(AbstractRealTimeDataStorage::isServerAvailable)
                 .max((o1, o2) -> {
-                    if (o1 instanceof RealTimeMemoryDataStorage) {
+                    if (o1 instanceof MemoryDataStorage) {
                         return -1;
-                    } else if (o2 instanceof RealTimeMemoryDataStorage) {
+                    } else if (o2 instanceof MemoryDataStorage) {
                         return 1;
                     } else {
                         return 0;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java
index 2a6d84690..24e46f008 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java
@@ -22,6 +22,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.queue.CommonDataQueue;
 import org.apache.hertzbeat.warehouse.WarehouseWorkerPool;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.jpa.JpaDatabaseDataStorage;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
+import org.apache.hertzbeat.warehouse.store.realtime.memory.MemoryDataStorage;
 import org.springframework.stereotype.Component;
 
 /**
@@ -44,23 +48,28 @@ public class DataStorageDispatch {
         this.workerPool = workerPool;
         this.historyDataStorages = historyDataStorages;
         this.realTimeDataStorages = realTimeDataStorages;
-        startStoragePersistentData();
-        startStorageRealTimeData();
+        startPersistentDataStorage();
+        startRealTimeDataStorage();
     }
 
-    private void startStorageRealTimeData() {
+    private void startRealTimeDataStorage() {
+        if (realTimeDataStorages == null || realTimeDataStorages.isEmpty()) {
+            log.info("no real time data storage start");
+            return;
+        }
+        if (realTimeDataStorages.size() > 1) {
+            realTimeDataStorages.removeIf(MemoryDataStorage.class::isInstance);
+        }
         Runnable runnable = () -> {
             Thread.currentThread().setName("warehouse-realtime-data-storage");
-            if (realTimeDataStorages != null && realTimeDataStorages.size() > 
1) {
-                realTimeDataStorages.removeIf(item -> item instanceof 
RealTimeMemoryDataStorage);
-            }
             while (!Thread.currentThread().isInterrupted()) {
                 try {
                     CollectRep.MetricsData metricsData = 
commonDataQueue.pollMetricsDataToRealTimeStorage();
-                    if (metricsData != null && realTimeDataStorages != null) {
-                        for (AbstractRealTimeDataStorage realTimeDataStorage : 
realTimeDataStorages) {
-                            realTimeDataStorage.saveData(metricsData);
-                        }
+                    if (metricsData == null) {
+                        continue;
+                    }
+                    for (AbstractRealTimeDataStorage realTimeDataStorage : 
realTimeDataStorages) {
+                        realTimeDataStorage.saveData(metricsData);
                     }
                 } catch (Exception e) {
                     log.error(e.getMessage(), e);
@@ -70,19 +79,24 @@ public class DataStorageDispatch {
         workerPool.executeJob(runnable);
     }
 
-    protected void startStoragePersistentData() {
+    protected void startPersistentDataStorage() {
+        if (historyDataStorages == null || historyDataStorages.isEmpty()) {
+            log.info("no history data storage start");
+            return;
+        }
+        if (historyDataStorages.size() > 1) {
+            
historyDataStorages.removeIf(JpaDatabaseDataStorage.class::isInstance);
+        }
         Runnable runnable = () -> {
             
Thread.currentThread().setName("warehouse-persistent-data-storage");
-            if (historyDataStorages != null && historyDataStorages.size() > 1) 
{
-                historyDataStorages.removeIf(item -> item instanceof 
HistoryJpaDatabaseDataStorage);
-            }
             while (!Thread.currentThread().isInterrupted()) {
                 try {
                     CollectRep.MetricsData metricsData = 
commonDataQueue.pollMetricsDataToPersistentStorage();
-                    if (metricsData != null && historyDataStorages != null) {
-                        for (AbstractHistoryDataStorage historyDataStorage : 
historyDataStorages) {
-                            historyDataStorage.saveData(metricsData);
-                        }
+                    if (metricsData == null) {
+                        continue;
+                    }
+                    for (AbstractHistoryDataStorage historyDataStorage : 
historyDataStorages) {
+                        historyDataStorage.saveData(metricsData);
                     }
                 } catch (Exception e) {
                     log.error(e.getMessage(), e);
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractHistoryDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractHistoryDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
index f3b047de5..61a8ef567 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractHistoryDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history;
 
 import java.util.List;
 import java.util.Map;
@@ -42,7 +42,7 @@ public abstract class AbstractHistoryDataStorage implements 
DisposableBean {
      * save metrics data
      * @param metricsData metrics data
      */
-    abstract void saveData(CollectRep.MetricsData metricsData);
+    public abstract void saveData(CollectRep.MetricsData metricsData);
 
     /**
      * query history range metrics data from tsdb
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryGrepTimeDbDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GrepTimeDbDataStorage.java
similarity index 97%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryGrepTimeDbDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GrepTimeDbDataStorage.java
index 06c52fa0f..c0122b828 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryGrepTimeDbDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GrepTimeDbDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.greptime;
 
 import io.greptime.GreptimeDB;
 import io.greptime.models.ColumnDataType;
@@ -53,7 +53,7 @@ import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.apache.hertzbeat.common.util.TimePeriodUtil;
-import org.apache.hertzbeat.warehouse.config.store.greptime.GreptimeProperties;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
 
@@ -61,10 +61,9 @@ import org.springframework.stereotype.Component;
  * greptimeDB data storage
  */
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.greptime",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.greptime", name = "enabled", 
havingValue = "true")
 @Slf4j
-public class HistoryGrepTimeDbDataStorage extends AbstractHistoryDataStorage {
+public class GrepTimeDbDataStorage extends AbstractHistoryDataStorage {
 
     /**
      * storage database
@@ -83,7 +82,7 @@ public class HistoryGrepTimeDbDataStorage extends 
AbstractHistoryDataStorage {
     private static final String DATABASE_NOT_EXIST = "not exist";
     private GreptimeDB greptimeDb;
 
-    public HistoryGrepTimeDbDataStorage(GreptimeProperties greptimeProperties) 
{
+    public GrepTimeDbDataStorage(GreptimeProperties greptimeProperties) {
         this.serverAvailable = this.initDbSession(greptimeProperties);
     }
 
@@ -157,7 +156,7 @@ public class HistoryGrepTimeDbDataStorage extends 
AbstractHistoryDataStorage {
     }
 
     @Override
-    void saveData(CollectRep.MetricsData metricsData) {
+    public void saveData(CollectRep.MetricsData metricsData) {
         if (!isServerAvailable() || metricsData.getCode() != 
CollectRep.Code.SUCCESS) {
             return;
         }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/greptime/GreptimeProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeProperties.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/greptime/GreptimeProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeProperties.java
index b7d439d21..0561af78d 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/greptime/GreptimeProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.greptime;
+package org.apache.hertzbeat.warehouse.store.history.greptime;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryInfluxdbDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java
similarity index 97%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryInfluxdbDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java
index 522736c94..65aded4ad 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryInfluxdbDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.influxdb;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -40,7 +40,7 @@ import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.JsonUtil;
-import org.apache.hertzbeat.warehouse.config.store.influxdb.InfluxdbProperties;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.apache.http.ssl.SSLContexts;
 import org.influxdb.InfluxDB;
 import org.influxdb.InfluxDBFactory;
@@ -55,10 +55,9 @@ import org.springframework.stereotype.Component;
  * HistoryInfluxdbDataStorage class
  */
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.influxdb",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.influxdb", name = "enabled", 
havingValue = "true")
 @Slf4j
-public class HistoryInfluxdbDataStorage extends AbstractHistoryDataStorage {
+public class InfluxdbDataStorage extends AbstractHistoryDataStorage {
 
     private static final String DATABASE = "hertzbeat";
 
@@ -79,7 +78,7 @@ public class HistoryInfluxdbDataStorage extends 
AbstractHistoryDataStorage {
 
     private InfluxDB influxDb;
 
-    public HistoryInfluxdbDataStorage(InfluxdbProperties influxdbProperties) {
+    public InfluxdbDataStorage(InfluxdbProperties influxdbProperties) {
         this.initInfluxDb(influxdbProperties);
     }
 
@@ -139,7 +138,7 @@ public class HistoryInfluxdbDataStorage extends 
AbstractHistoryDataStorage {
     }
 
     @Override
-    void saveData(CollectRep.MetricsData metricsData) {
+    public void saveData(CollectRep.MetricsData metricsData) {
         if (!isServerAvailable() || metricsData.getCode() != 
CollectRep.Code.SUCCESS) {
             return;
         }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/influxdb/InfluxdbProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbProperties.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/influxdb/InfluxdbProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbProperties.java
index 3dcbb2207..0e78e356b 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/influxdb/InfluxdbProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.influxdb;
+package org.apache.hertzbeat.warehouse.store.history.influxdb;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryIotDbDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java
similarity index 97%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryIotDbDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java
index 39a9358eb..44a2512b5 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryIotDbDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.iotdb;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -29,8 +29,7 @@ import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.JsonUtil;
-import org.apache.hertzbeat.warehouse.config.store.iotdb.IotDbProperties;
-import org.apache.hertzbeat.warehouse.config.store.iotdb.IotDbVersion;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.session.pool.SessionDataSetWrapper;
@@ -46,10 +45,9 @@ import org.springframework.stereotype.Component;
  * IoTDB data storage
  */
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.iot-db",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.iot-db", name = "enabled", 
havingValue = "true")
 @Slf4j
-public class HistoryIotDbDataStorage extends AbstractHistoryDataStorage {
+public class IotDbDataStorage extends AbstractHistoryDataStorage {
     private static final String BACK_QUOTE = "`";
     /**
      * set ttl never expire
@@ -87,7 +85,7 @@ public class HistoryIotDbDataStorage extends 
AbstractHistoryDataStorage {
 
     private long queryTimeoutInMs;
 
-    public HistoryIotDbDataStorage(IotDbProperties iotDbProperties) {
+    public IotDbDataStorage(IotDbProperties iotDbProperties) {
         this.serverAvailable = this.initIotDbSession(iotDbProperties);
     }
 
@@ -179,7 +177,7 @@ public class HistoryIotDbDataStorage extends 
AbstractHistoryDataStorage {
     }
 
     @Override
-    void saveData(CollectRep.MetricsData metricsData) {
+    public void saveData(CollectRep.MetricsData metricsData) {
         if (!isServerAvailable() || metricsData.getCode() != 
CollectRep.Code.SUCCESS) {
             return;
         }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbProperties.java
similarity index 97%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbProperties.java
index 28b964dbd..cc9e0e7a9 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.iotdb;
+package org.apache.hertzbeat.warehouse.store.history.iotdb;
 
 import java.time.ZoneId;
 import java.util.List;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbVersion.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbVersion.java
similarity index 94%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbVersion.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbVersion.java
index ae51e63b2..3f756c7c7 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/iotdb/IotDbVersion.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbVersion.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.iotdb;
+package org.apache.hertzbeat.warehouse.store.history.iotdb;
 
 /**
  * IoTDB user version
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryJpaDatabaseDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java
similarity index 96%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryJpaDatabaseDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java
index 2d4f37a3b..caea08df4 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryJpaDatabaseDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.jpa;
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import jakarta.persistence.criteria.Predicate;
@@ -42,8 +42,8 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.entity.warehouse.History;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.apache.hertzbeat.common.util.TimePeriodUtil;
-import org.apache.hertzbeat.warehouse.config.store.jpa.JpaProperties;
 import org.apache.hertzbeat.warehouse.dao.HistoryDao;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
@@ -53,17 +53,16 @@ import org.springframework.stereotype.Component;
  * data storage by mysql/h2 - jpa
  */
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.jpa",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.jpa", name = "enabled", 
havingValue = "true")
 @Slf4j
-public class HistoryJpaDatabaseDataStorage extends AbstractHistoryDataStorage {
+public class JpaDatabaseDataStorage extends AbstractHistoryDataStorage {
     private final HistoryDao historyDao;
     private final JpaProperties jpaProperties;
 
     private static final int STRING_MAX_LENGTH = 1024;
 
-    public HistoryJpaDatabaseDataStorage(JpaProperties jpaProperties,
-                                         HistoryDao historyDao) {
+    public JpaDatabaseDataStorage(JpaProperties jpaProperties,
+                                  HistoryDao historyDao) {
         this.jpaProperties = jpaProperties;
         this.serverAvailable = true;
         this.historyDao = historyDao;
@@ -116,7 +115,7 @@ public class HistoryJpaDatabaseDataStorage extends 
AbstractHistoryDataStorage {
     }
 
     @Override
-    void saveData(CollectRep.MetricsData metricsData) {
+    public void saveData(CollectRep.MetricsData metricsData) {
         if (metricsData.getCode() != CollectRep.Code.SUCCESS) {
             return;
         }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/jpa/JpaProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaProperties.java
similarity index 96%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/jpa/JpaProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaProperties.java
index 986b824bf..3b3d7a3b4 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/jpa/JpaProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.jpa;
+package org.apache.hertzbeat.warehouse.store.history.jpa;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java
similarity index 98%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java
index 18643b5d9..d50cf4c3c 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.tdengine;
 
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
@@ -37,7 +37,7 @@ import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.JsonUtil;
-import org.apache.hertzbeat.warehouse.config.store.tdengine.TdEngineProperties;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Component;
@@ -50,7 +50,7 @@ import org.springframework.stereotype.Component;
 @ConditionalOnProperty(prefix = "warehouse.store.td-engine",
         name = "enabled", havingValue = "true")
 @Slf4j
-public class HistoryTdEngineDataStorage extends AbstractHistoryDataStorage {
+public class TdEngineDataStorage extends AbstractHistoryDataStorage {
 
     private static final Pattern SQL_SPECIAL_STRING_PATTERN = 
Pattern.compile("(\\\\)|(')");
     private static final String INSTANCE_NULL = "''";
@@ -71,7 +71,7 @@ public class HistoryTdEngineDataStorage extends 
AbstractHistoryDataStorage {
     private HikariDataSource hikariDataSource;
     private final int tableStrColumnDefineMaxLength;
 
-    public HistoryTdEngineDataStorage(TdEngineProperties tdEngineProperties) {
+    public TdEngineDataStorage(TdEngineProperties tdEngineProperties) {
         if (tdEngineProperties == null) {
             log.error("init error, please config Warehouse TdEngine props in 
application.yml");
             throw new IllegalArgumentException("please config Warehouse 
TdEngine props");
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/tdengine/TdEngineProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineProperties.java
similarity index 96%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/tdengine/TdEngineProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineProperties.java
index 313a8c239..d364d86b4 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/tdengine/TdEngineProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.tdengine;
+package org.apache.hertzbeat.warehouse.store.history.tdengine;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsClusterDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java
similarity index 98%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsClusterDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java
index 27d6a3ddb..4a779c715 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsClusterDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -46,9 +46,7 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.CommonUtil;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.apache.hertzbeat.common.util.TimePeriodUtil;
-import 
org.apache.hertzbeat.warehouse.config.store.vm.cluster.VictoriaMetricsClusterProperties;
-import 
org.apache.hertzbeat.warehouse.config.store.vm.cluster.VictoriaMetricsInsertProperties;
-import 
org.apache.hertzbeat.warehouse.config.store.vm.cluster.VictoriaMetricsSelectProperties;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Primary;
 import org.springframework.http.HttpEntity;
@@ -69,7 +67,7 @@ import org.springframework.web.util.UriComponentsBuilder;
 @Component
 @ConditionalOnProperty(prefix = "warehouse.store.victoria-metrics.cluster", 
name = "enabled", havingValue = "true")
 @Slf4j
-public class HistoryVictoriaMetricsClusterDataStorage extends 
AbstractHistoryDataStorage {
+public class VictoriaMetricsClusterDataStorage extends 
AbstractHistoryDataStorage {
 
     private static final String IMPORT_PATH = "/api/v1/import";
     private static final String EXPORT_PATH = "/api/v1/export";
@@ -90,8 +88,8 @@ public class HistoryVictoriaMetricsClusterDataStorage extends 
AbstractHistoryDat
 
     private final RestTemplate restTemplate;
 
-    public 
HistoryVictoriaMetricsClusterDataStorage(VictoriaMetricsClusterProperties 
vmClusterProps,
-            RestTemplate restTemplate) {
+    public VictoriaMetricsClusterDataStorage(VictoriaMetricsClusterProperties 
vmClusterProps,
+                                             RestTemplate restTemplate) {
         if (vmClusterProps == null) {
             log.error("init error, please config Warehouse victoriaMetrics 
cluster props in application.yml");
             throw new IllegalArgumentException("please config Warehouse 
victoriaMetrics cluster props");
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsClusterProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterProperties.java
similarity index 94%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsClusterProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterProperties.java
index a8e84770b..a89fead34 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsClusterProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.vm.cluster;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java
similarity index 98%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java
index f5e8dca38..6a687fa29 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/HistoryVictoriaMetricsDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import java.math.BigDecimal;
@@ -45,7 +45,7 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
 import org.apache.hertzbeat.common.util.CommonUtil;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.apache.hertzbeat.common.util.TimePeriodUtil;
-import 
org.apache.hertzbeat.warehouse.config.store.vm.VictoriaMetricsProperties;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Primary;
 import org.springframework.http.HttpEntity;
@@ -63,10 +63,9 @@ import org.springframework.web.util.UriComponentsBuilder;
  */
 @Primary
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.victoria-metrics",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.victoria-metrics", name = 
"enabled", havingValue = "true")
 @Slf4j
-public class HistoryVictoriaMetricsDataStorage extends 
AbstractHistoryDataStorage {
+public class VictoriaMetricsDataStorage extends AbstractHistoryDataStorage {
 
     private static final String IMPORT_PATH = "/api/v1/import";
     /**
@@ -91,7 +90,7 @@ public class HistoryVictoriaMetricsDataStorage extends 
AbstractHistoryDataStorag
     
     private final RestTemplate restTemplate;
 
-    public HistoryVictoriaMetricsDataStorage(VictoriaMetricsProperties 
victoriaMetricsProperties, RestTemplate restTemplate) {
+    public VictoriaMetricsDataStorage(VictoriaMetricsProperties 
victoriaMetricsProperties, RestTemplate restTemplate) {
         if (victoriaMetricsProperties == null) {
             log.error("init error, please config Warehouse victoriaMetrics 
props in application.yml");
             throw new IllegalArgumentException("please config Warehouse 
victoriaMetrics props");
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsInsertProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsInsertProperties.java
similarity index 93%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsInsertProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsInsertProperties.java
index 55ccb00bd..be6170ac7 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsInsertProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsInsertProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.vm.cluster;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 /**
  * vminsert configuration information
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/VictoriaMetricsProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsProperties.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/VictoriaMetricsProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsProperties.java
index f6cf555e3..563458511 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/VictoriaMetricsProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.vm;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsSelectProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsSelectProperties.java
similarity index 93%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsSelectProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsSelectProperties.java
index 40326414d..dad163617 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/vm/cluster/VictoriaMetricsSelectProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsSelectProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.vm.cluster;
+package org.apache.hertzbeat.warehouse.store.history.vm;
 
 /**
  * vmselect configuration information
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractRealTimeDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/AbstractRealTimeDataStorage.java
similarity index 93%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractRealTimeDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/AbstractRealTimeDataStorage.java
index 6973cb640..d5f631c53 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/AbstractRealTimeDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/AbstractRealTimeDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.realtime;
 
 import java.util.List;
 import lombok.extern.slf4j.Slf4j;
@@ -42,7 +42,7 @@ public abstract class AbstractRealTimeDataStorage implements 
DisposableBean {
      * save collect metrics data
      * @param metricsData metrics data
      */
-    abstract void saveData(CollectRep.MetricsData metricsData);
+    public abstract void saveData(CollectRep.MetricsData metricsData);
 
     /**
      * query real-time last metrics data
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryDataStorage.java
similarity index 89%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryDataStorage.java
index efcf6fe61..9f28bcf78 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.realtime.memory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -23,7 +23,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.apache.hertzbeat.warehouse.config.store.memory.MemoryProperties;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
@@ -32,10 +32,9 @@ import org.springframework.stereotype.Component;
  * Store and collect real-time data - memory
  */
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.memory",
-        name = "enabled", havingValue = "true", matchIfMissing = true)
+@ConditionalOnProperty(prefix = "warehouse.store.memory", name = "enabled", 
havingValue = "true", matchIfMissing = true)
 @Slf4j
-public class RealTimeMemoryDataStorage extends AbstractRealTimeDataStorage {
+public class MemoryDataStorage extends AbstractRealTimeDataStorage {
 
     /**
      * monitorId -> metricsName -> data
@@ -44,7 +43,7 @@ public class RealTimeMemoryDataStorage extends 
AbstractRealTimeDataStorage {
     private static final Integer DEFAULT_INIT_SIZE = 16;
     private static final Integer METRICS_SIZE = 8;
 
-    public RealTimeMemoryDataStorage(MemoryProperties memoryProperties) {
+    public MemoryDataStorage(MemoryProperties memoryProperties) {
         int initSize = DEFAULT_INIT_SIZE;
         if (memoryProperties != null
                 && memoryProperties.initSize() != null) {
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/memory/MemoryProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryProperties.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/memory/MemoryProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryProperties.java
index 12003e250..8e5dd7acd 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/memory/MemoryProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/memory/MemoryProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.memory;
+package org.apache.hertzbeat.warehouse.store.realtime.memory;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodec.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java
similarity index 96%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodec.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java
index d3b8318b0..7248b2bfa 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodec.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.realtime.redis;
 
 import io.lettuce.core.codec.RedisCodec;
 import java.nio.ByteBuffer;
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorage.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java
similarity index 92%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorage.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java
index e5f25ad10..b9a08953d 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorage.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.store;
+package org.apache.hertzbeat.warehouse.store.realtime.redis;
 
 import io.lettuce.core.RedisClient;
 import io.lettuce.core.RedisURI;
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.apache.hertzbeat.warehouse.config.store.redis.RedisProperties;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Primary;
 import org.springframework.lang.NonNull;
@@ -40,16 +40,15 @@ import org.springframework.stereotype.Component;
  */
 @Primary
 @Component
-@ConditionalOnProperty(prefix = "warehouse.store.redis",
-        name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = "warehouse.store.redis", name = "enabled", 
havingValue = "true")
 @Slf4j
-public class RealTimeRedisDataStorage extends AbstractRealTimeDataStorage {
+public class RedisDataStorage extends AbstractRealTimeDataStorage {
 
     private RedisClient redisClient;
     private final Integer db;
     private StatefulRedisConnection<String, CollectRep.MetricsData> connection;
 
-    public RealTimeRedisDataStorage(RedisProperties redisProperties) {
+    public RedisDataStorage(RedisProperties redisProperties) {
         this.serverAvailable = initRedisClient(redisProperties);
         this.db = getRedisSelectDb(redisProperties);
     }
diff --git 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/redis/RedisProperties.java
 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisProperties.java
similarity index 95%
rename from 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/redis/RedisProperties.java
rename to 
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisProperties.java
index 93f2d5ed9..5263c1784 100644
--- 
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/config/store/redis/RedisProperties.java
+++ 
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisProperties.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.warehouse.config.store.redis;
+package org.apache.hertzbeat.warehouse.store.realtime.redis;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.bind.DefaultValue;
diff --git a/warehouse/src/main/resources/META-INF/spring.factories 
b/warehouse/src/main/resources/META-INF/spring.factories
index 64179dd3e..f155fb825 100644
--- a/warehouse/src/main/resources/META-INF/spring.factories
+++ b/warehouse/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,4 @@
 # limitations under the License.
 
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.hertzbeat.warehouse.config.WarehouseAutoConfiguration
\ No newline at end of file
+org.apache.hertzbeat.warehouse.WarehouseAutoConfiguration
\ No newline at end of file
diff --git 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/controller/MetricsDataControllerTest.java
 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/controller/MetricsDataControllerTest.java
index 6d8c07134..b97384729 100644
--- 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/controller/MetricsDataControllerTest.java
+++ 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/controller/MetricsDataControllerTest.java
@@ -33,8 +33,8 @@ import java.util.Map;
 import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.dto.Value;
 import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.apache.hertzbeat.warehouse.store.AbstractHistoryDataStorage;
-import org.apache.hertzbeat.warehouse.store.AbstractRealTimeDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.AbstractHistoryDataStorage;
+import 
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorageTest.java
 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MemoryDataStorageTest.java
similarity index 87%
rename from 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorageTest.java
rename to 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MemoryDataStorageTest.java
index f5140f58a..ba3a20662 100644
--- 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeRedisDataStorageTest.java
+++ 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MemoryDataStorageTest.java
@@ -17,13 +17,14 @@
 
 package org.apache.hertzbeat.warehouse.store;
 
+import org.apache.hertzbeat.warehouse.store.realtime.memory.MemoryDataStorage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
- * Test case for {@link RealTimeRedisDataStorage}
+ * Test case for {@link MemoryDataStorage}
  */
-class RealTimeRedisDataStorageTest {
+class MemoryDataStorageTest {
 
     @BeforeEach
     void setUp() {
diff --git 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java
 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java
index 81bef4e6b..dd265d8d6 100644
--- 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java
+++ 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.hertzbeat.warehouse.store;
 
+import 
org.apache.hertzbeat.warehouse.store.realtime.redis.MetricsDataRedisCodec;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorageTest.java
 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RedisDataStorageTest.java
similarity index 87%
rename from 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorageTest.java
rename to 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RedisDataStorageTest.java
index bd32658a5..2beae5064 100644
--- 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RealTimeMemoryDataStorageTest.java
+++ 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/RedisDataStorageTest.java
@@ -17,13 +17,14 @@
 
 package org.apache.hertzbeat.warehouse.store;
 
+import org.apache.hertzbeat.warehouse.store.realtime.redis.RedisDataStorage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
- * Test case for {@link RealTimeMemoryDataStorage}
+ * Test case for {@link RedisDataStorage}
  */
-class RealTimeMemoryDataStorageTest {
+class RedisDataStorageTest {
 
     @BeforeEach
     void setUp() {
diff --git 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorageTest.java
 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/TdEngineDataStorageTest.java
similarity index 88%
rename from 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorageTest.java
rename to 
warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/TdEngineDataStorageTest.java
index 4869faab0..dc1cfdef2 100644
--- 
a/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/HistoryTdEngineDataStorageTest.java
+++ 
b/warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/TdEngineDataStorageTest.java
@@ -17,13 +17,14 @@
 
 package org.apache.hertzbeat.warehouse.store;
 
+import 
org.apache.hertzbeat.warehouse.store.history.tdengine.TdEngineDataStorage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
- * Test case for {@link HistoryTdEngineDataStorage}
+ * Test case for {@link TdEngineDataStorage}
  */
-class HistoryTdEngineDataStorageTest {
+class TdEngineDataStorageTest {
 
     @BeforeEach
     void setUp() {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to