Skip to content

Commit 238df1e

Browse files
committed
feat: support having no delay before deleting associated meters
1 parent 4b3c507 commit 238df1e

File tree

1 file changed

+53
-15
lines changed

1 file changed

+53
-15
lines changed

micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,27 @@ public class MicrometerMetrics implements Metrics {
3232
private final MeterRegistry registry;
3333
private final Map<String, AtomicInteger> gauges = new ConcurrentHashMap<>();
3434
private final Map<ResourceID, Set<Meter.Id>> metersPerResource = new ConcurrentHashMap<>();
35-
private final ScheduledExecutorService metersCleaner;
36-
private final int cleanUpDelayInSeconds;
35+
private final Cleaner cleaner;
3736

3837
public MicrometerMetrics(MeterRegistry registry) {
39-
this(registry, 300, Runtime.getRuntime().availableProcessors());
38+
this(registry, 0);
39+
}
40+
41+
public MicrometerMetrics(MeterRegistry registry, int cleanUpDelayInSeconds) {
42+
this(registry, cleanUpDelayInSeconds, 0);
4043
}
4144

4245
public MicrometerMetrics(MeterRegistry registry, int cleanUpDelayInSeconds,
4346
int cleaningThreadsNumber) {
4447
this.registry = registry;
45-
this.cleanUpDelayInSeconds = cleanUpDelayInSeconds;
46-
this.metersCleaner = Executors.newScheduledThreadPool(cleaningThreadsNumber);
48+
if (cleanUpDelayInSeconds < 0) {
49+
cleaner = new NoDelayCleaner();
50+
} else {
51+
cleaningThreadsNumber =
52+
cleaningThreadsNumber <= 0 ? Runtime.getRuntime().availableProcessors()
53+
: cleaningThreadsNumber;
54+
cleaner = new DelayedCleaner(cleanUpDelayInSeconds, cleaningThreadsNumber);
55+
}
4756
}
4857

4958
@Override
@@ -127,16 +136,7 @@ public void receivedEvent(Event event, Map<String, Object> metadata) {
127136
public void cleanupDoneFor(ResourceID resourceID, Map<String, Object> metadata) {
128137
incrementCounter(resourceID, "events.delete", metadata);
129138

130-
// schedule deletion of meters associated with ResourceID
131-
metersCleaner.schedule(() -> {
132-
// remove each meter
133-
final var toClean = metersPerResource.get(resourceID);
134-
if (toClean != null) {
135-
toClean.forEach(registry::remove);
136-
}
137-
// then clean-up local recording of associations
138-
metersPerResource.remove(resourceID);
139-
}, cleanUpDelayInSeconds, TimeUnit.SECONDS);
139+
cleaner.removeMetersFor(resourceID);
140140
}
141141

142142
@Override
@@ -231,4 +231,42 @@ private void incrementCounter(ResourceID id, String counterName, Map<String, Obj
231231
protected Set<Meter.Id> recordedMeterIdsFor(ResourceID resourceID) {
232232
return metersPerResource.get(resourceID);
233233
}
234+
235+
private interface Cleaner {
236+
void removeMetersFor(ResourceID resourceID);
237+
}
238+
239+
private void removeMetersFor(ResourceID resourceID) {
240+
// remove each meter
241+
final var toClean = metersPerResource.get(resourceID);
242+
if (toClean != null) {
243+
toClean.forEach(registry::remove);
244+
}
245+
// then clean-up local recording of associations
246+
metersPerResource.remove(resourceID);
247+
}
248+
249+
private class NoDelayCleaner implements Cleaner {
250+
@Override
251+
public void removeMetersFor(ResourceID resourceID) {
252+
MicrometerMetrics.this.removeMetersFor(resourceID);
253+
}
254+
}
255+
256+
private class DelayedCleaner implements Cleaner {
257+
private final ScheduledExecutorService metersCleaner;
258+
private final int cleanUpDelayInSeconds;
259+
260+
private DelayedCleaner(int cleanUpDelayInSeconds, int cleaningThreadsNumber) {
261+
this.cleanUpDelayInSeconds = cleanUpDelayInSeconds;
262+
this.metersCleaner = Executors.newScheduledThreadPool(cleaningThreadsNumber);
263+
}
264+
265+
@Override
266+
public void removeMetersFor(ResourceID resourceID) {
267+
// schedule deletion of meters associated with ResourceID
268+
metersCleaner.schedule(() -> MicrometerMetrics.this.removeMetersFor(resourceID),
269+
cleanUpDelayInSeconds, TimeUnit.SECONDS);
270+
}
271+
}
234272
}

0 commit comments

Comments
 (0)