[manager,collector]fix HTTP协议采集PATH空导致NPE,更新api website 监控入参显示
This commit is contained in:
@@ -58,10 +58,12 @@ public class HttpCollectImpl extends AbstractCollect {
|
|||||||
public void collect(CollectRep.MetricsData.Builder builder,
|
public void collect(CollectRep.MetricsData.Builder builder,
|
||||||
long appId, String app, Metrics metrics) {
|
long appId, String app, Metrics metrics) {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
// 简单校验必有参数
|
// 校验参数
|
||||||
if (metrics == null || metrics.getHttp() == null) {
|
try {
|
||||||
|
validateParams(metrics);
|
||||||
|
} catch (Exception e) {
|
||||||
builder.setCode(CollectRep.Code.FAIL);
|
builder.setCode(CollectRep.Code.FAIL);
|
||||||
builder.setMsg("Http/Https collect must has http params");
|
builder.setMsg(e.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HttpContext httpContext = createHttpContext(metrics.getHttp());
|
HttpContext httpContext = createHttpContext(metrics.getHttp());
|
||||||
@@ -103,38 +105,38 @@ public class HttpCollectImpl extends AbstractCollect {
|
|||||||
log.info("parse error: {}.", e.getMessage(), e);
|
log.info("parse error: {}.", e.getMessage(), e);
|
||||||
builder.setCode(CollectRep.Code.FAIL);
|
builder.setCode(CollectRep.Code.FAIL);
|
||||||
builder.setMsg("parse response data error:" + e.getMessage());
|
builder.setMsg("parse response data error:" + e.getMessage());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ClientProtocolException e1) {
|
} catch (ClientProtocolException e1) {
|
||||||
log.error(e1.getCause().getMessage(), e1);
|
String errorMsg;
|
||||||
|
if (e1.getCause() != null) {
|
||||||
|
errorMsg = e1.getCause().getMessage();
|
||||||
|
} else {
|
||||||
|
errorMsg = e1.getMessage();
|
||||||
|
}
|
||||||
|
log.error(errorMsg);
|
||||||
builder.setCode(CollectRep.Code.UN_CONNECTABLE);
|
builder.setCode(CollectRep.Code.UN_CONNECTABLE);
|
||||||
builder.setMsg(e1.getCause().getMessage());
|
builder.setMsg(errorMsg);
|
||||||
return;
|
|
||||||
} catch (UnknownHostException e2) {
|
} catch (UnknownHostException e2) {
|
||||||
// 对端不可达
|
// 对端不可达
|
||||||
log.info(e2.getMessage());
|
log.info(e2.getMessage());
|
||||||
builder.setCode(CollectRep.Code.UN_REACHABLE);
|
builder.setCode(CollectRep.Code.UN_REACHABLE);
|
||||||
builder.setMsg("unknown host");
|
builder.setMsg("unknown host");
|
||||||
return;
|
|
||||||
} catch (InterruptedIOException | ConnectException | SSLException e3) {
|
} catch (InterruptedIOException | ConnectException | SSLException e3) {
|
||||||
// 对端连接失败
|
// 对端连接失败
|
||||||
log.info(e3.getMessage());
|
log.info(e3.getMessage());
|
||||||
builder.setCode(CollectRep.Code.UN_CONNECTABLE);
|
builder.setCode(CollectRep.Code.UN_CONNECTABLE);
|
||||||
builder.setMsg(e3.getMessage());
|
builder.setMsg(e3.getMessage());
|
||||||
return;
|
|
||||||
} catch (IOException e4) {
|
} catch (IOException e4) {
|
||||||
// 其它IO异常
|
// 其它IO异常
|
||||||
log.info(e4.getMessage());
|
log.info(e4.getMessage());
|
||||||
builder.setCode(CollectRep.Code.FAIL);
|
builder.setCode(CollectRep.Code.FAIL);
|
||||||
builder.setMsg(e4.getMessage());
|
builder.setMsg(e4.getMessage());
|
||||||
return;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 其它异常
|
// 其它异常
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
builder.setCode(CollectRep.Code.FAIL);
|
builder.setCode(CollectRep.Code.FAIL);
|
||||||
builder.setMsg(e.getMessage());
|
builder.setMsg(e.getMessage());
|
||||||
return;
|
|
||||||
} finally {
|
} finally {
|
||||||
if (request != null) {
|
if (request != null) {
|
||||||
request.abort();
|
request.abort();
|
||||||
@@ -142,6 +144,18 @@ public class HttpCollectImpl extends AbstractCollect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateParams(Metrics metrics) throws Exception {
|
||||||
|
if (metrics == null || metrics.getHttp() == null) {
|
||||||
|
throw new Exception("Http/Https collect must has http params");
|
||||||
|
}
|
||||||
|
HttpProtocol httpProtocol = metrics.getHttp();
|
||||||
|
if (httpProtocol.getUrl() == null
|
||||||
|
|| "".equals(httpProtocol.getUrl())
|
||||||
|
|| !httpProtocol.getUrl().startsWith("/")) {
|
||||||
|
httpProtocol.setUrl(httpProtocol.getUrl() == null ? "/" : "/" + httpProtocol.getUrl().trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void parseResponseByWebsite(String resp, List<String> aliasFields,
|
private void parseResponseByWebsite(String resp, List<String> aliasFields,
|
||||||
CollectRep.MetricsData.Builder builder, Long responseTime) {
|
CollectRep.MetricsData.Builder builder, Long responseTime) {
|
||||||
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
|
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
|
||||||
@@ -162,7 +176,7 @@ public class HttpCollectImpl extends AbstractCollect {
|
|||||||
|
|
||||||
private void parseResponseByJsonPath(String resp, List<String> aliasFields, HttpProtocol http,
|
private void parseResponseByJsonPath(String resp, List<String> aliasFields, HttpProtocol http,
|
||||||
CollectRep.MetricsData.Builder builder, Long responseTime) {
|
CollectRep.MetricsData.Builder builder, Long responseTime) {
|
||||||
List<Map<String, Object>> results = JsonPathParser.parseContentWithJsonPath(resp,http. getParseScript());
|
List<Map<String, Object>> results = JsonPathParser.parseContentWithJsonPath(resp, http.getParseScript());
|
||||||
for (Map<String, Object> stringMap : results) {
|
for (Map<String, Object> stringMap : results) {
|
||||||
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
|
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
|
||||||
for (String alias : aliasFields) {
|
for (String alias : aliasFields) {
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public class MetricsCollect implements Runnable, Comparable<MetricsCollect> {
|
|||||||
log.error("[Metrics Collect]: {}.", msg, e);
|
log.error("[Metrics Collect]: {}.", msg, e);
|
||||||
response.setCode(CollectRep.Code.FAIL);
|
response.setCode(CollectRep.Code.FAIL);
|
||||||
if (msg != null) {
|
if (msg != null) {
|
||||||
response.setMsg(e.getMessage());
|
response.setMsg(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ param:
|
|||||||
range: '[0,65535]'
|
range: '[0,65535]'
|
||||||
required: true
|
required: true
|
||||||
- field: uri
|
- field: uri
|
||||||
name: URI路径
|
name: 相对路径
|
||||||
type: text
|
type: text
|
||||||
# 当type为text时,用limit表示字符串限制大小
|
# 当type为text时,用limit表示字符串限制大小
|
||||||
limit: 100
|
limit: 200
|
||||||
required: true
|
required: false
|
||||||
|
placeholder: 'API地址除IP端口外的路径 例如:/v2/book/bar'
|
||||||
- field: method
|
- field: method
|
||||||
name: 请求方式
|
name: 请求方式
|
||||||
type: radio
|
type: radio
|
||||||
@@ -47,7 +48,7 @@ param:
|
|||||||
type: password
|
type: password
|
||||||
required: false
|
required: false
|
||||||
- field: ssl
|
- field: ssl
|
||||||
name: 开启SSL
|
name: 启用HTTPS
|
||||||
# 当type为boolean时,前端用switch展示开关
|
# 当type为boolean时,前端用switch展示开关
|
||||||
type: boolean
|
type: boolean
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ param:
|
|||||||
required: true
|
required: true
|
||||||
defaultValue: 80
|
defaultValue: 80
|
||||||
- field: uri
|
- field: uri
|
||||||
name: 网站路径
|
name: 相对路径
|
||||||
type: text
|
type: text
|
||||||
# 当type为text时,用limit表示字符串限制大小
|
# 当type为text时,用limit表示字符串限制大小
|
||||||
limit: 100
|
limit: 200
|
||||||
required: true
|
required: false
|
||||||
placeholder: '请输入网站地址,例如:/index.html'
|
placeholder: '网站地址除IP端口外的路径 例如:/console'
|
||||||
- field: ssl
|
- field: ssl
|
||||||
name: 开启SSL
|
name: 启用HTTPS
|
||||||
# 当type为boolean时,前端用switch展示开关
|
# 当type为boolean时,前端用switch展示开关
|
||||||
type: boolean
|
type: boolean
|
||||||
required: true
|
required: true
|
||||||
Reference in New Issue
Block a user