[monitor]移除设置菜单,内存缓存替换redis依赖

This commit is contained in:
tomsun28
2022-01-30 15:28:46 +08:00
parent 04b869e4a1
commit fa7d7dd473
8 changed files with 88 additions and 42 deletions

View File

@@ -8,7 +8,7 @@ import com.usthe.common.entity.dto.Value;
import com.usthe.common.entity.dto.ValueRow;
import com.usthe.common.entity.message.CollectRep;
import com.usthe.common.util.CommonConstants;
import com.usthe.warehouse.store.RedisDataStorage;
import com.usthe.warehouse.store.MemoryDataStorage;
import com.usthe.warehouse.store.TdEngineDataStorage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -40,7 +40,7 @@ public class MetricsDataController {
private static final Integer METRIC_FULL_LENGTH = 3;
@Autowired
private RedisDataStorage redisDataStorage;
private MemoryDataStorage memoryDataStorage;
@Autowired
private TdEngineDataStorage tdEngineDataStorage;
@@ -52,7 +52,7 @@ public class MetricsDataController {
@PathVariable Long monitorId,
@ApiParam(value = "监控指标组", example = "cpu")
@PathVariable String metrics) {
CollectRep.MetricsData redisData = redisDataStorage.getCurrentMetricsData(monitorId, metrics);
CollectRep.MetricsData redisData = memoryDataStorage.getCurrentMetricsData(monitorId, metrics);
if (redisData == null) {
return ResponseEntity.ok().body(new Message<>("query metrics data is empty"));
}

View File

@@ -0,0 +1,77 @@
package com.usthe.warehouse.store;
import com.usthe.collector.dispatch.export.MetricsDataExporter;
import com.usthe.common.entity.message.CollectRep;
import com.usthe.warehouse.WarehouseProperties;
import com.usthe.warehouse.WarehouseWorkerPool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* redis存储采集实时数据
* @author tom
* @date 2021/11/25 10:26
*/
@Configuration
@AutoConfigureAfter(value = {WarehouseProperties.class})
@ConditionalOnProperty(prefix = "warehouse.store.memory",
name = "enabled", havingValue = "true", matchIfMissing = true)
@Slf4j
public class MemoryDataStorage implements DisposableBean {
private Map<String, CollectRep.MetricsData> metricsDataMap;
private WarehouseWorkerPool workerPool;
private MetricsDataExporter dataExporter;
public MemoryDataStorage(WarehouseWorkerPool workerPool, MetricsDataExporter dataExporter) {
metricsDataMap = new ConcurrentHashMap<>(1024);
this.workerPool = workerPool;
this.dataExporter = dataExporter;
startStorageData();
}
public CollectRep.MetricsData getCurrentMetricsData(@NonNull Long monitorId, @NonNull String metric) {
String hashKey = monitorId + metric;
return metricsDataMap.get(hashKey);
}
private void startStorageData() {
Runnable runnable = () -> {
Thread.currentThread().setName("warehouse-memory-data-storage");
while (!Thread.currentThread().isInterrupted()) {
try {
CollectRep.MetricsData metricsData = dataExporter.pollMemoryStorageMetricsData();
if (metricsData != null) {
saveData(metricsData);
}
} catch (InterruptedException e) {
log.error(e.getMessage());
}
}
};
workerPool.executeJob(runnable);
}
private void saveData(CollectRep.MetricsData metricsData) {
String hashKey = metricsData.getId() + metricsData.getMetrics();
if (metricsData.getValuesList().isEmpty()) {
log.info("[warehouse] redis flush metrics data {} is null, ignore.", hashKey);
return;
}
metricsDataMap.put(hashKey, metricsData);
}
@Override
public void destroy() throws Exception {
if (metricsDataMap != null) {
metricsDataMap.clear();
}
}
}

View File

@@ -27,7 +27,7 @@ import java.time.temporal.ChronoUnit;
@Configuration
@AutoConfigureAfter(value = {WarehouseProperties.class})
@ConditionalOnProperty(prefix = "warehouse.store.redis",
name = "enabled", havingValue = "true", matchIfMissing = true)
name = "enabled", havingValue = "true", matchIfMissing = false)
@Slf4j
public class RedisDataStorage implements DisposableBean {
@@ -54,7 +54,7 @@ public class RedisDataStorage implements DisposableBean {
Thread.currentThread().setName("warehouse-redis-data-storage");
while (!Thread.currentThread().isInterrupted()) {
try {
CollectRep.MetricsData metricsData = dataExporter.pollWarehouseRedisMetricsData();
CollectRep.MetricsData metricsData = dataExporter.pollMemoryStorageMetricsData();
if (metricsData != null) {
saveData(metricsData);
}

View File

@@ -2,6 +2,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.usthe.warehouse.WarehouseProperties,\
com.usthe.warehouse.MetricsDataQueue,\
com.usthe.warehouse.WarehouseWorkerPool,\
com.usthe.warehouse.store.RedisDataStorage,\
com.usthe.warehouse.store.MemoryDataStorage,\
com.usthe.warehouse.store.TdEngineDataStorage,\
com.usthe.warehouse.controller.MetricsDataController