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 c951b12ec [refactor] split AbstractHistoryDataStorage class (#1926)
c951b12ec is described below
commit c951b12ec4b4cc3e8fcd5b9faa18a7f3eb09a368
Author: xuziyang <[email protected]>
AuthorDate: Wed May 8 09:36:46 2024 +0800
[refactor] split AbstractHistoryDataStorage class (#1926)
Co-authored-by: tomsun28 <[email protected]>
---
.../controller/MetricsDataController.java | 22 ++++++------
.../warehouse/store/DataStorageDispatch.java | 18 +++++-----
.../store/history/AbstractHistoryDataStorage.java | 41 ++--------------------
...toryDataStorage.java => HistoryDataReader.java} | 26 ++++----------
.../warehouse/store/history/HistoryDataWriter.java | 38 ++++++++++++++++++++
.../controller/MetricsDataControllerTest.java | 22 ++++++------
6 files changed, 78 insertions(+), 89 deletions(-)
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 cdab3eb3d..6c6416c3e 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,7 +35,7 @@ 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.history.AbstractHistoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.HistoryDataReader;
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;
@@ -58,20 +58,20 @@ public class MetricsDataController {
private final List<AbstractRealTimeDataStorage> realTimeDataStorages;
- private final List<AbstractHistoryDataStorage> historyDataStorages;
+ private final List<HistoryDataReader> historyDataReaders;
public MetricsDataController(List<AbstractRealTimeDataStorage>
realTimeDataStorages,
- List<AbstractHistoryDataStorage>
historyDataStorages) {
+ List<HistoryDataReader> historyDataReaders) {
this.realTimeDataStorages = realTimeDataStorages;
- this.historyDataStorages = historyDataStorages;
+ this.historyDataReaders = historyDataReaders;
}
@GetMapping("/api/warehouse/storage/status")
@Operation(summary = "Query Warehouse Storage Server Status", description
= "Query the availability status of the storage service under the warehouse")
public ResponseEntity<Message<Void>> getWarehouseStorageServerStatus() {
boolean available = false;
- if (historyDataStorages != null) {
- available =
historyDataStorages.stream().anyMatch(AbstractHistoryDataStorage::isServerAvailable);
+ if (historyDataReaders != null) {
+ available =
historyDataReaders.stream().anyMatch(HistoryDataReader::isServerAvailable);
}
if (available) {
return ResponseEntity.ok(Message.success());
@@ -154,8 +154,8 @@ public class MetricsDataController {
@Parameter(description = "aggregate data calc. off by default;
4-hour window, query limit >1 week", example = "false")
@RequestParam(required = false) Boolean interval
) {
- AbstractHistoryDataStorage historyDataStorage =
historyDataStorages.stream()
-
.filter(AbstractHistoryDataStorage::isServerAvailable).max((o1, o2) -> {
+ HistoryDataReader historyDataReader = historyDataReaders.stream()
+ .filter(HistoryDataReader::isServerAvailable).max((o1, o2) -> {
if (o1 instanceof JpaDatabaseDataStorage) {
return -1;
} else if (o2 instanceof JpaDatabaseDataStorage) {
@@ -164,7 +164,7 @@ public class MetricsDataController {
return 0;
}
}).orElse(null);
- if (historyDataStorage == null) {
+ if (historyDataReader == null) {
return ResponseEntity.ok(Message.fail(FAIL_CODE, "time series
database not available"));
}
String[] names = metricFull.split("\\.");
@@ -179,9 +179,9 @@ public class MetricsDataController {
}
Map<String, List<Value>> instanceValuesMap;
if (interval == null || !interval) {
- instanceValuesMap =
historyDataStorage.getHistoryMetricData(monitorId, app, metrics, metric, label,
history);
+ instanceValuesMap =
historyDataReader.getHistoryMetricData(monitorId, app, metrics, metric, label,
history);
} else {
- instanceValuesMap =
historyDataStorage.getHistoryIntervalMetricData(monitorId, app, metrics,
metric, label, history);
+ instanceValuesMap =
historyDataReader.getHistoryIntervalMetricData(monitorId, app, metrics, metric,
label, history);
}
MetricsHistoryData historyData = MetricsHistoryData.builder()
.id(monitorId).metrics(metrics).values(instanceValuesMap)
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 24e46f008..f59775459 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,7 +22,7 @@ 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.HistoryDataWriter;
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;
@@ -37,16 +37,16 @@ public class DataStorageDispatch {
private final CommonDataQueue commonDataQueue;
private final WarehouseWorkerPool workerPool;
- private final List<AbstractHistoryDataStorage> historyDataStorages;
+ private final List<HistoryDataWriter> historyDataWriters;
private final List<AbstractRealTimeDataStorage> realTimeDataStorages;
public DataStorageDispatch(CommonDataQueue commonDataQueue,
WarehouseWorkerPool workerPool,
- List<AbstractHistoryDataStorage>
historyDataStorages,
+ List<HistoryDataWriter> historyDataWriters,
List<AbstractRealTimeDataStorage>
realTimeDataStorages) {
this.commonDataQueue = commonDataQueue;
this.workerPool = workerPool;
- this.historyDataStorages = historyDataStorages;
+ this.historyDataWriters = historyDataWriters;
this.realTimeDataStorages = realTimeDataStorages;
startPersistentDataStorage();
startRealTimeDataStorage();
@@ -80,12 +80,12 @@ public class DataStorageDispatch {
}
protected void startPersistentDataStorage() {
- if (historyDataStorages == null || historyDataStorages.isEmpty()) {
+ if (historyDataWriters == null || historyDataWriters.isEmpty()) {
log.info("no history data storage start");
return;
}
- if (historyDataStorages.size() > 1) {
-
historyDataStorages.removeIf(JpaDatabaseDataStorage.class::isInstance);
+ if (historyDataWriters.size() > 1) {
+
historyDataWriters.removeIf(JpaDatabaseDataStorage.class::isInstance);
}
Runnable runnable = () -> {
Thread.currentThread().setName("warehouse-persistent-data-storage");
@@ -95,8 +95,8 @@ public class DataStorageDispatch {
if (metricsData == null) {
continue;
}
- for (AbstractHistoryDataStorage historyDataStorage :
historyDataStorages) {
- historyDataStorage.saveData(metricsData);
+ for (HistoryDataWriter historyDataWriter :
historyDataWriters) {
+ historyDataWriter.saveData(metricsData);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
diff --git
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
index 61a8ef567..216e54668 100644
---
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
+++
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
@@ -17,18 +17,14 @@
package org.apache.hertzbeat.warehouse.store.history;
-import java.util.List;
-import java.util.Map;
import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.common.entity.dto.Value;
-import org.apache.hertzbeat.common.entity.message.CollectRep;
-import org.springframework.beans.factory.DisposableBean;
/**
* data storage abstract class
*/
@Slf4j
-public abstract class AbstractHistoryDataStorage implements DisposableBean {
+public abstract class AbstractHistoryDataStorage implements HistoryDataReader,
HistoryDataWriter {
+
protected boolean serverAvailable;
/**
@@ -37,37 +33,4 @@ public abstract class AbstractHistoryDataStorage implements
DisposableBean {
public boolean isServerAvailable() {
return serverAvailable;
}
-
- /**
- * save metrics data
- * @param metricsData metrics data
- */
- public abstract void saveData(CollectRep.MetricsData metricsData);
-
- /**
- * query history range metrics data from tsdb
- * @param monitorId monitor id
- * @param app monitor type
- * @param metrics metrics
- * @param metric metric
- * @param label label
- * @param history range
- * @return metrics data
- */
- public abstract Map<String, List<Value>> getHistoryMetricData(
- Long monitorId, String app, String metrics, String metric, String
label, String history);
-
- /**
- * query history range interval metrics data from tsdb
- * max min mean metrics value
- * @param monitorId monitor id
- * @param app monitor type
- * @param metrics metrics
- * @param metric metric
- * @param label label
- * @param history history range
- * @return metrics data
- */
- public abstract Map<String, List<Value>> getHistoryIntervalMetricData(
- Long monitorId, String app, String metrics, String metric, String
label, String history);
}
diff --git
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataReader.java
similarity index 66%
copy from
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
copy to
warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataReader.java
index 61a8ef567..6055854bb 100644
---
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/AbstractHistoryDataStorage.java
+++
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataReader.java
@@ -19,30 +19,18 @@ package org.apache.hertzbeat.warehouse.store.history;
import java.util.List;
import java.util.Map;
-import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.common.entity.dto.Value;
-import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.springframework.beans.factory.DisposableBean;
/**
- * data storage abstract class
+ *
*/
-@Slf4j
-public abstract class AbstractHistoryDataStorage implements DisposableBean {
- protected boolean serverAvailable;
+public interface HistoryDataReader extends DisposableBean {
/**
* @return data storage available
*/
- public boolean isServerAvailable() {
- return serverAvailable;
- }
-
- /**
- * save metrics data
- * @param metricsData metrics data
- */
- public abstract void saveData(CollectRep.MetricsData metricsData);
+ boolean isServerAvailable();
/**
* query history range metrics data from tsdb
@@ -54,8 +42,8 @@ public abstract class AbstractHistoryDataStorage implements
DisposableBean {
* @param history range
* @return metrics data
*/
- public abstract Map<String, List<Value>> getHistoryMetricData(
- Long monitorId, String app, String metrics, String metric, String
label, String history);
+ Map<String, List<Value>> getHistoryMetricData(Long monitorId, String app,
String metrics, String metric,
+ String label, String history);
/**
* query history range interval metrics data from tsdb
@@ -68,6 +56,6 @@ public abstract class AbstractHistoryDataStorage implements
DisposableBean {
* @param history history range
* @return metrics data
*/
- public abstract Map<String, List<Value>> getHistoryIntervalMetricData(
- Long monitorId, String app, String metrics, String metric, String
label, String history);
+ Map<String, List<Value>> getHistoryIntervalMetricData(Long monitorId,
String app, String metrics, String metric,
+ String label, String history);
}
diff --git
a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataWriter.java
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataWriter.java
new file mode 100644
index 000000000..2b356b509
--- /dev/null
+++
b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/HistoryDataWriter.java
@@ -0,0 +1,38 @@
+/*
+ * 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.store.history;
+
+import org.apache.hertzbeat.common.entity.message.CollectRep;
+import org.springframework.beans.factory.DisposableBean;
+
+/**
+ *
+ */
+public interface HistoryDataWriter extends DisposableBean {
+
+ /**
+ * @return data storage available
+ */
+ boolean isServerAvailable();
+
+ /**
+ * save metrics data
+ * @param metricsData metrics data
+ */
+ void saveData(CollectRep.MetricsData metricsData);
+}
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 b97384729..baf99b0ef 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,7 +33,7 @@ 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.history.AbstractHistoryDataStorage;
+import org.apache.hertzbeat.warehouse.store.history.HistoryDataReader;
import
org.apache.hertzbeat.warehouse.store.realtime.AbstractRealTimeDataStorage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -59,33 +59,33 @@ class MetricsDataControllerTest {
MetricsDataController metricsDataController;
@Mock
- AbstractHistoryDataStorage historyDataStorage;
+ HistoryDataReader historyDataReader;
@Mock
AbstractRealTimeDataStorage realTimeDataStorage;
- private List<AbstractHistoryDataStorage> historyDataStorages = new
LinkedList<>();
+ private List<HistoryDataReader> historyDataReaders = new LinkedList<>();
private List<AbstractRealTimeDataStorage> realTimeDataStorages = new
LinkedList<>();
@BeforeEach
void setUp() {
- historyDataStorages.add(historyDataStorage);
+ historyDataReaders.add(historyDataReader);
realTimeDataStorages.add(realTimeDataStorage);
- metricsDataController = new
MetricsDataController(realTimeDataStorages, historyDataStorages);
+ metricsDataController = new
MetricsDataController(realTimeDataStorages, historyDataReaders);
this.mockMvc =
MockMvcBuilders.standaloneSetup(metricsDataController).build();
}
@Test
void getWarehouseStorageServerStatus() throws Exception {
- when(historyDataStorage.isServerAvailable()).thenReturn(true);
+ when(historyDataReader.isServerAvailable()).thenReturn(true);
this.mockMvc.perform(MockMvcRequestBuilders.get("/api/warehouse/storage/status"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value((int)
CommonConstants.SUCCESS_CODE))
.andExpect(jsonPath("$.data").isEmpty())
.andExpect(jsonPath("$.msg").isEmpty())
.andReturn();
- when(historyDataStorage.isServerAvailable()).thenReturn(false);
+ when(historyDataReader.isServerAvailable()).thenReturn(false);
this.mockMvc.perform(MockMvcRequestBuilders.get("/api/warehouse/storage/status"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value((int)
CommonConstants.FAIL_CODE))
@@ -150,7 +150,7 @@ class MetricsDataControllerTest {
params.add("history", history);
params.add("interval", interval);
- when(historyDataStorage.isServerAvailable()).thenReturn(false);
+ when(historyDataReader.isServerAvailable()).thenReturn(false);
this.mockMvc.perform(MockMvcRequestBuilders.get(getUrl).params(params))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value((int)
CommonConstants.FAIL_CODE))
@@ -158,7 +158,7 @@ class MetricsDataControllerTest {
.andExpect(jsonPath("$.data").isEmpty())
.andReturn();
- when(historyDataStorage.isServerAvailable()).thenReturn(true);
+ when(historyDataReader.isServerAvailable()).thenReturn(true);
ServletException exception = assertThrows(ServletException.class, ()
-> {
this.mockMvc.perform(MockMvcRequestBuilders.get(getUrlFail).params(params))
.andExpect(status().isOk())
@@ -171,8 +171,8 @@ class MetricsDataControllerTest {
final Map<String, List<Value>> instanceValuesMap = new HashMap<>();
List<Value> list = new ArrayList<>();
instanceValuesMap.put(metric, list);
- when(historyDataStorage.isServerAvailable()).thenReturn(true);
- lenient().when(historyDataStorage.getHistoryMetricData(eq(monitorId),
eq(app), eq(metrics), eq(metric),
+ when(historyDataReader.isServerAvailable()).thenReturn(true);
+ lenient().when(historyDataReader.getHistoryMetricData(eq(monitorId),
eq(app), eq(metrics), eq(metric),
eq(instance), eq(history)))
.thenReturn(instanceValuesMap);
this.mockMvc.perform(MockMvcRequestBuilders.get(getUrl).params(params))
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]