Add logging to the StartLevelService (#4577)

Signed-off-by: Jörg Sautter <joerg.sautter@gmx.net>
pull/4605/head
joerg1985 2025-02-15 22:15:19 +01:00 committed by GitHub
parent d5590ff87c
commit a94908c305
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 11 additions and 6 deletions

View File

@ -13,12 +13,14 @@
package org.openhab.core.service; package org.openhab.core.service;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.SequencedMap;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
@ -98,7 +100,7 @@ public class StartLevelService {
private int openHABStartLevel = 0; private int openHABStartLevel = 0;
private Map<Integer, Set<ReadyMarker>> startlevels = Map.of(); private SequencedMap<Integer, Set<ReadyMarker>> startlevels = Collections.emptySortedMap();
@Activate @Activate
public StartLevelService(BundleContext bundleContext, @Reference ReadyService readyService, public StartLevelService(BundleContext bundleContext, @Reference ReadyService readyService,
@ -116,9 +118,11 @@ public class StartLevelService {
handleOSGiStartlevel(); handleOSGiStartlevel();
if (openHABStartLevel >= 10) { if (openHABStartLevel >= 10) {
for (Integer level : new TreeSet<>(startlevels.keySet())) { for (Entry<Integer, Set<ReadyMarker>> entry : startlevels.entrySet()) {
Integer level = entry.getKey();
if (openHABStartLevel < level) { if (openHABStartLevel < level) {
boolean reached = isStartLevelReached(startlevels.get(level)); Set<ReadyMarker> markerSet = entry.getValue();
boolean reached = isStartLevelReached(level, markerSet);
if (reached) { if (reached) {
setStartLevel(level); setStartLevel(level);
} else { } else {
@ -142,12 +146,13 @@ public class StartLevelService {
return openHABStartLevel; return openHABStartLevel;
} }
private boolean isStartLevelReached(@Nullable Set<ReadyMarker> markerSet) { private boolean isStartLevelReached(Integer level, @Nullable Set<ReadyMarker> markerSet) {
if (markerSet == null) { if (markerSet == null) {
return true; return true;
} }
for (ReadyMarker m : markerSet) { for (ReadyMarker m : markerSet) {
if (!markers.contains(m)) { if (!markers.contains(m)) {
logger.debug("Missing marker {} for start level {}", m, level);
return false; return false;
} }
} }
@ -173,7 +178,7 @@ public class StartLevelService {
trackers.clear(); trackers.clear();
// set up trackers and markers // set up trackers and markers
startlevels = parseConfig(configuration); startlevels = Collections.unmodifiableSequencedMap(new TreeMap<>(parseConfig(configuration)));
startlevels.keySet() startlevels.keySet()
.forEach(sl -> slmarker.put(sl, new ReadyMarker(STARTLEVEL_MARKER_TYPE, Integer.toString(sl)))); .forEach(sl -> slmarker.put(sl, new ReadyMarker(STARTLEVEL_MARKER_TYPE, Integer.toString(sl))));
slmarker.put(STARTLEVEL_COMPLETE, slmarker.put(STARTLEVEL_COMPLETE,