use of org.apache.servicecomb.huaweicloud.dashboard.monitor.event.MonitorSuccEvent in project java-chassis by ServiceComb.
the class DefaultMonitorDataPublisher method doSend.
private void doSend(String endpoint, String jsonData, String url, IpPort host, int times) {
clientMgr.findThreadBindClientPool().runOnContext(client -> {
client.request(HttpMethod.POST, host.getPort(), host.getHostOrIp(), url).compose(request -> {
request.headers().add("environment", RegistryUtils.getMicroservice().getEnvironment());
request.setTimeout(MonitorConstant.getInterval() / MonitorConstant.MAX_RETRY_TIMES);
try {
SignRequest signReq = SignUtil.createSignRequest(request.getMethod().toString(), endpoint + url, new HashMap<>(), IOUtils.toInputStream(jsonData, "UTF-8"));
SignUtil.getAuthHeaderProviders().forEach(authHeaderProvider -> {
request.headers().addAll(authHeaderProvider.getSignAuthHeaders(signReq));
});
} catch (Exception e) {
LOGGER.error("sign request error!", e);
}
return request.send(jsonData).compose(rsp -> {
if (rsp.statusCode() != HttpResponseStatus.OK.code()) {
addressManager.recordSuccessState(endpoint);
if (times < MonitorConstant.MAX_RETRY_TIMES && rsp.statusCode() == HttpResponseStatus.BAD_GATEWAY.code()) {
doSend(endpoint, jsonData, url, host, times + 1);
return Future.succeededFuture();
}
return rsp.body().compose(buffer -> {
LOGGER.warn("Send data to url {} failed and status line is {}", url, rsp.statusCode());
LOGGER.warn("message: {}", buffer);
return Future.succeededFuture();
});
} else {
addressManager.recordSuccessState(endpoint);
EventManager.post(new MonitorSuccEvent());
}
return Future.succeededFuture();
}).onFailure(failure -> {
EventManager.post(new MonitorFailEvent("send monitor data fail."));
addressManager.recordFailState(endpoint);
LOGGER.warn("Send monitor data to {} failed , {}", endpoint, failure);
});
});
});
}
Aggregations