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 21d1bd1c68e..e38ef6c4bc8 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 @@ -166,7 +166,7 @@ public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) { case DispatchConstants.PARSE_XML_PATH -> parseResponseByXmlPath(resp, metrics, builder, responseTime); case DispatchConstants.PARSE_WEBSITE -> - parseResponseByWebsite(resp, metrics, metrics.getHttp(), builder, responseTime); + parseResponseByWebsite(resp, metrics, metrics.getHttp(), builder, responseTime, statusCode); case DispatchConstants.PARSE_SITE_MAP -> parseResponseBySiteMap(resp, metrics.getAliasFields(), builder); case DispatchConstants.PARSE_HEADER -> @@ -237,11 +237,15 @@ public String supportProtocol() { } private void parseResponseByWebsite(String resp, Metrics metrics, HttpProtocol http, - CollectRep.MetricsData.Builder builder, Long responseTime) { + CollectRep.MetricsData.Builder builder, Long responseTime, int statusCode) { CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder(); int keywordNum = CollectUtil.countMatchKeyword(resp, http.getKeyword()); for (String alias : metrics.getAliasFields()) { - addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias); + if (CollectorConstants.STATUS_CODE.equalsIgnoreCase(alias)) { + valueRowBuilder.addColumn(Integer.toString(statusCode)); + } else { + addColumnForSummary(responseTime, valueRowBuilder, keywordNum, alias); + } } builder.addValueRow(valueRowBuilder.build()); } 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 9ec23f5b6e4..9aebc36af0f 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 @@ -17,6 +17,7 @@ package org.apache.hertzbeat.collector.collect.http; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -25,6 +26,7 @@ import java.util.List; import java.util.ArrayList; +import com.google.common.collect.Lists; import org.apache.hertzbeat.collector.dispatch.DispatchConstants; import org.apache.hertzbeat.common.entity.job.Metrics; import org.apache.hertzbeat.common.entity.job.protocol.HttpProtocol; @@ -73,6 +75,30 @@ void supportProtocol() { assert "http".equals(protocol); } + @Test + void parseResponseByWebsite() { + HttpProtocol http = HttpProtocol.builder().build(); + http.setMethod("GET"); + http.setHost("http://127.0.0.1"); + http.setUrl("/"); + http.setPort("8428"); + http.setParseType("website"); + http.setEnableUrlEncoding("true"); + Metrics metrics = Metrics.builder() + .http(http) + .aliasFields(Lists.newArrayList("responseTime", "keyword", "statusCode")) + .build(); + CollectRep.MetricsData.Builder builder = CollectRep.MetricsData.newBuilder(); + httpCollectImpl.collect(builder, metrics); + + assertNotNull(builder.getValuesList()); + for (CollectRep.ValueRow row : builder.getValuesList()) { + assertNotNull(row.getColumns(0)); + assertEquals(row.getColumns(1), "0"); + assertEquals(row.getColumns(2), "200"); + } + } + @Test void parseResponseByXmlPath() throws Exception { // Create a sample XML response diff --git a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/constants/CollectorConstants.java b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/constants/CollectorConstants.java index 0dcfb201b0b..a52092e2f0e 100644 --- a/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/constants/CollectorConstants.java +++ b/hertzbeat-collector/hertzbeat-collector-common/src/main/java/org/apache/hertzbeat/collector/constants/CollectorConstants.java @@ -47,6 +47,6 @@ public interface CollectorConstants extends NetworkConstants { String RESPONSE_TIME = "responseTime"; - String STATUS_CODE = "StatusCode"; + String STATUS_CODE = "statusCode"; } \ No newline at end of file diff --git a/hertzbeat-manager/src/main/resources/define/app-api.yml b/hertzbeat-manager/src/main/resources/define/app-api.yml index a2e1c28e631..a1b6214089a 100644 --- a/hertzbeat-manager/src/main/resources/define/app-api.yml +++ b/hertzbeat-manager/src/main/resources/define/app-api.yml @@ -304,6 +304,12 @@ metrics: zh-CN: 关键词数量 en-US: Keyword ja-JP: キーワード + - field: statusCode + type: 0 + i18n: + zh-CN: 状态码 + en-US: Status Code + ja-JP: 状態コード # the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk protocol: http # the config content when protocol is http