diff --git a/.all-contributorsrc b/.all-contributorsrc index 530103e477d..b7486e93f85 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2135,6 +2135,33 @@ "contributions": [ "code" ] + }, + { + "login": "Rancho-7", + "name": "Nick Guo", + "avatar_url": "https://avatars.githubusercontent.com/u/59016860?v=4", + "profile": "https://github.com/Rancho-7", + "contributions": [ + "doc" + ] + }, + { + "login": "doveLin0818", + "name": "doveLin", + "avatar_url": "https://avatars.githubusercontent.com/u/190927907?v=4", + "profile": "https://github.com/doveLin0818", + "contributions": [ + "code" + ] + }, + { + "login": "yunfan24", + "name": "yunfan24", + "avatar_url": "https://avatars.githubusercontent.com/u/91836599?v=4", + "profile": "https://zzrl.cc/", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 01e8099c94b..26a2a2cf145 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ Detailed config refer to [Install HertzBeat via Package](https://hertzbeat.apach ##### 3:Start via source code 1. Local source code debugging needs to start the back-end project `manager` and the front-end project `web-app`. -2. Backend:need `maven3+`, `java17`, `lombok`, start the `manager` service. +2. Backend:need `maven3+`, `java17`, `lombok`, add VM options in IDE: ` --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED `, then start the `manager` service. 3. Web:need `nodejs npm angular-cli` environment, Run `ng serve --open` in `web-app` directory after backend startup. 4. Access `http://localhost:4200` to start, default account: `admin/hertzbeat` @@ -483,6 +483,9 @@ Thanks to these wonderful people, welcome to join us: starryCoder
starryCoder

💻 hasimmollah
hasimmollah

💻 Ayu
Ayu

💻 + Nick Guo
Nick Guo

📖 + doveLin
doveLin

💻 + yunfan24
yunfan24

💻 diff --git a/README_CN.md b/README_CN.md index 057b9aa8937..ebd17fd12a7 100644 --- a/README_CN.md +++ b/README_CN.md @@ -159,7 +159,7 @@ ##### 方式三:本地代码启动 1. 此为前后端分离项目,本地代码调试需要分别启动后端工程 `manager` 和前端工程 `web-app` -2. 后端:需要 `maven3+`, `java17` 和 `lombok` 环境,修改 `YML` 配置信息并启动 `manager` 服务 +2. 后端:需要 `maven3+`, `java17` 和 `lombok` 环境,修改 `YML` 配置信息,添加JVM参数`--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`后启动 `manager` 服务即可。 3. 前端:需要 `nodejs npm angular-cli`环境,待本地后端启动后,在 `web-app` 目录下启动 `ng serve --open` 4. 浏览器访问 `http://localhost:4200` 即可开始,默认账号密码 `admin/hertzbeat` @@ -482,6 +482,9 @@ Thanks these wonderful people, welcome to join us: starryCoder
starryCoder

💻 hasimmollah
hasimmollah

💻 Ayu
Ayu

💻 + Nick Guo
Nick Guo

📖 + doveLin
doveLin

💻 + yunfan24
yunfan24

💻 diff --git a/hertzbeat-alerter/pom.xml b/hertzbeat-alerter/pom.xml index 50b87af6715..5ec76c471be 100644 --- a/hertzbeat-alerter/pom.xml +++ b/hertzbeat-alerter/pom.xml @@ -73,6 +73,14 @@ ${easy-poi.version} compile + + org.apache.arrow + arrow-vector + + + org.apache.arrow + arrow-memory-netty + diff --git a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/calculate/CalculateAlarm.java b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/calculate/CalculateAlarm.java index 858c9e20b18..0d16c2d7e49 100644 --- a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/calculate/CalculateAlarm.java +++ b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/calculate/CalculateAlarm.java @@ -26,7 +26,10 @@ import static org.apache.hertzbeat.common.constants.CommonConstants.TAG_MONITOR_APP; import static org.apache.hertzbeat.common.constants.CommonConstants.TAG_MONITOR_ID; import static org.apache.hertzbeat.common.constants.CommonConstants.TAG_MONITOR_NAME; + +import com.google.common.collect.Maps; import jakarta.persistence.criteria.Predicate; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -45,8 +48,10 @@ import org.apache.hertzbeat.alert.service.AlertService; import org.apache.hertzbeat.alert.util.AlertTemplateUtil; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; import org.apache.hertzbeat.common.entity.alerter.Alert; import org.apache.hertzbeat.common.entity.alerter.AlertDefine; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.manager.Monitor; import org.apache.hertzbeat.common.entity.manager.TagItem; import org.apache.hertzbeat.common.entity.message.CollectRep; @@ -124,6 +129,7 @@ private void startCalculate() { if (metricsData != null) { calculate(metricsData); } + dataQueue.sendMetricsDataToStorage(metricsData); } catch (InterruptedException ignored) { Thread.currentThread().interrupt(); } catch (Exception e) { @@ -155,94 +161,97 @@ private void calculate(CollectRep.MetricsData metricsData) { if (defineMap.isEmpty()) { return; } - List fields = metricsData.getFieldsList(); - Map fieldValueMap = new HashMap<>(8); - int valueRowCount = metricsData.getValuesCount(); - for (Map.Entry> entry : defineMap.entrySet()) { - List defines = entry.getValue(); - for (AlertDefine define : defines) { - final String expr = define.getExpr(); - if (StringUtils.isBlank(expr)) { - continue; - } - if (expr.contains(SYSTEM_VALUE_ROW_COUNT) && metricsData.getValuesCount() == 0) { - fieldValueMap.put(SYSTEM_VALUE_ROW_COUNT, valueRowCount); - try { - boolean match = execAlertExpression(fieldValueMap, expr); - try { - if (match) { - // If the threshold rule matches, the number of times the threshold has been triggered is determined and an alarm is triggered - afterThresholdRuleMatch(currentTimeMilli, monitorId, app, metrics, "", fieldValueMap, define); - // if the threshold is triggered, ignore other data rows - continue; - } else { - String alarmKey = String.valueOf(monitorId) + define.getId(); - triggeredAlertMap.remove(alarmKey); - if (define.isRecoverNotice()) { - handleRecoveredAlert(currentTimeMilli, define, expr, alarmKey); - } - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } catch (Exception ignored) {} - } - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { + Map fieldValueMap = Maps.newHashMapWithExpectedSize(8); - if (CollectionUtils.isEmpty(valueRow.getColumnsList())) { + try { + for (Map.Entry> entry : defineMap.entrySet()) { + List defines = entry.getValue(); + for (AlertDefine define : defines) { + final String expr = define.getExpr(); + if (StringUtils.isBlank(expr)) { continue; } - fieldValueMap.clear(); - fieldValueMap.put(SYSTEM_VALUE_ROW_COUNT, valueRowCount); - StringBuilder tagBuilder = new StringBuilder(); - for (int index = 0; index < valueRow.getColumnsList().size(); index++) { - String valueStr = valueRow.getColumns(index); - if (CommonConstants.NULL_VALUE.equals(valueStr)) { - continue; - } - - final CollectRep.Field field = fields.get(index); - final int fieldType = field.getType(); - - if (fieldType == CommonConstants.TYPE_NUMBER) { - final Double doubleValue; - if ((doubleValue = CommonUtil.parseStrDouble(valueStr)) != null) { - fieldValueMap.put(field.getName(), doubleValue); + + if (expr.contains(SYSTEM_VALUE_ROW_COUNT) && metricsData.getValues().size() == 0L) { + fieldValueMap.put(SYSTEM_VALUE_ROW_COUNT, 0); + try { + boolean match = execAlertExpression(fieldValueMap, expr); + try { + if (match) { + // If the threshold rule matches, the number of times the threshold has been triggered is determined and an alarm is triggered + afterThresholdRuleMatch(currentTimeMilli, monitorId, app, metrics, "", fieldValueMap, define); + // if the threshold is triggered, ignore other data rows + continue; + } else { + String alarmKey = String.valueOf(monitorId) + define.getId(); + triggeredAlertMap.remove(alarmKey); + if (define.isRecoverNotice()) { + handleRecoveredAlert(currentTimeMilli, define, expr, alarmKey); + } + } + } catch (Exception e) { + log.error(e.getMessage(), e); } - } else if (fieldType == CommonConstants.TYPE_TIME) { - final Integer integerValue; - if ((integerValue = CommonUtil.parseStrInteger(valueStr)) != null) { - fieldValueMap.put(field.getName(), integerValue); + } catch (Exception ignored) {} + } + + RowWrapper rowWrapper = metricsData.readRow(); + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + StringBuilder tagBuilder = new StringBuilder(); + fieldValueMap.clear(); + fieldValueMap.put(SYSTEM_VALUE_ROW_COUNT, metricsData.getValues().size()); + rowWrapper.cellStream().forEach(cell -> { + String valueStr = cell.getValue(); + if (CommonConstants.NULL_VALUE.equals(valueStr)) { + return; } - } else { - if (StringUtils.isNotEmpty(valueStr)) { - fieldValueMap.put(field.getName(), valueStr); + + final String fieldName = cell.getField().getName(); + final int fieldType = cell.getMetadataAsInteger(MetricDataConstants.TYPE); + + if (fieldType == CommonConstants.TYPE_NUMBER) { + final Double doubleValue; + if ((doubleValue = CommonUtil.parseStrDouble(valueStr)) != null) { + fieldValueMap.put(fieldName, doubleValue); + } + } else if (fieldType == CommonConstants.TYPE_TIME) { + final Integer integerValue; + if ((integerValue = CommonUtil.parseStrInteger(valueStr)) != null) { + fieldValueMap.put(fieldName, integerValue); + } + } else { + if (StringUtils.isNotEmpty(valueStr)) { + fieldValueMap.put(fieldName, valueStr); + } } - } - if (field.getLabel()) { - tagBuilder.append("-").append(valueStr); - } - } - try { - boolean match = execAlertExpression(fieldValueMap, expr); + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL)) { + tagBuilder.append("-").append(valueStr); + } + }); try { - if (match) { - // If the threshold rule matches, the number of times the threshold has been triggered is determined and an alarm is triggered - afterThresholdRuleMatch(currentTimeMilli, monitorId, app, metrics, tagBuilder.toString(), fieldValueMap, define); - } else { - String alarmKey = String.valueOf(monitorId) + define.getId() + tagBuilder; - triggeredAlertMap.remove(alarmKey); - if (define.isRecoverNotice()) { - handleRecoveredAlert(currentTimeMilli, define, expr, alarmKey); + boolean match = execAlertExpression(fieldValueMap, expr); + try { + if (match) { + // If the threshold rule matches, the number of times the threshold has been triggered is determined and an alarm is triggered + afterThresholdRuleMatch(currentTimeMilli, monitorId, app, metrics, tagBuilder.toString(), fieldValueMap, define); + } else { + String alarmKey = String.valueOf(monitorId) + define.getId() + tagBuilder; + triggeredAlertMap.remove(alarmKey); + if (define.isRecoverNotice()) { + handleRecoveredAlert(currentTimeMilli, define, expr, alarmKey); + } } + } catch (Exception e) { + log.error(e.getMessage(), e); } - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } catch (Exception ignored) {} + } catch (Exception ignored) {} + } } } + } catch (Exception e) { + log.error(e.getMessage(), e); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java index b602d2cdcf8..c3ccae72783 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollect.java @@ -78,7 +78,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); JdbcProtocol jdbcProtocol = metrics.getJdbc(); String databaseUrl = constructDatabaseUrl(jdbcProtocol); @@ -201,14 +201,14 @@ private void queryOneRow(Statement statement, String sql, List columns, for (String column : columns) { if (CollectorConstants.RESPONSE_TIME.equals(column)) { long time = System.currentTimeMillis() - startTime; - valueRowBuilder.addColumns(String.valueOf(time)); + valueRowBuilder.addColumn(String.valueOf(time)); } else { String value = resultSet.getString(column); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } @@ -241,14 +241,14 @@ private void queryOneRowByMatchTwoColumns(Statement statement, String sql, List< for (String column : columns) { if (CollectorConstants.RESPONSE_TIME.equals(column)) { long time = System.currentTimeMillis() - startTime; - valueRowBuilder.addColumns(String.valueOf(time)); + valueRowBuilder.addColumn(String.valueOf(time)); } else { String value = values.get(column.toLowerCase()); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } @@ -271,14 +271,14 @@ private void queryMultiRow(Statement statement, String sql, List columns for (String column : columns) { if (CollectorConstants.RESPONSE_TIME.equals(column)) { long time = System.currentTimeMillis() - startTime; - valueRowBuilder.addColumns(String.valueOf(time)); + valueRowBuilder.addColumn(String.valueOf(time)); } else { String value = resultSet.getString(column); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java index 38c0249624d..8b67250f495 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImpl.java @@ -103,7 +103,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { DnsResolveResult dnsResolveResult; try { @@ -127,18 +127,18 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri if (StringUtils.equals(HEADER, metrics.getName())) { // add header columns Map headerInfo = dnsResolveResult.getHeaderInfo(); - metrics.getAliasFields().forEach(field -> valueRowBuilder.addColumns(headerInfo.getOrDefault(field, CommonConstants.NULL_VALUE))); + metrics.getAliasFields().forEach(field -> valueRowBuilder.addColumn(headerInfo.getOrDefault(field, CommonConstants.NULL_VALUE))); } else { // add question/answer/authority/additional columns List currentMetricsResolveResultList = dnsResolveResult.getList(metrics.getName()); for (int index = 0; index < metrics.getAliasFields().size(); index++) { - valueRowBuilder.addColumns(index >= currentMetricsResolveResultList.size() + valueRowBuilder.addColumn(index >= currentMetricsResolveResultList.size() ? CommonConstants.NULL_VALUE : currentMetricsResolveResultList.get(index)); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } @Override diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java index 2769f1609bb..add0a278379 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImpl.java @@ -58,7 +58,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException{ @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { FTPClient ftpClient = new FTPClient(); FtpProtocol ftpProtocol = metrics.getFtp(); // Set timeout @@ -72,9 +72,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri metrics.getAliasFields().forEach(it -> { if (valueMap.containsKey(it)) { String fieldValue = valueMap.get(it); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } }); } catch (Exception e) { @@ -82,7 +82,7 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri builder.setMsg(e.getMessage()); return; } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } /** diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java index c398791fd3a..24436698b27 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImpl.java @@ -108,8 +108,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, - long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); HttpProtocol httpProtocol = metrics.getHttp(); @@ -202,18 +201,18 @@ private void parseResponseByHeader(CollectRep.MetricsData.Builder builder, List< CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliases) { if (!StringUtils.hasText(alias)) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); continue; } final Header firstHeader = response.getFirstHeader(alias); if (Objects.isNull(firstHeader)) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); continue; } - valueRowBuilder.addColumns(firstHeader.getValue()); + valueRowBuilder.addColumn(firstHeader.getValue()); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } @Override @@ -229,16 +228,16 @@ private void parseResponseByWebsite(String resp, Metrics metrics, HttpProtocol h for (String alias : metrics.getAliasFields()) { addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void addColumnForSummary(Long responseTime, CollectRep.ValueRow.Builder valueRowBuilder, int keywordNum, String alias) { if (NetworkConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else if (CollectorConstants.KEYWORD.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Integer.toString(keywordNum)); + valueRowBuilder.addColumn(Integer.toString(keywordNum)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } @@ -309,19 +308,19 @@ private void parseResponseBySiteMap(String resp, List aliasFields, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (NetworkConstants.URL.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(siteUrl); + valueRowBuilder.addColumn(siteUrl); } else if (NetworkConstants.STATUS_CODE.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(statusCode == null + valueRowBuilder.addColumn(statusCode == null ? CommonConstants.NULL_VALUE : String.valueOf(statusCode)); } else if (NetworkConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(String.valueOf(responseTime)); + valueRowBuilder.addColumn(String.valueOf(responseTime)); } else if (NetworkConstants.ERROR_MSG.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(errorMsg); + valueRowBuilder.addColumn(errorMsg); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } @@ -345,34 +344,34 @@ private void parseResponseByJsonPath(String resp, List aliasFields, Http for (String alias : aliasFields) { Object value = stringMap.get(alias); if (value != null) { - valueRowBuilder.addColumns(String.valueOf(value)); + valueRowBuilder.addColumn(String.valueOf(value)); } else { if (alias.startsWith("$.")) { List subResults = JsonPathParser.parseContentWithJsonPath(resp, http.getParseScript() + alias.substring(1)); if (subResults != null && subResults.size() > i) { Object resultValue = subResults.get(i); - valueRowBuilder.addColumns(resultValue == null ? CommonConstants.NULL_VALUE : String.valueOf(resultValue)); + valueRowBuilder.addColumn(resultValue == null ? CommonConstants.NULL_VALUE : String.valueOf(resultValue)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } else { addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias); } } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else if (objectValue instanceof String stringValue) { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (NetworkConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else if (CollectorConstants.KEYWORD.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Integer.toString(keywordNum)); + valueRowBuilder.addColumn(Integer.toString(keywordNum)); } else { - valueRowBuilder.addColumns(stringValue); + valueRowBuilder.addColumn(stringValue); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } @@ -401,24 +400,24 @@ private void parseResponseByPrometheusExporter(String resp, List aliasFi for (String aliasField : aliasFields) { if ("value".equals(aliasField)) { if (metric.getCounter() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getCounter().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getCounter().getValue())); } else if (metric.getGauge() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getGauge().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getGauge().getValue())); } else if (metric.getUntyped() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getUntyped().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getUntyped().getValue())); } else if (metric.getInfo() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getInfo().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getInfo().getValue())); } else if (metric.getSummary() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getSummary().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getSummary().getValue())); } else if (metric.getHistogram() != null) { - valueRowBuilder.addColumns(String.valueOf(metric.getHistogram().getValue())); + valueRowBuilder.addColumn(String.valueOf(metric.getHistogram().getValue())); } } else { String columnValue = labelMap.get(aliasField); - valueRowBuilder.addColumns(columnValue == null ? CommonConstants.NULL_VALUE : columnValue); + valueRowBuilder.addColumn(columnValue == null ? CommonConstants.NULL_VALUE : columnValue); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } @@ -445,12 +444,12 @@ private void getValueFromJson(List aliasFields, CollectRep.MetricsData.B JsonElement valueElement = object.get(alias); if (valueElement != null) { String value = valueElement.getAsString(); - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } else { addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java index 0addb520641..131cd52bbbb 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/SslCertificateCollectImpl.java @@ -68,7 +68,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { @Override public void collect(CollectRep.MetricsData.Builder builder, - long monitorId, String app, Metrics metrics) { + Metrics metrics) { long startTime = System.currentTimeMillis(); HttpProtocol httpProtocol = metrics.getHttp(); @@ -111,24 +111,24 @@ public void collect(CollectRep.MetricsData.Builder builder, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Long.toString(responseTime)); + valueRowBuilder.addColumn(Long.toString(responseTime)); } else if (NAME_SUBJECT.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(x509Certificate.getSubjectX500Principal().getName()); + valueRowBuilder.addColumn(x509Certificate.getSubjectX500Principal().getName()); } else if (NAME_EXPIRED.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Boolean.toString(expired)); + valueRowBuilder.addColumn(Boolean.toString(expired)); } else if (NAME_START_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(x509Certificate.getNotBefore().toLocaleString()); + valueRowBuilder.addColumn(x509Certificate.getNotBefore().toLocaleString()); } else if (NAME_START_TIMESTAMP.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(String.valueOf(x509Certificate.getNotBefore().getTime())); + valueRowBuilder.addColumn(String.valueOf(x509Certificate.getNotBefore().getTime())); } else if (NAME_END_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(x509Certificate.getNotAfter().toLocaleString()); + valueRowBuilder.addColumn(x509Certificate.getNotAfter().toLocaleString()); } else if (NAME_END_TIMESTAMP.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(String.valueOf(x509Certificate.getNotAfter().getTime())); + valueRowBuilder.addColumn(String.valueOf(x509Certificate.getNotAfter().getTime())); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } catch (SSLPeerUnverifiedException e1) { String errorMsg = "Ssl certificate does not exist."; diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusLastParser.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusLastParser.java index fa60b33789a..a2b28e62883 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusLastParser.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusLastParser.java @@ -39,6 +39,6 @@ public Boolean checkType(String responseStr) { @Override public void parse(String resp, List aliasFields, HttpProtocol http, CollectRep.MetricsData.Builder builder) { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); - aliasFields.forEach(aliasField -> valueRowBuilder.addColumns(CommonConstants.NULL_VALUE)); + aliasFields.forEach(aliasField -> valueRowBuilder.addColumn(CommonConstants.NULL_VALUE)); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusMatrixParser.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusMatrixParser.java index e6c7e5c57b4..a5bc29f593f 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusMatrixParser.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusMatrixParser.java @@ -63,35 +63,35 @@ public void parse(String resp, List aliasFields, HttpProtocol http, Coll if (!CollectUtil.assertPromRequireField(aliasField)) { JsonElement jsonElement = r.getMetric().get(aliasField); if (jsonElement != null) { - valueRowBuilder.addColumns(jsonElement.getAsString()); + valueRowBuilder.addColumn(jsonElement.getAsString()); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } else { if (CommonConstants.PROM_TIME.equals(aliasField)) { for (Object o : value) { if (o instanceof Double time) { - valueRowBuilder.addColumns(String.valueOf(BigDecimal.valueOf(time * 1000))); + valueRowBuilder.addColumn(String.valueOf(BigDecimal.valueOf(time * 1000))); setTimeFlag = true; } } if (!setTimeFlag) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } else { for (Object o : value) { if (o instanceof String str) { - valueRowBuilder.addColumns(str); + valueRowBuilder.addColumn(str); setValueFlag = true; } } if (!setValueFlag) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } } - builder.addValues(valueRowBuilder); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusVectorParser.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusVectorParser.java index d5d28730a8d..6d9c4f93a11 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusVectorParser.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/http/promethus/PrometheusVectorParser.java @@ -62,35 +62,35 @@ public void parse(String resp, List aliasFields, HttpProtocol http, Coll if (!CollectUtil.assertPromRequireField(aliasField)) { JsonElement jsonElement = r.getMetric().get(aliasField); if (jsonElement != null) { - valueRowBuilder.addColumns(jsonElement.getAsString()); + valueRowBuilder.addColumn(jsonElement.getAsString()); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } else { if (CommonConstants.PROM_TIME.equals(aliasField)) { for (Object o : r.getValue()) { if (o instanceof Double time) { - valueRowBuilder.addColumns(String.valueOf(BigDecimal.valueOf(time * 1000))); + valueRowBuilder.addColumn(String.valueOf(BigDecimal.valueOf(time * 1000))); setTimeFlag = true; } } if (!setTimeFlag) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } else { for (Object o : r.getValue()) { if (o instanceof String str) { - valueRowBuilder.addColumns(str); + valueRowBuilder.addColumn(str); setValueFlag = true; } } if (!setValueFlag) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } } - builder.addValues(valueRowBuilder); + builder.addValueRow(valueRowBuilder.build()); } } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java index 7b31383f723..02a212903c2 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImpl.java @@ -44,7 +44,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); IcmpProtocol icmp = metrics.getIcmp(); @@ -69,12 +69,12 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Long.toString(responseTime)); + valueRowBuilder.addColumn(Long.toString(responseTime)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } catch (UnknownHostException unknownHostException) { String errorMsg = CommonUtil.getMessageFromThrowable(unknownHostException); builder.setCode(CollectRep.Code.UN_REACHABLE); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImpl.java index 4e2e547b857..1649809846c 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImpl.java @@ -66,7 +66,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); ImapProtocol imapProtocol = metrics.getImap(); IMAPClient imapClient = null; @@ -162,8 +162,8 @@ private void collectImapMetrics(CollectRep.MetricsData.Builder builder, IMAPClie CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultsMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/IpmiCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/IpmiCollectImpl.java index e98bfaf58f6..5cf1839a4b5 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/IpmiCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/IpmiCollectImpl.java @@ -63,7 +63,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { IpmiConnection connection = null; try { connection = getIpmiConnection(metrics.getIpmi()); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/ChassisHandler.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/ChassisHandler.java index 2aaf6ac9cd1..b9e68065efd 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/ChassisHandler.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/ChassisHandler.java @@ -42,12 +42,12 @@ public void handler(IpmiSession session, UdpConnection connection, CollectRep.Me CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (Metrics.Field field : metrics.getFields()) { if (!parseValue.containsKey(field.getField())) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); continue; } - valueRowBuilder.addColumns(parseValue.get(field.getField())); + valueRowBuilder.addColumn(parseValue.get(field.getField())); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } public void parseFieldToMap(GetChassisStatusResponse getChassisStatusResponse) { diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/SensorHandler.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/SensorHandler.java index 1ea2ac69489..7ec93153f50 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/SensorHandler.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ipmi2/client/handler/SensorHandler.java @@ -78,12 +78,12 @@ public void handler(IpmiSession session, UdpConnection connection, CollectRep.Me CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (Metrics.Field field : metrics.getFields()) { if (!parseValue.containsKey(field.getField())) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); continue; } - valueRowBuilder.addColumns(parseValue.get(field.getField())); + valueRowBuilder.addColumn(parseValue.get(field.getField())); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java index 396428efddd..dd1aee5046f 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImpl.java @@ -90,7 +90,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(jmxClassLoader); try { @@ -120,9 +120,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String aliasField : metrics.getAliasFields()) { String fieldValue = attributeValueMap.get(aliasField); - valueRowBuilder.addColumns(fieldValue != null ? fieldValue : CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(fieldValue != null ? fieldValue : CommonConstants.NULL_VALUE); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } catch (IOException exception) { String errorMsg = CommonUtil.getMessageFromThrowable(exception); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java index 8af815fc99f..cbfca7294e3 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImpl.java @@ -59,7 +59,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); MemcachedProtocol memcachedProtocol = metrics.getMemcached(); @@ -90,9 +90,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else { builder.setCode(CollectRep.Code.UN_CONNECTABLE); builder.setMsg("Peer connect failed:"); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectImpl.java index b51f8b5da15..1bf26c5bdd8 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectImpl.java @@ -56,8 +56,8 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { - super.collect(builder, monitorId, app, metrics); + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { + super.collect(builder, metrics); } @Override @@ -83,4 +83,4 @@ protected PlcReadRequest buildRequest(Metrics metrics, PlcConnection connection) } return requestBuilder.build(); } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectImpl.java index 14f8e18145a..8bf96cc0194 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectImpl.java @@ -70,7 +70,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(Builder builder, Metrics metrics) { MqttProtocol mqtt = metrics.getMqtt(); String protocolVersion = mqtt.getProtocolVersion(); MqttVersion mqttVersion = MqttVersion.valueOf(protocolVersion); @@ -197,14 +197,14 @@ private void convertToMetricsData(Builder builder, Metrics metrics, long respons CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String column : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equals(column)) { - valueRowBuilder.addColumns(String.valueOf(responseTime)); + valueRowBuilder.addColumn(String.valueOf(responseTime)); } else { String value = data.get(column); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private Boolean test(Runnable runnable, String operationName) { diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java index b016c75c037..259e9451be7 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImpl.java @@ -84,7 +84,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); NginxProtocol nginxProtocol = metrics.getNginx(); @@ -196,16 +196,16 @@ private void parseNginxStatusResponse(CollectRep.MetricsData.Builder builder, St for (String alias : aliasFields) { Object value = metricMap.get(alias); if (value != null) { - valueRowBuilder.addColumns(String.valueOf(value)); + valueRowBuilder.addColumn(String.valueOf(value)); } else { if (NetworkConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } /** @@ -237,13 +237,13 @@ private void parseReqStatusResponse(CollectRep.MetricsData.Builder builder, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (NetworkConstants.RESPONSE_TIME.equals(alias)) { - valueRowBuilder.addColumns(String.valueOf(responseTime)); + valueRowBuilder.addColumn(String.valueOf(responseTime)); } else { try { String methodName = reqStatusResponse.getFieldMethodName(alias); Object value = reflect(reqStatusResponse, methodName); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(String.valueOf(value)); + valueRowBuilder.addColumn(String.valueOf(value)); } catch (Exception e) { String errorMsg = CommonUtil.getMessageFromThrowable(e); log.error(errorMsg); @@ -252,7 +252,7 @@ private void parseReqStatusResponse(CollectRep.MetricsData.Builder builder, Stri } } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java index 7f5ec63c563..bb7cc46551b 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImpl.java @@ -56,7 +56,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); NtpProtocol ntpProtocol = metrics.getNtp(); String host = ntpProtocol.getHost(); @@ -82,9 +82,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); client.close(); } catch (SocketException socketException) { String errorMsg = CommonUtil.getMessageFromThrowable(socketException); @@ -141,4 +141,4 @@ private Map getNtpInfo(TimeInfo timeInfo) { public String supportProtocol() { return DispatchConstants.PROTOCOL_NTP; } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/plc/AbstractPlcCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/plc/AbstractPlcCollectImpl.java index 201a6321651..6e45a1d6598 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/plc/AbstractPlcCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/plc/AbstractPlcCollectImpl.java @@ -41,6 +41,9 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +/** + * abstract plc collect implement + */ @Slf4j public abstract class AbstractPlcCollectImpl extends AbstractCollect { private static final String[] DRIVER_LIST = {"s7", "modbus-tcp"}; @@ -106,7 +109,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); PlcProtocol plcProtocol = metrics.getPlc(); @@ -156,9 +159,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } catch (Exception e) { builder.setCode(CollectRep.Code.FAIL); String message = CommonUtil.getMessageFromThrowable(e); @@ -179,4 +182,4 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri protected abstract String getConnectionString(Metrics metrics); protected abstract PlcReadRequest buildRequest(Metrics metrics, PlcConnection connection); -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java index c595a4f2e10..b0202f344e7 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImpl.java @@ -53,7 +53,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); Pop3Protocol pop3Protocol = metrics.getPop3(); @@ -146,16 +146,16 @@ private void obtainPop3Metrics(CollectRep.MetricsData.Builder builder, POP3Clien for (String alias : aliasFields) { Object value = pop3Metrics.get(alias); if (value != null) { - valueRowBuilder.addColumns(String.valueOf(value)); + valueRowBuilder.addColumn(String.valueOf(value)); } else { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(String.valueOf(responseTime)); + valueRowBuilder.addColumn(String.valueOf(responseTime)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } - builder.addValues(valueRowBuilder); + builder.addValueRow(valueRowBuilder.build()); } private Map parsePop3Metrics(POP3Client pop3Client, List aliasFields) throws IOException { diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java index e1d7ab86bfb..8e1616239ec 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/prometheus/PrometheusAutoCollectImpl.java @@ -187,10 +187,10 @@ private List parseResponseByPrometheusExporter(String re if (index == 0) { metric.getLabels().forEach(label -> { metricsFields.add(label.getName()); - builder.addFields(CollectRep.Field.newBuilder().setName(label.getName()) + builder.addField(CollectRep.Field.newBuilder().setName(label.getName()) .setType(CommonConstants.TYPE_STRING).setLabel(true).build()); }); - builder.addFields(CollectRep.Field.newBuilder().setName("value") + builder.addField(CollectRep.Field.newBuilder().setName("value") .setType(CommonConstants.TYPE_NUMBER).setLabel(false).build()); } Map labelMap = metric.getLabels() @@ -199,10 +199,10 @@ private List parseResponseByPrometheusExporter(String re CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : metricsFields) { String fieldValue = labelMap.get(field); - valueRowBuilder.addColumns(fieldValue == null ? CommonConstants.NULL_VALUE : fieldValue); + valueRowBuilder.addColumn(fieldValue == null ? CommonConstants.NULL_VALUE : fieldValue); } - valueRowBuilder.addColumns(String.valueOf(metric.getValue())); - builder.addValues(valueRowBuilder.build()); + valueRowBuilder.addColumn(String.valueOf(metric.getValue())); + builder.addValueRow(valueRowBuilder.build()); } metricsDataList.add(builder.build()); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java index 2be1823c30f..5b7bce542c6 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/push/PushCollectImpl.java @@ -75,9 +75,9 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { @Override public void collect(CollectRep.MetricsData.Builder builder, - long monitorId, String app, Metrics metrics) { + Metrics metrics) { long curTime = System.currentTimeMillis(); - + long monitorId = builder.getId(); PushProtocol pushProtocol = metrics.getPush(); Long time = timeMap.getOrDefault(monitorId, curTime - firstCollectInterval); @@ -169,7 +169,6 @@ private void parseResponse(CollectRep.MetricsData.Builder builder, String resp, throw new NullPointerException("parse result is null"); } for (PushMetricsDto.Metrics pushMetrics : pushMetricsDto.getMetricsList()) { - List rows = new ArrayList<>(); for (Map metrics : pushMetrics.getMetrics()) { List metricColumn = new ArrayList<>(); for (Metrics.Field field : metric.getFields()) { @@ -177,11 +176,8 @@ private void parseResponse(CollectRep.MetricsData.Builder builder, String resp, } CollectRep.ValueRow valueRow = CollectRep.ValueRow.newBuilder() .addAllColumns(metricColumn).build(); - rows.add(valueRow); + builder.addValueRow(valueRow); } - - - builder.addAllValues(rows); } builder.setTime(System.currentTimeMillis()); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java index 90ca3770bc2..7d4fad2665b 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImpl.java @@ -63,7 +63,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { ConnectSession connectSession = null; try { connectSession = getRedfishConnectSession(metrics.getRedfish()); @@ -182,11 +182,11 @@ private void parseRedfishResource(CollectRep.MetricsData.Builder builder, String List res = JsonPathParser.parseContentWithJsonPath(resp, path); if (res != null && !res.isEmpty()) { Object value = res.get(0); - valueRowBuilder.addColumns(value == null ? CommonConstants.NULL_VALUE : String.valueOf(value)); + valueRowBuilder.addColumn(value == null ? CommonConstants.NULL_VALUE : String.valueOf(value)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java index 2c5a6d73f97..4d643d9c9e0 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java @@ -82,7 +82,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException{ } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { try { if (Objects.nonNull(metrics.getRedis().getPattern()) && Objects.equals(metrics.getRedis().getPattern(), CLUSTER)) { List> redisInfoList = getClusterRedisInfo(metrics); @@ -166,12 +166,12 @@ private void doMetricsData(CollectRep.MetricsData.Builder builder, Map { if (valueMap.containsKey(it)) { String fieldValue = valueMap.get(it); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } }); - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } /** diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/registry/RegistryImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/registry/RegistryImpl.java index f3f531cf025..39de5ae4be7 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/registry/RegistryImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/registry/RegistryImpl.java @@ -58,7 +58,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { RegistryProtocol registryProtocol = metrics.getRegistry(); try (DiscoveryClient discoveryClient = discoveryClientManagement.getClient(registryProtocol)) { @@ -84,19 +84,19 @@ private void collectMetrics(CollectRep.MetricsData.Builder builder, Metrics metr ServerInfo serverInfo = discoveryClient.getServerInfo(); metrics.getAliasFields().forEach(fieldName -> { if (StringUtils.equalsAnyIgnoreCase(CollectorConstants.RESPONSE_TIME, fieldName)) { - valueRowBuilder.addColumns(String.valueOf(System.currentTimeMillis() - beginTime)); + valueRowBuilder.addColumn(String.valueOf(System.currentTimeMillis() - beginTime)); } else { addColumnIfMatched(fieldName, serverInfo, valueRowBuilder); } }); - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else { // Service instances monitor discoveryClient.getServices().forEach(serviceInstance -> { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); metrics.getAliasFields().forEach(fieldName -> addColumnIfMatched(fieldName, serviceInstance, valueRowBuilder)); - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); }); } } @@ -116,7 +116,7 @@ private void addColumnIfMatched(String fieldName, Object sourceObj, CollectRep.V log.warn("No such field for {}", fieldName); } - valueRowBuilder.addColumns(StringUtils.isBlank(columnValue) + valueRowBuilder.addColumn(StringUtils.isBlank(columnValue) ? CommonConstants.NULL_VALUE : columnValue); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImpl.java index 45d8fb66594..3d797b53a15 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImpl.java @@ -71,7 +71,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { ScriptProtocol scriptProtocol = metrics.getScript(); long startTime = System.currentTimeMillis(); ProcessBuilder processBuilder; @@ -171,12 +171,12 @@ private void parseResponseDataByLog(String result, List aliasFields, Col CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { - valueRowBuilder.addColumns(line); + valueRowBuilder.addColumn(line); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } @@ -201,9 +201,9 @@ private void parseResponseDataByNetcat(String result, List aliasFields, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = mapValue.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void parseResponseDataByOne(String result, List aliasFields, CollectRep.MetricsData.Builder builder, Long responseTime) { @@ -217,18 +217,18 @@ private void parseResponseDataByOne(String result, List aliasFields, Col int lineIndex = 0; while (aliasIndex < aliasFields.size()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(aliasFields.get(aliasIndex))) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { if (lineIndex < lines.length) { - valueRowBuilder.addColumns(lines[lineIndex].trim()); + valueRowBuilder.addColumn(lines[lineIndex].trim()); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } lineIndex++; } aliasIndex++; } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void parseResponseDataByMulti(String result, List aliasFields, @@ -248,17 +248,17 @@ private void parseResponseDataByMulti(String result, List aliasFields, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { Integer index = fieldMapping.get(alias.toLowerCase()); if (index != null && index < values.length) { - valueRowBuilder.addColumns(values[index]); + valueRowBuilder.addColumn(values[index]); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/sd/HttpSdCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/sd/HttpSdCollectImpl.java index ae8e65c8ec9..0935b9fddc7 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/sd/HttpSdCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/sd/HttpSdCollectImpl.java @@ -50,7 +50,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { List configList = Lists.newArrayList(); HttpUriRequest request = RequestBuilder.get().setUri(metrics.getSdProtocol().getSdSource()).build(); @@ -77,9 +77,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri configList.forEach(config -> { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); - valueRowBuilder.addColumns(config.getHost()); - valueRowBuilder.addColumns(config.getPort()); - builder.addValues(valueRowBuilder.build()); + valueRowBuilder.addColumn(config.getHost()); + valueRowBuilder.addColumn(config.getPort()); + builder.addValueRow(valueRowBuilder.build()); }); } catch (IOException e) { String errorMsg = CommonUtil.getMessageFromThrowable(e); @@ -113,4 +113,4 @@ private void addConfig(List configList, String fetchedTarget) public String supportProtocol() { return DispatchConstants.PROTOCOL_HTTP_SD; } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java index da285c0d947..8e4e923e070 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImpl.java @@ -50,7 +50,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); SmtpProtocol smtpProtocol = metrics.getSmtp(); String host = smtpProtocol.getHost(); @@ -77,9 +77,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else { builder.setCode(CollectRep.Code.UN_CONNECTABLE); builder.setMsg("Peer connect failed,Timeout " + timeout + "ms"); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java index 4a7fd6311e3..04a1a65f2b7 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java @@ -99,7 +99,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); SnmpProtocol snmpProtocol = metrics.getSnmp(); int timeout = CollectUtil.getTimeout(snmpProtocol.getTimeout()); @@ -173,14 +173,14 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Long.toString(responseTime)); + valueRowBuilder.addColumn(Long.toString(responseTime)); } else { String oid = oidsMap.get(alias); String value = oidsValueMap.get(oid); - valueRowBuilder.addColumns(Objects.requireNonNullElse(value, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(value, CommonConstants.NULL_VALUE)); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else if (OPERATION_WALK.equalsIgnoreCase(operation)) { Map oidMap = snmpProtocol.getOids(); Assert.notEmpty(oidMap, "snmp oids is required when operation is walk."); @@ -214,7 +214,7 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Long.toString(responseTime)); + valueRowBuilder.addColumn(Long.toString(responseTime)); } else { String oid = oidMap.get(alias); String value = oidsValueMap.get(oid); @@ -227,10 +227,10 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri } } } - valueRowBuilder.addColumns(Objects.requireNonNullElse(value, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(value, CommonConstants.NULL_VALUE)); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } catch (ExecutionException | InterruptedException ex) { diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java index 7b9c0ec55ff..c6c1300bfad 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImpl.java @@ -85,7 +85,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); SshProtocol sshProtocol = metrics.getSsh(); @@ -192,12 +192,12 @@ private void parseResponseDataByLog(String result, List aliasFields, Col CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { - valueRowBuilder.addColumns(line); + valueRowBuilder.addColumn(line); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } @@ -222,9 +222,9 @@ private void parseResponseDataByNetcat(String result, List aliasFields, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = mapValue.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void parseResponseDataByOne(String result, List aliasFields, CollectRep.MetricsData.Builder builder, Long responseTime) { @@ -238,18 +238,18 @@ private void parseResponseDataByOne(String result, List aliasFields, Col int lineIndex = 0; while (aliasIndex < aliasFields.size()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(aliasFields.get(aliasIndex))) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { if (lineIndex < lines.length) { - valueRowBuilder.addColumns(lines[lineIndex].trim()); + valueRowBuilder.addColumn(lines[lineIndex].trim()); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } lineIndex++; } aliasIndex++; } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void parseResponseDataByMulti(String result, List aliasFields, @@ -269,17 +269,17 @@ private void parseResponseDataByMulti(String result, List aliasFields, CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : aliasFields) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(responseTime.toString()); + valueRowBuilder.addColumn(responseTime.toString()); } else { Integer index = fieldMapping.get(alias.toLowerCase()); if (index != null && index < values.length) { - valueRowBuilder.addColumns(values[index]); + valueRowBuilder.addColumn(values[index]); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java index 7f2df24f401..1961ada9cc6 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImpl.java @@ -53,7 +53,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); TelnetProtocol telnet = metrics.getTelnet(); int timeout = CollectUtil.getTimeout(telnet.getTimeout()); @@ -65,6 +65,7 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri if (telnetClient.isConnected()) { long responseTime = System.currentTimeMillis() - startTime; List aliasFields = metrics.getAliasFields(); + String app = builder.getApp(); Map resultMap = execCmdAndParseResult(telnetClient, telnet.getCmd(), app); resultMap.put(CollectorConstants.RESPONSE_TIME, Long.toString(responseTime)); if (resultMap.size() < aliasFields.size()) { @@ -76,9 +77,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else { builder.setCode(CollectRep.Code.UN_CONNECTABLE); builder.setMsg("Peer connect failed,Timeout " + timeout + "ms"); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java index 4c340e2a10f..dda766fba65 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImpl.java @@ -51,7 +51,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); UdpProtocol udpProtocol = metrics.getUdp(); int timeout = CollectUtil.getTimeout(udpProtocol.getTimeout()); @@ -70,12 +70,12 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String alias : metrics.getAliasFields()) { if (CollectorConstants.RESPONSE_TIME.equalsIgnoreCase(alias)) { - valueRowBuilder.addColumns(Long.toString(responseTime)); + valueRowBuilder.addColumn(Long.toString(responseTime)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } catch (SocketTimeoutException timeoutException) { String errorMsg = CommonUtil.getMessageFromThrowable(timeoutException); log.info(errorMsg); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java index 4ffa0df5ad4..cd1c24ec902 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImpl.java @@ -60,7 +60,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); WebsocketProtocol websocketProtocol = metrics.getWebsocket(); @@ -94,9 +94,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } else { builder.setCode(CollectRep.Code.UN_CONNECTABLE); builder.setMsg("Peer connect failed:"); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollectTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollectTest.java index 92c5550d790..2baf1410a26 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/database/JdbcCommonCollectTest.java @@ -87,7 +87,7 @@ void collect() { metrics.setJdbc(jdbc); CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - jdbcCommonCollect.collect(builder, 1, "test", metrics); + jdbcCommonCollect.collect(builder, metrics); }); String[] platforms = new String[]{ @@ -107,7 +107,7 @@ void collect() { metrics.setJdbc(jdbc); CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - jdbcCommonCollect.collect(builder, 1, "test", metrics); + jdbcCommonCollect.collect(builder, metrics); }); } // invalid platform @@ -119,7 +119,7 @@ void collect() { metrics.setJdbc(jdbc); CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - jdbcCommonCollect.collect(builder, 1, "test", metrics); + jdbcCommonCollect.collect(builder, metrics); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImplTest.java index 51f45579adc..c238c84afed 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/dns/DnsCollectImplTest.java @@ -86,12 +86,12 @@ public void testCollect() { metrics.setName("question"); metrics.setDns(dnsProtocol); metrics.setAliasFields(Collections.singletonList("section")); - dnsCollect.collect(builder, monitorId, app, metrics); + dnsCollect.collect(builder, metrics); assertNotNull(builder.getValues(0).getColumns(0)); // dns is null, no exception throws assertDoesNotThrow(() -> { - dnsCollect.collect(builder, monitorId, app, null); + dnsCollect.collect(builder, null); }); // metric name is header @@ -100,7 +100,7 @@ public void testCollect() { metrics1.setName("header"); metrics1.setDns(dnsProtocol); metrics1.setAliasFields(Collections.singletonList("section")); - dnsCollect.collect(builder, monitorId, app, metrics1); + dnsCollect.collect(builder, metrics1); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java index f4737bd49c9..5af290d60db 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ftp/FtpCollectImplTest.java @@ -96,7 +96,7 @@ void testCollect() throws IOException { metrics.setFtp(ftpProtocol); metrics.setAliasFields(aliasField); ftpCollectImpl.preCheck(metrics); - ftpCollectImpl.collect(builder, 1L, "test", metrics); + ftpCollectImpl.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertEquals(Boolean.toString(isActive), valueRow.getColumns(0)); @@ -133,7 +133,7 @@ void testAnonymousCollect() throws IOException { metrics.setFtp(ftpProtocol); metrics.setAliasFields(aliasField); - ftpCollectImpl.collect(builder, 1L, "test", metrics); + ftpCollectImpl.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertEquals(Boolean.toString(isActive), valueRow.getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImplTest.java index e20010639dc..49994327ac4 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/http/HttpCollectImplTest.java @@ -57,7 +57,7 @@ void collect() { .build(); CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - httpCollectImpl.collect(builder, 1L, "app", metrics); + httpCollectImpl.collect(builder, metrics); } @Test @@ -65,4 +65,4 @@ void supportProtocol() { String protocol = httpCollectImpl.supportProtocol(); assert "http".equals(protocol); } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImplTest.java index aaab0949f03..133d3dbdbc1 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/icmp/IcmpCollectImplTest.java @@ -87,7 +87,7 @@ void testCollect() throws Exception { try (MockedStatic mockedInetAddress = Mockito.mockStatic(InetAddress.class)) { mockedInetAddress.when(() -> InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddress); Mockito.when(inetAddress.isReachable(Mockito.anyInt())).thenReturn(true); - assertDoesNotThrow(() -> icmpCollect.collect(builder, 1L, "app", metrics)); + assertDoesNotThrow(() -> icmpCollect.collect(builder, metrics)); assertEquals(1, builder.getValuesCount()); assertNotNull(builder.getValues(0).getColumns(0)); @@ -99,7 +99,7 @@ void testUnreachable() throws Exception { try (MockedStatic mockedInetAddress = Mockito.mockStatic(InetAddress.class)) { mockedInetAddress.when(() -> InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddress); Mockito.when(inetAddress.isReachable(Mockito.anyInt())).thenReturn(false); - assertDoesNotThrow(() -> icmpCollect.collect(builder, 1L, "app", metrics)); + assertDoesNotThrow(() -> icmpCollect.collect(builder, metrics)); assertEquals(CollectRep.Code.UN_REACHABLE, builder.getCode()); assertNotNull(builder.getMsg()); } @@ -109,7 +109,7 @@ void testUnreachable() throws Exception { void testUnknownHostException() { try (MockedStatic mockedInetAddress = Mockito.mockStatic(InetAddress.class)) { mockedInetAddress.when(() -> InetAddress.getByName(Mockito.anyString())).thenThrow(new UnknownHostException("Mocked exception")); - assertDoesNotThrow(() -> icmpCollect.collect(builder, 1L, "app", metrics)); + assertDoesNotThrow(() -> icmpCollect.collect(builder, metrics)); assertEquals(CollectRep.Code.UN_REACHABLE, builder.getCode()); assertNotNull(builder.getMsg()); } @@ -120,7 +120,7 @@ void testIoException() throws Exception { try (MockedStatic mockedInetAddress = Mockito.mockStatic(InetAddress.class)) { mockedInetAddress.when(() -> InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddress); Mockito.when(inetAddress.isReachable(Mockito.anyInt())).thenThrow(new IOException("Mocked exception")); - assertDoesNotThrow(() -> icmpCollect.collect(builder, 1L, "app", metrics)); + assertDoesNotThrow(() -> icmpCollect.collect(builder, metrics)); assertEquals(CollectRep.Code.UN_REACHABLE, builder.getCode()); assertNotNull(builder.getMsg()); } @@ -131,7 +131,7 @@ void testException() throws Exception { try (MockedStatic mockedInetAddress = Mockito.mockStatic(InetAddress.class)) { mockedInetAddress.when(() -> InetAddress.getByName(Mockito.anyString())).thenReturn(inetAddress); Mockito.when(inetAddress.isReachable(Mockito.anyInt())).thenThrow(new RuntimeException("Mocked exception")); - assertDoesNotThrow(() -> icmpCollect.collect(builder, 1L, "app", metrics)); + assertDoesNotThrow(() -> icmpCollect.collect(builder, metrics)); assertEquals(CollectRep.Code.FAIL, builder.getCode()); assertNotNull(builder.getMsg()); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImplTest.java index 2e2b7a59db5..18d246e8ff5 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/imap/ImapCollectImplTest.java @@ -89,7 +89,7 @@ void enableSslCollect() { }); imapCollect.preCheck(metrics); - imapCollect.collect(builder, 1L, "testIMAP", metrics); + imapCollect.collect(builder, metrics); assertEquals(1, builder.getValuesCount()); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); @@ -117,7 +117,7 @@ void disableSslCollect() { }); imapCollect.preCheck(metrics); - imapCollect.collect(builder, 1L, "testIMAP", metrics); + imapCollect.collect(builder, metrics); assertEquals(1, builder.getValuesCount()); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImplTest.java index 9e9dabab610..152ba296d4c 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/jmx/JmxCollectImplTest.java @@ -60,7 +60,7 @@ void collect() { // metrics is null assertDoesNotThrow(() -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - jmxCollect.collect(builder, 1L, "app", null); + jmxCollect.collect(builder, null); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImplTest.java index 401eb22627b..019f8038322 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/memcached/MemcachedCollectImplTest.java @@ -93,7 +93,7 @@ void testCollectCmdResponse() { Mockito.when(socket.getInputStream()).thenReturn(inputStream); }); - memcachedCollect.collect(builder, 1L, "test", metrics); + memcachedCollect.collect(builder, metrics); assertEquals(1, builder.getValuesCount()); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectTest.java index 53dc74ab8b5..77484c77a11 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/modbus/ModbusCollectTest.java @@ -171,7 +171,7 @@ void collect() { "holding-register:1-2" )); modbusCollect.preCheck(metrics); - modbusCollect.collect(builder, 1L, "app", metrics); + modbusCollect.collect(builder, metrics); }); // with coil @@ -194,7 +194,7 @@ void collect() { "coil:1-2" )); modbusCollect.preCheck(metrics); - modbusCollect.collect(builder, 1L, "app", metrics); + modbusCollect.collect(builder, metrics); }); @@ -219,7 +219,7 @@ void collect() { "holding-register:1-2" )); modbusCollect.preCheck(metrics); - modbusCollect.collect(builder, 1L, "app", metrics); + modbusCollect.collect(builder, metrics); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectTest.java index c480d0a1cbc..9d48eca0441 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/mqtt/MqttCollectTest.java @@ -103,7 +103,7 @@ void collect() { metrics.setMqtt(mqtt); metrics.setAliasFields(new ArrayList<>()); - mqttCollect.collect(builder, 1L, "app", metrics); + mqttCollect.collect(builder, metrics); }); @@ -118,7 +118,7 @@ void collect() { metrics.setMqtt(mqtt); metrics.setAliasFields(new ArrayList<>()); - mqttCollect.collect(builder, 1L, "app", metrics); + mqttCollect.collect(builder, metrics); }); } } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java index 472af71090a..030ee64637c 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/nginx/NginxCollectImplTest.java @@ -115,7 +115,7 @@ public void testNginxCollectFail() throws IOException { metrics.setName("nginx_status"); metrics.setNginx(nginxProtocol); nginxCollect.preCheck(metrics); - nginxCollect.collect(builder, monitorId, app, metrics); + nginxCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.FAIL); } @@ -176,7 +176,7 @@ public void testNginxStatusCollect() throws IOException { metrics.setName("nginx_status"); metrics.setNginx(nginxProtocol); nginxCollect.preCheck(metrics); - nginxCollect.collect(builder, monitorId, app, metrics); + nginxCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.SUCCESS); for (CollectRep.ValueRow row : builder.getValuesList()) { assertEquals(row.getColumnsCount(), 2); @@ -242,7 +242,7 @@ public void testNginxReqStatusCollect() throws IOException { metrics.setName("req_status"); metrics.setNginx(nginxProtocol); nginxCollect.preCheck(metrics); - nginxCollect.collect(builder, monitorId, app, metrics); + nginxCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.SUCCESS); assertEquals(builder.getValuesCount(), 2); for (int i = 0; i < builder.getValuesList().size(); i++) { diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java index ebe138988c5..4509e323b6e 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ntp/NtpCollectImplTest.java @@ -77,7 +77,7 @@ void testCollect() { metrics.setNtp(telnetProtocol); metrics.setAliasFields(aliasField); ntpCollect.preCheck(metrics); - ntpCollect.collect(builder, 1L, "test", metrics); + ntpCollect.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/plc/PlcCollectTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/plc/PlcCollectTest.java index f38e6b9f566..13dadaf2487 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/plc/PlcCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/plc/PlcCollectTest.java @@ -197,7 +197,7 @@ void collect() { "holding-register:1-2" )); plcCollect.preCheck(metrics); - plcCollect.collect(builder, 1L, "app", metrics); + plcCollect.collect(builder, metrics); }); // with coil @@ -220,7 +220,7 @@ void collect() { "coil:1-2" )); plcCollect.preCheck(metrics); - plcCollect.collect(builder, 1L, "app", metrics); + plcCollect.collect(builder, metrics); }); @@ -245,7 +245,7 @@ void collect() { "holding-register:1-2" )); plcCollect.preCheck(metrics); - plcCollect.collect(builder, 1L, "app", metrics); + plcCollect.collect(builder, metrics); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImplTest.java index 6aed91c6395..83cdaf9baba 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/pop3/Pop3CollectImplTest.java @@ -88,7 +88,7 @@ void collect() throws Exception { assertDoesNotThrow(() -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - pop3Collect.collect(builder, 1, "app", metrics); + pop3Collect.collect(builder, metrics); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/push/PushCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/push/PushCollectImplTest.java index e37c574e9a6..ae70a96faf4 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/push/PushCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/push/PushCollectImplTest.java @@ -60,7 +60,7 @@ void preCheck() throws Exception { @Test void collect() throws Exception { assertDoesNotThrow(() -> { - pushCollect.collect(builder, 1L, "app", Metrics.builder().push(push).build()); + pushCollect.collect(builder, Metrics.builder().push(push).build()); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java index 3096be85795..d8fb2140340 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redfish/RedfishCollectImplTest.java @@ -75,7 +75,7 @@ void collect() { metrics.setName("Chassis"); RedfishClient.create(redfishProtocol); redfishCollect.preCheck(metrics); - redfishCollect.collect(builder, 1L, "test", metrics); + redfishCollect.collect(builder, metrics); } @Test @@ -169,7 +169,7 @@ void mockCollect() throws Exception { clientMockedStatic.when(() -> RedfishClient.create(redfishProtocol)).thenReturn(redfishClient); Mockito.when(redfishClient.connect()).thenReturn(redfishConnectSession); redfishCollect.preCheck(metrics); - redfishCollect.collect(builder, 1L, "test", metrics); + redfishCollect.collect(builder, metrics); assertEquals("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay1", builder.getValues(0).getColumns(0)); assertEquals("/redfish/v1/Chassis/1U/PowerSubsystem/PowerSupplies/Bay2", builder.getValues(1).getColumns(0)); assertEquals("/redfish/v1/Chassis/2U/PowerSubsystem/PowerSupplies/Bay1", builder.getValues(2).getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java index 3d44e884f2b..96aa4db48fd 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java @@ -132,7 +132,7 @@ void testCollect() { Mockito.when(cmd.clusterInfo()).thenReturn(clusterInfo); redisClusterCollect.preCheck(metrics); - redisClusterCollect.collect(builder, 1L, "test", metrics); + redisClusterCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.SUCCESS); assertEquals(builder.getValuesCount(), 2); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java index 31646b9caea..118657ae77d 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java @@ -103,7 +103,7 @@ void collect() { Mockito.when(client.connect()).thenReturn(connection); Mockito.when(connection.sync()).thenReturn(cmd); Mockito.when(cmd.info(metrics.getName())).thenReturn(info); - redisSingleCollect.collect(builder, 1L, "test", metrics); + redisSingleCollect.collect(builder, metrics); assertEquals(builder.getValues(0).getColumns(0), "0.544635"); clientMockedStatic.close(); } @@ -149,7 +149,7 @@ void testCollect() { Mockito.when(cmd.info(metrics.getName())).thenReturn(redisInfo); redisSingleCollect.preCheck(metrics); - redisSingleCollect.collect(builder, 1L, "test", metrics); + redisSingleCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.SUCCESS); for (CollectRep.ValueRow row : builder.getValuesList()) { assertEquals(row.getColumnsCount(), 2); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/registry/RegistryImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/registry/RegistryImplTest.java index 4448a016bb0..7c0d5178676 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/registry/RegistryImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/registry/RegistryImplTest.java @@ -79,7 +79,7 @@ void testServerCollect() { Mockito.when(client.getServerInfo()).thenReturn(serverInfo); registry.setDiscoveryClientManagement(discoveryClientManagement); registry.preCheck(metrics); - registry.collect(builder, 1L, "test", metrics); + registry.collect(builder, metrics); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertEquals(host, valueRow.getColumns(0)); assertEquals(port, valueRow.getColumns(1)); @@ -123,7 +123,7 @@ void testServiceCollect() { Mockito.when(client.getServices()).thenReturn(serviceInstances); registry.setDiscoveryClientManagement(discoveryClientManagement); registry.preCheck(metrics); - registry.collect(builder, 1L, "test", metrics); + registry.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertEquals(serviceId, valueRow.getColumns(0)); @@ -133,4 +133,4 @@ void testServiceCollect() { } } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImplTest.java index 46f9a4316a1..f51fbd5c743 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/script/ScriptCollectImplTest.java @@ -112,7 +112,7 @@ void collect() { metrics.setScript(scriptProtocol); builder = CollectRep.MetricsData.newBuilder(); - scriptCollect.collect(builder, 0, "app", metrics); + scriptCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); @@ -124,7 +124,7 @@ void collect() { metrics.setScript(scriptProtocol); builder = CollectRep.MetricsData.newBuilder(); - scriptCollect.collect(builder, 0, "app", metrics); + scriptCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); @@ -135,7 +135,7 @@ void collect() { metrics.setScript(scriptProtocol); builder = CollectRep.MetricsData.newBuilder(); - scriptCollect.collect(builder, 0, "app", metrics); + scriptCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImplTest.java index b249578cbc0..47a0f729acc 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/smtp/SmtpCollectImplTest.java @@ -68,7 +68,7 @@ void collect() { Metrics metrics = Metrics.builder() .smtp(new SmtpProtocol()) .build(); - smtpCollect.collect(builder, 0, null, metrics); + smtpCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImplTest.java index 3ae3c0f1b06..f9e2941b51d 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/snmp/SnmpCollectImplTest.java @@ -96,7 +96,7 @@ void preCheck() { @Test void collect() { assertDoesNotThrow(() -> { - snmpCollect.collect(builder, 0, null, metrics); + snmpCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImplTest.java index 165bcae087f..466d1b9c6fb 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/ssh/SshCollectImplTest.java @@ -65,7 +65,7 @@ void preCheck() { void collect() { assertDoesNotThrow(() -> { Metrics metrics = Metrics.builder().ssh(new SshProtocol()).build(); - sshCollect.collect(builder, 1L, "app", metrics); + sshCollect.collect(builder, metrics); assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java index f0968179237..0c1b724a8ec 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/telnet/TelnetCollectImplTest.java @@ -91,7 +91,7 @@ void testCollectWithEquals() { metrics.setTelnet(telnetProtocol); metrics.setAliasFields(aliasField); telnetCollect.preCheck(metrics); - telnetCollect.collect(builder, 1L, "test", metrics); + telnetCollect.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); @@ -144,7 +144,7 @@ void testCollectWithTab() { metrics.setTelnet(telnetProtocol); metrics.setAliasFields(aliasField); telnetCollect.preCheck(metrics); - telnetCollect.collect(builder, 1L, "test", metrics); + telnetCollect.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java index 4fd4b64b620..579974ee697 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/udp/UdpCollectImplTest.java @@ -90,7 +90,7 @@ void testCollect() { metrics.setUdp(udpProtocol); metrics.setAliasFields(aliasField); udpCollect.preCheck(metrics); - udpCollect.collect(builder, 1L, "test", metrics); + udpCollect.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertNotNull(valueRow.getColumns(0)); @@ -119,7 +119,7 @@ void testCollectWithSocketException() { metrics.setUdp(udpProtocol); metrics.setAliasFields(aliasField); udpCollect.preCheck(metrics); - udpCollect.collect(builder, 1L, "test", metrics); + udpCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.UN_CONNECTABLE); socketMockedConstruction.close(); @@ -145,7 +145,7 @@ void testCollectWithPortUnreachableException() { metrics.setUdp(udpProtocol); metrics.setAliasFields(aliasField); udpCollect.preCheck(metrics); - udpCollect.collect(builder, 1L, "test", metrics); + udpCollect.collect(builder, metrics); assertEquals(builder.getCode(), CollectRep.Code.UN_REACHABLE); socketMockedConstruction.close(); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java index d872a4afba5..ab93602fe5d 100644 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/websocket/WebsocketCollectImplTest.java @@ -87,7 +87,7 @@ void testCollect() { metrics.setWebsocket(websocketProtocol); metrics.setAliasFields(aliasField); websocketCollectImpl.preCheck(metrics); - websocketCollectImpl.collect(builder, 1L, "test", metrics); + websocketCollectImpl.collect(builder, metrics); assertEquals(builder.getValuesCount(), 1); for (CollectRep.ValueRow valueRow : builder.getValuesList()) { assertEquals(valueRow.getColumns(0), "HTTP/1.1"); diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcherTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcherTest.java deleted file mode 100644 index cecae3ab841..00000000000 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcherTest.java +++ /dev/null @@ -1,147 +0,0 @@ -///* -// * Licensed to the Apache Software Foundation (ASF) under one or more -// * contributor license agreements. See the NOTICE file distributed with -// * this work for additional information regarding copyright ownership. -// * The ASF licenses this file to You under the Apache License, Version 2.0 -// * (the "License"); you may not use this file except in compliance with -// * the License. You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package org.apache.hertzbeat.collector.dispatch; -// -//import static org.mockito.ArgumentMatchers.any; -//import static org.mockito.Mockito.doAnswer; -//import static org.mockito.Mockito.mock; -//import static org.mockito.Mockito.times; -//import static org.mockito.Mockito.verify; -//import static org.mockito.Mockito.when; -//import java.util.List; -//import java.util.Set; -//import java.util.concurrent.ExecutorService; -//import java.util.concurrent.Executors; -//import org.apache.hertzbeat.collector.dispatch.entrance.internal.CollectJobService; -//import org.apache.hertzbeat.collector.dispatch.timer.Timeout; -//import org.apache.hertzbeat.collector.dispatch.timer.TimerDispatch; -//import org.apache.hertzbeat.collector.dispatch.timer.WheelTimerTask; -//import org.apache.hertzbeat.common.entity.job.Job; -//import org.apache.hertzbeat.common.entity.job.Metrics; -//import org.apache.hertzbeat.common.entity.message.CollectRep; -//import org.apache.hertzbeat.common.queue.CommonDataQueue; -//import org.junit.jupiter.api.BeforeEach; -//import org.junit.jupiter.api.Test; -//import org.mockito.InjectMocks; -//import org.mockito.Mock; -//import org.mockito.MockitoAnnotations; -// -///** -// * Test case for {@link CommonDispatcher} -// */ -//class CommonDispatcherTest { -// -// @Mock -// private MetricsCollectorQueue jobRequestQueue; -// -// @Mock -// private TimerDispatch timerDispatch; -// -// @Mock -// private CommonDataQueue commonDataQueue; -// -// @Mock -// private WorkerPool workerPool; -// -// @InjectMocks -// private CommonDispatcher commonDispatcher; -// -// @Mock -// private CollectJobService collectJobService; -// -// @BeforeEach -// void setUp() { -// -// MockitoAnnotations.openMocks(this); -// -// ExecutorService executorService = Executors.newFixedThreadPool(2); -// doAnswer(invocation -> { -// Runnable task = invocation.getArgument(0); -// executorService.submit(task); -// return null; -// }).when(workerPool).executeJob(any(Runnable.class)); -// } -// -// @Test -// void testDispatchMetricsTask() { -// -// Timeout timeout = mock(Timeout.class); -// WheelTimerTask timerTask = mock(WheelTimerTask.class); -// -// Job job = mock(Job.class); -// Set metricsSet = mock(Set.class); -// -// when(timeout.task()).thenReturn(timerTask); -// when(timerTask.getJob()).thenReturn(job); -// when(job.getNextCollectMetrics(null, true)).thenReturn(metricsSet); -// -// commonDispatcher.dispatchMetricsTask(timeout); -// -// verify(job, times(1)).getNextCollectMetrics(null, true); -// } -// -// @Test -// public void testDispatchCollectDataTimeoutMetricsCollectRepMetricsData() { -// -// Timeout timeout = mock(Timeout.class); -// Metrics metrics = mock(Metrics.class); -// WheelTimerTask timerTask = mock(WheelTimerTask.class); -// Job job = mock(Job.class); -// CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder().setMetrics("metrics").build(); -// -// when(timeout.task()).thenReturn(timerTask); -// when(timerTask.getJob()).thenReturn(job); -// when(job.getNextCollectMetrics(metrics, false)).thenReturn(null); -// when(timeout.task()).thenReturn(timerTask); -// when(timerTask.getJob()).thenReturn(job); -// when(job.getNextCollectMetrics(metrics, false)).thenReturn(null); -// when(metrics.isHasSubTask()).thenReturn(false); -// -// commonDispatcher.dispatchCollectData(timeout, metrics, metricsData); -// -// verify(commonDataQueue, times(0)).sendMetricsData(metricsData); -// } -// -// @Test -// void testDispatchCollectDataTimeoutMetricsListOfCollectRepMetricsData() { -// Timeout timeout = mock(Timeout.class); -// Metrics metrics = mock(Metrics.class); -// CollectRep.MetricsData metricsData1 = CollectRep.MetricsData.newBuilder().build(); -// CollectRep.MetricsData metricsData2 = CollectRep.MetricsData.newBuilder().build(); -// List metricsDataList = List.of(metricsData1, metricsData2); -// WheelTimerTask timerTask = mock(WheelTimerTask.class); -// Job job = mock(Job.class); -// -// when(timeout.task()).thenReturn(timerTask); -// when(timerTask.getJob()).thenReturn(job); -// when(job.isCyclic()).thenReturn(true); -// -// commonDispatcher.dispatchCollectData(timeout, metrics, metricsDataList); -// -// verify(commonDataQueue, times(2)).sendMetricsData(any(CollectRep.MetricsData.class)); -// } -// -// @Test -// void testStart() { -// -// commonDispatcher.start(); -// -// verify(workerPool, times(2)).executeJob(any(Runnable.class)); -// } -// -//} diff --git a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/MetricsCollectorQueueTest.java b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/MetricsCollectorQueueTest.java deleted file mode 100644 index cd5c47e2001..00000000000 --- a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/dispatch/MetricsCollectorQueueTest.java +++ /dev/null @@ -1,68 +0,0 @@ -///* -// * Licensed to the Apache Software Foundation (ASF) under one or more -// * contributor license agreements. See the NOTICE file distributed with -// * this work for additional information regarding copyright ownership. -// * The ASF licenses this file to You under the Apache License, Version 2.0 -// * (the "License"); you may not use this file except in compliance with -// * the License. You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package org.apache.hertzbeat.collector.dispatch; -// -//import static org.junit.jupiter.api.Assertions.assertEquals; -//import static org.junit.jupiter.api.Assertions.assertThrows; -//import static org.mockito.Mockito.mock; -//import java.util.concurrent.locks.ReentrantLock; -//import org.junit.jupiter.api.BeforeEach; -//import org.junit.jupiter.api.Test; -// -///** -// * Test case for {@link MetricsCollectorQueue} -// */ -//class MetricsCollectorQueueTest { -// -// private MetricsCollectorQueue metricsCollectorQueue; -// -// private MetricsCollect mockJob; -// -// @BeforeEach -// void setUp() { -// -// metricsCollectorQueue = new MetricsCollectorQueue(); -// mockJob = mock(MetricsCollect.class); -// } -// -// @Test -// void testAddJob() throws InterruptedException { -// -// metricsCollectorQueue.addJob(mockJob); -// assertEquals(mockJob, metricsCollectorQueue.getJob()); -// } -// -// @Test -// void testGetJobTimeout() { -// ReentrantLock lock = new ReentrantLock(); -// Thread run = new Thread(() -> { -// try { -// metricsCollectorQueue.getJob(); -// } catch (Exception e) { -// assertThrows(InterruptedException.class, () -> { -// throw e; -// }); -// lock.unlock(); -// } -// }); -// run.start(); -// run.interrupt(); -// lock.lock(); -// } -// -//} diff --git a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcher.java b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcher.java index 0293be0610f..2248b9f0daf 100644 --- a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcher.java +++ b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/CommonDispatcher.java @@ -207,7 +207,7 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.Met metricsTimeoutMonitorMap.remove(job.getId() + "-" + metrics.getName() + "-sub-" + metrics.getSubTaskId()); boolean isLastTask = metrics.consumeSubTaskResponse(metricsData); if (isLastTask) { - metricsData = metrics.getSubTaskDataRef().get(); + metricsData = metrics.getSubTaskDataRef().get().build(); } else { return; } @@ -216,21 +216,14 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.Met } Set metricsSet = job.getNextCollectMetrics(metrics, false); if (job.isCyclic()) { - if (job.isSd()) { - commonDataQueue.sendServiceDiscoveryData(metricsData); - } - - // If it is an asynchronous periodic cyclic task, directly response the collected data - commonDataQueue.sendMetricsData(metricsData); if (log.isDebugEnabled()) { log.debug("Cyclic Job: {} - {} - {}", job.getMonitorId(), job.getApp(), metricsData.getMetrics()); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - for (CollectRep.Field field : metricsData.getFieldsList()) { - log.debug("Field-->{},Value-->{}", field.getName(), valueRow.getColumns(metricsData.getFieldsList().indexOf(field))); + for (CollectRep.ValueRow valueRow : metricsData.getValues()) { + for (CollectRep.Field field : metricsData.getFields()) { + log.debug("Field-->{},Value-->{}", field.getName(), valueRow.getColumns(metricsData.getFields().indexOf(field))); } } } - // If metricsSet is null, it means that the execution is completed or whether the priority of the collection metrics is 0, that is, the availability collection metrics. // If the availability collection fails, the next metrics scheduling will be cancelled and the next round of scheduling will be entered directly. boolean isAvailableCollectFailed = metricsSet != null && !metricsSet.isEmpty() @@ -239,15 +232,14 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.Met // The collection and execution task of this job are completed. // The periodic task pushes the task to the time wheel again. // First, determine the execution time of the task and the task collection interval. - if (timeout.isCancelled()) { - return; + if (!timeout.isCancelled()) { + long spendTime = System.currentTimeMillis() - job.getDispatchTime(); + long interval = job.getInterval() - spendTime / 1000; + interval = interval <= 0 ? 0 : interval; + // Reset Construction Execution Metrics Task View + job.constructPriorMetrics(); + timerDispatch.cyclicJob(timerJob, interval, TimeUnit.SECONDS); } - long spendTime = System.currentTimeMillis() - job.getDispatchTime(); - long interval = job.getInterval() - spendTime / 1000; - interval = interval <= 0 ? 0 : interval; - // Reset Construction Execution Metrics Task View - job.constructPriorMetrics(); - timerDispatch.cyclicJob(timerJob, interval, TimeUnit.SECONDS); } else if (!metricsSet.isEmpty()) { // The execution of the current level metrics is completed, and the execution of the next level metrics starts // use pre collect metrics data to replace next metrics config params @@ -268,7 +260,7 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.Met boolean isSubTask = configmapList.stream().anyMatch(map -> map.keySet().stream().anyMatch(cryPlaceholderFields::contains)); int subTaskNum = isSubTask ? Math.min(configmapList.size(), MAX_SUB_TASK_NUM) : 1; AtomicInteger subTaskNumAtomic = new AtomicInteger(subTaskNum); - AtomicReference metricsDataReference = new AtomicReference<>(); + AtomicReference metricsDataReference = new AtomicReference<>(); for (int index = 0; index < subTaskNum; index++) { Map configmap = new HashMap<>(job.getEnvConfigmaps()); if (isSubTask) { @@ -293,15 +285,20 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, CollectRep.Met // The list of metrics at the current execution level has not been fully executed. // It needs to wait for the execution of other metrics task of the same level to complete the execution and enter the next level for execution. } + // If it is an asynchronous periodic cyclic task, directly response the collected data + if (job.isSd()) { + commonDataQueue.sendServiceDiscoveryData(metricsData); + } + commonDataQueue.sendMetricsData(metricsData); } else { // If it is a temporary one-time task, you need to wait for the collected data of all metrics task to be packaged and returned. // Insert the current metrics data into the job for unified assembly job.addCollectMetricsData(metricsData); if (log.isDebugEnabled()) { log.debug("One-time Job: {}", metricsData.getMetrics()); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - for (CollectRep.Field field : metricsData.getFieldsList()) { - log.debug("Field-->{},Value-->{}", field.getName(), valueRow.getColumns(metricsData.getFieldsList().indexOf(field))); + for (CollectRep.ValueRow valueRow : metricsData.getValues()) { + for (CollectRep.Field field : metricsData.getFields()) { + log.debug("Field-->{},Value-->{}", field.getName(), valueRow.getColumns(metricsData.getFields().indexOf(field))); } } } @@ -332,20 +329,19 @@ public void dispatchCollectData(Timeout timeout, Metrics metrics, List> getConfigmapFromPreCollectData(CollectRep.M return new LinkedList<>(); } List> mapList = new LinkedList<>(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { + for (CollectRep.ValueRow valueRow : metricsData.getValues()) { if (valueRow.getColumnsCount() != metricsData.getFieldsCount()) { continue; } Map configmapMap = new HashMap<>(valueRow.getColumnsCount()); int index = 0; - for (CollectRep.Field field : metricsData.getFieldsList()) { + for (CollectRep.Field field : metricsData.getFields()) { String value = valueRow.getColumns(index); index++; Configmap configmap = new Configmap(field.getName(), value, Integer.valueOf(field.getType()).byteValue()); diff --git a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java index 6c9b53f991a..ad955caf101 100644 --- a/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java +++ b/hertzbeat-collector/hertzbeat-collector-collector/src/main/java/org/apache/hertzbeat/collector/dispatch/MetricsCollect.java @@ -42,6 +42,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; /** * metrics collection @@ -58,19 +59,19 @@ public class MetricsCollect implements Runnable, Comparable { */ protected String collectorIdentity; /** - * Tenant ID + * tenant id */ protected long tenantId; /** - * Monitor ID + * task id */ - protected long monitorId; + protected long id; /** - * Monitoring type name + * app type name */ protected String app; /** - * Metrics configuration + * metrics configuration */ protected Metrics metrics; /** @@ -114,7 +115,7 @@ public MetricsCollect(Metrics metrics, Timeout timeout, this.collectorIdentity = collectorIdentity; WheelTimerTask timerJob = (WheelTimerTask) timeout.task(); Job job = timerJob.getJob(); - this.monitorId = job.getMonitorId(); + this.id = job.getMonitorId(); this.tenantId = job.getTenantId(); this.app = job.getApp(); this.collectDataDispatch = collectDataDispatch; @@ -132,10 +133,10 @@ public MetricsCollect(Metrics metrics, Timeout timeout, @Override public void run() { this.startTime = System.currentTimeMillis(); - setNewThreadName(monitorId, app, startTime, metrics); + setNewThreadName(id, app, startTime, metrics); CollectRep.MetricsData.Builder response = CollectRep.MetricsData.newBuilder(); response.setApp(app); - response.setId(monitorId); + response.setId(id); response.setTenantId(tenantId); // for prometheus auto if (DispatchConstants.PROTOCOL_PROMETHEUS.equalsIgnoreCase(metrics.getProtocol())) { @@ -158,7 +159,7 @@ public void run() { } else { try { abstractCollect.preCheck(metrics); - abstractCollect.collect(response, monitorId, app, metrics); + abstractCollect.collect(response, metrics); } catch (Exception e) { String msg = e.getMessage(); if (msg == null && e.getCause() != null) { @@ -334,14 +335,40 @@ private void calculateFields(Metrics metrics, CollectRep.MetricsData.Builder col if (value == null) { value = CommonConstants.NULL_VALUE; } - realValueRowBuilder.addColumns(value); + realValueRowBuilder.addColumn(value); } aliasFieldValueMap.clear(); fieldValueMap.clear(); aliasFieldUnitMap.clear(); stringTypefieldValueMap.clear(); - collectData.addValues(realValueRowBuilder.build()); + CollectRep.ValueRow realValueRow = realValueRowBuilder.build(); realValueRowBuilder.clear(); + // apply filter calculation to the real value row + if (!CollectionUtils.isEmpty(metrics.getFilters())) { + Map contextMap = new HashMap<>(8); + for (int i = 0; i < fields.size(); i++) { + Metrics.Field field = fields.get(i); + String value = realValueRow.getColumns(i); + contextMap.put(field.getField(), value); + } + boolean isMatch = false; + for (String filterExpr : metrics.getFilters()) { + try { + JexlExpression expression = JexlExpressionRunner.compile(filterExpr); + if ((Boolean) JexlExpressionRunner.evaluate(expression, contextMap)) { + isMatch = true; + break; + } + } catch (Exception e) { + log.warn("[metrics data row filters execute warning] {}.", e.getMessage()); + } + } + if (!isMatch) { + // ignore this data row + continue; + } + } + collectData.addValueRow(realValueRow); } } diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java index 455b584d86b..2251f9baaa1 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/collect/AbstractCollect.java @@ -35,12 +35,11 @@ public abstract class AbstractCollect { /** * Real acquisition implementation interface + * * @param builder response builder - * @param monitorId monitor id - * @param app monitor type * @param metrics metric configuration */ - public abstract void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics); + public abstract void collect(CollectRep.MetricsData.Builder builder, Metrics metrics); /** * the protocol this collect instance support diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/CollectServer.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/CollectServer.java index a17141bf63d..ce0b0855be9 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/CollectServer.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/CollectServer.java @@ -18,6 +18,7 @@ package org.apache.hertzbeat.collector.dispatch.entrance; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.protobuf.ByteString; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.collector.dispatch.CollectorInfoProperties; @@ -145,7 +146,7 @@ public void onChannelActive(Channel channel) { ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setIdentity(identity) .setType(ClusterMsg.MessageType.GO_ONLINE) - .setMsg(JsonUtil.toJson(collectorInfo)) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(collectorInfo))) .build(); CollectServer.this.sendMsg(message); diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/internal/CollectJobService.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/internal/CollectJobService.java index 3417e949be8..a8e1d5bb1b1 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/internal/CollectJobService.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/internal/CollectJobService.java @@ -17,8 +17,8 @@ package org.apache.hertzbeat.collector.dispatch.entrance.internal; +import com.google.protobuf.ByteString; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.apache.hertzbeat.collector.dispatch.DispatchProperties; import org.apache.hertzbeat.collector.dispatch.WorkerPool; import org.apache.hertzbeat.collector.dispatch.entrance.CollectServer; @@ -27,9 +27,8 @@ import org.apache.hertzbeat.common.entity.job.Job; import org.apache.hertzbeat.common.entity.message.ClusterMsg; import org.apache.hertzbeat.common.entity.message.CollectRep; +import org.apache.hertzbeat.common.util.ArrowUtil; import org.apache.hertzbeat.common.util.IpDomainUtil; -import org.apache.hertzbeat.common.util.JsonUtil; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -38,7 +37,6 @@ import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; /** * Collection job management provides api interface @@ -118,15 +116,9 @@ public void response(List responseMetrics) { public void collectSyncOneTimeJobData(Job oneTimeJob) { workerPool.executeJob(() -> { List metricsDataList = this.collectSyncJobData(oneTimeJob); - List jsons = CollectionUtils.emptyIfNull(metricsDataList) - .stream() - .map(ProtoJsonUtil::toJsonStr) - .filter(StringUtils::hasText) - .collect(Collectors.toList()); - - String response = JsonUtil.toJson(jsons); + byte[] msg = ArrowUtil.serializeMetricsData(metricsDataList); ClusterMsg.Message message = ClusterMsg.Message.newBuilder() - .setMsg(response) + .setMsg(ByteString.copyFrom(msg)) .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.RESPONSE_ONE_TIME_TASK_DATA) .build(); @@ -160,10 +152,10 @@ public void cancelAsyncCollectJob(Long jobId) { * @param metricsData collect data */ public void sendAsyncCollectData(CollectRep.MetricsData metricsData) { - String data = ProtoJsonUtil.toJsonStr(metricsData); + byte[] msg = ArrowUtil.serializeMetricsData(List.of(metricsData)); ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setIdentity(collectorIdentity) - .setMsg(data) + .setMsg(ByteString.copyFrom(msg)) .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.RESPONSE_CYCLIC_TASK_DATA) .build(); @@ -171,10 +163,10 @@ public void sendAsyncCollectData(CollectRep.MetricsData metricsData) { } public void sendAsyncServiceDiscoveryData(CollectRep.MetricsData metricsData) { - String data = ProtoJsonUtil.toJsonStr(metricsData); + byte[] msg = ArrowUtil.serializeMetricsData(List.of(metricsData)); ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setIdentity(collectorIdentity) - .setMsg(data) + .setMsg(ByteString.copyFrom(msg)) .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.RESPONSE_CYCLIC_TASK_SD_DATA) .build(); diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectCyclicDataProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectCyclicDataProcessor.java index d25a7493aa7..f37f71d8502 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectCyclicDataProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectCyclicDataProcessor.java @@ -38,7 +38,7 @@ public CollectCyclicDataProcessor(CollectServer collectServer) { @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { - Job job = JsonUtil.fromJson(message.getMsg(), Job.class); + Job job = JsonUtil.fromJson(message.getMsg().toStringUtf8(), Job.class); if (job == null) { log.error("collector receive cyclic task job is null"); return null; diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectOneTimeDataProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectOneTimeDataProcessor.java index 151bd92fc97..74f3d526cd3 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectOneTimeDataProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/CollectOneTimeDataProcessor.java @@ -36,7 +36,7 @@ public CollectOneTimeDataProcessor(final CollectServer collectServer) { @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { - Job oneTimeJob = JsonUtil.fromJson(message.getMsg(), Job.class); + Job oneTimeJob = JsonUtil.fromJson(message.getMsg().toStringUtf8(), Job.class); collectServer.getCollectJobService().collectSyncOneTimeJobData(oneTimeJob); return null; } diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/DeleteCyclicTaskProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/DeleteCyclicTaskProcessor.java index a1ba8e0c2ef..0499a8b2e08 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/DeleteCyclicTaskProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/DeleteCyclicTaskProcessor.java @@ -41,7 +41,7 @@ public DeleteCyclicTaskProcessor(CollectServer collectServer) { @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { TypeReference> typeReference = new TypeReference<>() {}; - List jobIds = JsonUtil.fromJson(message.getMsg(), typeReference); + List jobIds = JsonUtil.fromJson(message.getMsg().toStringUtf8(), typeReference); if (jobIds == null || jobIds.isEmpty()) { log.error("collector receive delete cyclic task job ids is null"); return null; diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoCloseProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoCloseProcessor.java index 725fd9e3a43..ef47ed6bc40 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoCloseProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoCloseProcessor.java @@ -45,7 +45,7 @@ public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message m if (this.timerDispatch == null) { this.timerDispatch = SpringContextHolder.getBean(TimerDispatch.class); } - if (message.getMsg().contains(CommonConstants.COLLECTOR_AUTH_FAILED)) { + if (message.getMsg().toStringUtf8().contains(CommonConstants.COLLECTOR_AUTH_FAILED)) { log.error("[Auth Failed]receive client auth failed message and go close. {}", message.getMsg()); } this.timerDispatch.goOffline(); diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOfflineProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOfflineProcessor.java index 007b77053ba..863fa08fe80 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOfflineProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOfflineProcessor.java @@ -17,6 +17,7 @@ package org.apache.hertzbeat.collector.dispatch.entrance.processor; +import com.google.protobuf.ByteString; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.collector.dispatch.timer.TimerDispatch; @@ -41,14 +42,14 @@ public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message m } timerDispatch.goOffline(); log.info("receive offline message and handle success"); - if (message.getMsg().contains(CommonConstants.COLLECTOR_AUTH_FAILED)) { + if (message.getMsg().toStringUtf8().contains(CommonConstants.COLLECTOR_AUTH_FAILED)) { log.error("[Auth Failed]receive client auth failed message and go offline. {}", message.getMsg()); return null; } return ClusterMsg.Message.newBuilder() .setIdentity(message.getIdentity()) .setDirection(ClusterMsg.Direction.RESPONSE) - .setMsg(String.valueOf(CommonConstants.SUCCESS_CODE)) + .setMsg(ByteString.copyFromUtf8(String.valueOf(CommonConstants.SUCCESS_CODE))) .build(); } } diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOnlineProcessor.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOnlineProcessor.java index ce3b9eae339..f78314d81d8 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOnlineProcessor.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/entrance/processor/GoOnlineProcessor.java @@ -17,6 +17,7 @@ package org.apache.hertzbeat.collector.dispatch.entrance.processor; +import com.google.protobuf.ByteString; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.collector.dispatch.timer.TimerDispatch; @@ -44,7 +45,7 @@ public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message m return ClusterMsg.Message.newBuilder() .setIdentity(message.getIdentity()) .setDirection(ClusterMsg.Direction.RESPONSE) - .setMsg(String.valueOf(CommonConstants.SUCCESS_CODE)) + .setMsg(ByteString.copyFromUtf8(String.valueOf(CommonConstants.SUCCESS_CODE))) .build(); } } diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/export/NettyDataQueue.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/export/NettyDataQueue.java index 068ce13f25b..659b0b90056 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/export/NettyDataQueue.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/dispatch/export/NettyDataQueue.java @@ -73,12 +73,7 @@ public CollectRep.MetricsData pollMetricsDataToAlerter() throws InterruptedExcep } @Override - public CollectRep.MetricsData pollMetricsDataToPersistentStorage() throws InterruptedException { - return null; - } - - @Override - public CollectRep.MetricsData pollMetricsDataToRealTimeStorage() throws InterruptedException { + public CollectRep.MetricsData pollMetricsDataToStorage() throws InterruptedException { return null; } @@ -92,6 +87,11 @@ public void sendMetricsData(CollectRep.MetricsData metricsData) { collectJobService.sendAsyncCollectData(metricsData); } + @Override + public void sendMetricsDataToStorage(CollectRep.MetricsData metricsData) { + + } + @Override public void sendServiceDiscoveryData(CollectRep.MetricsData metricsData) { collectJobService.sendAsyncServiceDiscoveryData(metricsData); diff --git a/hertzbeat-collector/hertzbeat-collector-kafka/src/main/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-kafka/src/main/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectImpl.java index f15ba3c4a37..aa61ad8192f 100644 --- a/hertzbeat-collector/hertzbeat-collector-kafka/src/main/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-kafka/src/main/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectImpl.java @@ -70,7 +70,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { try { KafkaProtocol kafkaProtocol = metrics.getKclient(); String command = kafkaProtocol.getCommand(); @@ -133,11 +133,11 @@ private void extractedOffset(CollectRep.MetricsData.Builder builder, AdminClient long earliestOffset = getEarliestOffset(adminClient, topicPartition); long latestOffset = getLatestOffset(adminClient, topicPartition); CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); - valueRowBuilder.addColumns(value.name()); - valueRowBuilder.addColumns(String.valueOf(info.partition())); - valueRowBuilder.addColumns(String.valueOf(earliestOffset)); - valueRowBuilder.addColumns(String.valueOf(latestOffset)); - builder.addValues(valueRowBuilder.build()); + valueRowBuilder.addColumn(value.name()); + valueRowBuilder.addColumn(String.valueOf(info.partition())); + valueRowBuilder.addColumn(String.valueOf(earliestOffset)); + valueRowBuilder.addColumn(String.valueOf(latestOffset)); + builder.addValueRow(valueRowBuilder.build()); } catch (TimeoutException | InterruptedException | ExecutionException e) { log.warn("Topic {} get offset fail", name); } @@ -187,8 +187,8 @@ private static void collectTopicList(CollectRep.MetricsData.Builder builder, Adm ListTopicsOptions options = new ListTopicsOptions().listInternal(true); Set names = adminClient.listTopics(options).names().get(); names.forEach(name -> { - CollectRep.ValueRow valueRow = CollectRep.ValueRow.newBuilder().addColumns(name).build(); - builder.addValues(valueRow); + CollectRep.ValueRow valueRow = CollectRep.ValueRow.newBuilder().addColumn(name).build(); + builder.addValueRow(valueRow); }); } @@ -209,14 +209,14 @@ private static void collectTopicDescribe(CollectRep.MetricsData.Builder builder, List listp = value.partitions(); listp.forEach(info -> { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); - valueRowBuilder.addColumns(value.name()); - valueRowBuilder.addColumns(String.valueOf(value.partitions().size())); - valueRowBuilder.addColumns(String.valueOf(info.partition())); - valueRowBuilder.addColumns(info.leader().host()); - valueRowBuilder.addColumns(String.valueOf(info.leader().port())); - valueRowBuilder.addColumns(String.valueOf(info.replicas().size())); - valueRowBuilder.addColumns(String.valueOf(info.replicas())); - builder.addValues(valueRowBuilder.build()); + valueRowBuilder.addColumn(value.name()); + valueRowBuilder.addColumn(String.valueOf(value.partitions().size())); + valueRowBuilder.addColumn(String.valueOf(info.partition())); + valueRowBuilder.addColumn(info.leader().host()); + valueRowBuilder.addColumn(String.valueOf(info.leader().port())); + valueRowBuilder.addColumn(String.valueOf(info.replicas().size())); + valueRowBuilder.addColumn(String.valueOf(info.replicas())); + builder.addValueRow(valueRowBuilder.build()); }); }); } @@ -245,11 +245,11 @@ private static void collectTopicConsumerGroups(CollectRep.MetricsData.Builder bu ConsumerGroupDescription description = consumerGroupDescriptions.get(groupId); Map offsetAndLagNum = getConsumerGroupMetrics(topic, groupId, adminClient); return CollectRep.ValueRow.newBuilder() - .addColumns(groupId) - .addColumns(String.valueOf(description.members().size())) - .addColumns(topic) - .addColumns(offsetAndLagNum.get(PARTITION_OFFSET)) - .addColumns(offsetAndLagNum.get(LAG_NUM)) + .addColumn(groupId) + .addColumn(String.valueOf(description.members().size())) + .addColumn(topic) + .addColumn(offsetAndLagNum.get(PARTITION_OFFSET)) + .addColumn(offsetAndLagNum.get(LAG_NUM)) .build(); } catch (InterruptedException | ExecutionException e) { log.warn("group {} get message fail", groupId); @@ -258,7 +258,7 @@ private static void collectTopicConsumerGroups(CollectRep.MetricsData.Builder bu }) ) .filter(Objects::nonNull) - .forEach(builder::addValues); + .forEach(builder::addValueRow); } private static Map> getTopicConsumerGroupsMap(Collection consumerGroups, @@ -317,4 +317,4 @@ private static Map getConsumerGroupMetrics(String topic, String public String supportProtocol() { return DispatchConstants.PROTOCOL_KAFKA; } -} \ No newline at end of file +} diff --git a/hertzbeat-collector/hertzbeat-collector-kafka/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectTest.java b/hertzbeat-collector/hertzbeat-collector-kafka/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectTest.java index 04c7676b158..c255fc677df 100644 --- a/hertzbeat-collector/hertzbeat-collector-kafka/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-kafka/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectTest.java @@ -75,14 +75,14 @@ void collect() { // metrics is null assertThrows(NullPointerException.class, () -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - collect.collect(builder, 1L, "app", null); + collect.collect(builder, null); }); assertDoesNotThrow(() -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); KafkaProtocol kafka = KafkaProtocol.builder().host("127.0.0.1").port("9092").build(); Metrics metrics = Metrics.builder().kclient(kafka).build(); - collect.collect(builder, 1L, "app", metrics); + collect.collect(builder, metrics); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-mongodb/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-mongodb/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java index e261e459803..473eb6dae1d 100644 --- a/hertzbeat-collector/hertzbeat-collector-mongodb/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-mongodb/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java @@ -98,7 +98,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException{ } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { // The command naming convention is the command supported by the above mongodb diagnostic. Support subdocument // If the command does not include., execute the command directly and use the document it returns; // otherwise, you need to execute the metricsParts[0] command first and then obtain the related subdocument @@ -126,7 +126,7 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri throw new RuntimeException("the document get from command " + metrics.getMongodb().getCommand() + " is null."); } fillBuilder(metrics, valueRowBuilder, document); - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } catch (MongoServerUnavailableException | MongoTimeoutException unavailableException) { connectionCommonCache.removeCache(identifier); builder.setCode(CollectRep.Code.UN_CONNECTABLE); @@ -153,12 +153,12 @@ private void fillBuilder(Metrics metrics, CollectRep.ValueRow.Builder valueRowBu if (document.containsKey(it)) { Object fieldValue = document.get(it); if (fieldValue == null) { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } else { - valueRowBuilder.addColumns(fieldValue.toString()); + valueRowBuilder.addColumn(fieldValue.toString()); } } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } }); } diff --git a/hertzbeat-collector/hertzbeat-collector-mongodb/src/test/java/org/apache/hertzbeat/collector/collect/mongodb/MongoCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-mongodb/src/test/java/org/apache/hertzbeat/collector/collect/mongodb/MongoCollectImplTest.java index 4f6b176be81..2e275bc410d 100644 --- a/hertzbeat-collector/hertzbeat-collector-mongodb/src/test/java/org/apache/hertzbeat/collector/collect/mongodb/MongoCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-mongodb/src/test/java/org/apache/hertzbeat/collector/collect/mongodb/MongoCollectImplTest.java @@ -100,7 +100,7 @@ void mockTest() { .build(); mongoClientsMockedStatic.when(() -> MongoClients.create(settings)).thenReturn(mongoClient); mongodbSingleCollect.preCheck(metrics); - mongodbSingleCollect.collect(builder, 1L, "test", metrics); + mongodbSingleCollect.collect(builder, metrics); Assertions.assertEquals("Linux", builder.getValues(0).getColumns(0)); Assertions.assertEquals("Ubuntu", builder.getValues(0).getColumns(1)); Assertions.assertEquals("22.04", builder.getValues(0).getColumns(2)); diff --git a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java index 6874ee99843..5bde501243b 100644 --- a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NebulaGraphCollectImpl.java @@ -74,7 +74,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { long startTime = System.currentTimeMillis(); NebulaGraphProtocol nebulaGraph = metrics.getNebulaGraph(); String timePeriod = nebulaGraph.getTimePeriod(); @@ -120,9 +120,9 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String field : aliasFields) { String fieldValue = resultMap.get(field); - valueRowBuilder.addColumns(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); + valueRowBuilder.addColumn(Objects.requireNonNullElse(fieldValue, CommonConstants.NULL_VALUE)); } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } catch (IOException e) { String errorMsg = CommonUtil.getMessageFromThrowable(e); log.info(errorMsg); diff --git a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java index 3b18aef89c6..33a361aa0bf 100644 --- a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/main/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImpl.java @@ -61,7 +61,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(Builder builder, Metrics metrics) { NgqlProtocol ngql = metrics.getNgql(); StopWatch stopWatch = new StopWatch(); stopWatch.start(); @@ -139,14 +139,14 @@ private void filterCount(NebulaTemplate nebulaTemplate, NgqlProtocol protocol, L CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); for (String column : columns) { if (CollectorConstants.RESPONSE_TIME.equals(column)) { - valueRowBuilder.addColumns(String.valueOf(responseTime)); + valueRowBuilder.addColumn(String.valueOf(responseTime)); } else { String value = data.get(column); value = value == null ? CommonConstants.NULL_VALUE : value; - valueRowBuilder.addColumns(value); + valueRowBuilder.addColumn(value); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } private void queryOneRow(NebulaTemplate nebulaTemplate, NgqlProtocol protocol, List columns, CollectRep.MetricsData.Builder builder, Long responseTime) { @@ -205,14 +205,14 @@ private void inflateData(List columns, Long responseTime, Map { builder = CollectRep.MetricsData.newBuilder(); Metrics metrics = Metrics.builder().nebulaGraph(NebulaGraphProtocol.builder().timePeriod("invalid").build()).build(); - nebulaGraphCollect.collect(builder, 0, null, metrics); + nebulaGraphCollect.collect(builder, metrics); Assertions.assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); @@ -92,7 +92,7 @@ void collect() { .url("example.com") .timeout("1") .build()).build(); - nebulaGraphCollect.collect(builder, 0, null, metrics); + nebulaGraphCollect.collect(builder, metrics); Assertions.assertEquals(CollectRep.Code.FAIL, builder.getCode()); }); } diff --git a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java index 7c289631fea..4ba760dca8b 100644 --- a/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java +++ b/hertzbeat-collector/hertzbeat-collector-nebulagraph/src/test/java/org/apache/hertzbeat/collector/collect/nebulagraph/NgqlCollectImplTest.java @@ -88,7 +88,7 @@ void testOneRowCollect() { metrics.setNgql(ngqlProtocol); metrics.setAliasFields(aliasField); ngqlCollect.preCheck(metrics); - ngqlCollect.collect(builder, 1L, "test", metrics); + ngqlCollect.collect(builder, metrics); Assertions.assertEquals(builder.getValuesCount(), 1); Assertions.assertEquals(builder.getValues(0).getColumns(0), collation); Assertions.assertEquals(builder.getValues(0).getColumns(1), charset); @@ -122,7 +122,7 @@ void testFilterCountCollect() { metrics.setNgql(ngqlProtocol); metrics.setAliasFields(aliasField); ngqlCollect.preCheck(metrics); - ngqlCollect.collect(builder, 1L, "test", metrics); + ngqlCollect.collect(builder, metrics); Assertions.assertEquals(1, builder.getValuesCount()); Assertions.assertEquals("1", builder.getValues(0).getColumns(0)); mocked.close(); @@ -155,7 +155,7 @@ void testMultiRowCollect() { metrics.setNgql(ngqlProtocol); metrics.setAliasFields(aliasField); ngqlCollect.preCheck(metrics); - ngqlCollect.collect(builder, 1L, "test", metrics); + ngqlCollect.collect(builder, metrics); Assertions.assertEquals(3, builder.getValuesCount()); for (int i = 0; i < result.size(); i++) { List> list = new ArrayList<>(result.get(i).entrySet()); @@ -193,7 +193,7 @@ void testColumnsCollect() { metrics.setNgql(ngqlProtocol); metrics.setAliasFields(aliasField); ngqlCollect.preCheck(metrics); - ngqlCollect.collect(builder, 1L, "test", metrics); + ngqlCollect.collect(builder, metrics); Assertions.assertEquals(1, builder.getValuesCount()); for (int i = 0; i < 3; i++) { Assertions.assertEquals("9669" + i, builder.getValues(0).getColumns(i)); diff --git a/hertzbeat-collector/hertzbeat-collector-rocketmq/src/main/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectImpl.java b/hertzbeat-collector/hertzbeat-collector-rocketmq/src/main/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectImpl.java index 7fa62d66b75..c8c3889dd85 100644 --- a/hertzbeat-collector/hertzbeat-collector-rocketmq/src/main/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectImpl.java +++ b/hertzbeat-collector/hertzbeat-collector-rocketmq/src/main/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectImpl.java @@ -119,7 +119,7 @@ public void preCheck(Metrics metrics) throws IllegalArgumentException { } @Override - public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { + public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { DefaultMQAdminExt mqAdminExt = null; try { mqAdminExt = this.createMqAdminExt(metrics); @@ -361,12 +361,12 @@ private void fillBuilder(RocketmqCollectData rocketmqCollectData, CollectRep.Met List valueList = JsonPathParser.parseContentWithJsonPath(dataJson, parseScript + aliasField); if (CollectionUtils.isNotEmpty(valueList) && valueList.size() > i) { Object value = valueList.get(i); - valueRowBuilder.addColumns(value == null ? CommonConstants.NULL_VALUE : String.valueOf(value)); + valueRowBuilder.addColumn(value == null ? CommonConstants.NULL_VALUE : String.valueOf(value)); } else { - valueRowBuilder.addColumns(CommonConstants.NULL_VALUE); + valueRowBuilder.addColumn(CommonConstants.NULL_VALUE); } } - builder.addValues(valueRowBuilder.build()); + builder.addValueRow(valueRowBuilder.build()); } } } diff --git a/hertzbeat-collector/hertzbeat-collector-rocketmq/src/test/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectTest.java b/hertzbeat-collector/hertzbeat-collector-rocketmq/src/test/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectTest.java index e49c0919019..9996e727276 100644 --- a/hertzbeat-collector/hertzbeat-collector-rocketmq/src/test/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectTest.java +++ b/hertzbeat-collector/hertzbeat-collector-rocketmq/src/test/java/org/apache/hertzbeat/collector/collect/rocketmq/RocketmqSingleCollectTest.java @@ -82,14 +82,14 @@ void collect() { // metrics is null assertDoesNotThrow(() -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - collect.collect(builder, 1L, "app", null); + collect.collect(builder, null); }); assertDoesNotThrow(() -> { CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); RocketmqProtocol mq = RocketmqProtocol.builder().namesrvHost("127.0.0.1").namesrvPort("9876").build(); Metrics metrics = Metrics.builder().rocketmq(mq).build(); - collect.collect(builder, 1L, "app", metrics); + collect.collect(builder, metrics); }); } diff --git a/hertzbeat-common/pom.xml b/hertzbeat-common/pom.xml index bfa3faa7c28..e6efc099caa 100644 --- a/hertzbeat-common/pom.xml +++ b/hertzbeat-common/pom.xml @@ -141,6 +141,15 @@ ${poi.version} compile + + + org.apache.arrow + arrow-vector + + + org.apache.arrow + arrow-memory-netty + diff --git a/hertzbeat-common/src/main/java/org/apache/arrow/vector/table/ArrowTable.java b/hertzbeat-common/src/main/java/org/apache/arrow/vector/table/ArrowTable.java new file mode 100644 index 00000000000..ee835726f84 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/arrow/vector/table/ArrowTable.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.arrow.vector.table; + +import java.util.Iterator; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.apache.arrow.vector.FieldVector; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.dictionary.DictionaryProvider; +import org.apache.arrow.vector.types.pojo.Schema; +import org.apache.arrow.vector.util.TransferPair; + +/** + *

A temporary Arrow Table implementation that uses Arrow's FieldVectors to store data.

+ *

Instead of Table, due the table can not store the schema metadata, so we need to use ArrowTable to store the schema metadata.

+ *

todo Improve the upstream branch `table` to support schema metadata.

+ */ +@Slf4j +public class ArrowTable extends BaseTable { + + /** + * Constructs new instance with the given rowCount, and containing the schema and each of the + * given vectors. + * + * @param fieldVectors the FieldVectors containing the table's data + * @param rowCount the number of rows in the table + * @param provider a dictionary provider, may be null if none of the vectors in the table are + * encoded + */ + public ArrowTable(List fieldVectors, int rowCount, DictionaryProvider provider) { + super(fieldVectors, rowCount, provider); + } + + /** + * Constructs a new instance containing the data from the argument. Vectors are shared between the + * Table and VectorSchemaRoot. Direct modification of those vectors is unsafe and should be + * avoided. + * + * @param vsr The VectorSchemaRoot providing data for this Table + */ + public ArrowTable(VectorSchemaRoot vsr) { + this(vsr.getFieldVectors(), vsr.getRowCount(), null); + try { + this.schema = Schema.fromJSON(vsr.getSchema().toJson()); + } catch (Exception e) { + log.error("Failed to parse arrow table schema from VectorSchemaRoot", e); + } + vsr.clear(); + } + + @Override + public VectorSchemaRoot toVectorSchemaRoot() { + List fieldVectorList = fieldVectors.stream() + .map( + v -> { + TransferPair transferPair = v.getTransferPair(v.getAllocator()); + transferPair.transfer(); + return (FieldVector) transferPair.getTo(); + }) + .toList(); + VectorSchemaRoot vsr = + new VectorSchemaRoot(schema, fieldVectorList, rowCount); + clear(); + return vsr; + } + + public FieldVector getVector(String columnName) { + return super.getVector(columnName); + } + + /** Returns a Row iterator for this Table. */ + public Iterator iterator() { + + return new Iterator() { + + private final Row row = new Row(ArrowTable.this); + + @Override + public Row next() { + row.next(); + return row; + } + + @Override + public boolean hasNext() { + return row.hasNext(); + } + }; + } + +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/config/CommonProperties.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/config/CommonProperties.java index e90f3ad18cc..830b31d6a0b 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/config/CommonProperties.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/config/CommonProperties.java @@ -133,6 +133,10 @@ public static class KafkaProperties extends BaseKafkaProperties { * metrics data topic */ private String metricsDataTopic; + /** + * metrics data to storage topic + */ + private String metricsDataToStorageTopic; /** * service discovery data topic */ diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CollectCodeConstants.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CollectCodeConstants.java new file mode 100644 index 00000000000..75b46053b41 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CollectCodeConstants.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.constants; + +/** + * collect code + */ +public interface CollectCodeConstants { + /** collect success **/ + String SUCCESS = "0"; + /** collector not available **/ + String UN_AVAILABLE = "1"; + /** peer network un reachable(icmp) **/ + String UN_REACHABLE = "2"; + /** peer network server un connectable(tcp,udp...) **/ + String UN_CONNECTABLE = "3"; + /** collect metrics data failed(http,ssh,snmp...) **/ + String FAILED = "4"; + /** collect metrics data timeout **/ + String TIMEOUT = "5"; +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CommonConstants.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CommonConstants.java index 6ef27bb0c10..eb093e387f3 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CommonConstants.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/CommonConstants.java @@ -400,14 +400,4 @@ public interface CommonConstants { * status page incident state resolved */ byte STATUS_PAGE_INCIDENT_STATE_RESOLVED = 3; - - /** - * host column for service discovery - */ - int SD_HOST_COLUMN = 0; - - /** - * port column for service discovery - */ - int SD_PORT_COLUMN = 1; } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/MetricDataConstants.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/MetricDataConstants.java new file mode 100644 index 00000000000..cfeee5a97a8 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/MetricDataConstants.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.constants; + +/** + * Metric Data Field Constants + */ +public interface MetricDataConstants { + // key in Field + String TYPE = "type"; + String LABEL = "label"; + String UNIT = "unit"; + + // key in Schema metadata + String MONITOR_ID = "id"; + String TENANT_ID = "tenantId"; + String APP = "app"; + String METRICS = "metrics"; + String PRIORITY = "priority"; + String TIME = "time"; + String CODE = "code"; + String MSG = "msg"; +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/ArrowCell.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/ArrowCell.java new file mode 100644 index 00000000000..59f5b8484ca --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/ArrowCell.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.entity.arrow; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.arrow.vector.table.Row; +import org.apache.arrow.vector.types.pojo.Field; + +/** + * A cell consisting of {@link Field} and value + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ArrowCell extends DefaultMetadataReader { + private final String value; + private final Field field; + + public ArrowCell(Field field, Row row) { + this.field = field; + this.value = row.getVarCharObj(field.getName()); + this.metadata = field.getMetadata(); + } +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/DefaultMetadataReader.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/DefaultMetadataReader.java new file mode 100644 index 00000000000..2a02d318730 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/DefaultMetadataReader.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.entity.arrow; + +import java.util.Map; + +/** + * implementation of MetadataOperator + */ +public class DefaultMetadataReader implements MetadataReader { + protected Map metadata; + + @Override + public String getMetadataAsString(String key) { + return metadata.get(key); + } + + @Override + public Boolean getMetadataAsBoolean(String key) { + return Boolean.parseBoolean(metadata.get(key)); + } + + @Override + public Byte getMetadataAsByte(String key) { + return Byte.parseByte(metadata.get(key)); + } + + @Override + public Integer getMetadataAsInteger(String key) { + return Integer.parseInt(metadata.get(key)); + } + + @Override + public Long getMetadataAsLong(String key) { + return Long.parseLong(metadata.get(key)); + } +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/MetadataReader.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/MetadataReader.java new file mode 100644 index 00000000000..d000a989413 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/MetadataReader.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.entity.arrow; + +/** + */ +public interface MetadataReader { + String getMetadataAsString(String key); + + Boolean getMetadataAsBoolean(String key); + + Byte getMetadataAsByte(String key); + + Integer getMetadataAsInteger(String key); + + Long getMetadataAsLong(String key); +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/RowWrapper.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/RowWrapper.java new file mode 100644 index 00000000000..0ce119c74c0 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/arrow/RowWrapper.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.entity.arrow; + +import lombok.Getter; +import org.apache.arrow.vector.table.Row; +import org.apache.arrow.vector.types.pojo.Field; + +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.stream.Stream; + +/** + * A wrapper of row, which contains row info, fields info in this row and each cell of field. + * When using RowWrapper, it is necessary to call {@link RowWrapper#hasNextRow()} and {@link RowWrapper#nextRow()} + */ +public class RowWrapper { + private final Row currentRow; + private final Iterator rowIterator; + @Getter + private final List fieldList; + @Getter + private int rowIndex; + private int fieldIndex; + + public RowWrapper(Row row, Iterator rowIterator, List fieldList, int rowIndex) { + this.currentRow = row; + this.rowIterator = rowIterator; + this.fieldList = fieldList; + this.fieldIndex = 0; + this.rowIndex = rowIndex; + } + + public boolean hasNextRow() { + return rowIterator.hasNext(); + } + + public RowWrapper nextRow() { + return new RowWrapper(rowIterator.next(), rowIterator, fieldList, ++rowIndex); + } + + /** + *

Get next cell in current row. + *

RowWrapper maintain a field index internally, which means cannot back to previous cell after call this method. + * However, you can use {@link RowWrapper#resetCellIndex()} to reset field index to the beginning. + * @return ArrowCell + */ + public ArrowCell nextCell() { + if (!hasNextCell() || currentRow == null) { + throw new NoSuchElementException("No more cells in current row"); + } + return new ArrowCell(fieldList.get(fieldIndex++), currentRow); + } + + public Stream cellStream() { + return fieldList.stream().map(field -> new ArrowCell(field, currentRow)); + } + + public boolean hasNextCell() { + return fieldIndex < fieldList.size(); + } + + public void resetCellIndex() { + this.fieldIndex = 0; + } +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/job/Metrics.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/job/Metrics.java index 6a2838577e8..003f5792fcd 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/job/Metrics.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/job/Metrics.java @@ -124,6 +124,11 @@ public class Metrics { * eg: size = size1 + size2, speed = speedSize */ private List calculates; + /** + * filters + * eg: class == 9 && name != 'java' + */ + private List filters; /** * unit conversion expr * eg: @@ -269,7 +274,7 @@ public class Metrics { * collector use - Temporarily store subTask metrics response data */ @JsonIgnore - private transient AtomicReference subTaskDataRef; + private transient AtomicReference subTaskDataRef; /** * collector use - Temporarily store subTask running num @@ -299,26 +304,24 @@ public boolean isHasSubTask() { * @return is last task? */ public boolean consumeSubTaskResponse(CollectRep.MetricsData metricsData) { - if (subTaskNum == null) { - return true; - } synchronized (subTaskNum) { int index = subTaskNum.decrementAndGet(); if (subTaskDataRef.get() == null) { - subTaskDataRef.set(metricsData); + subTaskDataRef.set(CollectRep.MetricsData.newBuilder(metricsData)); } else { if (metricsData.getValuesCount() >= 1) { - CollectRep.MetricsData.Builder dataBuilder = CollectRep.MetricsData.newBuilder(subTaskDataRef.get()); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { + CollectRep.MetricsData.Builder dataBuilder = subTaskDataRef.get(); + for (CollectRep.ValueRow valueRow : metricsData.getValues()) { if (valueRow.getColumnsCount() == dataBuilder.getFieldsCount()) { - dataBuilder.addValues(valueRow); + dataBuilder.addValueRow(valueRow); } else { log.error("consume subTask data value not mapping filed"); } } - subTaskDataRef.set(dataBuilder.build()); + subTaskDataRef.set(dataBuilder); } } + metricsData.close(); return index == 0; } } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/ClusterMsg.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/ClusterMsg.java index f0c8dc4480c..18181be994c 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/ClusterMsg.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/ClusterMsg.java @@ -485,20 +485,10 @@ public interface MessageOrBuilder extends * message content * * - * string msg = 4; + * bytes msg = 4; * @return The msg. */ - String getMsg(); - /** - *

-     * message content
-     * 
- * - * string msg = 4; - * @return The bytes for msg. - */ - com.google.protobuf.ByteString - getMsgBytes(); + com.google.protobuf.ByteString getMsg(); } /** * Protobuf type {@code org.apache.hertzbeat.common.entity.message.Message} @@ -516,7 +506,7 @@ private Message() { identity_ = ""; direction_ = 0; type_ = 0; - msg_ = ""; + msg_ = com.google.protobuf.ByteString.EMPTY; } @Override @@ -568,9 +558,8 @@ private Message( break; } case 34: { - String s = input.readStringRequireUtf8(); - msg_ = s; + msg_ = input.readBytes(); break; } default: { @@ -708,49 +697,18 @@ public String getIdentity() { } public static final int MSG_FIELD_NUMBER = 4; - private volatile Object msg_; + private com.google.protobuf.ByteString msg_; /** *
      * message content
      * 
* - * string msg = 4; + * bytes msg = 4; * @return The msg. */ @Override - public String getMsg() { - Object ref = msg_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - msg_ = s; - return s; - } - } - /** - *
-     * message content
-     * 
- * - * string msg = 4; - * @return The bytes for msg. - */ - @Override - public com.google.protobuf.ByteString - getMsgBytes() { - Object ref = msg_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - msg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public com.google.protobuf.ByteString getMsg() { + return msg_; } private byte memoizedIsInitialized = -1; @@ -776,8 +734,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (type_ != MessageType.HEARTBEAT.getNumber()) { output.writeEnum(3, type_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(msg_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, msg_); + if (!msg_.isEmpty()) { + output.writeBytes(4, msg_); } unknownFields.writeTo(output); } @@ -799,8 +757,9 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeEnumSize(3, type_); } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(msg_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, msg_); + if (!msg_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, msg_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -981,7 +940,7 @@ public Builder clear() { type_ = 0; - msg_ = ""; + msg_ = com.google.protobuf.ByteString.EMPTY; return this; } @@ -1071,9 +1030,8 @@ public Builder mergeFrom(Message other) { if (other.type_ != 0) { setTypeValue(other.getTypeValue()); } - if (!other.getMsg().isEmpty()) { - msg_ = other.msg_; - onChanged(); + if (other.getMsg() != com.google.protobuf.ByteString.EMPTY) { + setMsg(other.getMsg()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -1348,59 +1306,29 @@ public Builder clearType() { return this; } - private Object msg_ = ""; + private com.google.protobuf.ByteString msg_ = com.google.protobuf.ByteString.EMPTY; /** *
        * message content
        * 
* - * string msg = 4; + * bytes msg = 4; * @return The msg. */ - public String getMsg() { - Object ref = msg_; - if (!(ref instanceof String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - msg_ = s; - return s; - } else { - return (String) ref; - } - } - /** - *
-       * message content
-       * 
- * - * string msg = 4; - * @return The bytes for msg. - */ - public com.google.protobuf.ByteString - getMsgBytes() { - Object ref = msg_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (String) ref); - msg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + @Override + public com.google.protobuf.ByteString getMsg() { + return msg_; } /** *
        * message content
        * 
* - * string msg = 4; + * bytes msg = 4; * @param value The msg to set. * @return This builder for chaining. */ - public Builder setMsg( - String value) { + public Builder setMsg(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } @@ -1414,7 +1342,7 @@ public Builder setMsg( * message content * * - * string msg = 4; + * bytes msg = 4; * @return This builder for chaining. */ public Builder clearMsg() { @@ -1423,26 +1351,6 @@ public Builder clearMsg() { onChanged(); return this; } - /** - *
-       * message content
-       * 
- * - * string msg = 4; - * @param value The bytes for msg to set. - * @return This builder for chaining. - */ - public Builder setMsgBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - msg_ = value; - onChanged(); - return this; - } @Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -1516,7 +1424,7 @@ public Message getDefaultInstanceForType() { "pache.hertzbeat.common.entity.message.Di" + "rection\022E\n\004type\030\003 \001(\01627.org.apache.hertz" + "beat.common.entity.message.MessageType\022\013" + - "\n\003msg\030\004 \001(\t*\363\001\n\013MessageType\022\r\n\tHEARTBEAT" + + "\n\003msg\030\004 \001(\014*\363\001\n\013MessageType\022\r\n\tHEARTBEAT" + "\020\000\022\r\n\tGO_ONLINE\020\001\022\016\n\nGO_OFFLINE\020\002\022\014\n\010GO_" + "CLOSE\020\003\022\025\n\021ISSUE_CYCLIC_TASK\020\004\022\026\n\022DELETE" + "_CYCLIC_TASK\020\005\022\027\n\023ISSUE_ONE_TIME_TASK\020\006\022" + diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/CollectRep.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/CollectRep.java index 8b0ab91a27a..cc36bbcbfd7 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/CollectRep.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/entity/message/CollectRep.java @@ -17,151 +17,84 @@ * under the License. */ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: collect_rep.proto - package org.apache.hertzbeat.common.entity.message; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; +import org.apache.arrow.vector.table.ArrowTable; +import org.apache.arrow.vector.table.Row; +import org.apache.hertzbeat.common.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; + @SuppressWarnings("all") +@Slf4j public final class CollectRep { private CollectRep() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } /** - * Protobuf enum {@code org.apache.hertzbeat.common.entity.message.Code} + * Collect response status code enum */ - public enum Code - implements com.google.protobuf.ProtocolMessageEnum { + public enum Code { /** - *
          * collect success
-         * 
- * - * SUCCESS = 0; */ SUCCESS(0), + /** - *
          * collector not available
-         * 
- * - * UN_AVAILABLE = 1; */ UN_AVAILABLE(1), + /** - *
          * peer network un reachable(icmp)
-         * 
- * - * UN_REACHABLE = 2; */ UN_REACHABLE(2), + /** - *
          * peer network server un connectable(tcp,udp...)
-         * 
- * - * UN_CONNECTABLE = 3; */ UN_CONNECTABLE(3), + /** - *
          * collect metrics data failed(http,ssh,snmp...)
-         * 
- * - * FAIL = 4; */ FAIL(4), + /** - *
          * collect metrics data timeout
-         * 
- * - * TIMEOUT = 5; */ TIMEOUT(5), - UNRECOGNIZED(-1), - ; /** - *
-         * collect success
-         * 
- * - * SUCCESS = 0; - */ - public static final int SUCCESS_VALUE = 0; - /** - *
-         * collector not available
-         * 
- * - * UN_AVAILABLE = 1; - */ - public static final int UN_AVAILABLE_VALUE = 1; - /** - *
-         * peer network un reachable(icmp)
-         * 
- * - * UN_REACHABLE = 2; - */ - public static final int UN_REACHABLE_VALUE = 2; - /** - *
-         * peer network server un connectable(tcp,udp...)
-         * 
- * - * UN_CONNECTABLE = 3; - */ - public static final int UN_CONNECTABLE_VALUE = 3; - /** - *
-         * collect metrics data failed(http,ssh,snmp...)
-         * 
- * - * FAIL = 4; - */ - public static final int FAIL_VALUE = 4; - /** - *
-         * collect metrics data timeout
-         * 
- * - * TIMEOUT = 5; + * unrecognized collect response code */ - public static final int TIMEOUT_VALUE = 5; + UNRECOGNIZED(-1); + + private final int value; + Code(int value) { + this.value = value; + } - public final int getNumber() { + public int getNumber() { if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); + throw new IllegalArgumentException("Can't get the number of an unknown enum value."); } return value; } - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static Code valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ public static Code forNumber(int value) { switch (value) { case 0: return SUCCESS; @@ -173,4258 +106,587 @@ public static Code forNumber(int value) { default: return null; } } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - Code> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Code findValueByNumber(int number) { - return Code.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.getDescriptor().getEnumTypes().get(0); - } - - private static final Code[] VALUES = values(); - - public static Code valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private Code(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:org.apache.hertzbeat.common.entity.message.Code) } - public interface MetricsDataOrBuilder extends - // @@protoc_insertion_point(interface_extends:org.apache.hertzbeat.common.entity.message.MetricsData) - com.google.protobuf.MessageOrBuilder { - - /** - *
-         * monitoring id
-         * 
- * - * uint64 id = 1; - * @return The id. - */ - long getId(); - - /** - *
-         * tenant id
-         * 
- * - * uint64 tenantId = 2; - * @return The tenantId. - */ - long getTenantId(); - - /** - *
-         * monitoring app eg: linux | mysql | jvm
-         * 
- * - * string app = 3; - * @return The app. - */ - java.lang.String getApp(); - /** - *
-         * monitoring app eg: linux | mysql | jvm
-         * 
- * - * string app = 3; - * @return The bytes for app. - */ - com.google.protobuf.ByteString - getAppBytes(); - - /** - *
-         * monitoring metrics eg: cpu | memory | health
-         * 
- * - * string metrics = 4; - * @return The metrics. - */ - java.lang.String getMetrics(); - /** - *
-         * monitoring metrics eg: cpu | memory | health
-         * 
- * - * string metrics = 4; - * @return The bytes for metrics. - */ - com.google.protobuf.ByteString - getMetricsBytes(); - - /** - *
-         * monitoring collect priority >=0
-         * 
- * - * uint32 priority = 5; - * @return The priority. - */ - int getPriority(); - - /** - *
-         * collect timestamp
-         * 
- * - * uint64 time = 6; - * @return The time. - */ - long getTime(); - - /** - *
-         * collect response code
-         * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The enum numeric value on the wire for code. - */ - int getCodeValue(); - /** - *
-         * collect response code
-         * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The code. - */ - org.apache.hertzbeat.common.entity.message.CollectRep.Code getCode(); - - /** - *
-         * collect response error message
-         * 
- * - * string msg = 8; - * @return The msg. - */ - java.lang.String getMsg(); - /** - *
-         * collect response error message
-         * 
- * - * string msg = 8; - * @return The bytes for msg. - */ - com.google.protobuf.ByteString - getMsgBytes(); - - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - java.util.List - getFieldsList(); - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - org.apache.hertzbeat.common.entity.message.CollectRep.Field getFields(int index); - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - int getFieldsCount(); - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - java.util.List - getFieldsOrBuilderList(); - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder getFieldsOrBuilder( - int index); - - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - java.util.List - getValuesList(); - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getValues(int index); - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - int getValuesCount(); - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - java.util.List - getValuesOrBuilderList(); - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder getValuesOrBuilder( - int index); - } /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.MetricsData} + * Metrics data collect response entity */ - public static final class MetricsData extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:org.apache.hertzbeat.common.entity.message.MetricsData) - MetricsDataOrBuilder { - private static final long serialVersionUID = 0L; - // Use MetricsData.newBuilder() to construct. - private MetricsData(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private MetricsData() { - app_ = ""; - metrics_ = ""; - code_ = 0; - msg_ = ""; - fields_ = java.util.Collections.emptyList(); - values_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new MetricsData(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private MetricsData( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - - id_ = input.readUInt64(); - break; - } - case 16: { - - tenantId_ = input.readUInt64(); - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - app_ = s; - break; - } - case 34: { - java.lang.String s = input.readStringRequireUtf8(); - - metrics_ = s; - break; - } - case 40: { - - priority_ = input.readUInt32(); - break; - } - case 48: { - - time_ = input.readUInt64(); - break; - } - case 56: { - int rawValue = input.readEnum(); - - code_ = rawValue; - break; - } - case 66: { - java.lang.String s = input.readStringRequireUtf8(); - - msg_ = s; - break; - } - case 74: { - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - fields_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000001; - } - fields_.add( - input.readMessage(org.apache.hertzbeat.common.entity.message.CollectRep.Field.parser(), extensionRegistry)); - break; - } - case 82: { - if (!((mutable_bitField0_ & 0x00000002) != 0)) { - values_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000002; - } - values_.add( - input.readMessage(org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.parser(), extensionRegistry)); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) != 0)) { - fields_ = java.util.Collections.unmodifiableList(fields_); - } - if (((mutable_bitField0_ & 0x00000002) != 0)) { - values_ = java.util.Collections.unmodifiableList(values_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.class, org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.Builder.class); - } - - public static final int ID_FIELD_NUMBER = 1; - private long id_; - /** - *
-         * monitoring id
-         * 
- * - * uint64 id = 1; - * @return The id. - */ - @java.lang.Override - public long getId() { - return id_; - } - - public static final int TENANTID_FIELD_NUMBER = 2; - private long tenantId_; - /** - *
-         * tenant id
-         * 
- * - * uint64 tenantId = 2; - * @return The tenantId. - */ - @java.lang.Override - public long getTenantId() { - return tenantId_; - } - - public static final int APP_FIELD_NUMBER = 3; - private volatile java.lang.Object app_; - /** - *
-         * monitoring app eg: linux | mysql | jvm
-         * 
- * - * string app = 3; - * @return The app. - */ - @java.lang.Override - public java.lang.String getApp() { - java.lang.Object ref = app_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - app_ = s; - return s; - } - } - /** - *
-         * monitoring app eg: linux | mysql | jvm
-         * 
- * - * string app = 3; - * @return The bytes for app. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getAppBytes() { - java.lang.Object ref = app_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - app_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int METRICS_FIELD_NUMBER = 4; - private volatile java.lang.Object metrics_; - /** - *
-         * monitoring metrics eg: cpu | memory | health
-         * 
- * - * string metrics = 4; - * @return The metrics. - */ - @java.lang.Override - public java.lang.String getMetrics() { - java.lang.Object ref = metrics_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - metrics_ = s; - return s; - } - } - /** - *
-         * monitoring metrics eg: cpu | memory | health
-         * 
- * - * string metrics = 4; - * @return The bytes for metrics. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getMetricsBytes() { - java.lang.Object ref = metrics_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - metrics_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PRIORITY_FIELD_NUMBER = 5; - private int priority_; - /** - *
-         * monitoring collect priority >=0
-         * 
- * - * uint32 priority = 5; - * @return The priority. - */ - @java.lang.Override - public int getPriority() { - return priority_; - } - - public static final int TIME_FIELD_NUMBER = 6; - private long time_; - /** - *
-         * collect timestamp
-         * 
- * - * uint64 time = 6; - * @return The time. - */ - @java.lang.Override - public long getTime() { - return time_; - } - - public static final int CODE_FIELD_NUMBER = 7; - private int code_; - /** - *
-         * collect response code
-         * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The enum numeric value on the wire for code. - */ - @java.lang.Override public int getCodeValue() { - return code_; - } - /** - *
-         * collect response code
-         * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The code. - */ - @java.lang.Override public org.apache.hertzbeat.common.entity.message.CollectRep.Code getCode() { - @SuppressWarnings("deprecation") - org.apache.hertzbeat.common.entity.message.CollectRep.Code result = org.apache.hertzbeat.common.entity.message.CollectRep.Code.valueOf(code_); - return result == null ? org.apache.hertzbeat.common.entity.message.CollectRep.Code.UNRECOGNIZED : result; - } - - public static final int MSG_FIELD_NUMBER = 8; - private volatile java.lang.Object msg_; - /** - *
-         * collect response error message
-         * 
- * - * string msg = 8; - * @return The msg. - */ - @java.lang.Override - public java.lang.String getMsg() { - java.lang.Object ref = msg_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - msg_ = s; - return s; - } - } - /** - *
-         * collect response error message
-         * 
- * - * string msg = 8; - * @return The bytes for msg. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getMsgBytes() { - java.lang.Object ref = msg_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - msg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int FIELDS_FIELD_NUMBER = 9; - private java.util.List fields_; - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - @java.lang.Override - public java.util.List getFieldsList() { - return fields_; - } - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - @java.lang.Override - public java.util.List - getFieldsOrBuilderList() { - return fields_; - } - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - @java.lang.Override - public int getFieldsCount() { - return fields_.size(); - } - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Field getFields(int index) { - return fields_.get(index); - } - /** - *
-         * monitoring collect metric field
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder getFieldsOrBuilder( - int index) { - return fields_.get(index); - } + public static class MetricsData implements AutoCloseable { - public static final int VALUES_FIELD_NUMBER = 10; - private java.util.List values_; - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - @java.lang.Override - public java.util.List getValuesList() { - return values_; - } - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - @java.lang.Override - public java.util.List - getValuesOrBuilderList() { - return values_; - } - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - @java.lang.Override - public int getValuesCount() { - return values_.size(); - } - /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getValues(int index) { - return values_.get(index); - } /** - *
-         * monitoring collect metric data, mapping with the fields
-         * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; + * arrow collect metrics data table */ - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder getValuesOrBuilder( - int index) { - return values_.get(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; + private ArrowTable table; - memoizedIsInitialized = 1; - return true; + public MetricsData(ArrowTable table) { + this.table = table; } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (id_ != 0L) { - output.writeUInt64(1, id_); - } - if (tenantId_ != 0L) { - output.writeUInt64(2, tenantId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(app_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, app_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metrics_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, metrics_); - } - if (priority_ != 0) { - output.writeUInt32(5, priority_); - } - if (time_ != 0L) { - output.writeUInt64(6, time_); - } - if (code_ != org.apache.hertzbeat.common.entity.message.CollectRep.Code.SUCCESS.getNumber()) { - output.writeEnum(7, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(msg_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, msg_); - } - for (int i = 0; i < fields_.size(); i++) { - output.writeMessage(9, fields_.get(i)); - } - for (int i = 0; i < values_.size(); i++) { - output.writeMessage(10, values_.get(i)); - } - unknownFields.writeTo(output); + + public MetricsData(VectorSchemaRoot vectorSchemaRoot) { + this.table = new ArrowTable(vectorSchemaRoot); } - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (id_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size(1, id_); - } - if (tenantId_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size(2, tenantId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(app_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, app_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(metrics_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, metrics_); - } - if (priority_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(5, priority_); - } - if (time_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size(6, time_); - } - if (code_ != org.apache.hertzbeat.common.entity.message.CollectRep.Code.SUCCESS.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(7, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(msg_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, msg_); - } - for (int i = 0; i < fields_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(9, fields_.get(i)); - } - for (int i = 0; i < values_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(10, values_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData)) { - return super.equals(obj); - } - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData other = (org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData) obj; - - if (getId() - != other.getId()) return false; - if (getTenantId() - != other.getTenantId()) return false; - if (!getApp() - .equals(other.getApp())) return false; - if (!getMetrics() - .equals(other.getMetrics())) return false; - if (getPriority() - != other.getPriority()) return false; - if (getTime() - != other.getTime()) return false; - if (code_ != other.code_) return false; - if (!getMsg() - .equals(other.getMsg())) return false; - if (!getFieldsList() - .equals(other.getFieldsList())) return false; - if (!getValuesList() - .equals(other.getValuesList())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getId()); - hash = (37 * hash) + TENANTID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTenantId()); - hash = (37 * hash) + APP_FIELD_NUMBER; - hash = (53 * hash) + getApp().hashCode(); - hash = (37 * hash) + METRICS_FIELD_NUMBER; - hash = (53 * hash) + getMetrics().hashCode(); - hash = (37 * hash) + PRIORITY_FIELD_NUMBER; - hash = (53 * hash) + getPriority(); - hash = (37 * hash) + TIME_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTime()); - hash = (37 * hash) + CODE_FIELD_NUMBER; - hash = (53 * hash) + code_; - hash = (37 * hash) + MSG_FIELD_NUMBER; - hash = (53 * hash) + getMsg().hashCode(); - if (getFieldsCount() > 0) { - hash = (37 * hash) + FIELDS_FIELD_NUMBER; - hash = (53 * hash) + getFieldsList().hashCode(); - } - if (getValuesCount() > 0) { - hash = (37 * hash) + VALUES_FIELD_NUMBER; - hash = (53 * hash) + getValuesList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); + return new Builder(); + } + + public static Builder newBuilder(MetricsData metricsData) { + Builder builder = new Builder(); + // get metadata from metricsData + Map metadata = metricsData.getMetadata(); + builder.setId(Long.parseLong(metadata.getOrDefault(MetricDataConstants.MONITOR_ID, "0"))) + .setTenantId(Long.parseLong(metadata.getOrDefault(MetricDataConstants.TENANT_ID, "0"))) + .setApp(metadata.getOrDefault(MetricDataConstants.APP, "")) + .setMetrics(metadata.getOrDefault(MetricDataConstants.METRICS, "")) + .setPriority(Integer.parseInt(metadata.getOrDefault(MetricDataConstants.PRIORITY, "0"))) + .setTime(Long.parseLong(metadata.getOrDefault(MetricDataConstants.TIME, "0"))) + .setCode(Code.forNumber(Integer.parseInt(metadata.getOrDefault(MetricDataConstants.CODE, "0")))) + .setMsg(metadata.getOrDefault(MetricDataConstants.MSG, "")); + + metricsData.getFields().forEach(builder::addField); + metricsData.getValues().forEach(builder::addValueRow); return builder; } - /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.MetricsData} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:org.apache.hertzbeat.common.entity.message.MetricsData) - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsDataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.class, org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.Builder.class); - } - - // Construct using org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getFieldsFieldBuilder(); - getValuesFieldBuilder(); - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - id_ = 0L; - - tenantId_ = 0L; - - app_ = ""; - - metrics_ = ""; - - priority_ = 0; - - time_ = 0L; - - code_ = 0; - - msg_ = ""; - - if (fieldsBuilder_ == null) { - fields_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - fieldsBuilder_.clear(); - } - if (valuesBuilder_ == null) { - values_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - } else { - valuesBuilder_.clear(); - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor; - } - - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData getDefaultInstanceForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.getDefaultInstance(); - } - - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData build() { - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData buildPartial() { - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData result = new org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData(this); - int from_bitField0_ = bitField0_; - result.id_ = id_; - result.tenantId_ = tenantId_; - result.app_ = app_; - result.metrics_ = metrics_; - result.priority_ = priority_; - result.time_ = time_; - result.code_ = code_; - result.msg_ = msg_; - if (fieldsBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - fields_ = java.util.Collections.unmodifiableList(fields_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.fields_ = fields_; - } else { - result.fields_ = fieldsBuilder_.build(); - } - if (valuesBuilder_ == null) { - if (((bitField0_ & 0x00000002) != 0)) { - values_ = java.util.Collections.unmodifiableList(values_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.values_ = values_; - } else { - result.values_ = valuesBuilder_.build(); - } - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData) { - return mergeFrom((org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData other) { - if (other == org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData.getDefaultInstance()) return this; - if (other.getId() != 0L) { - setId(other.getId()); - } - if (other.getTenantId() != 0L) { - setTenantId(other.getTenantId()); - } - if (!other.getApp().isEmpty()) { - app_ = other.app_; - onChanged(); - } - if (!other.getMetrics().isEmpty()) { - metrics_ = other.metrics_; - onChanged(); - } - if (other.getPriority() != 0) { - setPriority(other.getPriority()); - } - if (other.getTime() != 0L) { - setTime(other.getTime()); - } - if (other.code_ != 0) { - setCodeValue(other.getCodeValue()); - } - if (!other.getMsg().isEmpty()) { - msg_ = other.msg_; - onChanged(); - } - if (fieldsBuilder_ == null) { - if (!other.fields_.isEmpty()) { - if (fields_.isEmpty()) { - fields_ = other.fields_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureFieldsIsMutable(); - fields_.addAll(other.fields_); - } - onChanged(); - } - } else { - if (!other.fields_.isEmpty()) { - if (fieldsBuilder_.isEmpty()) { - fieldsBuilder_.dispose(); - fieldsBuilder_ = null; - fields_ = other.fields_; - bitField0_ = (bitField0_ & ~0x00000001); - fieldsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getFieldsFieldBuilder() : null; - } else { - fieldsBuilder_.addAllMessages(other.fields_); - } - } - } - if (valuesBuilder_ == null) { - if (!other.values_.isEmpty()) { - if (values_.isEmpty()) { - values_ = other.values_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureValuesIsMutable(); - values_.addAll(other.values_); - } - onChanged(); - } - } else { - if (!other.values_.isEmpty()) { - if (valuesBuilder_.isEmpty()) { - valuesBuilder_.dispose(); - valuesBuilder_ = null; - values_ = other.values_; - bitField0_ = (bitField0_ & ~0x00000002); - valuesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getValuesFieldBuilder() : null; - } else { - valuesBuilder_.addAllMessages(other.values_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private long id_ ; - /** - *
-             * monitoring id
-             * 
- * - * uint64 id = 1; - * @return The id. - */ - @java.lang.Override - public long getId() { - return id_; - } - /** - *
-             * monitoring id
-             * 
- * - * uint64 id = 1; - * @param value The id to set. - * @return This builder for chaining. - */ - public Builder setId(long value) { - - id_ = value; - onChanged(); - return this; - } - /** - *
-             * monitoring id
-             * 
- * - * uint64 id = 1; - * @return This builder for chaining. - */ - public Builder clearId() { - - id_ = 0L; - onChanged(); - return this; - } - - private long tenantId_ ; - /** - *
-             * tenant id
-             * 
- * - * uint64 tenantId = 2; - * @return The tenantId. - */ - @java.lang.Override - public long getTenantId() { - return tenantId_; - } - /** - *
-             * tenant id
-             * 
- * - * uint64 tenantId = 2; - * @param value The tenantId to set. - * @return This builder for chaining. - */ - public Builder setTenantId(long value) { - - tenantId_ = value; - onChanged(); - return this; - } - /** - *
-             * tenant id
-             * 
- * - * uint64 tenantId = 2; - * @return This builder for chaining. - */ - public Builder clearTenantId() { - - tenantId_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object app_ = ""; - /** - *
-             * monitoring app eg: linux | mysql | jvm
-             * 
- * - * string app = 3; - * @return The app. - */ - public java.lang.String getApp() { - java.lang.Object ref = app_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - app_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-             * monitoring app eg: linux | mysql | jvm
-             * 
- * - * string app = 3; - * @return The bytes for app. - */ - public com.google.protobuf.ByteString - getAppBytes() { - java.lang.Object ref = app_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - app_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-             * monitoring app eg: linux | mysql | jvm
-             * 
- * - * string app = 3; - * @param value The app to set. - * @return This builder for chaining. - */ - public Builder setApp( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - app_ = value; - onChanged(); - return this; - } - /** - *
-             * monitoring app eg: linux | mysql | jvm
-             * 
- * - * string app = 3; - * @return This builder for chaining. - */ - public Builder clearApp() { - - app_ = getDefaultInstance().getApp(); - onChanged(); - return this; - } - /** - *
-             * monitoring app eg: linux | mysql | jvm
-             * 
- * - * string app = 3; - * @param value The bytes for app to set. - * @return This builder for chaining. - */ - public Builder setAppBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - app_ = value; - onChanged(); - return this; - } - - private java.lang.Object metrics_ = ""; - /** - *
-             * monitoring metrics eg: cpu | memory | health
-             * 
- * - * string metrics = 4; - * @return The metrics. - */ - public java.lang.String getMetrics() { - java.lang.Object ref = metrics_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - metrics_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-             * monitoring metrics eg: cpu | memory | health
-             * 
- * - * string metrics = 4; - * @return The bytes for metrics. - */ - public com.google.protobuf.ByteString - getMetricsBytes() { - java.lang.Object ref = metrics_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - metrics_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-             * monitoring metrics eg: cpu | memory | health
-             * 
- * - * string metrics = 4; - * @param value The metrics to set. - * @return This builder for chaining. - */ - public Builder setMetrics( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - metrics_ = value; - onChanged(); - return this; - } - /** - *
-             * monitoring metrics eg: cpu | memory | health
-             * 
- * - * string metrics = 4; - * @return This builder for chaining. - */ - public Builder clearMetrics() { - - metrics_ = getDefaultInstance().getMetrics(); - onChanged(); - return this; - } - /** - *
-             * monitoring metrics eg: cpu | memory | health
-             * 
- * - * string metrics = 4; - * @param value The bytes for metrics to set. - * @return This builder for chaining. - */ - public Builder setMetricsBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - metrics_ = value; - onChanged(); - return this; - } - - private int priority_ ; - /** - *
-             * monitoring collect priority >=0
-             * 
- * - * uint32 priority = 5; - * @return The priority. - */ - @java.lang.Override - public int getPriority() { - return priority_; - } - /** - *
-             * monitoring collect priority >=0
-             * 
- * - * uint32 priority = 5; - * @param value The priority to set. - * @return This builder for chaining. - */ - public Builder setPriority(int value) { - - priority_ = value; - onChanged(); - return this; - } - /** - *
-             * monitoring collect priority >=0
-             * 
- * - * uint32 priority = 5; - * @return This builder for chaining. - */ - public Builder clearPriority() { - - priority_ = 0; - onChanged(); - return this; - } - - private long time_ ; - /** - *
-             * collect timestamp
-             * 
- * - * uint64 time = 6; - * @return The time. - */ - @java.lang.Override - public long getTime() { - return time_; - } - /** - *
-             * collect timestamp
-             * 
- * - * uint64 time = 6; - * @param value The time to set. - * @return This builder for chaining. - */ - public Builder setTime(long value) { - - time_ = value; - onChanged(); - return this; - } - /** - *
-             * collect timestamp
-             * 
- * - * uint64 time = 6; - * @return This builder for chaining. - */ - public Builder clearTime() { - - time_ = 0L; - onChanged(); - return this; - } - - private int code_ = 0; - /** - *
-             * collect response code
-             * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The enum numeric value on the wire for code. - */ - @java.lang.Override public int getCodeValue() { - return code_; - } - /** - *
-             * collect response code
-             * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @param value The enum numeric value on the wire for code to set. - * @return This builder for chaining. - */ - public Builder setCodeValue(int value) { - - code_ = value; - onChanged(); - return this; - } - /** - *
-             * collect response code
-             * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return The code. - */ - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Code getCode() { - @SuppressWarnings("deprecation") - org.apache.hertzbeat.common.entity.message.CollectRep.Code result = org.apache.hertzbeat.common.entity.message.CollectRep.Code.valueOf(code_); - return result == null ? org.apache.hertzbeat.common.entity.message.CollectRep.Code.UNRECOGNIZED : result; - } - /** - *
-             * collect response code
-             * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @param value The code to set. - * @return This builder for chaining. - */ - public Builder setCode(org.apache.hertzbeat.common.entity.message.CollectRep.Code value) { - if (value == null) { - throw new NullPointerException(); - } - - code_ = value.getNumber(); - onChanged(); - return this; - } - /** - *
-             * collect response code
-             * 
- * - * .org.apache.hertzbeat.common.entity.message.Code code = 7; - * @return This builder for chaining. - */ - public Builder clearCode() { - - code_ = 0; - onChanged(); - return this; - } - - private java.lang.Object msg_ = ""; - /** - *
-             * collect response error message
-             * 
- * - * string msg = 8; - * @return The msg. - */ - public java.lang.String getMsg() { - java.lang.Object ref = msg_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - msg_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-             * collect response error message
-             * 
- * - * string msg = 8; - * @return The bytes for msg. - */ - public com.google.protobuf.ByteString - getMsgBytes() { - java.lang.Object ref = msg_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - msg_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-             * collect response error message
-             * 
- * - * string msg = 8; - * @param value The msg to set. - * @return This builder for chaining. - */ - public Builder setMsg( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - msg_ = value; - onChanged(); - return this; - } - /** - *
-             * collect response error message
-             * 
- * - * string msg = 8; - * @return This builder for chaining. - */ - public Builder clearMsg() { - - msg_ = getDefaultInstance().getMsg(); - onChanged(); - return this; - } - /** - *
-             * collect response error message
-             * 
- * - * string msg = 8; - * @param value The bytes for msg to set. - * @return This builder for chaining. - */ - public Builder setMsgBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - msg_ = value; - onChanged(); - return this; - } - - private java.util.List fields_ = - java.util.Collections.emptyList(); - private void ensureFieldsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - fields_ = new java.util.ArrayList(fields_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.Field, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder> fieldsBuilder_; - - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public java.util.List getFieldsList() { - if (fieldsBuilder_ == null) { - return java.util.Collections.unmodifiableList(fields_); - } else { - return fieldsBuilder_.getMessageList(); - } - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public int getFieldsCount() { - if (fieldsBuilder_ == null) { - return fields_.size(); - } else { - return fieldsBuilder_.getCount(); - } - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.Field getFields(int index) { - if (fieldsBuilder_ == null) { - return fields_.get(index); - } else { - return fieldsBuilder_.getMessage(index); - } - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder setFields( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.Field value) { - if (fieldsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFieldsIsMutable(); - fields_.set(index, value); - onChanged(); - } else { - fieldsBuilder_.setMessage(index, value); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder setFields( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder builderForValue) { - if (fieldsBuilder_ == null) { - ensureFieldsIsMutable(); - fields_.set(index, builderForValue.build()); - onChanged(); - } else { - fieldsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder addFields(org.apache.hertzbeat.common.entity.message.CollectRep.Field value) { - if (fieldsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFieldsIsMutable(); - fields_.add(value); - onChanged(); - } else { - fieldsBuilder_.addMessage(value); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder addFields( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.Field value) { - if (fieldsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFieldsIsMutable(); - fields_.add(index, value); - onChanged(); - } else { - fieldsBuilder_.addMessage(index, value); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder addFields( - org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder builderForValue) { - if (fieldsBuilder_ == null) { - ensureFieldsIsMutable(); - fields_.add(builderForValue.build()); - onChanged(); - } else { - fieldsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder addFields( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder builderForValue) { - if (fieldsBuilder_ == null) { - ensureFieldsIsMutable(); - fields_.add(index, builderForValue.build()); - onChanged(); - } else { - fieldsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder addAllFields( - java.lang.Iterable values) { - if (fieldsBuilder_ == null) { - ensureFieldsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, fields_); - onChanged(); - } else { - fieldsBuilder_.addAllMessages(values); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder clearFields() { - if (fieldsBuilder_ == null) { - fields_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - fieldsBuilder_.clear(); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public Builder removeFields(int index) { - if (fieldsBuilder_ == null) { - ensureFieldsIsMutable(); - fields_.remove(index); - onChanged(); - } else { - fieldsBuilder_.remove(index); - } - return this; - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder getFieldsBuilder( - int index) { - return getFieldsFieldBuilder().getBuilder(index); - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder getFieldsOrBuilder( - int index) { - if (fieldsBuilder_ == null) { - return fields_.get(index); } else { - return fieldsBuilder_.getMessageOrBuilder(index); - } - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public java.util.List - getFieldsOrBuilderList() { - if (fieldsBuilder_ != null) { - return fieldsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(fields_); - } - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder addFieldsBuilder() { - return getFieldsFieldBuilder().addBuilder( - org.apache.hertzbeat.common.entity.message.CollectRep.Field.getDefaultInstance()); - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder addFieldsBuilder( - int index) { - return getFieldsFieldBuilder().addBuilder( - index, org.apache.hertzbeat.common.entity.message.CollectRep.Field.getDefaultInstance()); - } - /** - *
-             * monitoring collect metric field
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.Field fields = 9; - */ - public java.util.List - getFieldsBuilderList() { - return getFieldsFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.Field, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder> - getFieldsFieldBuilder() { - if (fieldsBuilder_ == null) { - fieldsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.Field, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder>( - fields_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - fields_ = null; - } - return fieldsBuilder_; - } - - private java.util.List values_ = - java.util.Collections.emptyList(); - private void ensureValuesIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { - values_ = new java.util.ArrayList(values_); - bitField0_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder> valuesBuilder_; - - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public java.util.List getValuesList() { - if (valuesBuilder_ == null) { - return java.util.Collections.unmodifiableList(values_); - } else { - return valuesBuilder_.getMessageList(); - } - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public int getValuesCount() { - if (valuesBuilder_ == null) { - return values_.size(); - } else { - return valuesBuilder_.getCount(); - } - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getValues(int index) { - if (valuesBuilder_ == null) { - return values_.get(index); - } else { - return valuesBuilder_.getMessage(index); - } - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder setValues( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow value) { - if (valuesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureValuesIsMutable(); - values_.set(index, value); - onChanged(); - } else { - valuesBuilder_.setMessage(index, value); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder setValues( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.set(index, builderForValue.build()); - onChanged(); - } else { - valuesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder addValues(org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow value) { - if (valuesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureValuesIsMutable(); - values_.add(value); - onChanged(); - } else { - valuesBuilder_.addMessage(value); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder addValues( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow value) { - if (valuesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureValuesIsMutable(); - values_.add(index, value); - onChanged(); - } else { - valuesBuilder_.addMessage(index, value); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder addValues( - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.add(builderForValue.build()); - onChanged(); - } else { - valuesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder addValues( - int index, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder builderForValue) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.add(index, builderForValue.build()); - onChanged(); - } else { - valuesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder addAllValues( - java.lang.Iterable values) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, values_); - onChanged(); - } else { - valuesBuilder_.addAllMessages(values); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder clearValues() { - if (valuesBuilder_ == null) { - values_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - valuesBuilder_.clear(); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public Builder removeValues(int index) { - if (valuesBuilder_ == null) { - ensureValuesIsMutable(); - values_.remove(index); - onChanged(); - } else { - valuesBuilder_.remove(index); - } - return this; - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder getValuesBuilder( - int index) { - return getValuesFieldBuilder().getBuilder(index); - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder getValuesOrBuilder( - int index) { - if (valuesBuilder_ == null) { - return values_.get(index); } else { - return valuesBuilder_.getMessageOrBuilder(index); - } - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public java.util.List - getValuesOrBuilderList() { - if (valuesBuilder_ != null) { - return valuesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(values_); - } - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder addValuesBuilder() { - return getValuesFieldBuilder().addBuilder( - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.getDefaultInstance()); - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder addValuesBuilder( - int index) { - return getValuesFieldBuilder().addBuilder( - index, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.getDefaultInstance()); - } - /** - *
-             * monitoring collect metric data, mapping with the fields
-             * 
- * - * repeated .org.apache.hertzbeat.common.entity.message.ValueRow values = 10; - */ - public java.util.List - getValuesBuilderList() { - return getValuesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder> - getValuesFieldBuilder() { - if (valuesBuilder_ == null) { - valuesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder>( - values_, - ((bitField0_ & 0x00000002) != 0), - getParentForChildren(), - isClean()); - values_ = null; - } - return valuesBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:org.apache.hertzbeat.common.entity.message.MetricsData) - } - - // @@protoc_insertion_point(class_scope:org.apache.hertzbeat.common.entity.message.MetricsData) - private static final org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData(); - } - - public static org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public MetricsData parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new MetricsData(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.MetricsData getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface FieldOrBuilder extends - // @@protoc_insertion_point(interface_extends:org.apache.hertzbeat.common.entity.message.Field) - com.google.protobuf.MessageOrBuilder { - - /** - *
-         * monitoring collect metric field name
-         * 
- * - * string name = 1; - * @return The name. - */ - java.lang.String getName(); - /** - *
-         * monitoring collect metric field name
-         * 
- * - * string name = 1; - * @return The bytes for name. - */ - com.google.protobuf.ByteString - getNameBytes(); - - /** - *
-         * monitoring collect metrics field type, 0-number 1-string
-         * 
- * - * uint32 type = 2; - * @return The type. - */ - int getType(); - - /** - *
-         * monitoring collect metrics field unit, % MB GB TB S...
-         * 
- * - * string unit = 3; - * @return The unit. - */ - java.lang.String getUnit(); - /** - *
-         * monitoring collect metrics field unit, % MB GB TB S...
-         * 
- * - * string unit = 3; - * @return The bytes for unit. - */ - com.google.protobuf.ByteString - getUnitBytes(); - - /** - *
-         * is label field
-         * 
- * - * bool label = 4; - * @return The label. - */ - boolean getLabel(); - } - /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.Field} - */ - public static final class Field extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:org.apache.hertzbeat.common.entity.message.Field) - FieldOrBuilder { - private static final long serialVersionUID = 0L; - // Use Field.newBuilder() to construct. - private Field(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Field() { - name_ = ""; - unit_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Field(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private Field( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - name_ = s; - break; - } - case 16: { - - type_ = input.readUInt32(); - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - unit_ = s; - break; - } - case 32: { - - label_ = input.readBool(); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_Field_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.Field.class, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder.class); - } - - public static final int NAME_FIELD_NUMBER = 1; - private volatile java.lang.Object name_; - /** - *
-         * monitoring collect metric field name
-         * 
- * - * string name = 1; - * @return The name. - */ - @java.lang.Override - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } - } - /** - *
-         * monitoring collect metric field name
-         * 
- * - * string name = 1; - * @return The bytes for name. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TYPE_FIELD_NUMBER = 2; - private int type_; - /** - *
-         * monitoring collect metrics field type, 0-number 1-string
-         * 
- * - * uint32 type = 2; - * @return The type. - */ - @java.lang.Override - public int getType() { - return type_; - } - - public static final int UNIT_FIELD_NUMBER = 3; - private volatile java.lang.Object unit_; - /** - *
-         * monitoring collect metrics field unit, % MB GB TB S...
-         * 
- * - * string unit = 3; - * @return The unit. - */ - @java.lang.Override - public java.lang.String getUnit() { - java.lang.Object ref = unit_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - unit_ = s; - return s; - } - } - /** - *
-         * monitoring collect metrics field unit, % MB GB TB S...
-         * 
- * - * string unit = 3; - * @return The bytes for unit. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getUnitBytes() { - java.lang.Object ref = unit_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - unit_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int LABEL_FIELD_NUMBER = 4; - private boolean label_; - /** - *
-         * is label field
-         * 
- * - * bool label = 4; - * @return The label. - */ - @java.lang.Override - public boolean getLabel() { - return label_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); - } - if (type_ != 0) { - output.writeUInt32(2, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(unit_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, unit_); - } - if (label_ != false) { - output.writeBool(4, label_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); - } - if (type_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(2, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(unit_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, unit_); - } - if (label_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(4, label_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof org.apache.hertzbeat.common.entity.message.CollectRep.Field)) { - return super.equals(obj); - } - org.apache.hertzbeat.common.entity.message.CollectRep.Field other = (org.apache.hertzbeat.common.entity.message.CollectRep.Field) obj; - - if (!getName() - .equals(other.getName())) return false; - if (getType() - != other.getType()) return false; - if (!getUnit() - .equals(other.getUnit())) return false; - if (getLabel() - != other.getLabel()) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - hash = (37 * hash) + TYPE_FIELD_NUMBER; - hash = (53 * hash) + getType(); - hash = (37 * hash) + UNIT_FIELD_NUMBER; - hash = (53 * hash) + getUnit().hashCode(); - hash = (37 * hash) + LABEL_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getLabel()); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); + + public long rowCount() { + return table != null ? table.getRowCount() : 0; } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); + + public ArrowTable getTable() { + return table; } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); + + /** + * notice is to vectorschemaRoot for arrow, the table will empty + * @return + */ + public VectorSchemaRoot toVectorSchemaRootAndRelease() { + return table != null ? table.toVectorSchemaRoot() : null; } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); + + /** + * to byte array and release the table + * @return + */ + public byte[] toByteArrayAndRelease() { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = table.toVectorSchemaRoot(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + return out.toByteArray(); + } catch (IOException e) { + log.error(e.getMessage(), e); + return null; + } } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); + + public long getId() { + Map metadata = getMetadata(); + return Long.parseLong(metadata.getOrDefault("id", "0")); } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); + + public long getTenantId() { + Map metadata = getMetadata(); + return Long.parseLong(metadata.getOrDefault("tenantId", "0")); } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + + public String getApp() { + Map metadata = getMetadata(); + return metadata.getOrDefault("app", ""); } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); + + public String getMetrics() { + Map metadata = getMetadata(); + return metadata.getOrDefault("metrics", ""); } - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); + + public int getPriority() { + Map metadata = getMetadata(); + return Integer.parseInt(metadata.getOrDefault("priority", "0")); } - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); + public long getTime() { + Map metadata = getMetadata(); + return Long.parseLong(metadata.getOrDefault("time", "0")); } - public static Builder newBuilder(org.apache.hertzbeat.common.entity.message.CollectRep.Field prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + + public Code getCode() { + Map metadata = getMetadata(); + return Code.forNumber(Integer.parseInt(metadata.getOrDefault("code", "0"))); } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); + + public String getMsg() { + Map metadata = getMetadata(); + return metadata.getOrDefault("msg", ""); } - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + private Map getMetadata() { + return table != null ? table.getSchema().getCustomMetadata() : new HashMap<>(); } - /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.Field} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:org.apache.hertzbeat.common.entity.message.Field) - org.apache.hertzbeat.common.entity.message.CollectRep.FieldOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor; - } - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_Field_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.Field.class, org.apache.hertzbeat.common.entity.message.CollectRep.Field.Builder.class); + // Get fields and values from table + public List getFields() { + if (table == null) { + return new ArrayList<>(); } + return table.getSchema().getFields().stream() + .map(field -> { + Map metadata = field.getMetadata(); + return Field.newBuilder() + .setName(field.getName()) + .setType(Integer.parseInt(metadata.getOrDefault(MetricDataConstants.TYPE, "0"))) + .setUnit(metadata.getOrDefault(MetricDataConstants.UNIT, "")) + .setLabel(Boolean.parseBoolean(metadata.getOrDefault(MetricDataConstants.LABEL, "false"))) + .build(); + }) + .collect(Collectors.toList()); + } - // Construct using org.apache.hertzbeat.common.entity.message.CollectRep.Field.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); + public List getValues() { + if (table == null) { + return new ArrayList<>(); } - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); + List fieldNames = table.getSchema().getFields().stream() + .map(org.apache.arrow.vector.types.pojo.Field::getName) + .collect(Collectors.toList()); + + List values = new ArrayList<>(); + Iterator iterator = table.iterator(); + while (iterator.hasNext()) { + org.apache.arrow.vector.table.Row row = iterator.next(); + ValueRow valueRow = ValueRow.newBuilder() + .setColumns(fieldNames.stream() + .map(fieldName -> new String(((org.apache.arrow.vector.VarCharVector) + table.getVector(fieldName)).get(row.getRowNumber()))) + .collect(Collectors.toList())) + .build(); + values.add(valueRow); } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } + return values; + } + + public RowWrapper readRow() { + final Iterator rowIterator = table.iterator(); + + if (!rowIterator.hasNext()) { + throw new NoSuchElementException("No data found! "); } - @java.lang.Override - public Builder clear() { - super.clear(); - name_ = ""; + List fields = table.getSchema().getFields(); + return new RowWrapper(null, rowIterator, fields, -1); + } - type_ = 0; + public int getValuesCount() { + return table != null ? (int)table.getRowCount() : 0; + } - unit_ = ""; + public int getFieldsCount() { + return table != null ? table.getSchema().getFields().size() : 0; + } - label_ = false; + @Override + public void close() { + if (table != null) { + table.close(); + } + } + // Builder remains mostly the same, but build() method changes + public static class Builder { + private long id; + private long tenantId; + private String app = ""; + private String metrics = ""; + private int priority; + private long time; + private Code code = Code.SUCCESS; + private String msg = ""; + private List fields = new ArrayList<>(); + private List values = new ArrayList<>(); + + public Builder setId(long id) { + this.id = id; return this; } - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor; + public Builder setTenantId(long tenantId) { + this.tenantId = tenantId; + return this; } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Field getDefaultInstanceForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.Field.getDefaultInstance(); + public Builder setApp(String app) { + this.app = app; + return this; } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Field build() { - org.apache.hertzbeat.common.entity.message.CollectRep.Field result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; + public Builder setMetrics(String metrics) { + this.metrics = metrics; + return this; } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Field buildPartial() { - org.apache.hertzbeat.common.entity.message.CollectRep.Field result = new org.apache.hertzbeat.common.entity.message.CollectRep.Field(this); - result.name_ = name_; - result.type_ = type_; - result.unit_ = unit_; - result.label_ = label_; - onBuilt(); - return result; + public Builder setPriority(int priority) { + this.priority = priority; + return this; } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); + public Builder setTime(long time) { + this.time = time; + return this; } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); + + public Builder setCode(Code code) { + this.code = code; + return this; } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.apache.hertzbeat.common.entity.message.CollectRep.Field) { - return mergeFrom((org.apache.hertzbeat.common.entity.message.CollectRep.Field)other); - } else { - super.mergeFrom(other); - return this; - } + + public Builder setMsg(String msg) { + this.msg = msg; + return this; } - public Builder mergeFrom(org.apache.hertzbeat.common.entity.message.CollectRep.Field other) { - if (other == org.apache.hertzbeat.common.entity.message.CollectRep.Field.getDefaultInstance()) return this; - if (!other.getName().isEmpty()) { - name_ = other.name_; - onChanged(); - } - if (other.getType() != 0) { - setType(other.getType()); - } - if (!other.getUnit().isEmpty()) { - unit_ = other.unit_; - onChanged(); - } - if (other.getLabel() != false) { - setLabel(other.getLabel()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); + public Builder addField(Field field) { + this.fields.add(field); return this; } - @java.lang.Override - public final boolean isInitialized() { - return true; + public Builder addValueRow(ValueRow valueRow) { + this.values.add(valueRow); + return this; } - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.apache.hertzbeat.common.entity.message.CollectRep.Field parsedMessage = null; + public MetricsData build() { + // Create metadata + Map metadata = new HashMap<>(); + metadata.put(MetricDataConstants.MONITOR_ID, String.valueOf(id)); + metadata.put(MetricDataConstants.TENANT_ID, String.valueOf(tenantId)); + metadata.put(MetricDataConstants.APP, app != null ? app : ""); + metadata.put(MetricDataConstants.METRICS, metrics != null ? metrics : ""); + metadata.put(MetricDataConstants.PRIORITY, String.valueOf(priority)); + metadata.put(MetricDataConstants.TIME, String.valueOf(time)); + metadata.put(MetricDataConstants.CODE, String.valueOf(code != null ? code.value : 0)); + metadata.put(MetricDataConstants.MSG, msg != null ? msg : ""); + + org.apache.arrow.memory.BufferAllocator allocator = + new org.apache.arrow.memory.RootAllocator(); try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.apache.hertzbeat.common.entity.message.CollectRep.Field) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); + // Create Arrow fields with metadata + List arrowFields = fields.stream() + .map(field -> { + Map fieldMetadata = new HashMap<>(); + fieldMetadata.put(MetricDataConstants.TYPE, String.valueOf(field.getType())); + fieldMetadata.put(MetricDataConstants.UNIT, field.getUnit()); + fieldMetadata.put(MetricDataConstants.LABEL, String.valueOf(field.getLabel())); + + return new org.apache.arrow.vector.types.pojo.Field( + field.getName(), + new org.apache.arrow.vector.types.pojo.FieldType( + true, + new org.apache.arrow.vector.types.pojo.ArrowType.Utf8(), + null, + fieldMetadata), + null); + }) + .collect(Collectors.toList()); + + // Create Schema with metadata + org.apache.arrow.vector.types.pojo.Schema schema = + new org.apache.arrow.vector.types.pojo.Schema(arrowFields, metadata); + + org.apache.arrow.vector.VectorSchemaRoot root = + org.apache.arrow.vector.VectorSchemaRoot.create(schema, allocator); + + try { + root.allocateNew(); + int rowCount = values.size(); + root.setRowCount(rowCount); + // Write values + for (int fieldIndex = 0; fieldIndex < fields.size(); fieldIndex++) { + org.apache.arrow.vector.VarCharVector vector = + (org.apache.arrow.vector.VarCharVector) root.getVector(fieldIndex); + vector.allocateNew(); + + for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { + ValueRow row = values.get(rowIndex); + if (row != null && row.getColumnsList() != null && + fieldIndex < row.getColumnsList().size()) { + String value = row.getColumns(fieldIndex); + if (value != null) { + vector.set(rowIndex, value.getBytes()); + } + } + } + vector.setValueCount(rowCount); + } + return new MetricsData(new ArrowTable(root)); + } catch (Exception e1) { + log.error(e1.getMessage(), e1); + root.close(); + throw e1; } + } catch (Exception e) { + log.error(e.getMessage(), e); + allocator.close(); + throw e; } - return this; } - private java.lang.Object name_ = ""; - /** - *
-             * monitoring collect metric field name
-             * 
- * - * string name = 1; - * @return The name. - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-             * monitoring collect metric field name
-             * 
- * - * string name = 1; - * @return The bytes for name. - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + // Add getter methods + public long getId() { + return id; } - /** - *
-             * monitoring collect metric field name
-             * 
- * - * string name = 1; - * @param value The name to set. - * @return This builder for chaining. - */ - public Builder setName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - name_ = value; - onChanged(); - return this; + public long getTenantId() { + return tenantId; } - /** - *
-             * monitoring collect metric field name
-             * 
- * - * string name = 1; - * @return This builder for chaining. - */ - public Builder clearName() { - name_ = getDefaultInstance().getName(); - onChanged(); - return this; + public String getApp() { + return app; } - /** - *
-             * monitoring collect metric field name
-             * 
- * - * string name = 1; - * @param value The bytes for name to set. - * @return This builder for chaining. - */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - name_ = value; - onChanged(); - return this; + public String getMetrics() { + return metrics; } - private int type_ ; - /** - *
-             * monitoring collect metrics field type, 0-number 1-string
-             * 
- * - * uint32 type = 2; - * @return The type. - */ - @java.lang.Override - public int getType() { - return type_; + public int getPriority() { + return priority; } - /** - *
-             * monitoring collect metrics field type, 0-number 1-string
-             * 
- * - * uint32 type = 2; - * @param value The type to set. - * @return This builder for chaining. - */ - public Builder setType(int value) { - type_ = value; - onChanged(); - return this; + public long getTime() { + return time; } - /** - *
-             * monitoring collect metrics field type, 0-number 1-string
-             * 
- * - * uint32 type = 2; - * @return This builder for chaining. - */ - public Builder clearType() { - type_ = 0; - onChanged(); - return this; + public Code getCode() { + return code; } - private java.lang.Object unit_ = ""; - /** - *
-             * monitoring collect metrics field unit, % MB GB TB S...
-             * 
- * - * string unit = 3; - * @return The unit. - */ - public java.lang.String getUnit() { - java.lang.Object ref = unit_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - unit_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-             * monitoring collect metrics field unit, % MB GB TB S...
-             * 
- * - * string unit = 3; - * @return The bytes for unit. - */ - public com.google.protobuf.ByteString - getUnitBytes() { - java.lang.Object ref = unit_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - unit_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public String getMsg() { + return msg; } - /** - *
-             * monitoring collect metrics field unit, % MB GB TB S...
-             * 
- * - * string unit = 3; - * @param value The unit to set. - * @return This builder for chaining. - */ - public Builder setUnit( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - unit_ = value; - onChanged(); - return this; + public List getFieldsList() { + return fields; } - /** - *
-             * monitoring collect metrics field unit, % MB GB TB S...
-             * 
- * - * string unit = 3; - * @return This builder for chaining. - */ - public Builder clearUnit() { - unit_ = getDefaultInstance().getUnit(); - onChanged(); - return this; + public Field getFields(int index) { + return fields.get(index); } - /** - *
-             * monitoring collect metrics field unit, % MB GB TB S...
-             * 
- * - * string unit = 3; - * @param value The bytes for unit to set. - * @return This builder for chaining. - */ - public Builder setUnitBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - unit_ = value; - onChanged(); - return this; + public int getFieldsCount() { + return fields.size(); } - private boolean label_ ; - /** - *
-             * is label field
-             * 
- * - * bool label = 4; - * @return The label. - */ - @java.lang.Override - public boolean getLabel() { - return label_; + public List getValuesList() { + return values; } - /** - *
-             * is label field
-             * 
- * - * bool label = 4; - * @param value The label to set. - * @return This builder for chaining. - */ - public Builder setLabel(boolean value) { - label_ = value; - onChanged(); - return this; + public ValueRow getValues(int index) { + return values.get(index); } - /** - *
-             * is label field
-             * 
- * - * bool label = 4; - * @return This builder for chaining. - */ - public Builder clearLabel() { - label_ = false; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + public int getValuesCount() { + return values.size(); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public void addAllFields(List fieldList) { + fields.addAll(fieldList); } - - // @@protoc_insertion_point(builder_scope:org.apache.hertzbeat.common.entity.message.Field) - } - - // @@protoc_insertion_point(class_scope:org.apache.hertzbeat.common.entity.message.Field) - private static final org.apache.hertzbeat.common.entity.message.CollectRep.Field DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new org.apache.hertzbeat.common.entity.message.CollectRep.Field(); - } - - public static org.apache.hertzbeat.common.entity.message.CollectRep.Field getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Field parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Field(input, extensionRegistry); + public void clearValues() { + values = new LinkedList<>(); } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } + public void clearMetrics() { + metrics = null; + } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.Field getDefaultInstanceForType() { - return DEFAULT_INSTANCE; + public void clearFields() { + fields = new LinkedList<>(); + } } - } - public interface ValueRowOrBuilder extends - // @@protoc_insertion_point(interface_extends:org.apache.hertzbeat.common.entity.message.ValueRow) - com.google.protobuf.MessageOrBuilder { - + /** + * Metrics field entity + */ + public static class Field { /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @return A list containing the columns. + * monitoring collect metric field name */ - java.util.List - getColumnsList(); + private String name; + /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @return The count of columns. + * monitoring collect metrics field type, 0-number 1-string */ - int getColumnsCount(); + private int type; + /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @param index The index of the element to return. - * @return The columns at the given index. + * monitoring collect metrics field unit, % MB GB TB S... */ - java.lang.String getColumns(int index); + private String unit; + /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @param index The index of the value to return. - * @return The bytes of the columns at the given index. + * is label field */ - com.google.protobuf.ByteString - getColumnsBytes(int index); - } - /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.ValueRow} - */ - public static final class ValueRow extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:org.apache.hertzbeat.common.entity.message.ValueRow) - ValueRowOrBuilder { - private static final long serialVersionUID = 0L; - // Use ValueRow.newBuilder() to construct. - private ValueRow(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ValueRow() { - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - } + private boolean label; - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ValueRow(); + public Field() { + name = ""; + unit = ""; } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ValueRow( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - columns_ = new com.google.protobuf.LazyStringArrayList(); - mutable_bitField0_ |= 0x00000001; - } - columns_.add(s); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) != 0)) { - columns_ = columns_.getUnmodifiableView(); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor; + // Getters and setters + public String getName() { + return name; } - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.class, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder.class); + public void setName(String name) { + this.name = name; } - public static final int COLUMNS_FIELD_NUMBER = 1; - private com.google.protobuf.LazyStringList columns_; - /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @return A list containing the columns. - */ - public com.google.protobuf.ProtocolStringList - getColumnsList() { - return columns_; + public int getType() { + return type; } - /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @return The count of columns. - */ - public int getColumnsCount() { - return columns_.size(); + + public void setType(int type) { + this.type = type; } - /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @param index The index of the element to return. - * @return The columns at the given index. - */ - public java.lang.String getColumns(int index) { - return columns_.get(index); + + public String getUnit() { + return unit; } - /** - *
-         * monitoring collect metrics value, mapping with the fields
-         * 
- * - * repeated string columns = 1; - * @param index The index of the value to return. - * @return The bytes of the columns at the given index. - */ - public com.google.protobuf.ByteString - getColumnsBytes(int index) { - return columns_.getByteString(index); + + public void setUnit(String unit) { + this.unit = unit; } - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; + public boolean getLabel() { + return label; + } - memoizedIsInitialized = 1; - return true; + public void setLabel(boolean label) { + this.label = label; } - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < columns_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, columns_.getRaw(i)); - } - unknownFields.writeTo(output); + public static Builder newBuilder() { + return new Builder(); } - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; + public static class Builder { + private final Field instance; - size = 0; - { - int dataSize = 0; - for (int i = 0; i < columns_.size(); i++) { - dataSize += computeStringSizeNoTag(columns_.getRaw(i)); - } - size += dataSize; - size += 1 * getColumnsList().size(); + private Builder() { + instance = new Field(); } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; + public Builder setName(String name) { + instance.setName(name); + return this; } - if (!(obj instanceof org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow)) { - return super.equals(obj); + + public Builder setType(int type) { + instance.setType(type); + return this; } - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow other = (org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow) obj; - if (!getColumnsList() - .equals(other.getColumnsList())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } + public Builder setUnit(String unit) { + instance.setUnit(unit); + return this; + } - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; + public Builder setLabel(boolean label) { + instance.setLabel(label); + return this; } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getColumnsCount() > 0) { - hash = (37 * hash) + COLUMNS_FIELD_NUMBER; - hash = (53 * hash) + getColumnsList().hashCode(); + + public Field build() { + return instance; } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; } + } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } + /** + * Metrics value row entity + */ + public static class ValueRow { + /** + * monitoring collect metrics value, mapping with the fields + */ + private java.util.List columns; - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); + public ValueRow() { + columns = new LinkedList<>(); } - public static Builder newBuilder(org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); + + public ValueRow(java.util.List columns) { + this.columns = new LinkedList<>(); + this.columns.addAll(columns); } - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + public List getColumnsList() { + return columns; } - /** - * Protobuf type {@code org.apache.hertzbeat.common.entity.message.ValueRow} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:org.apache.hertzbeat.common.entity.message.ValueRow) - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRowOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor; - } - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.class, org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.Builder.class); - } + public void setColumns(java.util.List columns) { + this.columns = columns; + } - // Construct using org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); + public void addColumns(String value) { + if (value == null) { + throw new NullPointerException(); } + columns.add(value); + } - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } + public void clearColumns() { + columns = new LinkedList<>(); + } - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor; - } + public String getColumns(int index) { + return columns.get(index); + } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getDefaultInstanceForType() { - return org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.getDefaultInstance(); - } + public int getColumnsCount() { + return columns.size(); + } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow build() { - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } + public static Builder newBuilder() { + return new Builder(); + } - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow buildPartial() { - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow result = new org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow(this); - int from_bitField0_ = bitField0_; - if (((bitField0_ & 0x00000001) != 0)) { - columns_ = columns_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.columns_ = columns_; - onBuilt(); - return result; - } + public static class Builder { + private java.util.List columns; - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow) { - return mergeFrom((org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow)other); - } else { - super.mergeFrom(other); - return this; - } + private Builder() { + columns = new LinkedList<>(); } - public Builder mergeFrom(org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow other) { - if (other == org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow.getDefaultInstance()) return this; - if (!other.columns_.isEmpty()) { - if (columns_.isEmpty()) { - columns_ = other.columns_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureColumnsIsMutable(); - columns_.addAll(other.columns_); - } - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); + public Builder setColumns(java.util.List columns) { + columns = columns; return this; } - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } + public Builder addColumn(String column) { + columns.add(column); return this; } - private int bitField0_; - private com.google.protobuf.LazyStringList columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - private void ensureColumnsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - columns_ = new com.google.protobuf.LazyStringArrayList(columns_); - bitField0_ |= 0x00000001; - } - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @return A list containing the columns. - */ - public com.google.protobuf.ProtocolStringList - getColumnsList() { - return columns_.getUnmodifiableView(); - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @return The count of columns. - */ - public int getColumnsCount() { - return columns_.size(); - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param index The index of the element to return. - * @return The columns at the given index. - */ - public java.lang.String getColumns(int index) { - return columns_.get(index); - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param index The index of the value to return. - * @return The bytes of the columns at the given index. - */ - public com.google.protobuf.ByteString - getColumnsBytes(int index) { - return columns_.getByteString(index); - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param index The index to set the value at. - * @param value The columns to set. - * @return This builder for chaining. - */ - public Builder setColumns( - int index, java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureColumnsIsMutable(); - columns_.set(index, value); - onChanged(); - return this; - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param value The columns to add. - * @return This builder for chaining. - */ - public Builder addColumns( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureColumnsIsMutable(); - columns_.add(value); - onChanged(); - return this; - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param values The columns to add. - * @return This builder for chaining. - */ - public Builder addAllColumns( - java.lang.Iterable values) { - ensureColumnsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, columns_); - onChanged(); - return this; - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @return This builder for chaining. - */ - public Builder clearColumns() { - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - *
-             * monitoring collect metrics value, mapping with the fields
-             * 
- * - * repeated string columns = 1; - * @param value The bytes of the columns to add. - * @return This builder for chaining. - */ - public Builder addColumnsBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); + public Builder addAllColumns(Iterable columns) { + for (String column : columns) { + this.columns.add(column); } - checkByteStringIsUtf8(value); - ensureColumnsIsMutable(); - columns_.add(value); - onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public ValueRow build() { + return new ValueRow(columns); } - - // @@protoc_insertion_point(builder_scope:org.apache.hertzbeat.common.entity.message.ValueRow) - } - - // @@protoc_insertion_point(class_scope:org.apache.hertzbeat.common.entity.message.ValueRow) - private static final org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow(); - } - - public static org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ValueRow parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ValueRow(input, extensionRegistry); + public void clear() { + columns.clear(); } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; } - - @java.lang.Override - public org.apache.hertzbeat.common.entity.message.CollectRep.ValueRow getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_org_apache_hertzbeat_common_entity_message_Field_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\021collect_rep.proto\022*org.apache.hertzbea" + - "t.common.entity.message\"\277\002\n\013MetricsData\022" + - "\n\n\002id\030\001 \001(\004\022\020\n\010tenantId\030\002 \001(\004\022\013\n\003app\030\003 \001" + - "(\t\022\017\n\007metrics\030\004 \001(\t\022\020\n\010priority\030\005 \001(\r\022\014\n" + - "\004time\030\006 \001(\004\022>\n\004code\030\007 \001(\01620.org.apache.h" + - "ertzbeat.common.entity.message.Code\022\013\n\003m" + - "sg\030\010 \001(\t\022A\n\006fields\030\t \003(\01321.org.apache.he" + - "rtzbeat.common.entity.message.Field\022D\n\006v" + - "alues\030\n \003(\01324.org.apache.hertzbeat.commo" + - "n.entity.message.ValueRow\"@\n\005Field\022\014\n\004na" + - "me\030\001 \001(\t\022\014\n\004type\030\002 \001(\r\022\014\n\004unit\030\003 \001(\t\022\r\n\005" + - "label\030\004 \001(\010\"\033\n\010ValueRow\022\017\n\007columns\030\001 \003(\t" + - "*b\n\004Code\022\013\n\007SUCCESS\020\000\022\020\n\014UN_AVAILABLE\020\001\022" + - "\020\n\014UN_REACHABLE\020\002\022\022\n\016UN_CONNECTABLE\020\003\022\010\n" + - "\004FAIL\020\004\022\013\n\007TIMEOUT\020\005b\006proto3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }); - internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_org_apache_hertzbeat_common_entity_message_MetricsData_descriptor, - new java.lang.String[] { "Id", "TenantId", "App", "Metrics", "Priority", "Time", "Code", "Msg", "Fields", "Values", }); - internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_org_apache_hertzbeat_common_entity_message_Field_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_org_apache_hertzbeat_common_entity_message_Field_descriptor, - new java.lang.String[] { "Name", "Type", "Unit", "Label", }); - internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_org_apache_hertzbeat_common_entity_message_ValueRow_descriptor, - new java.lang.String[] { "Columns", }); - } - - // @@protoc_insertion_point(outer_class_scope) } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/CommonDataQueue.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/CommonDataQueue.java index df45ee13ede..9fe1472508d 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/CommonDataQueue.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/CommonDataQueue.java @@ -44,14 +44,7 @@ public interface CommonDataQueue { * @return metrics data * @throws InterruptedException when poll timeout */ - CollectRep.MetricsData pollMetricsDataToPersistentStorage() throws InterruptedException; - - /** - * poll collect metrics data for real-time Storage - * @return metrics data - * @throws InterruptedException when poll timeout - */ - CollectRep.MetricsData pollMetricsDataToRealTimeStorage() throws InterruptedException; + CollectRep.MetricsData pollMetricsDataToStorage() throws InterruptedException; /** * offer alert data @@ -72,6 +65,12 @@ public interface CommonDataQueue { */ void sendMetricsData(CollectRep.MetricsData metricsData); + /** + * send metrics data to storage from alerter + * @param metricsData metrics data + */ + void sendMetricsDataToStorage(CollectRep.MetricsData metricsData); + /** * send service discovery data * @param metricsData service discovery data diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueue.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueue.java index 5e285267433..bf719d18389 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueue.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueue.java @@ -46,15 +46,13 @@ public class InMemoryCommonDataQueue implements CommonDataQueue, DisposableBean private final LinkedBlockingQueue alertDataQueue; private final LinkedBlockingQueue metricsDataToAlertQueue; - private final LinkedBlockingQueue metricsDataToPersistentStorageQueue; - private final LinkedBlockingQueue metricsDataToRealTimeStorageQueue; + private final LinkedBlockingQueue metricsDataToStorageQueue; private final LinkedBlockingQueue serviceDiscoveryDataQueue; public InMemoryCommonDataQueue() { alertDataQueue = new LinkedBlockingQueue<>(); metricsDataToAlertQueue = new LinkedBlockingQueue<>(); - metricsDataToPersistentStorageQueue = new LinkedBlockingQueue<>(); - metricsDataToRealTimeStorageQueue = new LinkedBlockingQueue<>(); + metricsDataToStorageQueue = new LinkedBlockingQueue<>(); serviceDiscoveryDataQueue = new LinkedBlockingQueue<>(); } @@ -62,8 +60,7 @@ public Map getQueueSizeMetricsInfo() { Map metrics = new HashMap<>(8); metrics.put("alertDataQueue", alertDataQueue.size()); metrics.put("metricsDataToAlertQueue", metricsDataToAlertQueue.size()); - metrics.put("metricsDataToPersistentStorageQueue", metricsDataToPersistentStorageQueue.size()); - metrics.put("metricsDataToMemoryStorageQueue", metricsDataToRealTimeStorageQueue.size()); + metrics.put("metricsDataToStorageQueue", metricsDataToStorageQueue.size()); return metrics; } @@ -88,20 +85,18 @@ public CollectRep.MetricsData pollMetricsDataToAlerter() throws InterruptedExcep } @Override - public CollectRep.MetricsData pollMetricsDataToPersistentStorage() throws InterruptedException { - return metricsDataToPersistentStorageQueue.take(); + public CollectRep.MetricsData pollMetricsDataToStorage() throws InterruptedException { + return metricsDataToStorageQueue.take(); } @Override - public CollectRep.MetricsData pollMetricsDataToRealTimeStorage() throws InterruptedException { - return metricsDataToRealTimeStorageQueue.take(); + public void sendMetricsData(CollectRep.MetricsData metricsData) { + metricsDataToAlertQueue.offer(metricsData); } @Override - public void sendMetricsData(CollectRep.MetricsData metricsData) { - metricsDataToAlertQueue.offer(metricsData); - metricsDataToPersistentStorageQueue.offer(metricsData); - metricsDataToRealTimeStorageQueue.offer(metricsData); + public void sendMetricsDataToStorage(CollectRep.MetricsData metricsData) { + metricsDataToStorageQueue.offer(metricsData); } @Override @@ -113,8 +108,7 @@ public void sendServiceDiscoveryData(CollectRep.MetricsData metricsData) { public void destroy() { alertDataQueue.clear(); metricsDataToAlertQueue.clear(); - metricsDataToPersistentStorageQueue.clear(); - metricsDataToRealTimeStorageQueue.clear(); + metricsDataToStorageQueue.clear(); serviceDiscoveryDataQueue.clear(); } } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueue.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueue.java index 6172ebbc13a..6de2faa173d 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueue.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueue.java @@ -61,21 +61,18 @@ public class KafkaCommonDataQueue implements CommonDataQueue, DisposableBean { private final ReentrantLock alertLock = new ReentrantLock(); private final ReentrantLock metricDataToAlertLock = new ReentrantLock(); - private final ReentrantLock metricDataToPersistentLock = new ReentrantLock(); - private final ReentrantLock metricDataToRealTimeStorageLock = new ReentrantLock(); + private final ReentrantLock metricDataToStorageLock = new ReentrantLock(); private final ReentrantLock serviceDiscoveryDataLock = new ReentrantLock(); private final LinkedBlockingQueue alertDataQueue; private final LinkedBlockingQueue metricsDataToAlertQueue; - private final LinkedBlockingQueue metricsDataToPersistentStorageQueue; - private final LinkedBlockingQueue metricsDataToRealTimeStorageQueue; + private final LinkedBlockingQueue metricsDataToStorageQueue; private final LinkedBlockingQueue serviceDiscoveryDataQueue; private final CommonProperties.KafkaProperties kafka; private KafkaProducer metricsDataProducer; private KafkaProducer alertDataProducer; private KafkaConsumer alertDataConsumer; private KafkaConsumer metricsDataToAlertConsumer; - private KafkaConsumer metricsDataToPersistentStorageConsumer; - private KafkaConsumer metricsDataToRealTimeStorageConsumer; + private KafkaConsumer metricsDataToStorageConsumer; private KafkaConsumer serviceDiscoveryDataConsumer; public KafkaCommonDataQueue(CommonProperties properties) { @@ -86,8 +83,7 @@ public KafkaCommonDataQueue(CommonProperties properties) { this.kafka = properties.getQueue().getKafka(); alertDataQueue = new LinkedBlockingQueue<>(); metricsDataToAlertQueue = new LinkedBlockingQueue<>(); - metricsDataToPersistentStorageQueue = new LinkedBlockingQueue<>(); - metricsDataToRealTimeStorageQueue = new LinkedBlockingQueue<>(); + metricsDataToStorageQueue = new LinkedBlockingQueue<>(); serviceDiscoveryDataQueue = new LinkedBlockingQueue<>(); initDataQueue(); } @@ -119,15 +115,10 @@ private void initDataQueue() { metricsDataToAlertConsumer = new KafkaConsumer<>(metricsToAlertConsumerConfig, new LongDeserializer(), new KafkaMetricsDataDeserializer()); metricsDataToAlertConsumer.subscribe(Collections.singletonList(kafka.getMetricsDataTopic())); - Map metricsToPersistentConsumerConfig = new HashMap<>(consumerConfig); - metricsToPersistentConsumerConfig.put("group.id", "metrics-persistent-consumer"); - metricsDataToPersistentStorageConsumer = new KafkaConsumer<>(metricsToPersistentConsumerConfig, new LongDeserializer(), new KafkaMetricsDataDeserializer()); - metricsDataToPersistentStorageConsumer.subscribe(Collections.singletonList(kafka.getMetricsDataTopic())); - - Map metricsToRealTimeConsumerConfig = new HashMap<>(consumerConfig); - metricsToRealTimeConsumerConfig.put("group.id", "metrics-memory-consumer"); - metricsDataToRealTimeStorageConsumer = new KafkaConsumer<>(metricsToRealTimeConsumerConfig, new LongDeserializer(), new KafkaMetricsDataDeserializer()); - metricsDataToRealTimeStorageConsumer.subscribe(Collections.singletonList(kafka.getMetricsDataTopic())); + Map metricsToStorageConsumerConfig = new HashMap<>(consumerConfig); + metricsToStorageConsumerConfig.put("group.id", "metrics-persistent-consumer"); + metricsDataToStorageConsumer = new KafkaConsumer<>(metricsToStorageConsumerConfig, new LongDeserializer(), new KafkaMetricsDataDeserializer()); + metricsDataToStorageConsumer.subscribe(Collections.singletonList(kafka.getMetricsDataTopic())); Map serviceDiscoveryDataConsumerConfig = new HashMap<>(consumerConfig); serviceDiscoveryDataConsumerConfig.put("group.id", "service-discovery-data-consumer"); @@ -166,17 +157,10 @@ public CollectRep.MetricsData pollMetricsDataToAlerter() throws InterruptedExcep } @Override - public CollectRep.MetricsData pollMetricsDataToPersistentStorage() throws InterruptedException { - return genericPollDataFunction(metricsDataToPersistentStorageQueue, metricsDataToPersistentStorageConsumer, metricDataToPersistentLock); + public CollectRep.MetricsData pollMetricsDataToStorage() throws InterruptedException { + return genericPollDataFunction(metricsDataToStorageQueue, metricsDataToStorageConsumer, metricDataToStorageLock); } - - @Override - public CollectRep.MetricsData pollMetricsDataToRealTimeStorage() throws InterruptedException { - return genericPollDataFunction(metricsDataToRealTimeStorageQueue, metricsDataToRealTimeStorageConsumer, metricDataToRealTimeStorageLock); - } - - public T genericPollDataFunction(LinkedBlockingQueue dataQueue, KafkaConsumer dataConsumer, ReentrantLock lock) throws InterruptedException { T pollData = dataQueue.poll(); @@ -207,7 +191,20 @@ public T genericPollDataFunction(LinkedBlockingQueue dataQueue, KafkaCons @Override public void sendMetricsData(CollectRep.MetricsData metricsData) { if (metricsDataProducer != null) { - metricsDataProducer.send(new ProducerRecord<>(kafka.getMetricsDataTopic(), metricsData)); + ProducerRecord record = + new ProducerRecord<>(kafka.getMetricsDataTopic(), metricsData); + metricsDataProducer.send(record); + } else { + log.error("metricsDataProducer is not enabled"); + } + } + + @Override + public void sendMetricsDataToStorage(CollectRep.MetricsData metricsData) { + if (metricsDataProducer != null) { + ProducerRecord record = + new ProducerRecord<>(kafka.getMetricsDataToStorageTopic(), metricsData); + metricsDataProducer.send(record); } else { log.error("metricsDataProducer is not enabled"); } @@ -216,7 +213,9 @@ public void sendMetricsData(CollectRep.MetricsData metricsData) { @Override public void sendServiceDiscoveryData(CollectRep.MetricsData metricsData) { if (metricsDataProducer != null) { - metricsDataProducer.send(new ProducerRecord<>(kafka.getServiceDiscoveryDataTopic(), metricsData)); + ProducerRecord record = + new ProducerRecord<>(kafka.getServiceDiscoveryDataTopic(), metricsData); + metricsDataProducer.send(record); } else { log.error("metricsDataProducer is not enabled"); } @@ -236,11 +235,8 @@ public void destroy() throws Exception { if (metricsDataToAlertConsumer != null) { metricsDataToAlertConsumer.close(); } - if (metricsDataToPersistentStorageConsumer != null) { - metricsDataToPersistentStorageConsumer.close(); - } - if (metricsDataToRealTimeStorageConsumer != null) { - metricsDataToRealTimeStorageConsumer.close(); + if (metricsDataToStorageConsumer != null) { + metricsDataToStorageConsumer.close(); } if (serviceDiscoveryDataConsumer != null) { serviceDiscoveryDataConsumer.close(); diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueue.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueue.java index ec73b9c565d..59e3f017668 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueue.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueue.java @@ -27,8 +27,7 @@ import org.apache.hertzbeat.common.entity.alerter.Alert; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.queue.CommonDataQueue; -import org.apache.hertzbeat.common.util.JsonUtil; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; +import org.apache.hertzbeat.common.serialize.RedisMetricsDataCodec; import org.springframework.beans.factory.DisposableBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; @@ -46,13 +45,11 @@ public class RedisCommonDataQueue implements CommonDataQueue, DisposableBean { private final RedisClient redisClient; - private final StatefulRedisConnection connection; - private final RedisCommands syncCommands; - private final String metricsDataQueueNameToAlerter; - private final String metricsDataQueueNameToPersistentStorage; - private final String metricsDataQueueNameToRealTimeStorage; + private final StatefulRedisConnection connection; + private final RedisCommands syncCommands; + private final String metricsDataQueueNameToStorage; private final String metricsDataQueueNameForServiceDiscovery; - private final String alertsDataQueueName; + private final String metricsDataQueueNameToAlerter; private final CommonProperties.RedisProperties redisProperties; public RedisCommonDataQueue(CommonProperties properties) { @@ -70,129 +67,84 @@ public RedisCommonDataQueue(CommonProperties properties) { .withPort(redisProperties.getRedisPort()) .build() ); - this.connection = redisClient.connect(); + RedisMetricsDataCodec codec = new RedisMetricsDataCodec(); + this.connection = redisClient.connect(codec); this.syncCommands = connection.sync(); - this.metricsDataQueueNameToAlerter = redisProperties.getMetricsDataQueueNameToAlerter(); - this.metricsDataQueueNameToPersistentStorage = redisProperties.getMetricsDataQueueNameToPersistentStorage(); - this.metricsDataQueueNameToRealTimeStorage = redisProperties.getMetricsDataQueueNameToRealTimeStorage(); + this.metricsDataQueueNameToStorage = redisProperties.getMetricsDataQueueNameToPersistentStorage(); this.metricsDataQueueNameForServiceDiscovery = redisProperties.getMetricsDataQueueNameForServiceDiscovery(); - this.alertsDataQueueName = redisProperties.getAlertsDataQueueName(); + this.metricsDataQueueNameToAlerter = redisProperties.getMetricsDataQueueNameToAlerter(); } @Override public Alert pollAlertsData() { - - try { - String alertJson = syncCommands.rpop(alertsDataQueueName); - if (alertJson != null) { - return JsonUtil.fromJson(alertJson, Alert.class); - } - } catch (Exception e) { - log.error("please config common.queue.redis props correctly", e); - throw new RuntimeException(e); - } + // todo will remove this return null; } @Override public CollectRep.MetricsData pollMetricsDataToAlerter() { - try { - String metricsDataJson = syncCommands.rpop(metricsDataQueueNameToAlerter); - if (metricsDataJson != null) { - return (CollectRep.MetricsData) ProtoJsonUtil.toProtobuf(metricsDataJson, CollectRep.MetricsData.newBuilder()); - } + return syncCommands.rpop(metricsDataQueueNameToAlerter); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); + return null; } - return null; } @Override - public CollectRep.MetricsData pollMetricsDataToPersistentStorage() throws InterruptedException { - + public CollectRep.MetricsData pollMetricsDataToStorage() throws InterruptedException { try { - String metricsDataJson = syncCommands.rpop(metricsDataQueueNameToPersistentStorage); - if (metricsDataJson != null) { - return JsonUtil.fromJson(metricsDataJson, CollectRep.MetricsData.class); - } + return syncCommands.rpop(metricsDataQueueNameToStorage); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); + return null; } - return null; } @Override - public CollectRep.MetricsData pollMetricsDataToRealTimeStorage() throws InterruptedException { - - try { - String metricsDataJson = syncCommands.rpop(metricsDataQueueNameToRealTimeStorage); - if (metricsDataJson != null) { - return JsonUtil.fromJson(metricsDataJson, CollectRep.MetricsData.class); - } - } catch (Exception e) { - log.error(e.getMessage()); - throw new RuntimeException(e); - } - return null; + public void sendAlertsData(Alert alert) { + // will remove this todo } @Override - public void sendAlertsData(Alert alert) { - + public CollectRep.MetricsData pollServiceDiscoveryData() throws InterruptedException { try { - String alertJson = JsonUtil.toJson(alert); - syncCommands.lpush(alertsDataQueueName, alertJson); + return syncCommands.rpop(metricsDataQueueNameForServiceDiscovery); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); + return null; } } @Override - public CollectRep.MetricsData pollServiceDiscoveryData() throws InterruptedException { + public void sendMetricsData(CollectRep.MetricsData metricsData) { try { - String metricsDataJson = syncCommands.rpop(metricsDataQueueNameForServiceDiscovery); - if (metricsDataJson != null) { - return JsonUtil.fromJson(metricsDataJson, CollectRep.MetricsData.class); - } + syncCommands.lpush(metricsDataQueueNameToAlerter, metricsData); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); } - return null; } @Override - public void sendMetricsData(CollectRep.MetricsData metricsData) { - + public void sendMetricsDataToStorage(CollectRep.MetricsData metricsData) { try { - String metricsDataJson = ProtoJsonUtil.toJsonStr(metricsData); - syncCommands.lpush(metricsDataQueueNameToAlerter, metricsDataJson); - syncCommands.lpush(metricsDataQueueNameToPersistentStorage, metricsDataJson); - syncCommands.lpush(metricsDataQueueNameToRealTimeStorage, metricsDataJson); + syncCommands.lpush(metricsDataQueueNameToStorage, metricsData); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); } } @Override public void sendServiceDiscoveryData(CollectRep.MetricsData metricsData) { try { - String metricsDataJson = ProtoJsonUtil.toJsonStr(metricsData); - syncCommands.lpush(metricsDataQueueNameForServiceDiscovery, metricsDataJson); + syncCommands.lpush(metricsDataQueueNameForServiceDiscovery, metricsData); } catch (Exception e) { log.error(e.getMessage()); - throw new RuntimeException(e); } } @Override public void destroy() { - connection.close(); redisClient.shutdown(); } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializer.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializer.java index c1f80270503..3d4b95b4fe0 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializer.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializer.java @@ -17,8 +17,14 @@ package org.apache.hertzbeat.common.serialize; -import com.google.protobuf.InvalidProtocolBufferException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.channels.Channels; import java.util.Map; +import org.apache.arrow.memory.RootAllocator; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamReader; +import org.apache.arrow.vector.table.ArrowTable; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.kafka.common.header.Headers; import org.apache.kafka.common.serialization.Deserializer; @@ -35,10 +41,13 @@ public void configure(Map configs, boolean isKey) { @Override public CollectRep.MetricsData deserialize(String s, byte[] bytes){ - try { - return CollectRep.MetricsData.parseFrom(bytes); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); + try (ByteArrayInputStream in = new ByteArrayInputStream(bytes); + ArrowStreamReader reader = new ArrowStreamReader(Channels.newChannel(in), new RootAllocator())) { + VectorSchemaRoot root = reader.getVectorSchemaRoot(); + reader.loadNextBatch(); + return new CollectRep.MetricsData(new ArrowTable(root)); + } catch (IOException e) { + throw new RuntimeException("Failed to deserialize Arrow table", e); } } diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializer.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializer.java index bcd2fe6d66f..39f9c4ca158 100644 --- a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializer.java +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializer.java @@ -17,8 +17,13 @@ package org.apache.hertzbeat.common.serialize; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; import java.util.Map; import lombok.extern.slf4j.Slf4j; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.kafka.common.header.Headers; import org.apache.kafka.common.serialization.Serializer; @@ -37,13 +42,23 @@ public void configure(Map configs, boolean isKey) { @Override public byte[] serialize(String s, CollectRep.MetricsData metricsData) { - + // todo use the ArrowTable bytebuffer to direct send zero copy if (metricsData == null) { log.error("metricsData is null"); return null; } - - return metricsData.toByteArray(); + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = metricsData.toVectorSchemaRootAndRelease(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + return out.toByteArray(); + } catch (IOException e) { + log.error("sendMetricsData error", e); + } + return null; } @Override diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/RedisMetricsDataCodec.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/RedisMetricsDataCodec.java new file mode 100644 index 00000000000..bf79bf0e578 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/serialize/RedisMetricsDataCodec.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.serialize; + +import io.lettuce.core.codec.RedisCodec; +import io.netty.buffer.Unpooled; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; +import java.nio.charset.StandardCharsets; +import lombok.extern.slf4j.Slf4j; +import org.apache.arrow.memory.RootAllocator; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamReader; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; +import org.apache.arrow.vector.table.ArrowTable; +import org.apache.hertzbeat.common.entity.message.CollectRep; + +/** + * redis metrics data codec + */ +@Slf4j +public class RedisMetricsDataCodec implements RedisCodec { + + @Override + public String decodeKey(ByteBuffer byteBuffer) { + return Unpooled.wrappedBuffer(byteBuffer).toString(StandardCharsets.UTF_8); + } + + @Override + public CollectRep.MetricsData decodeValue(ByteBuffer byteBuffer) { + try (ByteArrayInputStream in = new ByteArrayInputStream(byteBuffer.array()); + ArrowStreamReader reader = new ArrowStreamReader(Channels.newChannel(in), new RootAllocator())) { + VectorSchemaRoot root = reader.getVectorSchemaRoot(); + reader.loadNextBatch(); + return new CollectRep.MetricsData(new ArrowTable(root)); + } catch (IOException e) { + throw new RuntimeException("Failed to deserialize Arrow table", e); + } + } + + @Override + public ByteBuffer encodeKey(String s) { + return ByteBuffer.wrap(s.getBytes(StandardCharsets.UTF_8)); + } + + @Override + public ByteBuffer encodeValue(CollectRep.MetricsData metricsData) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = metricsData.toVectorSchemaRootAndRelease(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + return ByteBuffer.wrap(out.toByteArray()); + } catch (IOException e) { + log.error("sendMetricsData error", e); + } + return null; + } +} diff --git a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/ArrowUtil.java b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/ArrowUtil.java new file mode 100644 index 00000000000..b5d391977d2 --- /dev/null +++ b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/ArrowUtil.java @@ -0,0 +1,156 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hertzbeat.common.util; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; +import java.util.ArrayList; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.apache.arrow.memory.RootAllocator; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamReader; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; +import org.apache.hertzbeat.common.entity.message.CollectRep; + +/** + * Arrow data serialization and deserialization utility class + */ +@Slf4j +public final class ArrowUtil { + + private ArrowUtil() { + } + + /** + * Serialize multiple VectorSchemaRoots into a byte array + * The serialization process: + * 1. Write the number of roots as an integer + * 2. For each root, serialize its content using ArrowStreamWriter + * + * @param roots List of VectorSchemaRoot to be serialized + * @return serialized byte array + */ + public static byte[] serializeMultipleRoots(List roots) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + DataOutputStream dataOut = new DataOutputStream(out)) { + + dataOut.writeInt(roots.size()); + for (VectorSchemaRoot root : roots) { + ArrowStreamWriter writer = new ArrowStreamWriter( + root, + null, + Channels.newChannel(out)); + writer.start(); + writer.writeBatch(); + writer.end(); + writer.close(); + } + return out.toByteArray(); + } catch (IOException e) { + throw new RuntimeException("Failed to serialize multiple VectorSchemaRoots", e); + } + } + + /** + * Deserialize multiple VectorSchemaRoots from a byte array + * The deserialization process: + * 1. Read the number of roots from the first integer + * 2. Create a single RootAllocator for memory management + * 3. Deserialize each root using ArrowStreamReader + * + * @param data byte array containing serialized VectorSchemaRoots + * @return List of deserialized VectorSchemaRoot objects + * @throws RuntimeException if deserialization fails + */ + public static List deserializeMultipleRoots(byte[] data) { + List roots = new ArrayList<>(); + try (ByteArrayInputStream in = new ByteArrayInputStream(data); + DataInputStream dataIn = new DataInputStream(in)) { + + int rootCount = dataIn.readInt(); + RootAllocator allocator = new RootAllocator(); + + for (int i = 0; i < rootCount; i++) { + ArrowStreamReader reader = new ArrowStreamReader( + Channels.newChannel(in), + allocator); + VectorSchemaRoot root = reader.getVectorSchemaRoot(); + reader.loadNextBatch(); + roots.add(root); + } + return roots; + } catch (IOException e) { + roots.forEach(VectorSchemaRoot::close); + throw new RuntimeException("Failed to deserialize multiple VectorSchemaRoots", e); + } + } + + /** + * Deserialize a list of MetricsData from a byte array + * The process: + * 1. Check for null or empty input + * 2. Deserialize VectorSchemaRoots + * 3. Convert each valid root to MetricsData + * 4. Ensure proper resource cleanup + * + * @param data byte array containing serialized metrics data + * @return List of MetricsData objects + */ + public static List deserializeMetricsData(byte[] data) { + if (data == null || data.length == 0) { + return new ArrayList<>(); + } + List roots = deserializeMultipleRoots(data); + List metricsDataList = new ArrayList<>(roots.size()); + try { + for (VectorSchemaRoot root : roots) { + if (root != null) { + CollectRep.MetricsData metricsData = new CollectRep.MetricsData(root); + metricsDataList.add(metricsData); + } + } + } finally { + roots.forEach(VectorSchemaRoot::close); + } + return metricsDataList; + } + + /** + * Serialize a list of MetricsData into a byte array + * The process: + * 1. Convert each MetricsData to VectorSchemaRoot + * 2. Serialize all roots into a single byte array + * + * @param metricsDataList List of MetricsData to be serialized + * @return serialized byte array + */ + public static byte[] serializeMetricsData(List metricsDataList) { + List roots = new ArrayList<>(metricsDataList.size()); + for (CollectRep.MetricsData metricsData : metricsDataList) { + VectorSchemaRoot root = metricsData.toVectorSchemaRootAndRelease(); + roots.add(root); + } + return serializeMultipleRoots(roots); + } + +} diff --git a/hertzbeat-common/src/main/message/cluster_msg.proto b/hertzbeat-common/src/main/message/cluster_msg.proto index 3578d7311b2..e1321e1a41f 100644 --- a/hertzbeat-common/src/main/message/cluster_msg.proto +++ b/hertzbeat-common/src/main/message/cluster_msg.proto @@ -27,7 +27,7 @@ message Message // message type MessageType type = 3; // message content - string msg = 4; + bytes msg = 4; } enum MessageType diff --git a/hertzbeat-common/src/main/message/collect_rep.proto b/hertzbeat-common/src/main/message/collect_rep.proto deleted file mode 100644 index 7a43bdac3e3..00000000000 --- a/hertzbeat-common/src/main/message/collect_rep.proto +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -syntax = "proto3"; -package org.apache.hertzbeat.common.entity.message; - -message MetricsData -{ - // monitoring id - uint64 id = 1; - // tenant id - uint64 tenantId = 2; - // monitoring app eg: linux | mysql | jvm - string app = 3; - // monitoring metrics eg: cpu | memory | health - string metrics = 4; - // monitoring collect priority >=0 - uint32 priority = 5; - // collect timestamp - uint64 time = 6; - // collect response code - Code code = 7; - // collect response error message - string msg = 8; - // monitoring collect metric field - repeated Field fields = 9; - // monitoring collect metric data, mapping with the fields - repeated ValueRow values = 10; -} - -message Field -{ - // monitoring collect metric field name - string name = 1; - // monitoring collect metrics field type, 0-number 1-string - uint32 type = 2; - // monitoring collect metrics field unit, % MB GB TB S... - string unit = 3; - // is label field - bool label = 4; -} - -message ValueRow -{ - // monitoring collect metrics value, mapping with the fields - repeated string columns = 1; -} - -enum Code -{ - // collect success - SUCCESS = 0; - // collector not available - UN_AVAILABLE = 1; - // peer network un reachable(icmp) - UN_REACHABLE = 2; - // peer network server un connectable(tcp,udp...) - UN_CONNECTABLE = 3; - // collect metrics data failed(http,ssh,snmp...) - FAIL = 4; - // collect metrics data timeout - TIMEOUT = 5; -} diff --git a/hertzbeat-common/src/test/java/org/apache/arrow/vector/table/ArrowTableTest.java b/hertzbeat-common/src/test/java/org/apache/arrow/vector/table/ArrowTableTest.java new file mode 100644 index 00000000000..bc488ec54ab --- /dev/null +++ b/hertzbeat-common/src/test/java/org/apache/arrow/vector/table/ArrowTableTest.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.arrow.vector.table; + +import static java.util.Arrays.asList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import org.apache.arrow.memory.BufferAllocator; +import org.apache.arrow.memory.RootAllocator; +import org.apache.arrow.vector.IntVector; +import org.apache.arrow.vector.VarCharVector; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamReader; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; +import org.apache.arrow.vector.types.pojo.ArrowType; +import org.apache.arrow.vector.types.pojo.Field; +import org.apache.arrow.vector.types.pojo.FieldType; +import org.apache.arrow.vector.types.pojo.Schema; +import org.junit.jupiter.api.Test; + +/** + * test for arrow table + */ +class ArrowTableTest { + + @Test + void testArrow() { + BufferAllocator allocator = new RootAllocator(); + Map metadata = new HashMap<>(); + metadata.put("K1", "V1"); + metadata.put("K2", "V2"); + Field a = new Field("age", FieldType.nullable(new ArrowType.Int(32, true)), /*children*/ null); + Field b = new Field("name", FieldType.nullable(new ArrowType.Utf8()), /*children*/ null); + Schema schema = new Schema(asList(a, b), metadata); + VectorSchemaRoot root = VectorSchemaRoot.create(schema, allocator); + IntVector ageVector = (IntVector) root.getVector("age"); + VarCharVector nameVector = (VarCharVector) root.getVector("name"); + ageVector.allocateNew(3); + ageVector.set(0, 10); + ageVector.set(1, 20); + ageVector.set(2, 30); + nameVector.allocateNew(3); + nameVector.set(0, "Dave".getBytes(StandardCharsets.UTF_8)); + nameVector.set(1, "Peter".getBytes(StandardCharsets.UTF_8)); + nameVector.set(2, "Mary".getBytes(StandardCharsets.UTF_8)); + root.setRowCount(3); + + assertEquals(3, root.getRowCount()); + Table t = new Table(root); + assertEquals(3, t.getRowCount()); + Table t2 = t.slice(2); + root.close(); + VectorSchemaRoot root2 = t.toVectorSchemaRoot(); + assertEquals(3, root2.getRowCount()); + assertEquals(0, t.getRowCount()); + assertEquals(1, t2.getRowCount()); + assertEquals(0, root.getRowCount()); + root2.close(); + } + + @Test + void testArrow3() { + BufferAllocator allocator = new RootAllocator(); + Map metadata = new HashMap<>(); + metadata.put("K1", "V1"); + metadata.put("K2", "V2"); + Field a = new Field("age", FieldType.nullable(new ArrowType.Int(32, true)), /*children*/ null); + Field b = new Field("name", FieldType.nullable(new ArrowType.Utf8()), /*children*/ null); + Schema schema = new Schema(asList(a, b), metadata); + VectorSchemaRoot root = VectorSchemaRoot.create(schema, allocator); + IntVector ageVector = (IntVector) root.getVector("age"); + VarCharVector nameVector = (VarCharVector) root.getVector("name"); + ageVector.allocateNew(3); + ageVector.set(0, 10); + ageVector.set(1, 20); + ageVector.set(2, 30); + nameVector.allocateNew(3); + nameVector.set(0, "Dave".getBytes(StandardCharsets.UTF_8)); + nameVector.set(1, "Peter".getBytes(StandardCharsets.UTF_8)); + nameVector.set(2, "Mary".getBytes(StandardCharsets.UTF_8)); + root.setRowCount(3); + + assertEquals(3, root.getRowCount()); + ArrowTable t = new ArrowTable(root); + assertEquals(3, t.getRowCount()); + VectorSchemaRoot root1 = t.toVectorSchemaRoot(); + assertEquals(3, root1.getRowCount()); + assertEquals("V1", root1.getSchema().getCustomMetadata().get("K1")); + ArrowTable t2 = new ArrowTable(root1); + assertEquals(3, t2.getRowCount()); + assertEquals("V1", t2.getSchema().getCustomMetadata().get("K1")); + VectorSchemaRoot root2 = t2.toVectorSchemaRoot(); + + byte[] bytes = null; + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + ArrowStreamWriter writer = new ArrowStreamWriter(root2, null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + bytes = out.toByteArray(); + } catch (IOException ignored) {} + assertEquals(3, root2.getRowCount()); + root2.close(); + BufferAllocator bufferAllocator = new RootAllocator(); + try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); + ArrowStreamReader arrowStreamReader = new ArrowStreamReader(byteArrayInputStream, bufferAllocator)) { + arrowStreamReader.loadNextBatch(); + VectorSchemaRoot schemaRoot = arrowStreamReader.getVectorSchemaRoot(); + assertEquals(3, schemaRoot.getRowCount()); + assertEquals(schemaRoot.getSchema().getCustomMetadata().get("K1"), "V1"); + } catch (IOException e) { + throw new RuntimeException(e); + } + root.close(); + root2.close(); + t.close(); + t2.close(); + allocator.close(); + } + + @Test + void testArrow2() { + BufferAllocator allocator = new RootAllocator(); + Map metadata = new HashMap<>(); + metadata.put("K1", "V1"); + metadata.put("K2", "V2"); + Field a = new Field("age", FieldType.nullable(new ArrowType.Int(32, true)), /*children*/ null); + Field b = new Field("name", FieldType.nullable(new ArrowType.Utf8()), /*children*/ null); + Schema schema = new Schema(asList(a, b), metadata); + VectorSchemaRoot root = VectorSchemaRoot.create(schema, allocator); + IntVector ageVector = (IntVector) root.getVector("age"); + VarCharVector nameVector = (VarCharVector) root.getVector("name"); + ageVector.allocateNew(3); + ageVector.set(0, 10); + ageVector.set(1, 20); + ageVector.set(2, 30); + nameVector.allocateNew(3); + nameVector.set(0, "Dave".getBytes(StandardCharsets.UTF_8)); + nameVector.set(1, "Peter".getBytes(StandardCharsets.UTF_8)); + nameVector.set(2, "Mary".getBytes(StandardCharsets.UTF_8)); + root.setRowCount(3); + + assertEquals(3, root.getRowCount()); + byte[] bytes = null; + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + bytes = out.toByteArray(); + } catch (IOException ignored) {} + assertEquals(3, root.getRowCount()); + root.close(); + BufferAllocator bufferAllocator = new RootAllocator(); + try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); + ArrowStreamReader arrowStreamReader = new ArrowStreamReader(byteArrayInputStream, bufferAllocator)) { + arrowStreamReader.loadNextBatch(); + VectorSchemaRoot schemaRoot = arrowStreamReader.getVectorSchemaRoot(); + assertEquals(3, schemaRoot.getRowCount()); + assertEquals(schemaRoot.getSchema().getCustomMetadata().get("K1"), "V1"); + } catch (IOException e) { + throw new RuntimeException(e); + } + root.close(); + allocator.close(); + } +} diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueueTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueueTest.java index b55f29465a6..5794cb704b8 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueueTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/InMemoryCommonDataQueueTest.java @@ -63,16 +63,6 @@ void testMetricsData() throws InterruptedException { assertNotNull(polledMetricsData); assertEquals(metricsData, polledMetricsData); - - polledMetricsData = queue.pollMetricsDataToPersistentStorage(); - - assertNotNull(polledMetricsData); - assertEquals(metricsData, polledMetricsData); - - polledMetricsData = queue.pollMetricsDataToRealTimeStorage(); - - assertNotNull(polledMetricsData); - assertEquals(metricsData, polledMetricsData); } @Test @@ -82,8 +72,7 @@ void testGetQueueSizeMetricsInfo() { assertEquals(0, metricsInfo.get("alertDataQueue")); assertEquals(0, metricsInfo.get("metricsDataToAlertQueue")); - assertEquals(0, metricsInfo.get("metricsDataToPersistentStorageQueue")); - assertEquals(0, metricsInfo.get("metricsDataToMemoryStorageQueue")); + assertEquals(0, metricsInfo.get("metricsDataToStorageQueue")); queue.sendAlertsData(new Alert()); queue.sendMetricsData(CollectRep.MetricsData.newBuilder().build()); @@ -92,8 +81,7 @@ void testGetQueueSizeMetricsInfo() { assertEquals(1, metricsInfo.get("alertDataQueue")); assertEquals(1, metricsInfo.get("metricsDataToAlertQueue")); - assertEquals(1, metricsInfo.get("metricsDataToPersistentStorageQueue")); - assertEquals(1, metricsInfo.get("metricsDataToMemoryStorageQueue")); + assertEquals(0, metricsInfo.get("metricsDataToStorageQueue")); } @Test @@ -108,8 +96,7 @@ void testDestroy() { assertEquals(0, metricsInfo.get("alertDataQueue")); assertEquals(0, metricsInfo.get("metricsDataToAlertQueue")); - assertEquals(0, metricsInfo.get("metricsDataToPersistentStorageQueue")); - assertEquals(0, metricsInfo.get("metricsDataToMemoryStorageQueue")); + assertEquals(0, metricsInfo.get("metricsDataToStorageQueue")); } } diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueueTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueueTest.java index 0372a999948..ff31e012353 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueueTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/KafkaCommonDataQueueTest.java @@ -18,159 +18,120 @@ package org.apache.hertzbeat.common.queue.impl; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyCollection; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; import java.lang.reflect.Field; import java.time.Duration; import java.util.Collections; +import java.util.List; +import java.util.Map; import org.apache.hertzbeat.common.config.CommonProperties; -import org.apache.hertzbeat.common.entity.alerter.Alert; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.TopicPartition; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; /** * Test case for {@link KafkaCommonDataQueue} */ +@ExtendWith(MockitoExtension.class) class KafkaCommonDataQueueTest { - private KafkaProducer metricsDataProducer; - private KafkaProducer alertDataProducer; - private KafkaConsumer alertDataConsumer; + @Mock(lenient = true) private KafkaConsumer metricsDataToAlertConsumer; - private KafkaConsumer metricsDataToPersistentStorageConsumer; - private KafkaConsumer metricsDataToRealTimeStorageConsumer; - private KafkaConsumer serviceDiscoveryDataConsumer; - private CommonProperties.KafkaProperties kafkaProperties; + + @Mock(lenient = true) + private KafkaProducer metricsDataProducer; + private KafkaCommonDataQueue kafkaCommonDataQueue; + private CommonProperties commonProperties; + @BeforeEach void setUp() throws Exception { - kafkaProperties = mock(CommonProperties.KafkaProperties.class); + commonProperties = mock(CommonProperties.class); + CommonProperties.DataQueueProperties dataQueueProperties = mock(CommonProperties.DataQueueProperties.class, withSettings().lenient()); + CommonProperties.KafkaProperties kafkaProperties = mock(CommonProperties.KafkaProperties.class, withSettings().lenient()); + + when(commonProperties.getQueue()).thenReturn(dataQueueProperties); + when(dataQueueProperties.getKafka()).thenReturn(kafkaProperties); + + // 设置所有必需的 topic + when(kafkaProperties.getMetricsDataTopic()).thenReturn("metricsDataTopic"); + when(kafkaProperties.getAlertsDataTopic()).thenReturn("alertsDataTopic"); + when(kafkaProperties.getMetricsDataToStorageTopic()).thenReturn("metricsDataToStorageTopic"); + when(kafkaProperties.getServiceDiscoveryDataTopic()).thenReturn("serviceDiscoveryDataTopic"); when(kafkaProperties.getServers()).thenReturn("localhost:9092"); - when(kafkaProperties.getAlertsDataTopic()).thenReturn("alerts"); - when(kafkaProperties.getMetricsDataTopic()).thenReturn("metrics"); - when(kafkaProperties.getServiceDiscoveryDataTopic()).thenReturn("serviceDiscovery"); - CommonProperties properties = mock(CommonProperties.class); - CommonProperties.DataQueueProperties queueProperties = mock(CommonProperties.DataQueueProperties.class); - when(properties.getQueue()).thenReturn(queueProperties); - when(queueProperties.getKafka()).thenReturn(kafkaProperties); - - metricsDataProducer = mock(KafkaProducer.class); - alertDataProducer = mock(KafkaProducer.class); - alertDataConsumer = mock(KafkaConsumer.class); - metricsDataToAlertConsumer = mock(KafkaConsumer.class); - metricsDataToPersistentStorageConsumer = mock(KafkaConsumer.class); - metricsDataToRealTimeStorageConsumer = mock(KafkaConsumer.class); - serviceDiscoveryDataConsumer = mock(KafkaConsumer.class); - - kafkaCommonDataQueue = new KafkaCommonDataQueue(properties); + // 模拟 consumer 的 subscribe 方法 + doNothing().when(metricsDataToAlertConsumer).subscribe(anyCollection()); + kafkaCommonDataQueue = new KafkaCommonDataQueue(commonProperties); + + // 使用反射设置私有字段 setPrivateField(kafkaCommonDataQueue, "metricsDataProducer", metricsDataProducer); - setPrivateField(kafkaCommonDataQueue, "alertDataProducer", alertDataProducer); - setPrivateField(kafkaCommonDataQueue, "alertDataConsumer", alertDataConsumer); setPrivateField(kafkaCommonDataQueue, "metricsDataToAlertConsumer", metricsDataToAlertConsumer); - setPrivateField(kafkaCommonDataQueue, "metricsDataToPersistentStorageConsumer", metricsDataToPersistentStorageConsumer); - setPrivateField(kafkaCommonDataQueue, "metricsDataToRealTimeStorageConsumer", metricsDataToRealTimeStorageConsumer); - setPrivateField(kafkaCommonDataQueue, "serviceDiscoveryDataConsumer", serviceDiscoveryDataConsumer); - } - - // Test use, set private field. - private void setPrivateField(Object target, String fieldName, Object value) throws Exception { - - Field field = target.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - field.set(target, value); - } - - @Test - void testSendAlertsData() { - - Alert alert = new Alert(); - kafkaCommonDataQueue.sendAlertsData(alert); - - ArgumentCaptor> captor = ArgumentCaptor.forClass(ProducerRecord.class); - verify(alertDataProducer).send(captor.capture()); - - ProducerRecord record = captor.getValue(); - assertEquals("alerts", record.topic()); - assertEquals(alert, record.value()); - } - - @Test - void testPollAlertsData() throws InterruptedException { - - Alert alert = new Alert(); - ConsumerRecords records = new ConsumerRecords<>(Collections.emptyMap()); - when(alertDataConsumer.poll(Duration.ofSeconds(1))).thenReturn(records); - - assertNull(kafkaCommonDataQueue.pollAlertsData()); - - records = new ConsumerRecords<>(Collections.singletonMap( - new TopicPartition("alerts", 0), - Collections.singletonList( - new ConsumerRecord<>("alerts", 0, 0L, 1L, alert) - ) - )); - when(alertDataConsumer.poll(Duration.ofSeconds(1))).thenReturn(records); - - assertEquals(alert, kafkaCommonDataQueue.pollAlertsData()); } @Test void testSendMetricsData() { + CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder() + .setMetrics("test metrics") + .build(); - CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder().build(); kafkaCommonDataQueue.sendMetricsData(metricsData); - ArgumentCaptor> captor = ArgumentCaptor.forClass(ProducerRecord.class); - verify(metricsDataProducer).send(captor.capture()); - - ProducerRecord record = captor.getValue(); - assertEquals("metrics", record.topic()); - assertEquals(metricsData, record.value()); + verify(metricsDataProducer).send(any()); } @Test void testPollMetricsDataToAlerter() throws InterruptedException { - - CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder().build(); - ConsumerRecords records = new ConsumerRecords<>(Collections.emptyMap()); - when(metricsDataToAlertConsumer.poll(Duration.ofSeconds(1))).thenReturn(records); - - assertNull(kafkaCommonDataQueue.pollMetricsDataToAlerter()); - - records = new ConsumerRecords<>(Collections.singletonMap( - new TopicPartition("metrics", 0), - Collections.singletonList( - new ConsumerRecord<>("metrics", 0, 0L, 1L, metricsData) - ) - )); - when(metricsDataToAlertConsumer.poll(Duration.ofSeconds(1))).thenReturn(records); - - assertEquals(metricsData, kafkaCommonDataQueue.pollMetricsDataToAlerter()); + // 创建一个测试数据 + CollectRep.MetricsData expectedData = CollectRep.MetricsData.newBuilder() + .setMetrics("test metrics") + .build(); + + // 创建一个包含测试数据的 ConsumerRecord + ConsumerRecord record = + new ConsumerRecord<>("metricsDataTopic", 0, 0L, 1L, expectedData); + + // 创建一个包含单个记录的 ConsumerRecords + Map>> recordsMap = + Collections.singletonMap( + new TopicPartition("metricsDataTopic", 0), + Collections.singletonList(record)); + ConsumerRecords records = new ConsumerRecords<>(recordsMap); + + when(metricsDataToAlertConsumer.poll(any(Duration.class))).thenReturn(records); + + CollectRep.MetricsData result = kafkaCommonDataQueue.pollMetricsDataToAlerter(); + assertEquals(expectedData, result); + + verify(metricsDataToAlertConsumer).commitAsync(); } @Test void testDestroy() throws Exception { - kafkaCommonDataQueue.destroy(); - - verify(metricsDataProducer).close(); - verify(alertDataProducer).close(); - verify(alertDataConsumer).close(); verify(metricsDataToAlertConsumer).close(); - verify(metricsDataToPersistentStorageConsumer).close(); - verify(metricsDataToRealTimeStorageConsumer).close(); + verify(metricsDataProducer).close(); + } + + private void setPrivateField(Object object, String fieldName, Object value) throws Exception { + Field field = object.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + field.set(object, value); } } diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueueTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueueTest.java index 8df98643aae..846b399515b 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueueTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/queue/impl/RedisCommonDataQueueTest.java @@ -19,26 +19,22 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.fasterxml.jackson.databind.ObjectMapper; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisCommands; import org.apache.hertzbeat.common.config.CommonProperties; -import org.apache.hertzbeat.common.entity.alerter.Alert; import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; +import org.apache.hertzbeat.common.serialize.RedisMetricsDataCodec; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.MockedStatic; -import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; /** @@ -49,27 +45,18 @@ class RedisCommonDataQueueTest { @Mock - private StatefulRedisConnection connection; + private StatefulRedisConnection connection; @Mock - private RedisCommands syncCommands; - - @Mock - private ObjectMapper objectMapper; - + private RedisCommands syncCommands; + private RedisClient redisClient; - private CommonProperties commonProperties; - private CommonProperties.RedisProperties redisProperties; - private RedisCommonDataQueue redisCommonDataQueue; @BeforeEach public void setUp() { - - MockitoAnnotations.openMocks(this); - redisClient = mock(RedisClient.class); commonProperties = mock(CommonProperties.class); redisProperties = mock(CommonProperties.RedisProperties.class); @@ -77,45 +64,26 @@ public void setUp() { when(commonProperties.getQueue()).thenReturn(dataQueueProperties); when(dataQueueProperties.getRedis()).thenReturn(redisProperties); - + when(redisProperties.getMetricsDataQueueNameToAlerter()).thenReturn("metricsDataQueueToAlerter"); when(redisProperties.getRedisHost()).thenReturn("localhost"); when(redisProperties.getRedisPort()).thenReturn(6379); - when(redisProperties.getMetricsDataQueueNameToAlerter()).thenReturn("metricsDataQueueToAlerter"); - when(redisProperties.getMetricsDataQueueNameToPersistentStorage()).thenReturn("metricsDataQueueToPersistentStorage"); - when(redisProperties.getMetricsDataQueueNameToRealTimeStorage()).thenReturn("metricsDataQueueToRealTimeStorage"); - when(redisProperties.getAlertsDataQueueName()).thenReturn("alertsDataQueue"); try (MockedStatic mockedRedisClient = mockStatic(RedisClient.class)) { - - mockedRedisClient.when(() -> RedisClient.create( - any(RedisURI.class)) - ).thenReturn(redisClient); - - when(redisClient.connect()).thenReturn(connection); + mockedRedisClient.when(() -> RedisClient.create(any(RedisURI.class))).thenReturn(redisClient); + when(redisClient.connect(any(RedisMetricsDataCodec.class))).thenReturn(connection); when(connection.sync()).thenReturn(syncCommands); redisCommonDataQueue = new RedisCommonDataQueue(commonProperties); } } - @Test - public void testPollAlertsData() throws Exception { - - String alertJson = "{\"id\":\"1\",\"content\":\"Test Alert\"}"; - Alert expectedAlert = Alert.builder().id(1L).content("Test Alert").build(); - - when(syncCommands.rpop(anyString())).thenReturn(alertJson); - Alert actualAlert = redisCommonDataQueue.pollAlertsData(); - assertEquals(expectedAlert, actualAlert); - } - @Test public void testPollMetricsDataToAlerter() throws Exception { + CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder() + .setMetrics("test metrics") + .build(); - CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder().setMetrics("test metrics").build(); - String metricsDataJson = "{\"metrics\":\"test metrics\"}"; - - when(syncCommands.rpop("metricsDataQueueToAlerter")).thenReturn(metricsDataJson); + when(syncCommands.rpop("metricsDataQueueToAlerter")).thenReturn(metricsData); CollectRep.MetricsData actualMetricsData = redisCommonDataQueue.pollMetricsDataToAlerter(); assertEquals(metricsData, actualMetricsData); @@ -123,37 +91,19 @@ public void testPollMetricsDataToAlerter() throws Exception { @Test public void testSendMetricsData() throws Exception { - CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder().setMetrics("test metrics").build(); - String metricsDataJson = ProtoJsonUtil.toJsonStr(metricsData); + CollectRep.MetricsData metricsData = CollectRep.MetricsData.newBuilder() + .setMetrics("test metrics") + .build(); redisCommonDataQueue.sendMetricsData(metricsData); - verify(syncCommands).lpush("metricsDataQueueToAlerter", metricsDataJson); - verify(syncCommands).lpush("metricsDataQueueToPersistentStorage", metricsDataJson); - verify(syncCommands).lpush("metricsDataQueueToRealTimeStorage", metricsDataJson); - } - - @SuppressWarnings("checkstyle:OperatorWrap") - @Test - public void testSendAlertsData() throws Exception { - - Alert alert = Alert.builder() - .content("test") - .build(); - String alertJson = "{\"id\":null,\"target\":null,\"alertDefineId\":null,\"priority\":0,\"content\":\"test\"," + - "\"status\":0,\"times\":null,\"firstAlarmTime\":null,\"lastAlarmTime\":null,\"triggerTimes\":null," + - "\"tags\":null,\"creator\":null,\"modifier\":null,\"gmtCreate\":null,\"gmtUpdate\":null}"; - redisCommonDataQueue.sendAlertsData(alert); - - verify(syncCommands).lpush("alertsDataQueue", alertJson); + verify(syncCommands).lpush("metricsDataQueueToAlerter", metricsData); } @Test public void testDestroy() { redisCommonDataQueue.destroy(); - verify(connection).close(); verify(redisClient).shutdown(); } - } diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializerTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializerTest.java index 031c8120a34..06f013f8c80 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializerTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataDeserializerTest.java @@ -19,7 +19,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; import java.util.Map; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.kafka.common.header.Headers; import org.junit.jupiter.api.BeforeEach; @@ -62,11 +67,20 @@ void testDeserializeWithBytes() { .setMetrics("someValue") .setApp("linux") .build(); - byte[] bytes = expectedMetricsData.toByteArray(); + byte[] bytes = null; + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = expectedMetricsData.toVectorSchemaRootAndRelease(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + bytes = out.toByteArray(); + } catch (IOException ignored) {} CollectRep.MetricsData actualMetricsData = deserializer.deserialize("", bytes); - assertEquals(expectedMetricsData, actualMetricsData); + assertEquals(expectedMetricsData.rowCount(), actualMetricsData.rowCount()); } @Test @@ -84,11 +98,20 @@ void testDeserializeWithHeaders() { .setMetrics("someValue") .setApp("linux") .build(); - byte[] bytes = expectedMetricsData.toByteArray(); + byte[] bytes = null; + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = expectedMetricsData.toVectorSchemaRootAndRelease(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + bytes = out.toByteArray(); + } catch (IOException ignored) {} CollectRep.MetricsData actualMetricsData = deserializer.deserialize("topic", headers, bytes); - assertEquals(expectedMetricsData, actualMetricsData); + assertEquals(expectedMetricsData.rowCount(), actualMetricsData.rowCount()); } @Test diff --git a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializerTest.java b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializerTest.java index f434774e8df..dbb7807201c 100644 --- a/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializerTest.java +++ b/hertzbeat-common/src/test/java/org/apache/hertzbeat/common/serialize/KafkaMetricsDataSerializerTest.java @@ -20,7 +20,12 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.channels.Channels; import java.util.Map; +import org.apache.arrow.vector.VectorSchemaRoot; +import org.apache.arrow.vector.ipc.ArrowStreamWriter; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.kafka.common.header.Headers; import org.junit.jupiter.api.BeforeEach; @@ -66,7 +71,6 @@ void testSerializeWithMetricsData() { byte[] bytes = serializer.serialize("", metricsData); assertNotNull(bytes); - assertArrayEquals(metricsData.toByteArray(), bytes); } @Test @@ -84,9 +88,17 @@ void testSerializeWithHeaders() { .setMetrics("someValue") .setApp("linux") .build(); - byte[] expectedBytes = metricsData.toByteArray(); + byte[] expectedBytes = null; + try (ByteArrayOutputStream out = new ByteArrayOutputStream(); + VectorSchemaRoot root = metricsData.toVectorSchemaRootAndRelease(); + ArrowStreamWriter writer = new ArrowStreamWriter(root, + null, Channels.newChannel(out))) { + writer.start(); + writer.writeBatch(); + writer.end(); + expectedBytes = out.toByteArray(); + } catch (IOException ignored) {} byte[] bytes = serializer.serialize("topic", headers, metricsData); - assertArrayEquals(expectedBytes, bytes); } diff --git a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java index 86099c02400..211dbb02dad 100644 --- a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java +++ b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java @@ -139,7 +139,7 @@ private CollectRep.MetricsData.Builder executeCollection(Metrics metricsDef) { // Execute collection CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); - sshCollect.collect(builder, 0, "ubuntu", metrics); + sshCollect.collect(builder, metrics); return builder; } @@ -181,4 +181,4 @@ private String generateRandomPassword() { } return password.toString(); } -} \ No newline at end of file +} diff --git a/hertzbeat-e2e/hertzbeat-collector-kafka-e2e/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectE2eTest.java b/hertzbeat-e2e/hertzbeat-collector-kafka-e2e/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectE2eTest.java index 6edf0615dfe..1439f9c426e 100644 --- a/hertzbeat-e2e/hertzbeat-collector-kafka-e2e/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectE2eTest.java +++ b/hertzbeat-e2e/hertzbeat-collector-kafka-e2e/src/test/java/org/apache/hertzbeat/collector/collect/kafka/KafkaCollectE2eTest.java @@ -121,14 +121,14 @@ public void testKafkaCollect() throws ExecutionException, InterruptedException, // Verify the information of topic list monitoring builder = CollectRep.MetricsData.newBuilder(); - kafkaCollect.collect(builder, 0, "kafka", metrics); + kafkaCollect.collect(builder, metrics); Assertions.assertTrue(builder.getValuesList().stream() .anyMatch(valueRow -> valueRow.getColumns(0).equals(topicName))); // Verify the information monitored by topic description builder = CollectRep.MetricsData.newBuilder(); kafkaProtocol.setCommand("topic-describe"); - kafkaCollect.collect(builder, 0, "kafka", metrics); + kafkaCollect.collect(builder, metrics); List topicDescribeList = builder.getValuesList(); CollectRep.ValueRow firstRow = topicDescribeList.get(0); Assertions.assertAll( diff --git a/hertzbeat-manager/pom.xml b/hertzbeat-manager/pom.xml index 8b459bb8665..ea316d41d6a 100644 --- a/hertzbeat-manager/pom.xml +++ b/hertzbeat-manager/pom.xml @@ -221,6 +221,15 @@ + + + org.apache.arrow + arrow-vector + + + org.apache.arrow + arrow-memory-netty + diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/component/sd/ServiceDiscoveryWorker.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/component/sd/ServiceDiscoveryWorker.java index 4c8d2f6da44..d01f78c6ea2 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/component/sd/ServiceDiscoveryWorker.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/component/sd/ServiceDiscoveryWorker.java @@ -22,13 +22,13 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.manager.CollectorMonitorBind; import org.apache.hertzbeat.common.entity.manager.Monitor; import org.apache.hertzbeat.common.entity.manager.MonitorBind; @@ -82,13 +82,10 @@ private class SdUpdateTask implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { - try { - final CollectRep.MetricsData serviceDiscoveryData = dataQueue.pollServiceDiscoveryData(); - if (Objects.isNull(serviceDiscoveryData)) { - continue; - } + try (final CollectRep.MetricsData metricsData = dataQueue.pollServiceDiscoveryData()) { - final Monitor mainMonitor = monitorDao.findMonitorsByIdIn(Sets.newHashSet(serviceDiscoveryData.getId())).get(0); + Long monitorId = metricsData.getId(); + final Monitor mainMonitor = monitorDao.findMonitorsByIdIn(Sets.newHashSet(monitorId)).get(0); mainMonitor.setTags(mainMonitor.getTags().stream().filter(tag -> tag.getType() != CommonConstants.TAG_TYPE_AUTO_GENERATE).collect(Collectors.toList())); // collector final Optional collectorBind = collectorMonitorBindDao.findCollectorMonitorBindByMonitorId(mainMonitor.getId()); @@ -97,7 +94,7 @@ public void run() { List mainMonitorParamList = paramDao.findParamsByMonitorId(mainMonitor.getId()); mainMonitorParamList = SdMonitorOperator.removeSdParam(mainMonitorParamList); - final Set subMonitorIdSet = monitorBindDao.findMonitorBindByBizIdAndType(serviceDiscoveryData.getId(), CommonConstants.MONITOR_BIND_TYPE_SD_SUB_MONITOR) + final Set subMonitorIdSet = monitorBindDao.findMonitorBindByBizIdAndType(monitorId, CommonConstants.MONITOR_BIND_TYPE_SD_SUB_MONITOR) .stream() .map(MonitorBind::getMonitorId) .collect(Collectors.toSet()); @@ -105,9 +102,14 @@ public void run() { ? Maps.newHashMap() : monitorDao.findMonitorsByIdIn(subMonitorIdSet).stream().collect(Collectors.groupingBy(Monitor::getHost)); - for (CollectRep.ValueRow row : serviceDiscoveryData.getValuesList()) { - final String host = row.getColumns(CommonConstants.SD_HOST_COLUMN); - final String port = row.getColumns(CommonConstants.SD_PORT_COLUMN); + RowWrapper rowWrapper = metricsData.readRow(); + + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + + + final String host = rowWrapper.nextCell().getValue(); + final String port = rowWrapper.nextCell().getValue(); final List monitorList = hostMonitorMap.get(host); if (CollectionUtils.isEmpty(monitorList)) { monitorService.addAndSaveMonitorJob(mainMonitor.clone(), SdMonitorOperator.cloneParamList(mainMonitorParamList), collector, @@ -116,7 +118,7 @@ public void run() { .detectedPort(port) .bizId(mainMonitor.getId()) .build(), null); - continue; + return; } for (Monitor monitor : monitorList) { @@ -155,4 +157,4 @@ public void run() { } } } -} \ No newline at end of file +} diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java index c53bd411e22..30d02a28df0 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/CollectorJobScheduler.java @@ -17,6 +17,7 @@ package org.apache.hertzbeat.manager.scheduler; +import com.google.protobuf.ByteString; import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; @@ -211,7 +212,7 @@ public void reBalanceCollectorAssignJobs() { ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.ISSUE_CYCLIC_TASK) - .setMsg(JsonUtil.toJson(job)) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(job))) .build(); this.manageServer.sendMsg(collectorName, message); } @@ -226,7 +227,7 @@ public void reBalanceCollectorAssignJobs() { ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.DELETE_CYCLIC_TASK) - .setMsg(JsonUtil.toJson(assignJobs.getRemovingJobs())) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(assignJobs.getRemovingJobs()))) .build(); this.manageServer.sendMsg(collectorName, message); } @@ -299,7 +300,7 @@ public List collectSyncJobData(Job job) { ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setType(ClusterMsg.MessageType.ISSUE_ONE_TIME_TASK) .setDirection(ClusterMsg.Direction.REQUEST) - .setMsg(JsonUtil.toJson(job)) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(job))) .build(); boolean result = this.manageServer.sendMsg(node.getIdentity(), message); @@ -342,7 +343,7 @@ public List collectSyncJobData(Job job, String collector ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setType(ClusterMsg.MessageType.ISSUE_ONE_TIME_TASK) .setDirection(ClusterMsg.Direction.REQUEST) - .setMsg(JsonUtil.toJson(job)) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(job))) .build(); boolean result = this.manageServer.sendMsg(node.getIdentity(), message); if (result) { @@ -394,7 +395,7 @@ public long addAsyncCollectJob(Job job, String collector) { ClusterMsg.Message message = ClusterMsg.Message.newBuilder() .setType(ClusterMsg.MessageType.ISSUE_CYCLIC_TASK) .setDirection(ClusterMsg.Direction.REQUEST) - .setMsg(JsonUtil.toJson(job)) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(job))) .build(); this.manageServer.sendMsg(node.getIdentity(), message); } @@ -437,7 +438,7 @@ public void cancelAsyncCollectJob(Long jobId) { ClusterMsg.Message deleteMessage = ClusterMsg.Message.newBuilder() .setType(ClusterMsg.MessageType.DELETE_CYCLIC_TASK) .setDirection(ClusterMsg.Direction.REQUEST) - .setMsg(JsonUtil.toJson(List.of(jobId))) + .setMsg(ByteString.copyFromUtf8(JsonUtil.toJson(List.of(jobId)))) .build(); this.manageServer.sendMsg(node.getIdentity(), deleteMessage); } diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicDataResponseProcessor.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicDataResponseProcessor.java index b881d3350f7..74d415c27c6 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicDataResponseProcessor.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicDataResponseProcessor.java @@ -18,12 +18,13 @@ package org.apache.hertzbeat.manager.scheduler.netty.process; import io.netty.channel.ChannelHandlerContext; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.entity.message.ClusterMsg; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.queue.CommonDataQueue; import org.apache.hertzbeat.common.support.SpringContextHolder; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; +import org.apache.hertzbeat.common.util.ArrowUtil; import org.apache.hertzbeat.remoting.netty.NettyRemotingProcessor; /** @@ -34,10 +35,11 @@ public class CollectCyclicDataResponseProcessor implements NettyRemotingProcesso @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { CommonDataQueue dataQueue = SpringContextHolder.getBean(CommonDataQueue.class); - CollectRep.MetricsData metricsData = (CollectRep.MetricsData) ProtoJsonUtil.toProtobuf(message.getMsg(), - CollectRep.MetricsData.newBuilder()); - if (metricsData != null) { - dataQueue.sendMetricsData(metricsData); + List metricsDataList = ArrowUtil.deserializeMetricsData(message.getMsg().toByteArray()); + for (CollectRep.MetricsData metricsData : metricsDataList) { + if (metricsData != null) { + dataQueue.sendMetricsData(metricsData); + } } return null; } diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicServiceDiscoveryDataResponseProcessor.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicServiceDiscoveryDataResponseProcessor.java index 0f01aec0264..d8e8a8c2480 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicServiceDiscoveryDataResponseProcessor.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectCyclicServiceDiscoveryDataResponseProcessor.java @@ -18,12 +18,13 @@ package org.apache.hertzbeat.manager.scheduler.netty.process; import io.netty.channel.ChannelHandlerContext; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.entity.message.ClusterMsg; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.queue.CommonDataQueue; import org.apache.hertzbeat.common.support.SpringContextHolder; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; +import org.apache.hertzbeat.common.util.ArrowUtil; import org.apache.hertzbeat.remoting.netty.NettyRemotingProcessor; /** @@ -34,11 +35,12 @@ public class CollectCyclicServiceDiscoveryDataResponseProcessor implements Netty @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { CommonDataQueue dataQueue = SpringContextHolder.getBean(CommonDataQueue.class); - CollectRep.MetricsData metricsData = (CollectRep.MetricsData) ProtoJsonUtil.toProtobuf(message.getMsg(), - CollectRep.MetricsData.newBuilder()); - if (metricsData != null) { - dataQueue.sendServiceDiscoveryData(metricsData); + List metricsDataList = ArrowUtil.deserializeMetricsData(message.getMsg().toByteArray()); + for (CollectRep.MetricsData metricsData : metricsDataList) { + if (metricsData != null) { + dataQueue.sendServiceDiscoveryData(metricsData); + } } return null; } -} \ No newline at end of file +} diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectOneTimeDataResponseProcessor.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectOneTimeDataResponseProcessor.java index eb00b7366ce..b9e064d7b45 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectOneTimeDataResponseProcessor.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectOneTimeDataResponseProcessor.java @@ -17,15 +17,12 @@ package org.apache.hertzbeat.manager.scheduler.netty.process; -import com.fasterxml.jackson.core.type.TypeReference; import io.netty.channel.ChannelHandlerContext; -import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.entity.message.ClusterMsg; import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.common.util.JsonUtil; -import org.apache.hertzbeat.common.util.ProtoJsonUtil; +import org.apache.hertzbeat.common.util.ArrowUtil; import org.apache.hertzbeat.manager.scheduler.netty.ManageServer; import org.apache.hertzbeat.remoting.netty.NettyRemotingProcessor; @@ -43,21 +40,8 @@ public CollectOneTimeDataResponseProcessor(ManageServer manageServer) { @Override public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { - TypeReference> typeReference = new TypeReference<>() { - }; - List jsonArr = JsonUtil.fromJson(message.getMsg(), typeReference); - if (jsonArr == null) { - log.error("netty receive response one time task data parse null error"); - return null; - } - List metricsDataList = new ArrayList<>(jsonArr.size()); - for (String str : jsonArr) { - CollectRep.MetricsData metricsData = (CollectRep.MetricsData) ProtoJsonUtil.toProtobuf(str, - CollectRep.MetricsData.newBuilder()); - if (metricsData != null) { - metricsDataList.add(metricsData); - } - } + + List metricsDataList = ArrowUtil.deserializeMetricsData(message.getMsg().toByteArray()); this.manageServer.getCollectorAndJobScheduler().collectSyncJobResponse(metricsDataList); return null; } diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectorOnlineProcessor.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectorOnlineProcessor.java index f48412232e8..0c54258632f 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectorOnlineProcessor.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/scheduler/netty/process/CollectorOnlineProcessor.java @@ -42,7 +42,8 @@ public CollectorOnlineProcessor(final ManageServer manageServer) { public ClusterMsg.Message handle(ChannelHandlerContext ctx, ClusterMsg.Message message) { String collector = message.getIdentity(); log.info("the collector {} actively requests to go online.", collector); - CollectorInfo collectorInfo = JsonUtil.fromJson(message.getMsg(), CollectorInfo.class); + String msg = message.getMsg().toStringUtf8(); + CollectorInfo collectorInfo = JsonUtil.fromJson(msg, CollectorInfo.class); if (collectorInfo != null && StringUtils.isBlank(collectorInfo.getIp())) { // fetch remote ip address InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java index 6f879c5bb70..e58300228cf 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java @@ -146,7 +146,7 @@ public Job getAutoGenerateDynamicDefine(Long monitorId) { Metrics tmpMetrics = job.getMetrics().get(0); List metricsList = new LinkedList<>(); for (CollectRep.MetricsData metricsData : metricsDataList) { - List fields = metricsData.getFieldsList().stream().map(item -> + List fields = metricsData.getFields().stream().map(item -> Metrics.Field.builder() .field(item.getName()) .type((byte) item.getType()) @@ -311,7 +311,7 @@ private void queryAppHierarchy(String lang, LinkedList hierarchies, J var hierarchyMetric = new Hierarchy(); hierarchyMetric.setValue(metricsData.getMetrics()); hierarchyMetric.setLabel(metricsData.getMetrics()); - List hierarchyFieldList = metricsData.getFieldsList().stream() + List hierarchyFieldList = metricsData.getFields().stream() .map(item -> { var hierarchyField = new Hierarchy(); hierarchyField.setValue(item.getName()); diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java index a12fbb5ae04..68001197317 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java @@ -138,9 +138,9 @@ public BulletinMetricsData buildBulletinMetricsData(Long id) { List> fieldsList; if (currentMetricsData != null) { - fieldsList = currentMetricsData.getValuesList().stream() + fieldsList = currentMetricsData.getValues().stream() .map(valueRow -> { - List fieldList = currentMetricsData.getFieldsList().stream() + List fieldList = currentMetricsData.getFields().stream() .map(field -> BulletinMetricsData.Field.builder() .key(field.getName()) .unit(field.getUnit()) diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java index bd74ba0a129..84272ebc0ea 100644 --- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java +++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java @@ -1059,7 +1059,7 @@ private void collectOneTimeSdData(Monitor monitor, String collector, Param sdPar monitor.setStatus(CommonConstants.MONITOR_DOWN_CODE); throw new MonitorDetectException(collectRep.get(0).getMsg()); } - + collectRep.forEach(CollectRep.MetricsData::close); } private void detectMonitorDirectly(Monitor monitor, List params, String collector) { @@ -1098,6 +1098,7 @@ private void detectMonitorDirectly(Monitor monitor, List params, String c monitor.setStatus(CommonConstants.MONITOR_DOWN_CODE); throw new MonitorDetectException(collectRep.get(0).getMsg()); } + collectRep.forEach(CollectRep.MetricsData::close); } private List filterTags(List tags) { diff --git a/hertzbeat-remoting/src/test/java/org/apache/hertzbeat/remoting/RemotingServiceTest.java b/hertzbeat-remoting/src/test/java/org/apache/hertzbeat/remoting/RemotingServiceTest.java index 6b9831e331c..4a852d99d8f 100644 --- a/hertzbeat-remoting/src/test/java/org/apache/hertzbeat/remoting/RemotingServiceTest.java +++ b/hertzbeat-remoting/src/test/java/org/apache/hertzbeat/remoting/RemotingServiceTest.java @@ -17,6 +17,7 @@ package org.apache.hertzbeat.remoting; +import com.google.protobuf.ByteString; import org.apache.hertzbeat.common.entity.message.ClusterMsg; import org.apache.hertzbeat.common.support.CommonThreadPool; import org.apache.hertzbeat.remoting.netty.NettyClientConfig; @@ -102,14 +103,14 @@ public void testSendMsg() { final String msg = "hello world"; this.remotingServer.registerProcessor(ClusterMsg.MessageType.HEARTBEAT, (ctx, message) -> { - Assertions.assertEquals(msg, message.getMsg()); + Assertions.assertEquals(msg, message.getMsg().toStringUtf8()); return null; }); ClusterMsg.Message request = ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.HEARTBEAT) - .setMsg(msg) + .setMsg(ByteString.copyFromUtf8(msg)) .build(); this.remotingClient.sendMsg(request); } @@ -120,26 +121,26 @@ public void testSendMsgSync() { final String responseMsg = "response"; this.remotingServer.registerProcessor(ClusterMsg.MessageType.HEARTBEAT, (ctx, message) -> { - Assertions.assertEquals(requestMsg, message.getMsg()); + Assertions.assertEquals(requestMsg, message.getMsg().toStringUtf8()); return ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.RESPONSE) - .setMsg(responseMsg) + .setMsg(ByteString.copyFromUtf8(responseMsg)) .build(); }); ClusterMsg.Message request = ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.HEARTBEAT) - .setMsg(requestMsg) + .setMsg(ByteString.copyFromUtf8(requestMsg)) .build(); ClusterMsg.Message response = this.remotingClient.sendMsgSync(request, 3000); - Assertions.assertEquals(responseMsg, response.getMsg()); + Assertions.assertEquals(responseMsg, response.getMsg().toStringUtf8()); } @Test public void testNettyHook() { this.remotingServer.registerHook(Lists.newArrayList( - (ctx, message) -> Assertions.assertEquals("hello world", message.getMsg()) + (ctx, message) -> Assertions.assertEquals("hello world", message.getMsg().toStringUtf8()) )); this.remotingServer.registerProcessor(ClusterMsg.MessageType.HEARTBEAT, (ctx, message) -> @@ -150,7 +151,7 @@ public void testNettyHook() { ClusterMsg.Message request = ClusterMsg.Message.newBuilder() .setDirection(ClusterMsg.Direction.REQUEST) .setType(ClusterMsg.MessageType.HEARTBEAT) - .setMsg("hello world") + .setMsg(ByteString.copyFromUtf8("hello world")) .build(); this.remotingClient.sendMsg(request); } diff --git a/hertzbeat-warehouse/pom.xml b/hertzbeat-warehouse/pom.xml index caa9d0c56de..517de16bd06 100644 --- a/hertzbeat-warehouse/pom.xml +++ b/hertzbeat-warehouse/pom.xml @@ -120,5 +120,13 @@ springdoc-openapi-starter-webmvc-ui provided + + org.apache.arrow + arrow-vector + + + org.apache.arrow + arrow-memory-netty + diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/impl/MetricsDataServiceImpl.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/impl/MetricsDataServiceImpl.java index 6c2690a3843..cbab3e991fd 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/impl/MetricsDataServiceImpl.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/service/impl/MetricsDataServiceImpl.java @@ -17,13 +17,15 @@ package org.apache.hertzbeat.warehouse.service.impl; -import java.util.HashMap; -import java.util.LinkedList; +import com.google.common.collect.Maps; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Field; import org.apache.hertzbeat.common.entity.dto.MetricsData; import org.apache.hertzbeat.common.entity.dto.MetricsHistoryData; @@ -39,6 +41,7 @@ /** * Metrics Data Service impl */ +@Slf4j @Service public class MetricsDataServiceImpl implements MetricsDataService { @@ -69,33 +72,37 @@ public MetricsData getMetricsData(Long monitorId, String metrics) { MetricsData.MetricsDataBuilder dataBuilder = MetricsData.builder(); dataBuilder.id(storageData.getId()).app(storageData.getApp()).metrics(storageData.getMetrics()) .time(storageData.getTime()); - List fields = storageData.getFieldsList().stream().map(tmpField -> - Field.builder().name(tmpField.getName()) - .type(Integer.valueOf(tmpField.getType()).byteValue()) - .label(tmpField.getLabel()) - .unit(tmpField.getUnit()) - .build()) - .collect(Collectors.toList()); - dataBuilder.fields(fields); - List valueRows = new LinkedList<>(); - for (CollectRep.ValueRow valueRow : storageData.getValuesList()) { - Map labels = new HashMap<>(8); - List values = new LinkedList<>(); - for (int i = 0; i < fields.size(); i++) { - Field field = fields.get(i); - String origin = valueRow.getColumns(i); - if (CommonConstants.NULL_VALUE.equals(origin)) { - values.add(new Value()); - } else { - values.add(new Value(origin)); - if (field.getLabel()) { - labels.put(field.getName(), origin); + dataBuilder.fields(storageData.getFields().stream() + .map(field -> Field.builder().name(field.getName()) + .type((byte) field.getType()) + .label(field.getLabel()) + .unit(field.getUnit()) + .build()) + .toList()); + + List valueRows = new ArrayList<>(); + if (storageData.rowCount() > 0) { + RowWrapper rowWrapper = storageData.readRow(); + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + Map labels = Maps.newHashMapWithExpectedSize(8); + List values = new ArrayList<>(); + rowWrapper.cellStream().forEach(cell -> { + String origin = cell.getValue(); + + if (CommonConstants.NULL_VALUE.equals(origin)) { + values.add(new Value()); + } else { + values.add(new Value(origin)); + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL)) { + labels.put(cell.getField().getName(), origin); + } } - } + }); + valueRows.add(ValueRow.builder().labels(labels).values(values).build()); } - valueRows.add(ValueRow.builder().labels(labels).values(values).build()); + dataBuilder.valueRows(valueRows); } - dataBuilder.valueRows(valueRows); return dataBuilder.build(); } diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java index 5d633df3b2d..1e5d79a56d0 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/DataStorageDispatch.java @@ -54,28 +54,6 @@ public DataStorageDispatch(CommonDataQueue commonDataQueue, this.historyDataWriter = historyDataWriter; this.pluginRunner = pluginRunner; startPersistentDataStorage(); - startRealTimeDataStorage(); - } - - private void startRealTimeDataStorage() { - Runnable runnable = () -> { - Thread.currentThread().setName("warehouse-realtime-data-storage"); - while (!Thread.currentThread().isInterrupted()) { - try { - CollectRep.MetricsData metricsData = commonDataQueue.pollMetricsDataToRealTimeStorage(); - if (metricsData == null) { - continue; - } - realTimeDataWriter.saveData(metricsData); - pluginRunner.pluginExecute(PostCollectPlugin.class, ((postCollectPlugin, pluginContext) -> postCollectPlugin.execute(metricsData, pluginContext))); - } catch (InterruptedException interruptedException) { - Thread.currentThread().interrupt(); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - }; - workerPool.executeJob(runnable); } protected void startPersistentDataStorage() { @@ -83,11 +61,13 @@ protected void startPersistentDataStorage() { Thread.currentThread().setName("warehouse-persistent-data-storage"); while (!Thread.currentThread().isInterrupted()) { try { - CollectRep.MetricsData metricsData = commonDataQueue.pollMetricsDataToPersistentStorage(); + CollectRep.MetricsData metricsData = commonDataQueue.pollMetricsDataToStorage(); if (metricsData == null) { continue; } historyDataWriter.ifPresent(dataWriter -> dataWriter.saveData(metricsData)); + pluginRunner.pluginExecute(PostCollectPlugin.class, ((postCollectPlugin, pluginContext) -> postCollectPlugin.execute(metricsData, pluginContext))); + realTimeDataWriter.saveData(metricsData); } catch (InterruptedException interruptedException) { Thread.currentThread().interrupt(); } catch (Exception e) { diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java index df99916e1f2..1847840421f 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/greptime/GreptimeDbDataStorage.java @@ -26,6 +26,7 @@ import io.greptime.models.TableSchema; import io.greptime.models.WriteOk; import io.greptime.options.GreptimeOptions; + import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URI; @@ -42,10 +43,14 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.math.NumberUtils; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.JsonUtil; @@ -116,7 +121,7 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse greptime] flush metrics data {} {}is null, ignore.", metricsData.getId(), metricsData.getMetrics()); return; } @@ -126,10 +131,8 @@ public void saveData(CollectRep.MetricsData metricsData) { tableSchemaBuilder.addTag("instance", DataType.String) .addTimestamp("ts", DataType.TimestampMillisecond); - - List fieldsList = metricsData.getFieldsList(); - for (CollectRep.Field field : fieldsList) { - // handle field type + List fields = metricsData.getFields(); + fields.forEach(field -> { if (field.getLabel()) { tableSchemaBuilder.addTag(field.getName(), DataType.String); } else { @@ -139,45 +142,52 @@ public void saveData(CollectRep.MetricsData metricsData) { tableSchemaBuilder.addField(field.getName(), DataType.String); } } - } + }); Table table = Table.from(tableSchemaBuilder.build()); - try { - long now = System.currentTimeMillis(); - Object[] values = new Object[2 + fieldsList.size()]; - values[0] = monitorId; - values[1] = now; - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - for (int i = 0; i < fieldsList.size(); i++) { - if (!CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { - CollectRep.Field field = fieldsList.get(i); - if (field.getLabel()) { - values[2 + i] = valueRow.getColumns(i); - } else { - if (field.getType() == CommonConstants.TYPE_NUMBER) { - values[2 + i] = Double.parseDouble(valueRow.getColumns(i)); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - values[2 + i] = valueRow.getColumns(i); - } - } - } else { - values[2 + i] = null; - } + long now = System.currentTimeMillis(); + Object[] values = new Object[2 + fields.size()]; + values[0] = monitorId; + values[1] = now; + RowWrapper rowWrapper = metricsData.readRow(); + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + + AtomicInteger index = new AtomicInteger(-1); + rowWrapper.cellStream().forEach(cell -> { + index.getAndIncrement(); + + if (CommonConstants.NULL_VALUE.equals(cell.getValue())) { + values[2 + index.get()] = null; + return; } - 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"); + + Boolean label = cell.getMetadataAsBoolean(MetricDataConstants.LABEL); + Byte type = cell.getMetadataAsByte(MetricDataConstants.TYPE); + + if (label) { + values[2 + index.get()] = cell.getValue(); } else { - log.warn("[warehouse greptime]--Write failed: {}", result.getErr()); + if (type == CommonConstants.TYPE_NUMBER) { + values[2 + index.get()] = Double.parseDouble(cell.getValue()); + } else if (type == CommonConstants.TYPE_STRING) { + values[2 + index.get()] = cell.getValue(); + } } - } catch (Throwable throwable) { - log.error("[warehouse greptime]--Error occurred: {}", throwable.getMessage()); + }); + + 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 (Exception e) { - log.error("[warehouse greptime]--Error: {}", e.getMessage(), e); + } catch (Throwable throwable) { + log.error("[warehouse greptime]--Error occurred: {}", throwable.getMessage()); } } diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java index 93601035a54..b5b4fb9425f 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java @@ -34,11 +34,15 @@ import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; + +import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import okhttp3.ConnectionPool; import okhttp3.OkHttpClient; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; import org.apache.hertzbeat.common.constants.NetworkConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.JsonUtil; @@ -148,40 +152,50 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse influxdb] flush metrics data {} is null, ignore.", metricsData.getId()); return; } - List fieldsList = metricsData.getFieldsList(); String table = this.generateTable(metricsData.getApp(), metricsData.getMetrics(), metricsData.getId()); - List points = new ArrayList<>(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - Point.Builder builder = Point.measurement(table); - builder.time(metricsData.getTime(), TimeUnit.MILLISECONDS); - Map labels = new HashMap<>(8); - for (int i = 0; i < fieldsList.size(); i++) { - CollectRep.Field field = fieldsList.get(i); - if (!CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { - if (field.getType() == CommonConstants.TYPE_NUMBER) { - builder.addField(field.getName(), Double.parseDouble(valueRow.getColumns(i))); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - builder.addField(field.getName(), valueRow.getColumns(i)); + + try { + RowWrapper rowWrapper = metricsData.readRow(); + + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + Point.Builder builder = Point.measurement(table); + builder.time(metricsData.getTime(), TimeUnit.MILLISECONDS); + Map labels = Maps.newHashMapWithExpectedSize(8); + + rowWrapper.cellStream().forEach(cell -> { + if (CommonConstants.NULL_VALUE.equals(cell.getValue())) { + builder.addField(cell.getField().getName(), ""); + return; } - if (field.getLabel()) { - labels.put(field.getName(), valueRow.getColumns(i)); + + Byte type = cell.getMetadataAsByte(MetricDataConstants.TYPE); + if (type == CommonConstants.TYPE_NUMBER) { + builder.addField(cell.getField().getName(), Double.parseDouble(cell.getValue())); + } else if (type == CommonConstants.TYPE_STRING) { + builder.addField(cell.getField().getName(), cell.getValue()); } - } else { - builder.addField(field.getName(), ""); - } + + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL)) { + labels.put(cell.getField().getName(), cell.getValue()); + } + }); + builder.tag("instance", JsonUtil.toJson(labels)); + points.add(builder.build()); } - builder.tag("instance", JsonUtil.toJson(labels)); - points.add(builder.build()); + + BatchPoints.Builder builder = BatchPoints.database(DATABASE); + builder.points(points); + this.influxDb.write(builder.build()); + } catch (Exception e) { + log.error("[warehouse influxdb]--Error: {}", e.getMessage(), e); } - BatchPoints.Builder builder = BatchPoints.database(DATABASE); - builder.points(points); - this.influxDb.write(builder.build()); } @Override diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java index 29727c34d25..0e553f4964e 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/iotdb/IotDbDataStorage.java @@ -24,8 +24,12 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; + +import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.JsonUtil; @@ -174,38 +178,43 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse iotdb] flush metrics data {} is null, ignore.", metricsData.getId()); return; } List schemaList = new ArrayList<>(); + Map tabletMap = Maps.newHashMapWithExpectedSize(8); // todo Measurement schema is a data structure that is generated on the client side, and encoding and compression have no effect - List fieldsList = metricsData.getFieldsList(); - for (CollectRep.Field field : fieldsList) { - MeasurementSchema schema = new MeasurementSchema(); - schema.setMeasurementId(field.getName()); - // handle field type - if (field.getType() == CommonConstants.TYPE_NUMBER) { - schema.setType(TSDataType.DOUBLE); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - schema.setType(TSDataType.TEXT); - } else { - continue; - } - schemaList.add(schema); - } - Map tabletMap = new HashMap<>(8); try { + metricsData.getFields().forEach(field -> { + MeasurementSchema schema = new MeasurementSchema(); + schema.setMeasurementId(field.getName()); + byte type = (byte) field.getType(); + + // handle field type + if (type == CommonConstants.TYPE_NUMBER) { + schema.setType(TSDataType.DOUBLE); + } else if (type == CommonConstants.TYPE_STRING) { + schema.setType(TSDataType.TEXT); + } + schemaList.add(schema); + }); + long now = System.currentTimeMillis(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - Map labels = new HashMap<>(8); - for (int i = 0; i < fieldsList.size(); i++) { - CollectRep.Field field = fieldsList.get(i); - if (field.getLabel() && !CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { - labels.put(field.getName(), valueRow.getColumns(i)); + RowWrapper rowWrapper = metricsData.readRow(); + + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + + Map labels = Maps.newHashMapWithExpectedSize(8); + rowWrapper.cellStream().forEach(cell -> { + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL) && !CommonConstants.NULL_VALUE.equals(cell.getValue())) { + labels.put(cell.getField().getName(), cell.getValue()); } - } + }); + + String label = JsonUtil.toJson(labels); String deviceId = getDeviceId(metricsData.getApp(), metricsData.getMetrics(), metricsData.getId(), label, false); if (tabletMap.containsKey(label)) { @@ -217,23 +226,28 @@ public void saveData(CollectRep.MetricsData metricsData) { Tablet tablet = tabletMap.get(label); int rowIndex = tablet.rowSize++; tablet.addTimestamp(rowIndex, now); - for (int i = 0; i < fieldsList.size(); i++) { - CollectRep.Field field = fieldsList.get(i); - if (!CommonConstants.NULL_VALUE.equals(valueRow.getColumns(i))) { - if (field.getType() == CommonConstants.TYPE_NUMBER) { - tablet.addValue(field.getName(), rowIndex, Double.parseDouble(valueRow.getColumns(i))); - } else if (field.getType() == CommonConstants.TYPE_STRING) { - tablet.addValue(field.getName(), rowIndex, valueRow.getColumns(i)); - } - } else { - tablet.addValue(field.getName(), rowIndex, null); + + + rowWrapper.cellStream().forEach(cell -> { + if (CommonConstants.NULL_VALUE.equals(cell.getValue())) { + tablet.addValue(cell.getField().getName(), rowIndex, null); + return; } - } + + Byte type = cell.getMetadataAsByte(MetricDataConstants.TYPE); + if (type == CommonConstants.TYPE_NUMBER) { + tablet.addValue(cell.getField().getName(), rowIndex, Double.parseDouble(cell.getValue())); + } else if (type == CommonConstants.TYPE_STRING) { + tablet.addValue(cell.getField().getName(), rowIndex, cell.getValue()); + } + }); } + + for (Tablet tablet : tabletMap.values()) { this.sessionPool.insertTablet(tablet, true); } - } catch (StatementExecutionException | IoTDBConnectionException e) { + } catch (Exception e) { log.error(e.getMessage(), e); } finally { for (Tablet tablet : tabletMap.values()) { @@ -241,6 +255,7 @@ public void saveData(CollectRep.MetricsData metricsData) { } tabletMap.clear(); } + } @Override diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java index 9ab515754c2..abda3eb1378 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/jpa/JpaDatabaseDataStorage.java @@ -17,8 +17,11 @@ package org.apache.hertzbeat.warehouse.store.history.jpa; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.util.concurrent.ThreadFactoryBuilder; import jakarta.persistence.criteria.Predicate; + import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Duration; @@ -37,6 +40,9 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.ArrowCell; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.entity.warehouse.History; @@ -119,69 +125,75 @@ public void saveData(CollectRep.MetricsData metricsData) { if (metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse jpa] flush metrics data {} is null, ignore.", metricsData.getId()); return; } String monitorType = metricsData.getApp(); String metrics = metricsData.getMetrics(); - List fieldsList = metricsData.getFieldsList(); - try { - List allHistoryList = new LinkedList<>(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - List singleHistoryList = new LinkedList<>(); - Map labels = new HashMap<>(8); - for (int i = 0; i < fieldsList.size(); i++) { - History.HistoryBuilder historyBuilder = History.builder() - .monitorId(metricsData.getId()) - .app(monitorType) - .metrics(metrics) - .time(metricsData.getTime()); - final CollectRep.Field field = fieldsList.get(i); - final int fieldType = field.getType(); - final String fieldName = field.getName(); - final String columnValue = valueRow.getColumns(i); - historyBuilder.metric(fieldName); - - if (CommonConstants.NULL_VALUE.equals(columnValue)) { - switch (fieldType) { - case CommonConstants.TYPE_NUMBER -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER) - .dou(null); - case CommonConstants.TYPE_STRING -> historyBuilder.metricType(CommonConstants.TYPE_STRING) - .str(null); - case CommonConstants.TYPE_TIME -> historyBuilder.metricType(CommonConstants.TYPE_TIME) - .int32(null); - default -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER); - } - } else { - switch (fieldType) { - case CommonConstants.TYPE_NUMBER -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER) - .dou(Double.parseDouble(columnValue)); - case CommonConstants.TYPE_STRING -> historyBuilder.metricType(CommonConstants.TYPE_STRING) - .str(formatStrValue(columnValue)); - case CommonConstants.TYPE_TIME -> historyBuilder.metricType(CommonConstants.TYPE_TIME) - .int32(Integer.parseInt(columnValue)); - default -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER) - .dou(Double.parseDouble(columnValue)); - } + try { + List allHistoryList = Lists.newArrayList(); + Map labels = Maps.newHashMapWithExpectedSize(8); + RowWrapper rowWrapper = metricsData.readRow(); - if (field.getLabel()) { - labels.put(fieldName, columnValue); - } - } + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + List singleHistoryList = new ArrayList<>(); - singleHistoryList.add(historyBuilder.build()); - } + rowWrapper.cellStream().forEach(cell -> singleHistoryList.add(buildHistory(metricsData, cell, monitorType, metrics, labels))); singleHistoryList.forEach(history -> history.setInstance(JsonUtil.toJson(labels))); + allHistoryList.addAll(singleHistoryList); } + historyDao.saveAll(allHistoryList); } catch (Exception e) { log.error(e.getMessage(), e); } } + private History buildHistory(CollectRep.MetricsData metricsData, ArrowCell cell, String monitorType, String metrics, Map labels) { + History.HistoryBuilder historyBuilder = History.builder() + .monitorId(metricsData.getId()) + .app(monitorType) + .metrics(metrics) + .time(metricsData.getTime()) + .metric(cell.getField().getName()); + + final String columnValue = cell.getValue(); + final int fieldType = cell.getMetadataAsInteger(MetricDataConstants.TYPE); + if (CommonConstants.NULL_VALUE.equals(columnValue)) { + switch (fieldType) { + case CommonConstants.TYPE_NUMBER -> + historyBuilder.metricType(CommonConstants.TYPE_NUMBER) + .dou(null); + case CommonConstants.TYPE_STRING -> + historyBuilder.metricType(CommonConstants.TYPE_STRING) + .str(null); + case CommonConstants.TYPE_TIME -> historyBuilder.metricType(CommonConstants.TYPE_TIME) + .int32(null); + default -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER); + } + } else { + switch (fieldType) { + case CommonConstants.TYPE_STRING -> + historyBuilder.metricType(CommonConstants.TYPE_STRING) + .str(formatStrValue(columnValue)); + case CommonConstants.TYPE_TIME -> historyBuilder.metricType(CommonConstants.TYPE_TIME) + .int32(Integer.parseInt(columnValue)); + default -> historyBuilder.metricType(CommonConstants.TYPE_NUMBER) + .dou(Double.parseDouble(columnValue)); + } + + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL)) { + labels.put(cell.getField().getName(), columnValue); + } + } + + return historyBuilder.build(); + } + @Override public Map> getHistoryMetricData(Long monitorId, String app, String metrics, String metric, String label, String history) { Map> instanceValuesMap = new HashMap<>(8); diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java index 2bab22f79e5..bc3e590e216 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/tdengine/TdEngineDataStorage.java @@ -17,9 +17,11 @@ package org.apache.hertzbeat.warehouse.store.history.tdengine; +import com.google.common.collect.Maps; import com.taosdata.jdbc.TSDBDriver; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; + import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Connection; @@ -34,11 +36,14 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.atomic.AtomicInteger; 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.constants.MetricDataConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.JsonUtil; @@ -167,7 +172,7 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { if (log.isInfoEnabled()) { log.info("[warehouse tdengine] flush metrics data {} is null, ignore.", metricsData.getId()); @@ -175,122 +180,138 @@ public void saveData(CollectRep.MetricsData metricsData) { return; } + String monitorId = String.valueOf(metricsData.getId()); String superTable = metricsData.getApp() + "_" + metricsData.getMetrics() + "_super"; String table = metricsData.getApp() + "_" + metricsData.getMetrics() + "_" + monitorId; - List fields = metricsData.getFieldsList(); StringBuilder sqlBuffer = new StringBuilder(); int i = 0; - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - StringBuilder sqlRowBuffer = new StringBuilder("("); - sqlRowBuffer.append(metricsData.getTime() + i++).append(", "); - Map labels = new HashMap<>(8); - sqlRowBuffer.append("'").append("%s").append("', "); - for (int index = 0; index < fields.size(); index++) { - CollectRep.Field field = fields.get(index); - String value = valueRow.getColumns(index); - final int fieldType; - - if ((fieldType = field.getType()) == CommonConstants.TYPE_NUMBER || fieldType == CommonConstants.TYPE_TIME) { - // number data - if (CommonConstants.NULL_VALUE.equals(value)) { - sqlRowBuffer.append("NULL"); - } else { - try { - double number = Double.parseDouble(value); - sqlRowBuffer.append(number); - } catch (Exception e) { - if (log.isWarnEnabled()) { - log.warn(e.getMessage()); - } + try { + RowWrapper rowWrapper = metricsData.readRow(); + + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + StringBuilder sqlRowBuffer = new StringBuilder("("); + sqlRowBuffer.append(metricsData.getTime() + i++).append(", "); + Map labels = Maps.newHashMapWithExpectedSize(8); + sqlRowBuffer.append("'").append("%s").append("', "); + + + AtomicInteger index = new AtomicInteger(-1); + int fieldMaxSize = rowWrapper.getFieldList().size(); + rowWrapper.cellStream().forEach(cell -> { + index.getAndIncrement(); + String value = cell.getValue(); + final int fieldType; + if ((fieldType = cell.getMetadataAsByte(MetricDataConstants.TYPE)) == CommonConstants.TYPE_NUMBER || fieldType == CommonConstants.TYPE_TIME) { + // number data + if (CommonConstants.NULL_VALUE.equals(value)) { sqlRowBuffer.append("NULL"); + } else { + try { + double number = Double.parseDouble(value); + sqlRowBuffer.append(number); + } catch (Exception e) { + + if (log.isWarnEnabled()) { + log.warn(e.getMessage()); + } + + sqlRowBuffer.append("NULL"); + } } - } - } else { - // string - if (CommonConstants.NULL_VALUE.equals(value)) { - sqlRowBuffer.append("NULL"); } else { - sqlRowBuffer.append("'").append(formatStringValue(value)).append("'"); + // string + if (CommonConstants.NULL_VALUE.equals(value)) { + sqlRowBuffer.append("NULL"); + } else { + sqlRowBuffer.append("'").append(formatStringValue(value)).append("'"); + } } - } - if (field.getLabel() && !CommonConstants.NULL_VALUE.equals(value)) { - labels.put(field.getName(), formatStringValue(value)); - } - if (index != fields.size() - 1) { - sqlRowBuffer.append(", "); - } + + if (cell.getMetadataAsBoolean(MetricDataConstants.LABEL) && !CommonConstants.NULL_VALUE.equals(value)) { + labels.put(cell.getField().getName(), formatStringValue(value)); + } + if (index.get() != fieldMaxSize - 1) { + sqlRowBuffer.append(", "); + } + }); + + sqlRowBuffer.append(")"); + sqlBuffer.append(" ").append(String.format(sqlRowBuffer.toString(), formatStringValue(JsonUtil.toJson(labels)))); } - sqlRowBuffer.append(")"); - sqlBuffer.append(" ").append(String.format(sqlRowBuffer.toString(), formatStringValue(JsonUtil.toJson(labels)))); - } - String insertDataSql = String.format(INSERT_TABLE_DATA_SQL, table, superTable, monitorId, sqlBuffer); - if (log.isDebugEnabled()) { - log.debug(insertDataSql); - } + String insertDataSql = String.format(INSERT_TABLE_DATA_SQL, table, superTable, monitorId, sqlBuffer); - Connection connection = null; - Statement statement = null; - try { - connection = hikariDataSource.getConnection(); - statement = connection.createStatement(); - statement.execute(insertDataSql); - connection.close(); - } catch (Exception e) { - if (e.getMessage().contains(NO_SUPER_TABLE_ERROR)) { - // stable not exists, create it - StringBuilder fieldSqlBuilder = new StringBuilder("("); - fieldSqlBuilder.append("ts TIMESTAMP, "); - fieldSqlBuilder.append("instance NCHAR(").append(tableStrColumnDefineMaxLength).append("), "); - for (int index = 0; index < fields.size(); index++) { - CollectRep.Field field = fields.get(index); - String fieldName = field.getName(); - final int fieldType; + if (log.isDebugEnabled()) { + log.debug(insertDataSql); + } - if ((fieldType = field.getType()) == CommonConstants.TYPE_NUMBER || fieldType == CommonConstants.TYPE_TIME) { - fieldSqlBuilder.append("`").append(fieldName).append("` ").append("DOUBLE"); - } else { - fieldSqlBuilder.append("`").append(fieldName).append("` ").append("NCHAR(") - .append(tableStrColumnDefineMaxLength).append(")"); - } - if (index != fields.size() - 1) { - fieldSqlBuilder.append(", "); + Connection connection = null; + Statement statement = null; + try { + connection = hikariDataSource.getConnection(); + statement = connection.createStatement(); + statement.execute(insertDataSql); + connection.close(); + } catch (Exception e) { + if (e.getMessage().contains(NO_SUPER_TABLE_ERROR)) { + // stable not exists, create it + StringBuilder fieldSqlBuilder = new StringBuilder("("); + fieldSqlBuilder.append("ts TIMESTAMP, "); + fieldSqlBuilder.append("instance NCHAR(").append(tableStrColumnDefineMaxLength).append("), "); + for (int index = 0; index < metricsData.getFields().size(); index++) { + CollectRep.Field field = metricsData.getFields().get(index); + String fieldName = field.getName(); + final int fieldType = field.getType(); + + if (fieldType == CommonConstants.TYPE_NUMBER || fieldType == CommonConstants.TYPE_TIME) { + fieldSqlBuilder.append("`").append(fieldName).append("` ").append("DOUBLE"); + } else { + fieldSqlBuilder.append("`").append(fieldName).append("` ").append("NCHAR(") + .append(tableStrColumnDefineMaxLength).append(")"); + } + if (index != metricsData.getFields().size() - 1) { + fieldSqlBuilder.append(", "); + } } - } - fieldSqlBuilder.append(")"); - String createTableSql = String.format(CREATE_SUPER_TABLE_SQL, superTable, fieldSqlBuilder); - try { - assert statement != null; + fieldSqlBuilder.append(")"); + String createTableSql = String.format(CREATE_SUPER_TABLE_SQL, superTable, fieldSqlBuilder); + try { + assert statement != null; - if (log.isInfoEnabled()) { - log.info("[tdengine-data]: create {} use sql: {}.", superTable, createTableSql); - } + if (log.isInfoEnabled()) { + log.info("[tdengine-data]: create {} use sql: {}.", superTable, createTableSql); + } - statement.execute(createTableSql); - statement.execute(insertDataSql); - } catch (Exception createTableException) { + statement.execute(createTableSql); + statement.execute(insertDataSql); + } catch (Exception createTableException) { + if (log.isErrorEnabled()) { + log.error(e.getMessage(), createTableException); + } + } + } else { if (log.isErrorEnabled()) { - log.error(e.getMessage(), createTableException); + log.error(e.getMessage()); } } - } else { - if (log.isErrorEnabled()) { - log.error(e.getMessage()); - } - } - } finally { - try { - assert connection != null; - connection.close(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error(e.getMessage()); + } finally { + try { + assert connection != null; + connection.close(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error(e.getMessage()); + } } } + } catch (Exception e) { + log.error("[warehouse tdEngine]--Error: {}", e.getMessage(), e); } + } private String formatStringValue(String value) { diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java index 6e1a298ed1e..8f4cc7b53e5 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsClusterDataStorage.java @@ -18,6 +18,7 @@ package org.apache.hertzbeat.warehouse.store.history.vm; import com.fasterxml.jackson.databind.JsonNode; + import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URI; @@ -32,6 +33,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; + +import com.google.common.collect.Maps; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -40,8 +43,10 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.math.NumberUtils; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; import org.apache.hertzbeat.common.constants.NetworkConstants; import org.apache.hertzbeat.common.constants.SignConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.CommonUtil; @@ -124,97 +129,116 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse victoria-metrics] flush metrics data {} {} {} is null, ignore.", metricsData.getId(), metricsData.getApp(), metricsData.getMetrics()); return; } - Map defaultLabels = new HashMap<>(8); + Map defaultLabels = Maps.newHashMapWithExpectedSize(8); defaultLabels.put(MONITOR_METRICS_KEY, metricsData.getMetrics()); - boolean isPrometheusAuto = false; + boolean isPrometheusAuto; if (metricsData.getApp().startsWith(CommonConstants.PROMETHEUS_APP_PREFIX)) { isPrometheusAuto = true; defaultLabels.remove(MONITOR_METRICS_KEY); defaultLabels.put(LABEL_KEY_JOB, metricsData.getApp() .substring(CommonConstants.PROMETHEUS_APP_PREFIX.length())); } else { + isPrometheusAuto = false; defaultLabels.put(LABEL_KEY_JOB, metricsData.getApp()); } defaultLabels.put(LABEL_KEY_INSTANCE, String.valueOf(metricsData.getId())); - List fields = metricsData.getFieldsList(); - Long[] timestamp = new Long[]{metricsData.getTime()}; - Map fieldsValue = new HashMap<>(fields.size()); - Map labels = new HashMap<>(fields.size()); - List contentList = new LinkedList<>(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - fieldsValue.clear(); - labels.clear(); - for (int index = 0; index < fields.size(); index++) { - CollectRep.Field field = fields.get(index); - String value = valueRow.getColumns(index); - if (field.getType() == CommonConstants.TYPE_NUMBER && !field.getLabel()) { - // number metrics data - if (!CommonConstants.NULL_VALUE.equals(value)) { - fieldsValue.put(field.getName(), CommonUtil.parseStrDouble(value)); - } - } - // label - if (field.getLabel() && !CommonConstants.NULL_VALUE.equals(value)) { - labels.put(field.getName(), value); - } - } - for (Map.Entry entry : fieldsValue.entrySet()) { - if (entry.getKey() != null && entry.getValue() != null) { - try { - labels.putAll(defaultLabels); - String labelName = isPrometheusAuto ? metricsData.getMetrics() - : metricsData.getMetrics() + SPILT + entry.getKey(); - labels.put(LABEL_KEY_NAME, labelName); - if (!isPrometheusAuto) { - labels.put(MONITOR_METRIC_KEY, entry.getKey()); + + try { + List fieldList = metricsData.getFields(); + Long[] timestamp = new Long[]{metricsData.getTime()}; + Map fieldsValue = Maps.newHashMapWithExpectedSize(fieldList.size()); + Map labels = Maps.newHashMapWithExpectedSize(fieldList.size()); + List contentList = new LinkedList<>(); + + + RowWrapper rowWrapper = metricsData.readRow(); + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + fieldsValue.clear(); + labels.clear(); + + rowWrapper.cellStream().forEach(cell -> { + String value = cell.getValue(); + Byte type = cell.getMetadataAsByte(MetricDataConstants.TYPE); + Boolean label = cell.getMetadataAsBoolean(MetricDataConstants.LABEL); + + if (type == CommonConstants.TYPE_NUMBER && !label) { + // number metrics data + if (!CommonConstants.NULL_VALUE.equals(value)) { + fieldsValue.put(cell.getField().getName(), CommonUtil.parseStrDouble(value)); } - VictoriaMetricsDataStorage.VictoriaMetricsContent content = VictoriaMetricsDataStorage.VictoriaMetricsContent.builder() - .metric(new HashMap<>(labels)) - .values(new Double[]{entry.getValue()}) - .timestamps(timestamp) - .build(); - contentList.add(content); - } catch (Exception e) { - log.error("combine metrics data error: {}.", e.getMessage(), e); + } + // label + if (label && !CommonConstants.NULL_VALUE.equals(value)) { + labels.put(cell.getField().getName(), value); } - } - } - } - if (contentList.isEmpty()) { - log.info("[warehouse victoria-metrics] flush metrics data {} is empty, ignore.", metricsData.getId()); - return; - } - try { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - if (StringUtils.hasText(vmInsertProps.username()) - && StringUtils.hasText(vmInsertProps.password())) { - String authStr = vmInsertProps.username() + ":" + vmInsertProps.password(); - String encodedAuth = new String(Base64.encodeBase64(authStr.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8); - headers.add(HttpHeaders.AUTHORIZATION, NetworkConstants.BASIC + SignConstants.BLANK + encodedAuth); + for (Map.Entry entry : fieldsValue.entrySet()) { + if (entry.getKey() != null && entry.getValue() != null) { + try { + labels.putAll(defaultLabels); + String labelName = isPrometheusAuto ? metricsData.getMetrics() + : metricsData.getMetrics() + SPILT + entry.getKey(); + labels.put(LABEL_KEY_NAME, labelName); + if (!isPrometheusAuto) { + labels.put(MONITOR_METRIC_KEY, entry.getKey()); + } + VictoriaMetricsDataStorage.VictoriaMetricsContent content = VictoriaMetricsDataStorage.VictoriaMetricsContent.builder() + .metric(new HashMap<>(labels)) + .values(new Double[]{entry.getValue()}) + .timestamps(timestamp) + .build(); + contentList.add(content); + } catch (Exception e) { + log.error("combine metrics data error: {}.", e.getMessage(), e); + } + + } + } + }); } - StringBuilder stringBuilder = new StringBuilder(); - for (VictoriaMetricsDataStorage.VictoriaMetricsContent content : contentList) { - stringBuilder.append(JsonUtil.toJson(content)).append("\n"); + + + if (contentList.isEmpty()) { + log.info("[warehouse victoria-metrics] flush metrics data {} is empty, ignore.", metricsData.getId()); + return; } - HttpEntity httpEntity = new HttpEntity<>(stringBuilder.toString(), headers); - ResponseEntity responseEntity = restTemplate.postForEntity(vmInsertProps.url() + IMPORT_PATH, - httpEntity, String.class); - if (responseEntity.getStatusCode().is2xxSuccessful()) { - log.debug("insert metrics data to victoria-metrics success."); - } else { - log.error("insert metrics data to victoria-metrics failed. {}", responseEntity.getBody()); + + + try { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + if (StringUtils.hasText(vmInsertProps.username()) + && StringUtils.hasText(vmInsertProps.password())) { + String authStr = vmInsertProps.username() + ":" + vmInsertProps.password(); + String encodedAuth = new String(Base64.encodeBase64(authStr.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8); + headers.add(HttpHeaders.AUTHORIZATION, NetworkConstants.BASIC + SignConstants.BLANK + encodedAuth); + } + StringBuilder stringBuilder = new StringBuilder(); + for (VictoriaMetricsDataStorage.VictoriaMetricsContent content : contentList) { + stringBuilder.append(JsonUtil.toJson(content)).append("\n"); + } + HttpEntity httpEntity = new HttpEntity<>(stringBuilder.toString(), headers); + ResponseEntity responseEntity = restTemplate.postForEntity(vmInsertProps.url() + IMPORT_PATH, + httpEntity, String.class); + if (responseEntity.getStatusCode().is2xxSuccessful()) { + log.debug("insert metrics data to victoria-metrics success."); + } else { + log.error("insert metrics data to victoria-metrics failed. {}", responseEntity.getBody()); + } + } catch (Exception e){ + log.error("flush metrics data to victoria-metrics error: {}.", e.getMessage(), e); } - } catch (Exception e){ + } catch (Exception e) { log.error("flush metrics data to victoria-metrics error: {}.", e.getMessage(), e); } + } @Override diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java index 259a485067e..4bd4cf510fd 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/vm/VictoriaMetricsDataStorage.java @@ -31,6 +31,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; + +import com.google.common.collect.Maps; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -39,8 +41,10 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.math.NumberUtils; import org.apache.hertzbeat.common.constants.CommonConstants; +import org.apache.hertzbeat.common.constants.MetricDataConstants; import org.apache.hertzbeat.common.constants.NetworkConstants; import org.apache.hertzbeat.common.constants.SignConstants; +import org.apache.hertzbeat.common.entity.arrow.RowWrapper; import org.apache.hertzbeat.common.entity.dto.Value; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.common.util.CommonUtil; @@ -130,12 +134,12 @@ public void saveData(CollectRep.MetricsData metricsData) { if (!isServerAvailable() || metricsData.getCode() != CollectRep.Code.SUCCESS) { return; } - if (metricsData.getValuesList().isEmpty()) { + if (metricsData.getValues().isEmpty()) { log.info("[warehouse victoria-metrics] flush metrics data {} {} {} is null, ignore.", metricsData.getId(), metricsData.getApp(), metricsData.getMetrics()); return; } - Map defaultLabels = new HashMap<>(8); + Map defaultLabels = Maps.newHashMapWithExpectedSize(8); defaultLabels.put(MONITOR_METRICS_KEY, metricsData.getMetrics()); boolean isPrometheusAuto = false; if (metricsData.getApp().startsWith(CommonConstants.PROMETHEUS_APP_PREFIX)) { @@ -148,55 +152,70 @@ public void saveData(CollectRep.MetricsData metricsData) { } defaultLabels.put(LABEL_KEY_INSTANCE, String.valueOf(metricsData.getId())); - List fields = metricsData.getFieldsList(); - Long[] timestamp = new Long[]{metricsData.getTime()}; - Map fieldsValue = new HashMap<>(fields.size()); - Map labels = new HashMap<>(fields.size()); + List contentList = new LinkedList<>(); - for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) { - fieldsValue.clear(); - labels.clear(); - for (int index = 0; index < fields.size(); index++) { - CollectRep.Field field = fields.get(index); - String value = valueRow.getColumns(index); - if (field.getType() == CommonConstants.TYPE_NUMBER && !field.getLabel()) { - // number metrics data - if (!CommonConstants.NULL_VALUE.equals(value)) { - fieldsValue.put(field.getName(), CommonUtil.parseStrDouble(value)); - } - } - // label - if (field.getLabel() && !CommonConstants.NULL_VALUE.equals(value)) { - labels.put(field.getName(), value); - } - } - for (Map.Entry entry : fieldsValue.entrySet()) { - if (entry.getKey() != null && entry.getValue() != null) { - try { - labels.putAll(defaultLabels); - String labelName = isPrometheusAuto ? metricsData.getMetrics() - : metricsData.getMetrics() + SPILT + entry.getKey(); - labels.put(LABEL_KEY_NAME, labelName); - if (!isPrometheusAuto) { - labels.put(MONITOR_METRIC_KEY, entry.getKey()); + try { + final int fieldSize = metricsData.getFields().size(); + Long[] timestamp = new Long[]{metricsData.getTime()}; + Map fieldsValue = Maps.newHashMapWithExpectedSize(fieldSize); + Map labels = Maps.newHashMapWithExpectedSize(fieldSize); + + RowWrapper rowWrapper = metricsData.readRow(); + while (rowWrapper.hasNextRow()) { + rowWrapper = rowWrapper.nextRow(); + fieldsValue.clear(); + labels.clear(); + + rowWrapper.cellStream().forEach(cell -> { + String value = cell.getValue(); + boolean isLabel = cell.getMetadataAsBoolean(MetricDataConstants.LABEL); + byte type = cell.getMetadataAsByte(MetricDataConstants.TYPE); + + if (type == CommonConstants.TYPE_NUMBER && !isLabel) { + // number metrics data + if (!CommonConstants.NULL_VALUE.equals(value)) { + fieldsValue.put(cell.getField().getName(), CommonUtil.parseStrDouble(value)); } - VictoriaMetricsContent content = VictoriaMetricsContent.builder() - .metric(new HashMap<>(labels)) - .values(new Double[]{entry.getValue()}) - .timestamps(timestamp) - .build(); - contentList.add(content); - } catch (Exception e) { - log.error("combine metrics data error: {}.", e.getMessage(), e); } + // label + if (isLabel && !CommonConstants.NULL_VALUE.equals(value)) { + labels.put(cell.getField().getName(), value); + } + }); + for (Map.Entry entry : fieldsValue.entrySet()) { + if (entry.getKey() != null && entry.getValue() != null) { + try { + labels.putAll(defaultLabels); + String labelName = isPrometheusAuto ? metricsData.getMetrics() + : metricsData.getMetrics() + SPILT + entry.getKey(); + labels.put(LABEL_KEY_NAME, labelName); + if (!isPrometheusAuto) { + labels.put(MONITOR_METRIC_KEY, entry.getKey()); + } + VictoriaMetricsContent content = VictoriaMetricsContent.builder() + .metric(new HashMap<>(labels)) + .values(new Double[]{entry.getValue()}) + .timestamps(timestamp) + .build(); + contentList.add(content); + } catch (Exception e) { + log.error("combine metrics data error: {}.", e.getMessage(), e); + } + + } } } + + } catch (Exception e) { + log.error("save metrics data to victoria error: {}.", e.getMessage(), e); } + if (contentList.isEmpty()) { log.info("[warehouse victoria-metrics] flush metrics data {} is empty, ignore.", metricsData.getId()); return; } + try { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java deleted file mode 100644 index 7248b2bfad4..00000000000 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/MetricsDataRedisCodec.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hertzbeat.warehouse.store.realtime.redis; - -import io.lettuce.core.codec.RedisCodec; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import lombok.extern.slf4j.Slf4j; -import org.apache.hertzbeat.common.entity.message.CollectRep; - -/** - * MetricsData redis serialization - */ -@Slf4j -public class MetricsDataRedisCodec implements RedisCodec { - - @Override - public String decodeKey(ByteBuffer byteBuffer) { - return StandardCharsets.UTF_8.decode(byteBuffer).toString(); - } - - @Override - public CollectRep.MetricsData decodeValue(ByteBuffer byteBuffer) { - try { - return CollectRep.MetricsData.parseFrom(byteBuffer); - } catch (Exception e) { - log.error(e.getMessage()); - return null; - } - } - - @Override - public ByteBuffer encodeKey(String s) { - return ByteBuffer.wrap(s.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public ByteBuffer encodeValue(CollectRep.MetricsData metricsData) { - return ByteBuffer.wrap(metricsData.toByteArray()); - } -} diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java index 8122c882ea7..b46e6a8e786 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/RedisDataStorage.java @@ -61,17 +61,17 @@ public List getCurrentMetricsData(@NonNull Long monitorI public void saveData(CollectRep.MetricsData metricsData) { String key = String.valueOf(metricsData.getId()); String hashKey = metricsData.getMetrics(); - if (metricsData.getCode() != CollectRep.Code.SUCCESS || !isServerAvailable()) { - return; + if (metricsData.getCode() == CollectRep.Code.SUCCESS) { + redisCommandDelegate.operate().hset(key, hashKey, metricsData, future -> future.thenAccept(response -> { + if (response) { + log.debug("[warehouse] redis add new data {}:{}.", key, hashKey); + } else { + log.debug("[warehouse] redis replace data {}:{}.", key, hashKey); + } + })); + } else { + metricsData.close(); } - - redisCommandDelegate.operate().hset(key, hashKey, metricsData, future -> future.thenAccept(response -> { - if (response) { - log.debug("[warehouse] redis add new data {}:{}.", key, hashKey); - } else { - log.debug("[warehouse] redis replace data {}:{}.", key, hashKey); - } - })); } @Override diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/RedisCommandDelegate.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/RedisCommandDelegate.java index f2aa5983d27..405d95fe15c 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/RedisCommandDelegate.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/RedisCommandDelegate.java @@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.warehouse.store.realtime.redis.MetricsDataRedisCodec; +import org.apache.hertzbeat.common.serialize.RedisMetricsDataCodec; import org.apache.hertzbeat.warehouse.store.realtime.redis.RedisProperties; import org.apache.hertzbeat.warehouse.store.realtime.redis.client.impl.RedisClusterClientImpl; import org.apache.hertzbeat.warehouse.store.realtime.redis.client.impl.RedisSentinelClientImpl; @@ -56,9 +56,9 @@ public boolean initRedisClient(RedisProperties redisProperties) { try { operation = switch (redisProperties.mode()) { - case SINGLE_MODE -> new RedisSimpleClientImpl().connect(redisProperties, new MetricsDataRedisCodec()); - case SENTINEL_MODE -> new RedisSentinelClientImpl().connect(redisProperties, new MetricsDataRedisCodec()); - case CLUSTER_MODE -> new RedisClusterClientImpl().connect(redisProperties, new MetricsDataRedisCodec()); + case SINGLE_MODE -> new RedisSimpleClientImpl().connect(redisProperties, new RedisMetricsDataCodec()); + case SENTINEL_MODE -> new RedisSentinelClientImpl().connect(redisProperties, new RedisMetricsDataCodec()); + case CLUSTER_MODE -> new RedisClusterClientImpl().connect(redisProperties, new RedisMetricsDataCodec()); default -> throw new UnsupportedOperationException("Incorrect redis mode: " + redisProperties.mode()); }; diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSentinelClientImpl.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSentinelClientImpl.java index 64f3c02ebb9..bcddb51cb8e 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSentinelClientImpl.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSentinelClientImpl.java @@ -33,7 +33,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.SignConstants; import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.warehouse.store.realtime.redis.MetricsDataRedisCodec; +import org.apache.hertzbeat.common.serialize.RedisMetricsDataCodec; import org.apache.hertzbeat.warehouse.store.realtime.redis.RedisProperties; import org.apache.hertzbeat.warehouse.store.realtime.redis.client.RedisClientOperation; @@ -73,7 +73,7 @@ public RedisClientOperation connect(RedisPropert } masterRedisClient = RedisClient.create(masterUriBuilder.build()); - masterConnection = masterRedisClient.connect(new MetricsDataRedisCodec()); + masterConnection = masterRedisClient.connect(new RedisMetricsDataCodec()); } else { throw new UnsupportedOperationException("Incorrect type of SocketAddress, connect redis sentinel failed..."); } diff --git a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSimpleClientImpl.java b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSimpleClientImpl.java index 6b0b7760fa6..d3e59c9f29a 100644 --- a/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSimpleClientImpl.java +++ b/hertzbeat-warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/realtime/redis/client/impl/RedisSimpleClientImpl.java @@ -30,7 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.hertzbeat.common.constants.SignConstants; import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.warehouse.store.realtime.redis.MetricsDataRedisCodec; +import org.apache.hertzbeat.common.serialize.RedisMetricsDataCodec; import org.apache.hertzbeat.warehouse.store.realtime.redis.RedisProperties; import org.apache.hertzbeat.warehouse.store.realtime.redis.client.RedisClientOperation; @@ -56,7 +56,7 @@ public RedisClientOperation connect(RedisPropert } redisClient = RedisClient.create(uriBuilder.build()); - connection = redisClient.connect(new MetricsDataRedisCodec()); + connection = redisClient.connect(new RedisMetricsDataCodec()); return this; } diff --git a/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/service/MetricsDataServiceTest.java b/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/service/MetricsDataServiceTest.java index 8e96e72cc8f..fd04d0af329 100644 --- a/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/service/MetricsDataServiceTest.java +++ b/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/service/MetricsDataServiceTest.java @@ -26,7 +26,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.ArrayList; import java.util.HashMap; import java.util.Optional; import org.apache.hertzbeat.common.entity.message.CollectRep; @@ -88,8 +87,6 @@ public void testGetMetricsData() { CollectRep.MetricsData storageData = CollectRep.MetricsData.newBuilder() .setId(monitorId) .setMetrics(metrics) - .addAllFields(new ArrayList<>()) - .addAllValues(new ArrayList<>()) .build(); when(realTimeDataReader.isServerAvailable()).thenReturn(true); when(realTimeDataReader.getCurrentMetricsData(eq(monitorId), eq(metrics))).thenReturn(storageData); diff --git a/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java b/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java deleted file mode 100644 index 8e09600f40c..00000000000 --- a/hertzbeat-warehouse/src/test/java/org/apache/hertzbeat/warehouse/store/MetricsDataRedisCodecTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hertzbeat.warehouse.store; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import lombok.extern.slf4j.Slf4j; -import org.apache.hertzbeat.common.entity.message.CollectRep; -import org.apache.hertzbeat.warehouse.store.realtime.redis.MetricsDataRedisCodec; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - -/** - * Test case for {@link MetricsDataRedisCodec} - */ - -@Slf4j -class MetricsDataRedisCodecTest { - - private MetricsDataRedisCodec codec; - - @BeforeEach - void setUp() { - - codec = new MetricsDataRedisCodec(); - } - - @Test - void testEncodeKey() { - - String key = "testKey"; - ByteBuffer encodedKey = codec.encodeKey(key); - String decodedKey = StandardCharsets.UTF_8.decode(encodedKey).toString(); - - assertEquals(key, decodedKey); - } - - @Test - void testDecodeKey() { - - String key = "testKey"; - ByteBuffer buffer = ByteBuffer.wrap(key.getBytes(StandardCharsets.UTF_8)); - String decodedKey = codec.decodeKey(buffer); - - assertEquals(key, decodedKey); - } - - @Test - void testEncodeValue() { - - CollectRep.MetricsData metricsData = Mockito.mock(CollectRep.MetricsData.class); - byte[] bytes = new byte[]{1, 2, 3}; - Mockito.when(metricsData.toByteArray()).thenReturn(bytes); - - ByteBuffer encodedValue = codec.encodeValue(metricsData); - assertArrayEquals(bytes, encodedValue.array()); - } - - @Test - void testDecodeValue() { - - CollectRep.MetricsData metricsData = Mockito.mock(CollectRep.MetricsData.class); - byte[] bytes = new byte[]{1, 2, 3}; - - ByteBuffer buffer = ByteBuffer.wrap(bytes); - - try { - Mockito.mockStatic(CollectRep.MetricsData.class); - Mockito.when(CollectRep.MetricsData.parseFrom(buffer)).thenReturn(metricsData); - - CollectRep.MetricsData decodedValue = codec.decodeValue(buffer); - - assertEquals(metricsData, decodedValue); - } catch (Exception e) { - log.error(e.getMessage()); - fail("Exception thrown during decodeValue test"); - } finally { - Mockito.clearAllCaches(); - } - } - -} diff --git a/home/docs/community/contribution.md b/home/docs/community/contribution.md index 69ba47fd8da..23af407cfbe 100644 --- a/home/docs/community/contribution.md +++ b/home/docs/community/contribution.md @@ -53,12 +53,10 @@ Even small corrections to typos are very welcome :) #### Backend start 1. Requires `maven3+`, `java17` and `lombok` environments - 2. (Optional) Modify the configuration file: `manager/src/main/resources/application.yml` - 3. Execute under the project root directory: `mvn clean install -DskipTests` - -4. Start `springboot manager` service: `manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java` +4. Add VM Options: `--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED` +5. Start `springboot manager` service: `manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java` #### Frontend start diff --git a/home/docs/community/development.md b/home/docs/community/development.md index 05ec16c9ffd..8e2473743d8 100644 --- a/home/docs/community/development.md +++ b/home/docs/community/development.md @@ -13,12 +13,10 @@ sidebar_label: Development ### Backend start 1. Requires `maven3+`, `java17` and `lombok` environments - 2. (Optional) Modify the configuration file: `manager/src/main/resources/application.yml` - 3. Execute under the project root directory: `mvn clean install -DskipTests` - -4. Start `springboot manager` service: `manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java` +4. Add VM Options: `--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED` +5. Start `springboot manager` service: `manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java` ### Frontend start diff --git a/home/src/pages/team/index.jsx b/home/src/pages/team/index.jsx index 7ad1b2081c5..7a4d9d1005b 100644 --- a/home/src/pages/team/index.jsx +++ b/home/src/pages/team/index.jsx @@ -1179,6 +1179,18 @@ export default function () { src="https://avatars.githubusercontent.com/u/127600988?v=4?s=100" width="100px;" alt="Ayu"/>
Ayu
💻 + Nick Guo
Nick Guo

📖 + doveLin
doveLin

💻 + yunfan24
yunfan24

💻 diff --git a/pom.xml b/pom.xml index 05974f113fa..0b6ec87057c 100644 --- a/pom.xml +++ b/pom.xml @@ -170,6 +170,7 @@ 3.0.0 0.9.1 8.0.33 + 18.1.0 @@ -453,6 +454,17 @@ netty-all ${netty.version} + + + org.apache.arrow + arrow-vector + ${arrow.version} + + + org.apache.arrow + arrow-memory-netty + ${arrow.version} + @@ -487,6 +499,9 @@ org.apache.maven.plugins maven-surefire-plugin ${maven-surefire-plugin.version} + + --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED + diff --git a/script/assembly/collector/bin/entrypoint.sh b/script/assembly/collector/bin/entrypoint.sh index 0867dc8c489..e3995cbde14 100644 --- a/script/assembly/collector/bin/entrypoint.sh +++ b/script/assembly/collector/bin/entrypoint.sh @@ -44,7 +44,7 @@ if [ ! -d $LOGS_DIR ]; then fi # JVM Configuration -JAVA_OPTS=" -Doracle.jdbc.timezoneAsRegion=false" +JAVA_OPTS=" -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED" # JVM Configuration JAVA_MEM_OPTS=" -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR" diff --git a/script/assembly/collector/bin/startup.bat b/script/assembly/collector/bin/startup.bat index 03eeca15333..01d934fd46a 100644 --- a/script/assembly/collector/bin/startup.bat +++ b/script/assembly/collector/bin/startup.bat @@ -51,7 +51,7 @@ if not exist %LOGS_DIR% ( ) rem JVM Configuration -set JAVA_OPTS= -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false +set JAVA_OPTS= -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED set JAVA_MEM_OPTS= -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%LOGS_DIR% diff --git a/script/assembly/collector/bin/startup.sh b/script/assembly/collector/bin/startup.sh index 5b48adce441..4aaa5aad50e 100644 --- a/script/assembly/collector/bin/startup.sh +++ b/script/assembly/collector/bin/startup.sh @@ -82,7 +82,7 @@ if [ ! -d $LOGS_DIR ]; then fi # JVM Configuration -JAVA_OPTS=" -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false" +JAVA_OPTS=" -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED" JAVA_MEM_OPTS=" -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR" diff --git a/script/assembly/server/bin/entrypoint.sh b/script/assembly/server/bin/entrypoint.sh index 0a9b0b26e41..e0c2cb6f81b 100644 --- a/script/assembly/server/bin/entrypoint.sh +++ b/script/assembly/server/bin/entrypoint.sh @@ -47,7 +47,7 @@ fi # JVM Configuration if [ -z "$JAVA_OPTS" ]; then - JAVA_OPTS=" -Doracle.jdbc.timezoneAsRegion=false" + JAVA_OPTS=" -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED" else JAVA_OPTS="${JAVA_OPTS} -Doracle.jdbc.timezoneAsRegion=false" fi diff --git a/script/assembly/server/bin/startup.bat b/script/assembly/server/bin/startup.bat index 2647ed07835..9acd53417f7 100644 --- a/script/assembly/server/bin/startup.bat +++ b/script/assembly/server/bin/startup.bat @@ -52,7 +52,7 @@ if not exist %LOGS_DIR% ( rem JVM Configuration -set JAVA_OPTS= -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false +set JAVA_OPTS= -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED set JAVA_MEM_OPTS= -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%LOGS_DIR% diff --git a/script/assembly/server/bin/startup.sh b/script/assembly/server/bin/startup.sh index e3dd9a8533f..303f60b94ec 100644 --- a/script/assembly/server/bin/startup.sh +++ b/script/assembly/server/bin/startup.sh @@ -86,7 +86,7 @@ fi # JVM Configuration -JAVA_OPTS=" -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false" +JAVA_OPTS=" -Duser.timezone=Asia/Shanghai -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED" JAVA_MEM_OPTS=" -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR" diff --git a/script/helm/hertzbeat-helm-chart b/script/helm/hertzbeat-helm-chart index 74027a5fdae..9ce6a771c18 160000 --- a/script/helm/hertzbeat-helm-chart +++ b/script/helm/hertzbeat-helm-chart @@ -1 +1 @@ -Subproject commit 74027a5fdaed41693842b343789d4e49a57a5771 +Subproject commit 9ce6a771c18ad19a4ff6b2494d9ba71204bbac49