diff --git a/application/src/main/java/de/cotto/lndmanagej/service/OwnNodeService.java b/application/src/main/java/de/cotto/lndmanagej/service/OwnNodeService.java index 7dc444eb..684d12a2 100644 --- a/application/src/main/java/de/cotto/lndmanagej/service/OwnNodeService.java +++ b/application/src/main/java/de/cotto/lndmanagej/service/OwnNodeService.java @@ -1,17 +1,41 @@ package de.cotto.lndmanagej.service; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import de.cotto.lndmanagej.grpc.GrpcGetInfo; import org.springframework.stereotype.Component; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.concurrent.TimeUnit; + @Component public class OwnNodeService { + private static final int CACHE_EXPIRY_SECONDS = 30; + private final GrpcGetInfo grpcGetInfo; + private final LoadingCache syncedToChainCache; public OwnNodeService(GrpcGetInfo grpcGetInfo) { this.grpcGetInfo = grpcGetInfo; + CacheLoader loader = new CacheLoader<>() { + @Nonnull + @Override + public Boolean load(@Nullable String ignored) { + return isSyncedToChainWithoutCache(); + } + }; + syncedToChainCache = CacheBuilder.newBuilder() + .expireAfterWrite(CACHE_EXPIRY_SECONDS, TimeUnit.SECONDS) + .build(loader); } public boolean isSyncedToChain() { + return syncedToChainCache.getUnchecked(""); + } + + private boolean isSyncedToChainWithoutCache() { return grpcGetInfo.isSyncedToChain().orElse(false); } }