package org.netmelody.cieye.spies.jenkins; import static com.google.common.cache.CacheLoader.from; import java.util.concurrent.ExecutionException; import org.netmelody.cieye.spies.jenkins.jsondomain.JobDetail; import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; import com.google.common.cache.LoadingCache; public final class BuildStartTimeFetcher { private final LoadingCache<String, Long> timestamps; public BuildStartTimeFetcher(final BuildDetailFetcher detailFetcher) { timestamps = CacheBuilder.newBuilder() .maximumSize(10) .build(from(new Function<String, Long>() { public Long apply(String buildUrl) { return detailFetcher.detailsOf(buildUrl).timestamp; } })); } public long lastStartTimeOf(final JobDetail job) { if (job.lastBuild == null) { return 0L; } try { return timestamps.get(job.lastBuild.url); } catch (ExecutionException e) { return 0L; } } }