package netflix.ocelli.client; import java.util.concurrent.ConcurrentMap; import rx.Observable; import rx.functions.Func1; import rx.subjects.PublishSubject; import com.google.common.collect.Maps; public class ManualFailureDetector implements Func1<TestClient, Observable<Throwable>> { private ConcurrentMap<TestClient, PublishSubject<Throwable>> clients = Maps.newConcurrentMap(); @Override public Observable<Throwable> call(TestClient client) { PublishSubject<Throwable> subject = PublishSubject.create(); PublishSubject<Throwable> prev = clients.putIfAbsent(client, subject); if (prev != null) { subject = prev; } return subject; } public PublishSubject<Throwable> get(TestClient client) { return clients.get(client); } }