in ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/org/apache/ozhera/prometheus/agent/service/api/impl/PrometheusIpServiceExtensionImpl.java [122:235]
public void init() {
new ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay(() -> {
Stopwatch sw = Stopwatch.createStarted();
log.info("enable async to obtain nacos information");
ConcurrentHashMap<String, Set<String>> cache = new ConcurrentHashMap<>();
Ips starterIps = new Ips();
Ips javaagentIps = new Ips();
Ips jaegerqueryIps = new Ips();
Ips moneStarterIps = new Ips();
Set<String> starterAddresssSet = new HashSet<>();
Set<String> javaagentAddresssSet = new HashSet<>();
Set<String> jaegerqueryAddresssSet = new HashSet<>();
Set<String> monestarterPrometheusPortSet = new HashSet<>();
List<Ips> starterIpsListTmp = new ArrayList<>();
List<Ips> javaagentIpsListTmp = new ArrayList<>();
List<Ips> jaegerqueryIpsListTmp = new ArrayList<>();
List<Ips> monestarterIpsListTmp = new ArrayList<>();
List<String> teslaFlag = Arrays.asList(TESLA_FLAG);
try {
Set<String> serviceNames = getAllServiceNames();
log.info("service num:{} {}", serviceNames.size(), sw.elapsed(TimeUnit.MILLISECONDS));
if (serviceNames != null && serviceNames.size() > 0) {
serviceNames.stream().forEach(it -> {
if (it == null || it.startsWith("consumers:")) {
return;
}
List<Instance> instances = null;
try {
instances = nacosNaming.getAllInstances(it);
// log.info("service:{} num:{}", it, instances.size());
} catch (NacosException e) {
log.error("Nacos.getAllInstance error,", e);
}
assert instances != null;
instances.forEach(it5 -> {
if (teslaFlag.contains(it)) {
Set<String> tmpIps = cache.getOrDefault(it, new HashSet<>());
tmpIps.add(it5.getIp() + ":" + it5.getPort());
cache.putIfAbsent(it, tmpIps);
}
});
List<String> starterAddrs = instances.stream()
.filter(it1 -> it1.getMetadata() != null && StringUtils.startsWith(it,
CUSTOM_JOB_PREFIX)).map(it2 -> {
String ip = it2.getIp();
String port = it2.getMetadata().get(CUSTOM_JOB_PORT_KEY);
return ip + ":" + port;
}).collect(Collectors.toList());
List<String> javaagentAddrs = instances.stream()
.filter(it1 -> it1.getMetadata() != null && StringUtils.isNotEmpty(
it1.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT))).map(it2 -> {
String ip = it2.getIp();
String port = it2.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT);
return ip + ":" + port;
}).collect(Collectors.toList());
List<String> jaegerquery = instances.stream()
.filter(it1 -> it1.getMetadata() != null && StringUtils.isNotEmpty(
it1.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT))).map(it2 -> {
String ip = it2.getIp();
String port = it2.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT);
return ip + ":" + port;
}).collect(Collectors.toList());
List<String> moneStarterAddrs = instances.stream()
.filter(it1 -> it1.getMetadata() != null && StringUtils.isNotEmpty(
it1.getMetadata().get(MONESTARTER_PROMETHEUS_PORT))).map(it2 -> {
String ip = it2.getIp();
String port = it2.getMetadata().get(MONESTARTER_PROMETHEUS_PORT);
return ip + ":" + port;
}).collect(Collectors.toList());
instances.stream().filter(it3 -> it3.getMetadata() != null && StringUtils.isNotEmpty(
it3.getMetadata().get(APPLICATION))).forEach(it4 -> {
String appName = it4.getMetadata().get(APPLICATION);
Set<String> tmpIps = cache.getOrDefault(appName, new HashSet<>());
if (appName.equals("tesla-gateway")) {
tmpIps.add(it4.getIp() + ":8080");
} else {
tmpIps.add(it4.getIp());
}
cache.putIfAbsent(appName, tmpIps);
});
starterAddresssSet.addAll(starterAddrs);
javaagentAddresssSet.addAll(javaagentAddrs);
jaegerqueryAddresssSet.addAll(jaegerquery);
monestarterPrometheusPortSet.addAll(moneStarterAddrs);
});
}
appIpsCache = cache;
starterIps.setTargets(new ArrayList<>(starterAddresssSet));
javaagentIps.setTargets(new ArrayList<>(javaagentAddresssSet));
jaegerqueryIps.setTargets(new ArrayList<>(jaegerqueryAddresssSet));
moneStarterIps.setTargets(new ArrayList<>(monestarterPrometheusPortSet));
starterIpsListTmp.add(starterIps);
javaagentIpsListTmp.add(javaagentIps);
jaegerqueryIpsListTmp.add(jaegerqueryIps);
monestarterIpsListTmp.add(moneStarterIps);
starterIpsList = starterIpsListTmp;
javaagentIpsList = javaagentIpsListTmp;
jaegerqueryIpsList = jaegerqueryIpsListTmp;
monequeryIpsList = monestarterIpsListTmp;
log.info("异步获取nacos信息完成 use time:{}", sw.elapsed(TimeUnit.MILLISECONDS));
} catch (Exception ex) {
log.error("PrometheusService.init, get nacos value error", ex);
}
}, 0, 15, TimeUnit.SECONDS);
}