package de.otto.edison.status.indicator;
import de.otto.edison.status.domain.*;
import javax.annotation.PostConstruct;
import java.util.List;
import static de.otto.edison.status.domain.ApplicationStatus.applicationStatus;
import static java.util.stream.Collectors.toList;
/**
* A caching ApplicationStatusAggregator.
*
* @author Guido Steinacker
* @since 13.02.15
*/
public class CachedApplicationStatusAggregator implements ApplicationStatusAggregator {
private volatile ApplicationStatus cachedStatus;
private final List<StatusDetailIndicator> indicators;
public CachedApplicationStatusAggregator(final ApplicationStatus applicationStatus,
final List<StatusDetailIndicator> indicators) {
this.cachedStatus = applicationStatus;
this.indicators = indicators;
}
@Override
public ApplicationStatus aggregatedStatus() {
return cachedStatus;
}
@Override
public void update() {
cachedStatus = applicationStatus(
cachedStatus.application,
cachedStatus.cluster,
cachedStatus.system,
cachedStatus.vcs,
cachedStatus.team,
indicators
.stream()
.flatMap(i -> i.statusDetails().stream())
.collect(toList()),
cachedStatus.serviceSpecs);
}
}