[collector] 系统默认数据解析http响应数据

This commit is contained in:
tomsun28
2021-11-20 19:36:41 +08:00
parent 8214eba482
commit 22f54dff10
3 changed files with 12 additions and 21 deletions

View File

@@ -1,13 +1,9 @@
package com.usthe.collector.collect.http;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.spi.cache.CacheProvider;
import com.jayway.jsonpath.spi.cache.LRUCache;
import com.google.gson.JsonParser;
import com.usthe.collector.collect.AbstractCollect;
import com.usthe.collector.common.http.HttpClientPool;
import com.usthe.collector.dispatch.DispatchConstants;
@@ -28,7 +24,6 @@ import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
@@ -173,8 +168,7 @@ public class HttpCollectImpl extends AbstractCollect {
}
private void parseResponseByDefault(String resp, List<String> aliasFields, CollectRep.MetricsData.Builder builder) {
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(resp);
JsonElement element = JsonParser.parseString(resp);
if (element.isJsonArray()) {
JsonArray array = element.getAsJsonArray();
for (JsonElement jsonElement : array) {
@@ -196,18 +190,15 @@ public class HttpCollectImpl extends AbstractCollect {
} else if (element.isJsonObject()) {
JsonObject object = element.getAsJsonObject();
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
StringBuilder instance = new StringBuilder();
for (String alias : aliasFields) {
JsonElement valueElement = object.get(alias);
if (valueElement != null) {
String value = valueElement.getAsString();
valueRowBuilder.addColumns(value);
instance.append(value);
} else {
valueRowBuilder.addColumns(CommonConstants.NULL_VALUE);
}
}
valueRowBuilder.setInstance(instance.toString());
builder.addValues(valueRowBuilder.build());
}
}

View File

@@ -1,6 +1,5 @@
package com.usthe.collector.dispatch;
import com.google.protobuf.ProtocolStringList;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.usthe.collector.collect.AbstractCollect;
@@ -15,6 +14,7 @@ import com.usthe.common.util.CommonUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -135,22 +135,21 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
/**
* 根据 calculates 和 aliasFields 配置计算出真正的指标(fields)值
* 计算instance实例值
* @param metrics 指标组配置
* @param collectData 采集数据
*/
private void calculateFields(Metrics metrics, CollectRep.MetricsData.Builder collectData) {
collectData.addAllFields(metrics.getFields().stream().map(Metrics.Field::getField).collect(Collectors.toSet()));
// 若不存在需要计算的表达式,则 别名指标aliasFields 的数据就是真正指标 fields的数据
// 即直接使用 valueList 即可
if (metrics.getCalculates() == null || metrics.getCalculates().isEmpty()) {
return;
}
List<CollectRep.ValueRow> aliasRowList = collectData.getValuesList();
if (aliasRowList == null || aliasRowList.isEmpty()) {
return;
}
collectData.clearValues();
// 先预处理 calculates
if (metrics.getCalculates() == null) {
metrics.setCalculates(Collections.emptyList());
}
Map<String, Expression> fieldExpressionMap = metrics.getCalculates()
.stream()
.map(cal -> {
@@ -214,7 +213,7 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
}
realValueRowBuilder.addColumns(value);
fieldValueMap.clear();
if (field.isInstance()) {
if (field.isInstance() && !CommonConstants.NULL_VALUE.equals(value)) {
instanceBuilder.append(value);
}
}
@@ -234,9 +233,9 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
builder.setTime(endTime);
log.debug("[Collect]: newTime: {}, startTime: {}, spendTime: {}.", newTime, startTime, endTime - startTime);
if (builder.getCode() != CollectRep.Code.SUCCESS) {
log.info("[Collect Fail]-reason:{}", builder.getMsg());
log.info("[Collect Fail] Reason: {}", builder.getMsg());
} else {
log.info("[Collect Success]-{},{},{}.", builder.getId(), builder.getApp(), builder.getMetrics());
log.info("[Collect Success].");
}
return builder.build();
}