From c4fa738d654f0c873de750ff78a96db11dcfbf8e Mon Sep 17 00:00:00 2001 From: aias00 Date: Wed, 7 Aug 2024 09:09:16 +0800 Subject: [PATCH] [improve] add some code style improve (#2481) Co-authored-by: Calvin Co-authored-by: tomsun28 --- .../alert/reduce/AlarmConvergeReduce.java | 2 +- .../AlertDefineYamlImExportServiceTest.java | 28 +- .../collector/collect/jmx/JmxCollectImpl.java | 2 +- .../prometheus/PrometheusAutoCollectImpl.java | 4 +- .../collect/redfish/RedfishCollectImpl.java | 3 +- .../redfish/RedfishConnectSession.java | 3 +- .../collect/telnet/TelnetCollectImpl.java | 3 +- .../dispatch/timer/HashedWheelTimer.java | 2 +- .../collector/dispatch/unit/DataUnit.java | 2 +- .../dispatch/unit/TimeLengthUnit.java | 2 +- .../exporter/ExporterParserTest.java | 79 +-- .../collect/nginx/NginxCollectImplTest.java | 15 +- .../collector/util/PrivateKeyUtilsTest.java | 55 +- .../common/entity/manager/NoticeTemplate.java | 17 +- .../apache/hertzbeat/common/util/AesUtil.java | 30 +- .../hertzbeat/common/util/CommonUtil.java | 8 +- .../hertzbeat/common/util/IpDomainUtil.java | 4 +- .../impl/FlyBookAlertNotifyHandlerImpl.java | 3 +- .../manager/scheduler/ConsistentHash.java | 5 +- .../impl/AbstractImExportServiceImpl.java | 4 +- .../manager/service/impl/AppServiceImpl.java | 6 +- .../impl/ExcelImExportServiceImpl.java | 3 +- .../service/impl/MonitorServiceImpl.java | 4 +- .../service/impl/NoticeConfigServiceImpl.java | 3 +- .../impl/ObsObjectStoreServiceImpl.java | 3 +- ...ngTalkRobotAlertNotifyHandlerImplTest.java | 17 +- .../DiscordBotAlertNotifyHandlerImplTest.java | 15 +- .../FlyBookAlertNotifyHandlerImplTest.java | 15 +- ...weiCloudSmnAlertNotifyHandlerImplTest.java | 17 +- .../impl/SlackAlertNotifyHandlerImplTest.java | 17 +- ...TelegramBotAlertNotifyHandlerImplTest.java | 17 +- .../WeComRobotAlertNotifyHandlerImplTest.java | 17 +- .../controller/MonitorsControllerTest.java | 22 +- .../NoticeConfigControllerTest.java | 15 +- .../manager/service/MonitorServiceTest.java | 43 +- .../greptime/GreptimeDbDataStorage.java | 646 +++++++++--------- .../store/history/iotdb/IotDbDataStorage.java | 19 +- .../history/tdengine/TdEngineDataStorage.java | 5 +- .../vm/VictoriaMetricsClusterDataStorage.java | 9 +- .../vm/VictoriaMetricsDataStorage.java | 9 +- 40 files changed, 600 insertions(+), 573 deletions(-) diff --git a/alerter/src/main/java/org/apache/hertzbeat/alert/reduce/AlarmConvergeReduce.java b/alerter/src/main/java/org/apache/hertzbeat/alert/reduce/AlarmConvergeReduce.java index 2aea1ea7cf..936cb2d8b9 100644 --- a/alerter/src/main/java/org/apache/hertzbeat/alert/reduce/AlarmConvergeReduce.java +++ b/alerter/src/main/java/org/apache/hertzbeat/alert/reduce/AlarmConvergeReduce.java @@ -60,7 +60,7 @@ public class AlarmConvergeReduce { // restored alert boolean isHasIgnore = false; Map tags = currentAlert.getTags(); - if (tags.containsKey(CommonConstants.IGNORE)) { + if (Objects.requireNonNull(tags).containsKey(CommonConstants.IGNORE)) { isHasIgnore = true; tags.remove(CommonConstants.IGNORE); } diff --git a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java index 693e0316f9..840da444fc 100644 --- a/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java +++ b/alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineYamlImExportServiceTest.java @@ -58,18 +58,20 @@ class AlertDefineYamlImExportServiceTest { private AlertDefineYamlImExportServiceImpl service; private static final String YAML_DATA = - "- alertDefine:\n" + - " app: App1\n" + - " metric: Metric1\n" + - " field: Field1\n" + - " preset: true\n" + - " expr: Expr1\n" + - " priority: 1\n" + - " times: 1\n" + - " tags: []\n" + - " enable: true\n" + - " recoverNotice: true\n" + - " template: Template1\n"; + """ + - alertDefine: + app: App1 + metric: Metric1 + field: Field1 + preset: true + expr: Expr1 + priority: 1 + times: 1 + tags: [] + enable: true + recoverNotice: true + template: Template1 + """; private InputStream inputStream; private List alertDefineList; @@ -99,7 +101,7 @@ class AlertDefineYamlImExportServiceTest { } @Test - void testParseImport() throws IllegalAccessException { + void testParseImport() { List result = service.parseImport(inputStream); diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java b/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java index f1c5ef7ea2..fb553a7dd2 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java @@ -108,7 +108,7 @@ public class JmxCollectImpl extends AbstractCollect { attributes = Arrays.stream(attrInfos) .filter(item -> item.isReadable() && attributeNameSet.contains(item.getName())) .map(MBeanFeatureInfo::getName) - .collect(Collectors.toList()).toArray(attributes); + .toList().toArray(attributes); AttributeList attributeList = serverConnection.getAttributes(currentObjectName, attributes); Map attributeValueMap = extractAttributeValue(attributeList); diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java b/collector/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java index b33c5832bc..d1dc2ad5a3 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java @@ -105,7 +105,7 @@ public class PrometheusAutoCollectImpl { String resp = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); long collectTime = System.currentTimeMillis(); builder.setTime(collectTime); - if (resp == null || "".equals(resp)) { + if (resp == null || !StringUtils.hasText(resp)) { log.error("http response content is empty, status: {}.", statusCode); builder.setCode(CollectRep.Code.FAIL); builder.setMsg("http response content is empty"); @@ -161,7 +161,7 @@ public class PrometheusAutoCollectImpl { } PrometheusProtocol protocol = metrics.getPrometheus(); if (protocol.getPath() == null - || "".equals(protocol.getPath()) + || !StringUtils.hasText(protocol.getPath()) || !protocol.getPath().startsWith(RIGHT_DASH)) { protocol.setPath(protocol.getPath() == null ? RIGHT_DASH : RIGHT_DASH + protocol.getPath().trim()); } diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java index 3462c3ebdb..a6e30f5c24 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java @@ -158,8 +158,7 @@ public class RedfishCollectImpl extends AbstractCollect { } String resourceIdPath = "$.Members[*].['@odata.id']"; List resourceIds = JsonPathParser.parseContentWithJsonPath(resp, resourceIdPath); - List res = resourceIds.stream().filter(Objects::nonNull).map(String::valueOf).toList(); - return res; + return resourceIds.stream().filter(Objects::nonNull).map(String::valueOf).toList(); } private List getCollectionResource(String uri, ConnectSession connectSession) { diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishConnectSession.java b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishConnectSession.java index d29ff20267..9107c73312 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishConnectSession.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishConnectSession.java @@ -88,8 +88,7 @@ public class RedfishConnectSession implements ConnectSession { if (statusCode != HttpStatus.SC_OK) { throw new Exception("Http State code: " + statusCode); } - String resp = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); - return resp; + return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); } catch (Exception e) { throw new Exception("Redfish session get resource error:" + e.getMessage()); } finally { diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java b/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java index 134e3d54d2..dbbe8bcac5 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.telnet.TelnetClient; import org.apache.hertzbeat.collector.collect.AbstractCollect; import org.apache.hertzbeat.collector.dispatch.DispatchConstants; @@ -116,7 +117,7 @@ public class TelnetCollectImpl extends AbstractCollect { } private static Map execCmdAndParseResult(TelnetClient telnetClient, String cmd, String app) throws IOException { - if (cmd == null || cmd.trim().length() == 0) { + if (cmd == null || StringUtils.isEmpty(cmd.trim())) { return new HashMap<>(16); } OutputStream outputStream = telnetClient.getOutputStream(); diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/timer/HashedWheelTimer.java b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/timer/HashedWheelTimer.java index eca634e056..866fda2986 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/timer/HashedWheelTimer.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/timer/HashedWheelTimer.java @@ -644,7 +644,7 @@ public class HashedWheelTimer implements Timer { task.run(this); } catch (Throwable t) { if (logger.isWarnEnabled()) { - logger.warn("An exception was thrown by " + TimerTask.class.getSimpleName() + '.', t); + logger.warn("An exception was thrown by {}.", TimerTask.class.getSimpleName(), t); } } } diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/DataUnit.java b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/DataUnit.java index 61dc33d632..8d1068da45 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/DataUnit.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/DataUnit.java @@ -71,7 +71,7 @@ public enum DataUnit { private final String unit; private final long scale; - private DataUnit(String unit, long scale) { + DataUnit(String unit, long scale) { this.unit = unit; this.scale = scale; } diff --git a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/TimeLengthUnit.java b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/TimeLengthUnit.java index 1e90c0e261..b7313a9055 100644 --- a/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/TimeLengthUnit.java +++ b/collector/src/main/java/org/apache/hertzbeat/collector/dispatch/unit/TimeLengthUnit.java @@ -53,7 +53,7 @@ public enum TimeLengthUnit { private final String unit; private final long scale; - private TimeLengthUnit(String unit, long scale) { + TimeLengthUnit(String unit, long scale) { this.unit = unit; this.scale = scale; } diff --git a/collector/src/test/java/org/apache/hertzbeat/collector/collect/http/promethus/exporter/ExporterParserTest.java b/collector/src/test/java/org/apache/hertzbeat/collector/collect/http/promethus/exporter/ExporterParserTest.java index 69145d23a9..680c245651 100644 --- a/collector/src/test/java/org/apache/hertzbeat/collector/collect/http/promethus/exporter/ExporterParserTest.java +++ b/collector/src/test/java/org/apache/hertzbeat/collector/collect/http/promethus/exporter/ExporterParserTest.java @@ -28,45 +28,46 @@ class ExporterParserTest { @Test void textToMetric() { - String resp = "# HELP disk_total_bytes Total space for path\n" - + "# TYPE disk_total_bytes gauge\n" - + "disk_total_bytes{path=\"C:\\\\hertzbeat\\\\repo\\\\testpath\",} 4.29496725504E11\n" - + "# HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime.\n" - + "# TYPE go_gc_cycles_automatic_gc_cycles_total counter\n" - + "go_gc_cycles_automatic_gc_cycles_total 0\n" - + "# HELP go_gc_cycles_forced_gc_cycles_total Count of completed GC cycles forced by the application.\n" - + "# TYPE go_gc_cycles_forced_gc_cycles_total counter\n" - + "go_gc_cycles_forced_gc_cycles_total 0\n" - + "# HELP go_gc_cycles_total_gc_cycles_total Count of all completed GC cycles.\n" - + "# TYPE go_gc_cycles_total_gc_cycles_total counter\n" - + "go_gc_cycles_total_gc_cycles_total 0\n" - + "# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.\n" - + "# TYPE go_gc_duration_seconds summary\n" - + "go_gc_duration_seconds{quantile=\"0\"} 0\n" - + "go_gc_duration_seconds{quantile=\"0.25\"} 0\n" - + "go_gc_duration_seconds{quantile=\"0.5\"} 0\n" - + "go_gc_duration_seconds{quantile=\"0.75\"} 0\n" - + "go_gc_duration_seconds{quantile=\"1\"} 0\n" - + "# TYPE jvm info\n" - + "# HELP jvm VM version info\n" - + "jvm_info{runtime=\"OpenJDK Runtime Environment\",vendor=\"Azul Systems, Inc.\",version=\"11.0.13+8-LTS\"} 1.0\n" - + "# TYPE jvm_gc_collection_seconds summary\n" - + "# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.\n" - + "jvm_gc_collection_seconds_count{gc=\"G1 Young Generation\"} 10.0\n" - + "jvm_gc_collection_seconds_sum{gc=\"G1 Young Generation\"} 0.051\n" - + "jvm_gc_collection_seconds_count{gc=\"G1 Old Generation\"} 0.0\n" - + "jvm_gc_collection_seconds_sum{gc=\"G1 Old Generation\"} 0.0\n" - + "# TYPE resource_group_aggregate_usage_secs summary\n" - + "resource_group_aggregate_usage_secs{cluster=\"standalone\",quantile=\"0.5\"} 2.69245E-4\n" - + "resource_group_aggregate_usage_secs{cluster=\"standalone\",quantile=\"0.9\"} 3.49601E-4\n" - + "resource_group_aggregate_usage_secs_count{cluster=\"standalone\"} 13.0\n" - + "resource_group_aggregate_usage_secs_sum{cluster=\"standalone\"} 0.004832498\n" - + "resource_group_aggregate_usage_secs_created{cluster=\"standalone\"} 1.715842140749E9\n" - + "# TYPE metadata_store_ops_latency_ms histogram\n" - + "metadata_store_ops_latency_ms_bucket{cluster=\"standalone\",name=\"metadata-store\",type=\"get\",status=\"success\",le=\"1.0\"} 59.0\n" - + "metadata_store_ops_latency_ms_bucket{cluster=\"standalone\",name=\"metadata-store\",type=\"get\",status=\"success\",le=\"3.0\"} 61.0\n" - + "metadata_store_ops_latency_ms_bucket{cluster=\"standalone\",name=\"metadata-store\",type=\"get\",status=\"success\",le=\"5.0\"} 61.0\n" - + "# EOF"; + String resp = """ + # HELP disk_total_bytes Total space for path + # TYPE disk_total_bytes gauge + disk_total_bytes{path="C:\\\\hertzbeat\\\\repo\\\\testpath",} 4.29496725504E11 + # HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime. + # TYPE go_gc_cycles_automatic_gc_cycles_total counter + go_gc_cycles_automatic_gc_cycles_total 0 + # HELP go_gc_cycles_forced_gc_cycles_total Count of completed GC cycles forced by the application. + # TYPE go_gc_cycles_forced_gc_cycles_total counter + go_gc_cycles_forced_gc_cycles_total 0 + # HELP go_gc_cycles_total_gc_cycles_total Count of all completed GC cycles. + # TYPE go_gc_cycles_total_gc_cycles_total counter + go_gc_cycles_total_gc_cycles_total 0 + # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. + # TYPE go_gc_duration_seconds summary + go_gc_duration_seconds{quantile="0"} 0 + go_gc_duration_seconds{quantile="0.25"} 0 + go_gc_duration_seconds{quantile="0.5"} 0 + go_gc_duration_seconds{quantile="0.75"} 0 + go_gc_duration_seconds{quantile="1"} 0 + # TYPE jvm info + # HELP jvm VM version info + jvm_info{runtime="OpenJDK Runtime Environment",vendor="Azul Systems, Inc.",version="11.0.13+8-LTS"} 1.0 + # TYPE jvm_gc_collection_seconds summary + # HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds. + jvm_gc_collection_seconds_count{gc="G1 Young Generation"} 10.0 + jvm_gc_collection_seconds_sum{gc="G1 Young Generation"} 0.051 + jvm_gc_collection_seconds_count{gc="G1 Old Generation"} 0.0 + jvm_gc_collection_seconds_sum{gc="G1 Old Generation"} 0.0 + # TYPE resource_group_aggregate_usage_secs summary + resource_group_aggregate_usage_secs{cluster="standalone",quantile="0.5"} 2.69245E-4 + resource_group_aggregate_usage_secs{cluster="standalone",quantile="0.9"} 3.49601E-4 + resource_group_aggregate_usage_secs_count{cluster="standalone"} 13.0 + resource_group_aggregate_usage_secs_sum{cluster="standalone"} 0.004832498 + resource_group_aggregate_usage_secs_created{cluster="standalone"} 1.715842140749E9 + # TYPE metadata_store_ops_latency_ms histogram + metadata_store_ops_latency_ms_bucket{cluster="standalone",name="metadata-store",type="get",status="success",le="1.0"} 59.0 + metadata_store_ops_latency_ms_bucket{cluster="standalone",name="metadata-store",type="get",status="success",le="3.0"} 61.0 + metadata_store_ops_latency_ms_bucket{cluster="standalone",name="metadata-store",type="get",status="success",le="5.0"} 61.0 + # EOF"""; ExporterParser parser = new ExporterParser(); Map metricFamilyMap = parser.textToMetric(resp); diff --git a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java index 53b5f081c5..6ca36483eb 100644 --- a/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java +++ b/collector/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java @@ -346,13 +346,14 @@ public class NginxCollectImplTest { @Test public void testReqStatusMatch() { - String urlContent = "zone_name\tkey\tmax_active\tmax_bw\ttraffic\trequests\tactive\tbandwidth\n" + - "server_addr\t172.17.0.3\t2\t 440\t68K\t23\t1\t 0\n" + - "server_name\tlocalhost\t2\t 440\t68K\t23\t1\t 0\n" + - "server_url\tlocalhost/\t1\t 0\t 0\t4\t0\t 0\n" + - "server_url\tlocalhost/index.html\t1\t 104\t27K\t4\t0\t 0\n" + - "server_url\tlocalhost/nginx-status\t1\t 32\t 9896\t5\t0\t 0\n" + - "server_url\tlocalhost/req-status\t1\t 0\t31K\t10\t1\t 0"; + String urlContent = """ + zone_name\tkey\tmax_active\tmax_bw\ttraffic\trequests\tactive\tbandwidth + server_addr\t172.17.0.3\t2\t 440\t68K\t23\t1\t 0 + server_name\tlocalhost\t2\t 440\t68K\t23\t1\t 0 + server_url\tlocalhost/\t1\t 0\t 0\t4\t0\t 0 + server_url\tlocalhost/index.html\t1\t 104\t27K\t4\t0\t 0 + server_url\tlocalhost/nginx-status\t1\t 32\t 9896\t5\t0\t 0 + server_url\tlocalhost/req-status\t1\t 0\t31K\t10\t1\t 0"""; String[] lines = urlContent.split("\\r?\\n"); List zoneNames = new ArrayList<>(); diff --git a/collector/src/test/java/org/apache/hertzbeat/collector/util/PrivateKeyUtilsTest.java b/collector/src/test/java/org/apache/hertzbeat/collector/util/PrivateKeyUtilsTest.java index a6bcb56f44..68f611aa2d 100644 --- a/collector/src/test/java/org/apache/hertzbeat/collector/util/PrivateKeyUtilsTest.java +++ b/collector/src/test/java/org/apache/hertzbeat/collector/util/PrivateKeyUtilsTest.java @@ -27,33 +27,34 @@ class PrivateKeyUtilsTest { @DisplayName("write key to ~/.ssh") @Test void writePrivateKey() throws IOException { - var key = "-----BEGIN RSA PRIVATE KEY-----\n" - + "MIIEogIBAAKCAQEA4ctFYk/xy89L6/6YFeeMrwCW9lCP/ThXMn+9G63s5bGn4oIN\n" - + "8cEf/JYkmGw8vMP41IAP9dyH8ji2wIZSLeTPWucEK6P6jA01iIBQ95ng6RTsnQgL\n" - + "h4pYHxlEaNHcXkjy5GlMdzaWadjdRevpThGR1VOtWFtK3yoC0c/te2Junu04f+11\n" - + "cpk8QvmVfzrBUooVnG0/7oekwUy1c5sSl0qVoLzXOv4XG9w34cyvacFC30zv1Nl8\n" - + "ASi2pmOBVx9njPvqQ7qZrDk0nwn+RZUmGh/PbmHxrBV7ZA5NjZcEnf2VGIfjGUVu\n" - + "qE4VnkbvS4j03afV2rsp1yo74K+k/ZC6GCHB5QIBIwKCAQBG9r4I9I3SVxfcdJYy\n" - + "xR2WFiDREgFeNkdKYqkl9NVsws5dIY9am8g5cQQv54DNnK1KGZ6dulaclXtD0nGZ\n" - + "ZSs505OYr+EHcd2f7dBN0Uavp32QcD4jSLycD0FixZ0HsIbaEnceJxlUd1t8YBYf\n" - + "2aLcpUUbxOulORbUOgjPAa286uDeQYN5IbdruDfvbuFFm7hBoGZoKLJ7FPcJ0U3A\n" - + "14KRK+Z1oCYJIS0ubaHbhaPIVPPQEmTNHpsvxIJXfZtVy9+XIuBGmD3+Aq6SSFPC\n" - + "A8mU1iKzzdRCXZwvPeUiivIIZc6DRXjhtJ2Lya/XndKidOT/QUj8Z+f9pWAonlzM\n" - + "3PMXAoGBAPvzctkkDjUJjLyEuYQq8soYokS4n4ykFTP5oFgnodK/cYocbxTT6Tn9\n" - + "vH7b6lK6ZAf+tZk8rcEeIO650pOvmaa1/OuZSxfcFUGBvOvYXiHF7zmkePh/pQgB\n" - + "7Cl0RYrI52Cjbd9aCUIYK3A82qsUq30INGeOhMNrfaHn2pgx8xlDAoGBAOVsNctw\n" - + "CHnLaIQX8eS+eUcQEm+NZppnDBJavdpP48ZZM/t5v/2fQ5ytbYqk0KEzIGu0dP8g\n" - + "jfB76JbMvStvTfB+TrXsfhGyA3oJrEcG+3IUshsRU2sohT1ScY27z2VMLgilnWvF\n" - + "7t49sQm9uB/yn669n8LIciHxDItOpvqgKdG3AoGBAO2NxA6PtZ+4jAIz/19bsbc7\n" - + "zDIqaovrKe8tMMglXg/ZE0e0aLvdvqRkRAKU1Z51Ob5lLuDwEYoyWZCgk1gL90Vp\n" - + "wpT+P3zlcyCBo39IWMDB8C8IydRbF/GbaaNtoKds92m+qWwwUd87XCf+3M0wvvI6\n" - + "75TW1PLEbyOgFz8Khh8hAoGBAJbDc87Ul9sCAtp2Ip2hvWk2coPR8vfADz9C8cn5\n" - + "/BShBOcVfipSt2b1n8GCP/TnFU4XgBVeiSkA9+4Rg6AzMzejdY1+JvWvfqCnRVM/\n" - + "GkOnMzZb17tyZi+ck8OKC/IcHkAyUYFWL0GWQSOojvBsPQxt+0V8aEIwsHjNSSha\n" - + "nyNpAoGAd0XqdByRxbWgg5ZsvM0tvrpMITpEZsGMG9VeQPGl0wsQvC2zw5QGLvz/\n" - + "57YhofOOr0M3yElcFA9Imvek5CYZsyL8eIWGZyadfRiYvGOUyvDDO3BYRG4DmhyF\n" - + "KVk3URjEuOCC29ORvZ/7HaCO9iuEbvAA/mrAtd7KdCA+3PzfEOw=\n" - + "-----END RSA PRIVATE KEY-----"; + var key = """ + -----BEGIN RSA PRIVATE KEY----- + MIIEogIBAAKCAQEA4ctFYk/xy89L6/6YFeeMrwCW9lCP/ThXMn+9G63s5bGn4oIN + 8cEf/JYkmGw8vMP41IAP9dyH8ji2wIZSLeTPWucEK6P6jA01iIBQ95ng6RTsnQgL + h4pYHxlEaNHcXkjy5GlMdzaWadjdRevpThGR1VOtWFtK3yoC0c/te2Junu04f+11 + cpk8QvmVfzrBUooVnG0/7oekwUy1c5sSl0qVoLzXOv4XG9w34cyvacFC30zv1Nl8 + ASi2pmOBVx9njPvqQ7qZrDk0nwn+RZUmGh/PbmHxrBV7ZA5NjZcEnf2VGIfjGUVu + qE4VnkbvS4j03afV2rsp1yo74K+k/ZC6GCHB5QIBIwKCAQBG9r4I9I3SVxfcdJYy + xR2WFiDREgFeNkdKYqkl9NVsws5dIY9am8g5cQQv54DNnK1KGZ6dulaclXtD0nGZ + ZSs505OYr+EHcd2f7dBN0Uavp32QcD4jSLycD0FixZ0HsIbaEnceJxlUd1t8YBYf + 2aLcpUUbxOulORbUOgjPAa286uDeQYN5IbdruDfvbuFFm7hBoGZoKLJ7FPcJ0U3A + 14KRK+Z1oCYJIS0ubaHbhaPIVPPQEmTNHpsvxIJXfZtVy9+XIuBGmD3+Aq6SSFPC + A8mU1iKzzdRCXZwvPeUiivIIZc6DRXjhtJ2Lya/XndKidOT/QUj8Z+f9pWAonlzM + 3PMXAoGBAPvzctkkDjUJjLyEuYQq8soYokS4n4ykFTP5oFgnodK/cYocbxTT6Tn9 + vH7b6lK6ZAf+tZk8rcEeIO650pOvmaa1/OuZSxfcFUGBvOvYXiHF7zmkePh/pQgB + 7Cl0RYrI52Cjbd9aCUIYK3A82qsUq30INGeOhMNrfaHn2pgx8xlDAoGBAOVsNctw + CHnLaIQX8eS+eUcQEm+NZppnDBJavdpP48ZZM/t5v/2fQ5ytbYqk0KEzIGu0dP8g + jfB76JbMvStvTfB+TrXsfhGyA3oJrEcG+3IUshsRU2sohT1ScY27z2VMLgilnWvF + 7t49sQm9uB/yn669n8LIciHxDItOpvqgKdG3AoGBAO2NxA6PtZ+4jAIz/19bsbc7 + zDIqaovrKe8tMMglXg/ZE0e0aLvdvqRkRAKU1Z51Ob5lLuDwEYoyWZCgk1gL90Vp + wpT+P3zlcyCBo39IWMDB8C8IydRbF/GbaaNtoKds92m+qWwwUd87XCf+3M0wvvI6 + 75TW1PLEbyOgFz8Khh8hAoGBAJbDc87Ul9sCAtp2Ip2hvWk2coPR8vfADz9C8cn5 + /BShBOcVfipSt2b1n8GCP/TnFU4XgBVeiSkA9+4Rg6AzMzejdY1+JvWvfqCnRVM/ + GkOnMzZb17tyZi+ck8OKC/IcHkAyUYFWL0GWQSOojvBsPQxt+0V8aEIwsHjNSSha + nyNpAoGAd0XqdByRxbWgg5ZsvM0tvrpMITpEZsGMG9VeQPGl0wsQvC2zw5QGLvz/ + 57YhofOOr0M3yElcFA9Imvek5CYZsyL8eIWGZyadfRiYvGOUyvDDO3BYRG4DmhyF + KVk3URjEuOCC29ORvZ/7HaCO9iuEbvAA/mrAtd7KdCA+3PzfEOw= + -----END RSA PRIVATE KEY-----"""; PrivateKeyUtils.writePrivateKey("127.0.0.1", key); } } diff --git a/common/src/main/java/org/apache/hertzbeat/common/entity/manager/NoticeTemplate.java b/common/src/main/java/org/apache/hertzbeat/common/entity/manager/NoticeTemplate.java index 7f1a99deaa..45788f6452 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/entity/manager/NoticeTemplate.java +++ b/common/src/main/java/org/apache/hertzbeat/common/entity/manager/NoticeTemplate.java @@ -89,14 +89,15 @@ public class NoticeTemplate { @Schema(title = "Template content", description = "Template content", - example = "[${title}]\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}", accessMode = READ_WRITE) + example = """ + [${title}] + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}""", accessMode = READ_WRITE) @Size(max = 60000) @Lob @NotBlank diff --git a/common/src/main/java/org/apache/hertzbeat/common/util/AesUtil.java b/common/src/main/java/org/apache/hertzbeat/common/util/AesUtil.java index 2068397d9e..b5681aac8b 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/util/AesUtil.java +++ b/common/src/main/java/org/apache/hertzbeat/common/util/AesUtil.java @@ -106,15 +106,7 @@ public final class AesUtil { */ public static String aesDecode(String content, String decryptKey) { try { - SecretKeySpec keySpec = new SecretKeySpec(decryptKey.getBytes(StandardCharsets.UTF_8), AES); - // cipher based on the algorithm AES - Cipher cipher = Cipher.getInstance(ALGORITHM_STR); - // init cipher Encrypt_mode or Decrypt_mode operation, the second parameter is the KEY used - cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(decryptKey.getBytes(StandardCharsets.UTF_8))); - // base64 decode content - byte[] bytesContent = Base64.getDecoder().decode(content); - // decode content to byte array - byte[] byteDecode = cipher.doFinal(bytesContent); + byte[] byteDecode = getBytes(content, decryptKey); return new String(byteDecode, StandardCharsets.UTF_8); } catch (BadPaddingException e) { if (!ENCODE_RULES.equals(decryptKey)) { @@ -134,7 +126,19 @@ public final class AesUtil { } return content; } - + + private static byte[] getBytes(final String content, final String decryptKey) throws Exception { + SecretKeySpec keySpec = new SecretKeySpec(decryptKey.getBytes(StandardCharsets.UTF_8), AES); + // cipher based on the algorithm AES + Cipher cipher = Cipher.getInstance(ALGORITHM_STR); + // init cipher Encrypt_mode or Decrypt_mode operation, the second parameter is the KEY used + cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(decryptKey.getBytes(StandardCharsets.UTF_8))); + // base64 decode content + byte[] bytesContent = Base64.getDecoder().decode(content); + // decode content to byte array + return cipher.doFinal(bytesContent); + } + /** * Determine whether it is encrypted * @param text text @@ -145,11 +149,7 @@ public final class AesUtil { if (Base64Util.isBase64(text)) { // if it is base64, decrypt directly to determine try { - SecretKeySpec keySpec = new SecretKeySpec(decryptKey.getBytes(StandardCharsets.UTF_8), AES); - Cipher cipher = Cipher.getInstance(ALGORITHM_STR); - cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(decryptKey.getBytes(StandardCharsets.UTF_8))); - byte[] bytesContent = Base64.getDecoder().decode(text); - byte[] byteDecode = cipher.doFinal(bytesContent); + byte[] byteDecode = getBytes(text, decryptKey); return byteDecode != null; } catch (Exception e) { log.warn("isCiphertext method error: {}", e.getMessage()); diff --git a/common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java b/common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java index a84206f380..88c0e71679 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java +++ b/common/src/main/java/org/apache/hertzbeat/common/util/CommonUtil.java @@ -178,16 +178,16 @@ public final class CommonUtil { if (cause != null) { message = cause.getMessage(); } - if (message == null || "".equals(message)) { + if (message == null || StringUtils.isBlank(message)) { message = throwable.getMessage(); } - if (message == null || "".equals(message)) { + if (message == null || StringUtils.isBlank(message)) { message = throwable.getLocalizedMessage(); } - if (message == null || "".equals(message)) { + if (message == null || StringUtils.isBlank(message)) { message = throwable.toString(); } - if (message == null || "".equals(message)) { + if (message == null || StringUtils.isBlank(message)) { message = "unknown error."; } return message; diff --git a/common/src/main/java/org/apache/hertzbeat/common/util/IpDomainUtil.java b/common/src/main/java/org/apache/hertzbeat/common/util/IpDomainUtil.java index 886a5200e1..4c4c1396bc 100644 --- a/common/src/main/java/org/apache/hertzbeat/common/util/IpDomainUtil.java +++ b/common/src/main/java/org/apache/hertzbeat/common/util/IpDomainUtil.java @@ -53,7 +53,7 @@ public final class IpDomainUtil { * @return true-yes false-no */ public static boolean validateIpDomain(String ipDomain) { - if (ipDomain == null || "".equals(ipDomain)) { + if (ipDomain == null || !StringUtils.hasText(ipDomain)) { return false; } ipDomain = ipDomain.trim(); @@ -75,7 +75,7 @@ public final class IpDomainUtil { * @return true or false */ public static boolean isHasSchema(String domainIp) { - if (domainIp == null || "".equals(domainIp)) { + if (domainIp == null || !StringUtils.hasText(domainIp)) { return false; } return DOMAIN_SCHEMA.matcher(domainIp).matches(); diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImpl.java index 0ee227fdb3..6c5c4ceaaa 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImpl.java @@ -21,7 +21,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -85,7 +84,7 @@ final class FlyBookAlertNotifyHandlerImpl extends AbstractAlertNotifyHandlerImpl atContent.setUserId(userID); return atContent; }) - .collect(Collectors.toList()); + .toList(); contentList.addAll(atContents); } diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/ConsistentHash.java b/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/ConsistentHash.java index 7e08b7770f..44d1707aaf 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/ConsistentHash.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/scheduler/ConsistentHash.java @@ -30,6 +30,7 @@ import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.CommonConstants; /** @@ -215,7 +216,7 @@ public class ConsistentHash { * @return collector node */ public Node dispatchJob(String dispatchKey, Long jobId) { - if (dispatchKey == null || "".equals(dispatchKey)) { + if (dispatchKey == null || StringUtils.isBlank(dispatchKey)) { log.error("The dispatch key can not null."); return null; } @@ -230,7 +231,7 @@ public class ConsistentHash { * @return collector node */ public Node preDispatchJob(String dispatchKey) { - if (dispatchKey == null || "".equals(dispatchKey)) { + if (dispatchKey == null || StringUtils.isBlank(dispatchKey)) { log.error("The dispatch key can not null."); return null; } diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java index 079f67bc27..5c6ee688f0 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AbstractImExportServiceImpl.java @@ -62,7 +62,7 @@ public abstract class AbstractImExportServiceImpl implements ImExportService { var formList = parseImport(is) .stream() .map(this::convert) - .collect(Collectors.toUnmodifiableList()); + .toList(); if (!CollectionUtils.isEmpty(formList)) { formList.forEach(monitorDto -> { monitorService.validate(monitorDto, false); @@ -80,7 +80,7 @@ public abstract class AbstractImExportServiceImpl implements ImExportService { .map(it -> monitorService.getMonitorDto(it)) .filter(Objects::nonNull) .map(this::convert) - .collect(Collectors.toUnmodifiableList()); + .toList(); writeOs(monitorList, os); } diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java index 8f27b29752..713172b9c1 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java @@ -130,7 +130,7 @@ public class AppServiceImpl implements AppService, CommandLineRunner { List params = paramDao.findParamsByMonitorId(monitorId); List configmaps = params.stream() .map(param -> new Configmap(param.getField(), param.getParamValue(), - param.getType())).collect(Collectors.toList()); + param.getType())).toList(); Map configmap = configmaps.stream().collect(Collectors.toMap(Configmap::getKey, item -> item, (key1, key2) -> key1)); CollectUtil.replaceFieldsForPushStyleMonitor(metric, configmap); metricsTmp.add(metric); @@ -197,10 +197,10 @@ public class AppServiceImpl implements AppService, CommandLineRunner { if (appDefine == null) { throw new IllegalArgumentException("The app " + app + " not support."); } - metricNames.addAll(appDefine.getMetrics().stream().map(Metrics::getName).collect(Collectors.toList())); + metricNames.addAll(appDefine.getMetrics().stream().map(Metrics::getName).toList()); } else { appDefines.forEach((k, v) -> - metricNames.addAll(v.getMetrics().stream().map(Metrics::getName).collect(Collectors.toList()))); + metricNames.addAll(v.getMetrics().stream().map(Metrics::getName).toList())); } return metricNames; } diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ExcelImExportServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ExcelImExportServiceImpl.java index 8672993b70..b3802dd7f0 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ExcelImExportServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ExcelImExportServiceImpl.java @@ -29,6 +29,7 @@ import java.util.Objects; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; @@ -302,7 +303,7 @@ public class ExcelImExportServiceImpl extends AbstractImExportServiceImpl{ valueCell.setCellStyle(cellStyle); } } - if (paramList.size() > 0) { + if (CollectionUtils.isNotEmpty(paramList)) { RegionUtil.setBorderTop(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet); RegionUtil.setBorderBottom(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet); RegionUtil.setBorderLeft(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet); diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java index 91f3778ceb..fb62c740c3 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java @@ -377,7 +377,7 @@ public class MonitorServiceImpl implements MonitorService { if (paramDefine.isRequired() && (param == null || param.getParamValue() == null)) { throw new IllegalArgumentException("Params field " + field + " is required."); } - if (param != null && param.getParamValue() != null && !"".equals(param.getParamValue())) { + if (param != null && param.getParamValue() != null && StringUtils.hasText(param.getParamValue())) { switch (paramDefine.getType()) { case "number": double doubleValue; @@ -748,7 +748,7 @@ public class MonitorServiceImpl implements MonitorService { new Configmap(param.getField(), param.getParamValue(), param.getType())).collect(Collectors.toList()); List paramDefaultValue = appDefine.getParams().stream() .filter(item -> StringUtils.hasText(item.getDefaultValue())) - .collect(Collectors.toList()); + .toList(); paramDefaultValue.forEach(defaultVar -> { if (configmaps.stream().noneMatch(item -> item.getKey().equals(defaultVar.getField()))) { Configmap configmap = new Configmap(defaultVar.getField(), defaultVar.getDefaultValue(), (byte) 1); diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java index efb3a8a6e1..94e0aeb7cd 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java @@ -31,6 +31,7 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.cache.CacheFactory; import org.apache.hertzbeat.common.cache.CommonCacheService; import org.apache.hertzbeat.common.constants.CommonConstants; @@ -100,7 +101,7 @@ public class NoticeConfigServiceImpl implements NoticeConfigService, CommandLine public List getNoticeTemplates(String name) { Specification specification = (root, query, criteriaBuilder) -> { Predicate predicate = criteriaBuilder.conjunction(); - if (name != null && !"".equals(name)) { + if (name != null && StringUtils.isNoneBlank(name)) { Predicate predicateName = criteriaBuilder.like(root.get("name"), "%" + name + "%"); predicate = criteriaBuilder.and(predicateName); } diff --git a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ObsObjectStoreServiceImpl.java b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ObsObjectStoreServiceImpl.java index 3dc01e1cd3..4d839d1d09 100644 --- a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ObsObjectStoreServiceImpl.java +++ b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ObsObjectStoreServiceImpl.java @@ -22,7 +22,6 @@ import com.obs.services.model.ListObjectsRequest; import java.io.InputStream; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.constants.SignConstants; import org.apache.hertzbeat.manager.pojo.dto.FileDTO; @@ -86,7 +85,7 @@ public class ObsObjectStoreServiceImpl implements ObjectStoreService { return obsClient.listObjects(request).getObjects() .stream() .map(it -> new FileDTO(it.getObjectKey(), it.getObjectContent())) - .collect(Collectors.toUnmodifiableList()); + .toList(); } @Override diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DingTalkRobotAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DingTalkRobotAlertNotifyHandlerImplTest.java index 0df9e7bc47..a89afc771d 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DingTalkRobotAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DingTalkRobotAlertNotifyHandlerImplTest.java @@ -52,14 +52,15 @@ class DingTalkRobotAlertNotifyHandlerImplTest extends AbstractSpringIntegrationT NoticeTemplate noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("dingding"); - noticeTemplate.setContent("#### [${title}]\n" - + "##### **${targetLabel}** : ${target}\n" - + "<#if (monitorId??)>##### **${monitorIdLabel}** : ${monitorId} \n" - + "<#if (monitorName??)>##### **${monitorNameLabel}** : ${monitorName} \n" - + "<#if (monitorHost??)>##### **${monitorHostLabel}** : ${monitorHost} \n" - + "##### **${priorityLabel}** : ${priority}\n" - + "##### **${triggerTimeLabel}** : ${triggerTime}\n" - + "##### **${contentLabel}** : ${content}"); + noticeTemplate.setContent(""" + #### [${title}] + ##### **${targetLabel}** : ${target} + <#if (monitorId??)>##### **${monitorIdLabel}** : ${monitorId} + <#if (monitorName??)>##### **${monitorNameLabel}** : ${monitorName} + <#if (monitorHost??)>##### **${monitorHostLabel}** : ${monitorHost} + ##### **${priorityLabel}** : ${priority} + ##### **${triggerTimeLabel}** : ${triggerTime} + ##### **${contentLabel}** : ${content}"""); Alert alert = new Alert(); alert.setId(1L); alert.setTarget("Mock Target"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DiscordBotAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DiscordBotAlertNotifyHandlerImplTest.java index f357370149..04d5673990 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DiscordBotAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/DiscordBotAlertNotifyHandlerImplTest.java @@ -53,13 +53,14 @@ class DiscordBotAlertNotifyHandlerImplTest extends AbstractSpringIntegrationTest var noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("DiscordBot"); - noticeTemplate.setContent("${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); var alert = new Alert(); alert.setId(1L); alert.setTarget("Mock Target"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImplTest.java index 3d92ae3adb..f66bc82cec 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/FlyBookAlertNotifyHandlerImplTest.java @@ -52,13 +52,14 @@ class FlyBookAlertNotifyHandlerImplTest extends AbstractSpringIntegrationTest { NoticeTemplate noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("FlyBook"); - noticeTemplate.setContent("{targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + {targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); Alert alert = new Alert(); alert.setId(1L); alert.setTarget("Mock Target"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/HuaweiCloudSmnAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/HuaweiCloudSmnAlertNotifyHandlerImplTest.java index ed25968d88..fb19e220d2 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/HuaweiCloudSmnAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/HuaweiCloudSmnAlertNotifyHandlerImplTest.java @@ -73,14 +73,15 @@ class HuaweiCloudSmnAlertNotifyHandlerImplTest extends AbstractSpringIntegration var noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("HuaWeiCloud"); - noticeTemplate.setContent("[${title}]\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + [${title}] + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); var alert = new Alert(); alert.setId(1L); alert.setTarget("Mock Target"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/SlackAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/SlackAlertNotifyHandlerImplTest.java index d12790e8d6..6bb188f0bf 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/SlackAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/SlackAlertNotifyHandlerImplTest.java @@ -55,14 +55,15 @@ class SlackAlertNotifyHandlerImplTest extends AbstractSpringIntegrationTest { var noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("Slack"); - noticeTemplate.setContent("*[${title}]*\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + *[${title}]* + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); var map = Map.of( CommonConstants.TAG_MONITOR_ID, "Mock monitor id", CommonConstants.TAG_MONITOR_NAME, "Mock monitor name", diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/TelegramBotAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/TelegramBotAlertNotifyHandlerImplTest.java index ec2afb9974..62183b0a8d 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/TelegramBotAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/TelegramBotAlertNotifyHandlerImplTest.java @@ -58,14 +58,15 @@ class TelegramBotAlertNotifyHandlerImplTest extends AbstractSpringIntegrationTes NoticeTemplate noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("Telegram"); - noticeTemplate.setContent("[${title}]\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + [${title}] + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); Map map = new HashMap<>(); map.put(CommonConstants.TAG_MONITOR_ID, "Mock monitor id"); map.put(CommonConstants.TAG_MONITOR_NAME, "Mock monitor name"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/WeComRobotAlertNotifyHandlerImplTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/WeComRobotAlertNotifyHandlerImplTest.java index 1fde648e2b..23b8ff110d 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/WeComRobotAlertNotifyHandlerImplTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/component/alerter/impl/WeComRobotAlertNotifyHandlerImplTest.java @@ -55,14 +55,15 @@ class WeComRobotAlertNotifyHandlerImplTest extends AbstractSpringIntegrationTest NoticeTemplate noticeTemplate = new NoticeTemplate(); noticeTemplate.setId(1L); noticeTemplate.setName("WeWork"); - noticeTemplate.setContent("[${title}]\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "<#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + noticeTemplate.setContent(""" + [${title}] + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + <#if (monitorHost??)>${monitorHostLabel} : ${monitorHost} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); Map map = new HashMap<>(); map.put(CommonConstants.TAG_MONITOR_ID, "Mock monitor id"); map.put(CommonConstants.TAG_MONITOR_NAME, "Mock monitor name"); diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/controller/MonitorsControllerTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/controller/MonitorsControllerTest.java index 5c630dcf43..b6fa913914 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/controller/MonitorsControllerTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/controller/MonitorsControllerTest.java @@ -17,14 +17,6 @@ package org.apache.hertzbeat.manager.controller; -import static org.mockito.Mockito.doNothing; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.util.JsonUtil; import org.apache.hertzbeat.manager.service.impl.MonitorServiceImpl; @@ -39,7 +31,15 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static org.mockito.Mockito.doNothing; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * Test case for {@link MonitorsController} @@ -128,7 +128,7 @@ class MonitorsControllerTest { String type = "JSON"; this.mockMvc.perform(MockMvcRequestBuilders.get("/api/monitors/export") - .param("ids", String.join(",", ids.stream().map(String::valueOf).collect(Collectors.toList()))) + .param("ids", ids.stream().map(String::valueOf).collect(Collectors.joining(","))) .param("type", type)) .andExpect(status().isOk()) .andReturn(); @@ -137,7 +137,7 @@ class MonitorsControllerTest { @Test void export2() throws Exception { // Mock the behavior of monitorService.importConfig - doNothing().when(monitorService).importConfig((MultipartFile) Mockito.any()); + doNothing().when(monitorService).importConfig(Mockito.any()); // Perform the request and verify the response this.mockMvc.perform(MockMvcRequestBuilders.post("/api/monitors/import") diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/controller/NoticeConfigControllerTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/controller/NoticeConfigControllerTest.java index 8ba3ef2912..1e753d263e 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/controller/NoticeConfigControllerTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/controller/NoticeConfigControllerTest.java @@ -99,13 +99,14 @@ class NoticeConfigControllerTest { NoticeTemplate template = new NoticeTemplate(); template.setId(5L); template.setName("Dingding"); - template.setContent("[${title}]\n" - + "${targetLabel} : ${target}\n" - + "<#if (monitorId??)>${monitorIdLabel} : ${monitorId} \n" - + "<#if (monitorName??)>${monitorNameLabel} : ${monitorName} \n" - + "${priorityLabel} : ${priority}\n" - + "${triggerTimeLabel} : ${triggerTime}\n" - + "${contentLabel} : ${content}"); + template.setContent(""" + [${title}] + ${targetLabel} : ${target} + <#if (monitorId??)>${monitorIdLabel} : ${monitorId} + <#if (monitorName??)>${monitorNameLabel} : ${monitorName} + ${priorityLabel} : ${priority} + ${triggerTimeLabel} : ${triggerTime} + ${contentLabel} : ${content}"""); template.setType((byte) 5); return template; diff --git a/manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java b/manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java index fcb91ae6cb..fc66ea556d 100644 --- a/manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java +++ b/manager/src/test/java/org/apache/hertzbeat/manager/service/MonitorServiceTest.java @@ -17,25 +17,6 @@ package org.apache.hertzbeat.manager.service; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; import org.apache.hertzbeat.alert.dao.AlertDefineBindDao; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.alerter.Alert; @@ -72,6 +53,26 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.Specification; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + /** * newBranch feature-clickhouse#179 * ... @@ -742,7 +743,7 @@ class MonitorServiceTest { when(appService.getAppDefine(monitor.getApp())).thenReturn(job); List params = Collections.singletonList(new Param()); - List metrics = Arrays.asList(); + List metrics = List.of(); try { monitorService.addNewMonitorOptionalMetrics(metrics, monitor, params); } catch (MonitorMetricsException e) { @@ -750,7 +751,7 @@ class MonitorServiceTest { } reset(); when(monitorDao.save(monitor)).thenThrow(RuntimeException.class); - metrics = Arrays.asList("metric-001"); + metrics = List.of("metric-001"); List metricsDefine = new ArrayList<>(); Metrics e = new Metrics(); e.setName("metric-001"); diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java index d0c499563e..1e039188f2 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java @@ -47,6 +47,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; @@ -57,374 +58,373 @@ import org.springframework.stereotype.Component; /** * GreptimeDB data storage, only supports GreptimeDB version >= v0.5 - * */ @Component @ConditionalOnProperty(prefix = "warehouse.store.greptime", name = "enabled", havingValue = "true") @Slf4j public class GreptimeDbDataStorage extends AbstractHistoryDataStorage { - + private static final String CONSTANT_DB_TTL = "30d"; - + private static final String QUERY_HISTORY_SQL = "SELECT CAST (ts AS Int64) ts, instance, `%s` FROM `%s` WHERE ts >= now() - interval '%s' and monitor_id = %s order by ts desc;"; - + @SuppressWarnings("checkstyle:LineLength") private static final String QUERY_HISTORY_WITH_INSTANCE_SQL = "SELECT CAST (ts AS Int64) ts, instance, `%s` FROM `%s` WHERE ts >= now() - interval '%s' and monitor_id = %s and instance = '%s' order by ts desc;"; - + private static final String QUERY_INSTANCE_SQL = "SELECT DISTINCT instance FROM `%s` WHERE ts >= now() - interval '1 WEEK'"; - + @SuppressWarnings("checkstyle:LineLength") private static final String QUERY_HISTORY_INTERVAL_WITH_INSTANCE_SQL = "SELECT CAST (ts AS Int64) ts, first_value(`%s`) range '4h' first, avg(`%s`) range '4h' avg, min(`%s`) range '4h' min, max(`%s`) range '4h' max FROM `%s` WHERE instance = '%s' AND ts >= now() - interval '%s' ALIGN '4h'"; - + private static final String TABLE_NOT_EXIST = "not found"; - + private static final String CONSTANTS_CREATE_DATABASE = "CREATE DATABASE IF NOT EXISTS `%s` WITH(ttl='%s')"; - + private static final Runnable INSTANCE_EXCEPTION_PRINT = () -> { - if (log.isErrorEnabled()) { - log.error(""" - \t---------------GreptimeDB Init Failed--------------- - \t--------------Please Config GreptimeDB-------------- - t-----------Can Not Use Metric History Now----------- - """); - } + if (log.isErrorEnabled()) { + log.error(""" + \t---------------GreptimeDB Init Failed--------------- + \t--------------Please Config GreptimeDB-------------- + t-----------Can Not Use Metric History Now----------- + """); + } }; - + private HikariDataSource hikariDataSource; - + private GreptimeDB greptimeDb; - + public GreptimeDbDataStorage(GreptimeProperties greptimeProperties) { - if (greptimeProperties == null) { - log.error("init error, please config Warehouse GreptimeDB props in application.yml"); - throw new IllegalArgumentException("please config Warehouse GreptimeDB props"); - } - - serverAvailable = initGreptimeDbClient(greptimeProperties) && initGreptimeDbDataSource(greptimeProperties); + if (greptimeProperties == null) { + log.error("init error, please config Warehouse GreptimeDB props in application.yml"); + throw new IllegalArgumentException("please config Warehouse GreptimeDB props"); + } + + serverAvailable = initGreptimeDbClient(greptimeProperties) && initGreptimeDbDataSource(greptimeProperties); } - + private void initGreptimeDb(final GreptimeProperties greptimeProperties) throws SQLException { - final DriverPropertyInfo[] properties = new Driver().getPropertyInfo(greptimeProperties.url(), null); - final String host = ObjectUtils.requireNonEmpty(properties[0].value); - final String port = ObjectUtils.requireNonEmpty(properties[1].value); - final String dbName = ObjectUtils.requireNonEmpty(properties[2].value); - - String ttl = greptimeProperties.expireTime(); - if (ttl == null || "".equals(ttl.trim())) { - ttl = CONSTANT_DB_TTL; - } - - try (final Connection tempConnection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port, - greptimeProperties.username(), greptimeProperties.password()); - final PreparedStatement pstmt = tempConnection - .prepareStatement(String.format(CONSTANTS_CREATE_DATABASE, dbName, ttl))) { - log.info("[warehouse greptime] try to create database `{}` if not exists", dbName); - pstmt.execute(); - } + final DriverPropertyInfo[] properties = new Driver().getPropertyInfo(greptimeProperties.url(), null); + final String host = ObjectUtils.requireNonEmpty(properties[0].value); + final String port = ObjectUtils.requireNonEmpty(properties[1].value); + final String dbName = ObjectUtils.requireNonEmpty(properties[2].value); + + String ttl = greptimeProperties.expireTime(); + if (ttl == null || StringUtils.isBlank(ttl.trim())) { + ttl = CONSTANT_DB_TTL; + } + + try (final Connection tempConnection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port, + greptimeProperties.username(), greptimeProperties.password()); + final PreparedStatement pstmt = tempConnection + .prepareStatement(String.format(CONSTANTS_CREATE_DATABASE, dbName, ttl))) { + log.info("[warehouse greptime] try to create database `{}` if not exists", dbName); + pstmt.execute(); + } } - + private boolean initGreptimeDbClient(GreptimeProperties greptimeProperties) { - String endpoints = greptimeProperties.grpcEndpoints(); - try { - final DriverPropertyInfo[] properties = new Driver().getPropertyInfo(greptimeProperties.url(), null); - final String dbName = ObjectUtils.requireNonEmpty(properties[2].value); - - GreptimeOptions opts = GreptimeOptions.newBuilder(endpoints.split(","), dbName) // - .writeMaxRetries(3) // - .authInfo(new AuthInfo(greptimeProperties.username(), greptimeProperties.password())) - .routeTableRefreshPeriodSeconds(30) // - .build(); - - this.greptimeDb = GreptimeDB.create(opts); - } catch (Exception e) { - log.error("[warehouse greptime] Fail to start GreptimeDB client"); - return false; - } - - return true; + String endpoints = greptimeProperties.grpcEndpoints(); + try { + final DriverPropertyInfo[] properties = new Driver().getPropertyInfo(greptimeProperties.url(), null); + final String dbName = ObjectUtils.requireNonEmpty(properties[2].value); + + GreptimeOptions opts = GreptimeOptions.newBuilder(endpoints.split(","), dbName) // + .writeMaxRetries(3) // + .authInfo(new AuthInfo(greptimeProperties.username(), greptimeProperties.password())) + .routeTableRefreshPeriodSeconds(30) // + .build(); + + this.greptimeDb = GreptimeDB.create(opts); + } catch (Exception e) { + log.error("[warehouse greptime] Fail to start GreptimeDB client"); + return false; + } + + return true; } - + private boolean initGreptimeDbDataSource(final GreptimeProperties greptimeProperties) { - try { - initGreptimeDb(greptimeProperties); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error(e.getMessage(), e); - } - - INSTANCE_EXCEPTION_PRINT.run(); - return false; - } - - final HikariConfig config = new HikariConfig(); - // jdbc properties - config.setJdbcUrl(greptimeProperties.url()); - config.setUsername(greptimeProperties.username()); - config.setPassword(greptimeProperties.password()); - config.setDriverClassName(greptimeProperties.driverClassName()); - // minimum number of idle connection - config.setMinimumIdle(10); - // maximum number of connection in the pool - config.setMaximumPoolSize(10); - // maximum wait milliseconds for get connection from pool - config.setConnectionTimeout(30000); - // maximum lifetime for each connection - config.setMaxLifetime(0); - // max idle time for recycle idle connection - config.setIdleTimeout(0); - // validation query - config.setConnectionTestQuery("select 1"); - try { - this.hikariDataSource = new HikariDataSource(config); - } catch (Exception e) { - INSTANCE_EXCEPTION_PRINT.run(); - return false; - } - return true; + try { + initGreptimeDb(greptimeProperties); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error(e.getMessage(), e); + } + + INSTANCE_EXCEPTION_PRINT.run(); + return false; + } + + final HikariConfig config = new HikariConfig(); + // jdbc properties + config.setJdbcUrl(greptimeProperties.url()); + config.setUsername(greptimeProperties.username()); + config.setPassword(greptimeProperties.password()); + config.setDriverClassName(greptimeProperties.driverClassName()); + // minimum number of idle connection + config.setMinimumIdle(10); + // maximum number of connection in the pool + config.setMaximumPoolSize(10); + // maximum wait milliseconds for get connection from pool + config.setConnectionTimeout(30000); + // maximum lifetime for each connection + config.setMaxLifetime(0); + // max idle time for recycle idle connection + config.setIdleTimeout(0); + // validation query + config.setConnectionTestQuery("select 1"); + try { + this.hikariDataSource = new HikariDataSource(config); + } catch (Exception e) { + INSTANCE_EXCEPTION_PRINT.run(); + return false; + } + return true; } - + @Override public void saveData(CollectRep.MetricsData metricsData) { - if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { - return; - } - if (metricsData.getValuesList().isEmpty()) { - log.info("[warehouse greptime] flush metrics data {} is null, ignore.", metricsData.getId()); - return; - } - String monitorId = String.valueOf(metricsData.getId()); - String tableName = getTableName(metricsData.getApp(), metricsData.getMetrics()); - TableSchema.Builder tableSchemaBuilder = TableSchema.newBuilder(tableName); - - tableSchemaBuilder.addTag("monitor_id", DataType.String) // - .addTag("instance", DataType.String) // - .addTimestamp("ts", DataType.TimestampMillisecond); - - List fieldsList = metricsData.getFieldsList(); - for (CollectRep.Field field : fieldsList) { - // handle field type - if (field.getType() == CommonConstants.TYPE_NUMBER) { - tableSchemaBuilder.addField(field.getName(), DataType.Float64); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - tableSchemaBuilder.addField(field.getName(), DataType.String); - } - } - Table table = Table.from(tableSchemaBuilder.build()); - - try { - long now = System.currentTimeMillis(); - Object[] values = new Object[3 + fieldsList.size()]; - values[0] = monitorId; - values[2] = now; - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - Map labels = new HashMap<>(8); - for (int i = 0; i < fieldsList.size(); i++) { - if (!CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { - CollectRep.Field field = fieldsList.get(i); - if (field.getType() == CommonConstants.TYPE_NUMBER) { - values[3 + i] = Double.parseDouble(valueRow.getColumns(i)); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - values[3 + i] = valueRow.getColumns(i); - } - if (field.getLabel()) { - labels.put(field.getName(), String.valueOf(values[3 + i])); - } - } else { - values[3 + i] = null; - } - } - values[1] = JsonUtil.toJson(labels); - table.addRow(values); - } - - CompletableFuture> writeFuture = greptimeDb.write(table); - try { - Result result = writeFuture.get(10, TimeUnit.SECONDS); - if (result.isOk()) { - log.debug("[warehouse greptime]-Write successful"); - } else { - log.warn("[warehouse greptime]--Write failed: {}", result.getErr()); - } - } catch (Throwable throwable) { - log.error("[warehouse greptime]--Error occurred: {}", throwable.getMessage()); - } - } catch (Exception e) { - log.error("[warehouse greptime]--Error: {}", e.getMessage(), e); - } + if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { + return; + } + if (metricsData.getValuesList().isEmpty()) { + log.info("[warehouse greptime] flush metrics data {} is null, ignore.", metricsData.getId()); + return; + } + String monitorId = String.valueOf(metricsData.getId()); + String tableName = getTableName(metricsData.getApp(), metricsData.getMetrics()); + TableSchema.Builder tableSchemaBuilder = TableSchema.newBuilder(tableName); + + tableSchemaBuilder.addTag("monitor_id", DataType.String) // + .addTag("instance", DataType.String) // + .addTimestamp("ts", DataType.TimestampMillisecond); + + List fieldsList = metricsData.getFieldsList(); + for (CollectRep.Field field : fieldsList) { + // handle field type + if (field.getType() == CommonConstants.TYPE_NUMBER) { + tableSchemaBuilder.addField(field.getName(), DataType.Float64); + } else if (field.getType() == CommonConstants.TYPE_STRING) { + tableSchemaBuilder.addField(field.getName(), DataType.String); + } + } + Table table = Table.from(tableSchemaBuilder.build()); + + try { + long now = System.currentTimeMillis(); + Object[] values = new Object[3 + fieldsList.size()]; + values[0] = monitorId; + values[2] = now; + for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { + Map labels = new HashMap<>(8); + for (int i = 0; i < fieldsList.size(); i++) { + if (!CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { + CollectRep.Field field = fieldsList.get(i); + if (field.getType() == CommonConstants.TYPE_NUMBER) { + values[3 + i] = Double.parseDouble(valueRow.getColumns(i)); + } else if (field.getType() == CommonConstants.TYPE_STRING) { + values[3 + i] = valueRow.getColumns(i); + } + if (field.getLabel()) { + labels.put(field.getName(), String.valueOf(values[3 + i])); + } + } else { + values[3 + i] = null; + } + } + values[1] = JsonUtil.toJson(labels); + table.addRow(values); + } + + CompletableFuture> writeFuture = greptimeDb.write(table); + try { + Result result = writeFuture.get(10, TimeUnit.SECONDS); + if (result.isOk()) { + log.debug("[warehouse greptime]-Write successful"); + } else { + log.warn("[warehouse greptime]--Write failed: {}", result.getErr()); + } + } catch (Throwable throwable) { + log.error("[warehouse greptime]--Error occurred: {}", throwable.getMessage()); + } + } catch (Exception e) { + log.error("[warehouse greptime]--Error: {}", e.getMessage(), e); + } } - + @Override public Map> getHistoryMetricData(Long monitorId, String app, String metrics, String metric, - String label, String history) { - Map> instanceValuesMap = new HashMap<>(8); - if (!isServerAvailable()) { - INSTANCE_EXCEPTION_PRINT.run(); - return instanceValuesMap; - } - - String table = getTableName(app, metrics); - - String interval = history2interval(history); - String selectSql = label == null ? String.format(QUERY_HISTORY_SQL, metric, table, interval, monitorId) - : String.format(QUERY_HISTORY_WITH_INSTANCE_SQL, metric, table, interval, monitorId, label); - - if (log.isDebugEnabled()) { - log.debug("[warehouse greptime] getHistoryMetricData SQL: {}", selectSql); - } - - try (Connection connection = hikariDataSource.getConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(selectSql)) { - while (resultSet.next()) { - long ts = resultSet.getLong(1); - if (ts == 0) { - if (log.isErrorEnabled()) { - log.error("[warehouse greptime] getHistoryMetricData query result timestamp is 0, ignore. {}.", - selectSql); - } - continue; - } - String instanceValue = resultSet.getString(2); - if (instanceValue == null || "".equals(instanceValue)) { - instanceValue = ""; - } - double value = resultSet.getDouble(3); - String strValue = double2decimalString(value); - - List valueList = instanceValuesMap.computeIfAbsent(instanceValue, k -> new LinkedList<>()); - valueList.add(new Value(strValue, ts)); - } - return instanceValuesMap; - } catch (SQLException sqlException) { - String msg = sqlException.getMessage(); - if (msg != null && !msg.contains(TABLE_NOT_EXIST)) { - if (log.isWarnEnabled()) { - log.warn("[warehouse greptime] failed to getHistoryMetricData: " + sqlException.getMessage()); - } - } - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("[warehouse greptime] failed to getHistoryMetricData:" + e.getMessage(), e); - } - } - return instanceValuesMap; + String label, String history) { + Map> instanceValuesMap = new HashMap<>(8); + if (!isServerAvailable()) { + INSTANCE_EXCEPTION_PRINT.run(); + return instanceValuesMap; + } + + String table = getTableName(app, metrics); + + String interval = history2interval(history); + String selectSql = label == null ? String.format(QUERY_HISTORY_SQL, metric, table, interval, monitorId) + : String.format(QUERY_HISTORY_WITH_INSTANCE_SQL, metric, table, interval, monitorId, label); + + if (log.isDebugEnabled()) { + log.debug("[warehouse greptime] getHistoryMetricData SQL: {}", selectSql); + } + + try (Connection connection = hikariDataSource.getConnection(); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(selectSql)) { + while (resultSet.next()) { + long ts = resultSet.getLong(1); + if (ts == 0) { + if (log.isErrorEnabled()) { + log.error("[warehouse greptime] getHistoryMetricData query result timestamp is 0, ignore. {}.", + selectSql); + } + continue; + } + String instanceValue = resultSet.getString(2); + if (instanceValue == null || StringUtils.isBlank(instanceValue)) { + instanceValue = ""; + } + double value = resultSet.getDouble(3); + String strValue = double2decimalString(value); + + List valueList = instanceValuesMap.computeIfAbsent(instanceValue, k -> new LinkedList<>()); + valueList.add(new Value(strValue, ts)); + } + return instanceValuesMap; + } catch (SQLException sqlException) { + String msg = sqlException.getMessage(); + if (msg != null && !msg.contains(TABLE_NOT_EXIST)) { + if (log.isWarnEnabled()) { + log.warn("[warehouse greptime] failed to getHistoryMetricData: {}", sqlException.getMessage()); + } + } + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("[warehouse greptime] failed to getHistoryMetricData:{}", e.getMessage(), e); + } + } + return instanceValuesMap; } - + private String getTableName(String app, String metrics) { - return app + "_" + metrics; + return app + "_" + metrics; } - + @Override public Map> getHistoryIntervalMetricData(Long monitorId, String app, String metrics, - String metric, String label, String history) { - if (!isServerAvailable()) { - INSTANCE_EXCEPTION_PRINT.run(); - return Collections.emptyMap(); - } - String table = getTableName(app, metrics); - List instances = new LinkedList<>(); - if (label != null && !"".equals(label)) { - instances.add(label); - } - if (instances.isEmpty()) { - String selectSql = String.format(QUERY_INSTANCE_SQL, table); - if (log.isDebugEnabled()) { - log.debug("[warehouse greptime] getHistoryIntervalMetricData sql: {}", selectSql); - } - - try (Connection connection = hikariDataSource.getConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(selectSql)) { - while (resultSet.next()) { - String instanceValue = resultSet.getString(1); - if (instanceValue == null || "".equals(instanceValue)) { - instances.add("''"); - } else { - instances.add(instanceValue); - } - } - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("[warehouse greptime] failed to query instances" + e.getMessage(), e); - } - } - } - - Map> instanceValuesMap = new HashMap<>(instances.size()); - for (String instanceValue : instances) { - String selectSql = String.format(QUERY_HISTORY_INTERVAL_WITH_INSTANCE_SQL, metric, metric, metric, metric, - table, instanceValue, history2interval(history)); - - if (log.isDebugEnabled()) { - log.debug("[warehouse greptime] getHistoryIntervalMetricData sql: {}", selectSql); - } - - List values = instanceValuesMap.computeIfAbsent(instanceValue, k -> new LinkedList<>()); - try (Connection connection = hikariDataSource.getConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(selectSql)) { - while (resultSet.next()) { - long ts = resultSet.getLong(1); - if (ts == 0) { - if (log.isErrorEnabled()) { - log.error( - "[warehouse greptime] getHistoryIntervalMetricData query result timestamp is 0, ignore. {}.", - selectSql); - } - continue; - } - double origin = resultSet.getDouble(2); - String originStr = double2decimalString(origin); - double avg = resultSet.getDouble(3); - String avgStr = double2decimalString(avg); - double min = resultSet.getDouble(4); - String minStr = double2decimalString(min); - double max = resultSet.getDouble(5); - String maxStr = double2decimalString(max); - Value value = Value.builder().origin(originStr).mean(avgStr).min(minStr).max(maxStr).time(ts) - .build(); - values.add(value); - } - resultSet.close(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("[warehouse greptime] failed to getHistoryIntervalMetricData: " + e.getMessage(), e); - } - } - } - return instanceValuesMap; + String metric, String label, String history) { + if (!isServerAvailable()) { + INSTANCE_EXCEPTION_PRINT.run(); + return Collections.emptyMap(); + } + String table = getTableName(app, metrics); + List instances = new LinkedList<>(); + if (label != null && !StringUtils.isBlank(label)) { + instances.add(label); + } + if (instances.isEmpty()) { + String selectSql = String.format(QUERY_INSTANCE_SQL, table); + if (log.isDebugEnabled()) { + log.debug("[warehouse greptime] getHistoryIntervalMetricData sql: {}", selectSql); + } + + try (Connection connection = hikariDataSource.getConnection(); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(selectSql)) { + while (resultSet.next()) { + String instanceValue = resultSet.getString(1); + if (instanceValue == null || StringUtils.isBlank(instanceValue)) { + instances.add("''"); + } else { + instances.add(instanceValue); + } + } + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("[warehouse greptime] failed to query instances{}", e.getMessage(), e); + } + } + } + + Map> instanceValuesMap = new HashMap<>(instances.size()); + for (String instanceValue : instances) { + String selectSql = String.format(QUERY_HISTORY_INTERVAL_WITH_INSTANCE_SQL, metric, metric, metric, metric, + table, instanceValue, history2interval(history)); + + if (log.isDebugEnabled()) { + log.debug("[warehouse greptime] getHistoryIntervalMetricData sql: {}", selectSql); + } + + List values = instanceValuesMap.computeIfAbsent(instanceValue, k -> new LinkedList<>()); + try (Connection connection = hikariDataSource.getConnection(); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(selectSql)) { + while (resultSet.next()) { + long ts = resultSet.getLong(1); + if (ts == 0) { + if (log.isErrorEnabled()) { + log.error( + "[warehouse greptime] getHistoryIntervalMetricData query result timestamp is 0, ignore. {}.", + selectSql); + } + continue; + } + double origin = resultSet.getDouble(2); + String originStr = double2decimalString(origin); + double avg = resultSet.getDouble(3); + String avgStr = double2decimalString(avg); + double min = resultSet.getDouble(4); + String minStr = double2decimalString(min); + double max = resultSet.getDouble(5); + String maxStr = double2decimalString(max); + Value value = Value.builder().origin(originStr).mean(avgStr).min(minStr).max(maxStr).time(ts) + .build(); + values.add(value); + } + resultSet.close(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("[warehouse greptime] failed to getHistoryIntervalMetricData: {}", e.getMessage(), e); + } + } + } + return instanceValuesMap; } - + // TODO(dennis): we can remove it when // https://github.com/GreptimeTeam/greptimedb/issues/4168 is fixed. // default 6h-6 hours: s-seconds, M-minutes, h-hours, d-days, w-weeks private String history2interval(String history) { - if (history == null) { - return null; - } - history = history.trim().toLowerCase(); - - // Be careful, the order matters. - return history.replaceAll("d", " day") // - .replaceAll("s", " second") // - .replaceAll("w", " week") // - .replaceAll("h", " hour")// - .replaceAll("m", " minute"); + if (history == null) { + return null; + } + history = history.trim().toLowerCase(); + + // Be careful, the order matters. + return history.replaceAll("d", " day") // + .replaceAll("s", " second") // + .replaceAll("w", " week") // + .replaceAll("h", " hour")// + .replaceAll("m", " minute"); } - + private String double2decimalString(double d) { - return BigDecimal.valueOf(d).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString(); + return BigDecimal.valueOf(d).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString(); } - + @Override public void destroy() { - if (this.greptimeDb != null) { - this.greptimeDb.shutdownGracefully(); - this.greptimeDb = null; - } - if (this.hikariDataSource != null) { - this.hikariDataSource.close(); - hikariDataSource = null; - } + if (this.greptimeDb != null) { + this.greptimeDb.shutdownGracefully(); + this.greptimeDb = null; + } + if (this.hikariDataSource != null) { + this.hikariDataSource.close(); + hikariDataSource = null; + } } } diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java index 9792ef5c1d..29727c34d2 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java @@ -248,9 +248,12 @@ public class IotDbDataStorage extends AbstractHistoryDataStorage { String label, String history) { Map> instanceValuesMap = new HashMap<>(8); if (!isServerAvailable()) { - log.error("\n\t---------------IotDb Init Failed---------------\n" - + "\t--------------Please Config IotDb--------------\n" - + "\t----------Can Not Use Metric History Now----------\n"); + log.error(""" + + \t---------------IotDb Init Failed--------------- + \t--------------Please Config IotDb-------------- + \t----------Can Not Use Metric History Now---------- + """); return instanceValuesMap; } String deviceId = getDeviceId(app, metrics, monitorId, label, true); @@ -309,9 +312,12 @@ public class IotDbDataStorage extends AbstractHistoryDataStorage { String metric, String label, String history) { Map> instanceValuesMap = new HashMap<>(8); if (!isServerAvailable()) { - log.error("\n\t---------------IotDb Init Failed---------------\n" - + "\t--------------Please Config IotDb--------------\n" - + "\t----------Can Not Use Metric History Now----------\n"); + log.error(""" + + \t---------------IotDb Init Failed--------------- + \t--------------Please Config IotDb-------------- + \t----------Can Not Use Metric History Now---------- + """); return instanceValuesMap; } String deviceId = getDeviceId(app, metrics, monitorId, label, true); @@ -408,7 +414,6 @@ public class IotDbDataStorage extends AbstractHistoryDataStorage { /** * use ${group}.${app}.${metrics}.${monitor}.${labels} to get device id if there is a way to get instanceId * otherwise use ${group}.${app}.${metrics}.${monitor} - * * Use ${group}.${app}.${metrics}.${monitor}.* to get all instance data when you tend to query */ private String getDeviceId(String app, String metrics, Long monitorId, String labels, boolean useQuote) { diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java index ead5737f01..8a16182b1c 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java @@ -37,6 +37,7 @@ import java.util.Properties; import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.CommonConstants; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; @@ -337,7 +338,7 @@ public class TdEngineDataStorage extends AbstractHistoryDataStorage { continue; } String instanceValue = resultSet.getString(2); - if (instanceValue == null || "".equals(instanceValue)) { + if (instanceValue == null || StringUtils.isBlank(instanceValue)) { instanceValue = ""; } double value = resultSet.getDouble(3); @@ -385,7 +386,7 @@ public class TdEngineDataStorage extends AbstractHistoryDataStorage { ResultSet resultSet = statement.executeQuery(queryInstanceSql); while (resultSet.next()) { String instanceValue = resultSet.getString(1); - if (instanceValue == null || "".equals(instanceValue)) { + if (instanceValue == null || StringUtils.isBlank(instanceValue)) { instances.add("''"); } else { instances.add(instanceValue); diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java index cd25dd1f74..18b1c57d40 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java @@ -274,9 +274,12 @@ public class VictoriaMetricsClusterDataStorage extends AbstractHistoryDataStorag public Map> getHistoryIntervalMetricData(Long monitorId, String app, String metrics, String metric, String label, String history) { if (!serverAvailable) { - log.error("\n\t---------------VictoriaMetrics Init Failed---------------\n" - + "\t--------------Please Config VictoriaMetrics--------------\n" - + "\t----------Can Not Use Metric History Now----------\n"); + log.error(""" + + \t---------------VictoriaMetrics Init Failed--------------- + \t--------------Please Config VictoriaMetrics-------------- + \t----------Can Not Use Metric History Now---------- + """); return Collections.emptyMap(); } long endTime = ZonedDateTime.now().toEpochSecond(); diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java index 2770956a35..01757f266d 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java @@ -281,9 +281,12 @@ public class VictoriaMetricsDataStorage extends AbstractHistoryDataStorage { public Map> getHistoryIntervalMetricData(Long monitorId, String app, String metrics, String metric, String label, String history) { if (!serverAvailable) { - log.error("\n\t---------------VictoriaMetrics Init Failed---------------\n" - + "\t--------------Please Config VictoriaMetrics--------------\n" - + "\t----------Can Not Use Metric History Now----------\n"); + log.error(""" + + \t---------------VictoriaMetrics Init Failed--------------- + \t--------------Please Config VictoriaMetrics-------------- + \t----------Can Not Use Metric History Now---------- + """); return Collections.emptyMap(); } long endTime = ZonedDateTime.now().toEpochSecond();