package org.oransc.enrichment.repository;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
-import org.immutables.gson.Gson;
-import org.immutables.value.Value;
+import lombok.Getter;
-@Value.Immutable
-@Gson.TypeAdapters
-public interface EiProducer {
- public String id();
+public class EiProducer {
+ @Getter
+ private final String id;
- public Collection<EiType> eiTypes();
+ @Getter
+ private final Collection<EiType> eiTypes;
- public String jobCreationCallbackUrl();
+ @Getter
+ private final String jobCallbackUrl;
- public String jobDeletionCallbackUrl();
+ @Getter
+ private final String producerSupervisionCallbackUrl;
+
+ private final Set<String> enabledJobs = new HashSet<>();
+
+ private int unresponsiveCounter = 0;
+
+ public EiProducer(String id, Collection<EiType> eiTypes, String jobCallbackUrl,
+ String producerSupervisionCallbackUrl) {
+ this.id = id;
+ this.eiTypes = eiTypes;
+ this.jobCallbackUrl = jobCallbackUrl;
+ this.producerSupervisionCallbackUrl = producerSupervisionCallbackUrl;
+ }
+
+ public synchronized void setAliveStatus(boolean isAlive) {
+ if (isAlive) {
+ unresponsiveCounter = 0;
+ } else {
+ unresponsiveCounter++;
+ }
+ }
+
+ public synchronized boolean isDead() {
+ return this.unresponsiveCounter >= 3;
+ }
+
+ public synchronized boolean isAvailable() {
+ return this.unresponsiveCounter == 0;
+ }
+
+ public synchronized void setJobEnabled(EiJob job) {
+ this.enabledJobs.add(job.getId());
+ }
+
+ public synchronized void setJobDisabled(EiJob job) {
+ this.enabledJobs.remove(job.getId());
+ }
+
+ synchronized boolean isJobEnabled(EiJob job) {
+ return this.enabledJobs.contains(job.getId());
+ }
}