in geronimo-metrics-extensions/geronimo-metrics-sigar/src/main/java/org/apache/geronimo/microprofile/metrics/extension/sigar/SigarRegistrar.java [87:108]
public synchronized void tick() {
final Collection<Definition> currentMetrics = collectMetrics();
final Collection<Definition> alreadyRegistered = currentMetrics.stream()
.filter(it -> currentDefinitions.containsKey(it.getName()))
.collect(toList());
final Collection<Definition> missingRegistered = new HashSet<>(currentDefinitions.values());
missingRegistered.removeAll(alreadyRegistered);
// remove no more accurate metrics
missingRegistered.forEach(it -> {
currentDefinitions.remove(it.getName());
if (onUnregister != null) {
onUnregister.accept(it);
}
});
// register new metrics
currentMetrics.removeAll(alreadyRegistered);
currentMetrics.forEach(it -> onRegister.accept(new Definition(
it.getName(), it.getDisplayName(), it.getDescription(), it.getUnit(),
() -> it.getEvaluator().getAsDouble())));
}