
pl.allegro.tech.hermes.management.domain.readiness.ReadinessService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hermes-management Show documentation
Show all versions of hermes-management Show documentation
Fast and reliable message broker built on top of Kafka.
package pl.allegro.tech.hermes.management.domain.readiness;
import static pl.allegro.tech.hermes.api.DatacenterReadiness.ReadinessStatus.READY;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import pl.allegro.tech.hermes.api.DatacenterReadiness;
import pl.allegro.tech.hermes.management.domain.dc.MultiDatacenterRepositoryCommandExecutor;
public class ReadinessService {
private final MultiDatacenterRepositoryCommandExecutor commandExecutor;
private final DatacenterReadinessRepository readinessRepository;
private final List datacenters;
public ReadinessService(
MultiDatacenterRepositoryCommandExecutor commandExecutor,
DatacenterReadinessRepository readinessRepository,
List datacenters) {
this.commandExecutor = commandExecutor;
this.readinessRepository = readinessRepository;
this.datacenters = datacenters;
}
public void setReady(DatacenterReadiness datacenterReadiness) {
Map current = getReadiness();
Map toSave = new HashMap<>();
for (String datacenter : datacenters) {
toSave.put(datacenter, current.get(datacenter));
}
toSave.put(datacenterReadiness.getDatacenter(), datacenterReadiness);
List readiness =
toSave.values().stream().filter(Objects::nonNull).toList();
commandExecutor.execute(new SetReadinessCommand(readiness));
}
public List getDatacentersReadiness() {
Map current = getReadiness();
Map result = new HashMap<>();
for (String datacenter : datacenters) {
DatacenterReadiness datacenterReadiness = current.get(datacenter);
if (datacenterReadiness == null) {
result.put(datacenter, new DatacenterReadiness(datacenter, READY));
} else {
result.put(datacenter, datacenterReadiness);
}
}
return result.values().stream().toList();
}
private Map getReadiness() {
return readinessRepository.getReadiness().stream()
.collect(Collectors.toMap(DatacenterReadiness::getDatacenter, Function.identity()));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy