package com.workshare.msnos.usvc;
import java.util.Arrays;
import java.util.Collections;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;
import com.workshare.msnos.core.MsnosException;
import com.workshare.msnos.core.PassiveAgent;
import com.workshare.msnos.core.geo.Location;
import com.workshare.msnos.usvc.api.RestApi;
public class PassiveService implements IMicroservice {
private final Microcloud cloud;
private final String name;
private final String host;
private final String healthCheckUri;
private final int port;
private final PassiveAgent agent;
private final Set<RestApi> apis;
private final Location location;
public PassiveService(Microcloud cloud, String name, String host, int port, String healthCheckUri) throws IllegalArgumentException {
this.cloud = cloud;
this.name = name;
this.host = host;
this.port = port;
this.healthCheckUri = healthCheckUri;
this.agent = new PassiveAgent(cloud.getCloud(), UUID.randomUUID());
this.apis = new CopyOnWriteArraySet<RestApi>();
this.location = Location.computeLocation(host);
}
@Override
public PassiveAgent getAgent() {
return agent;
}
@Override
public String getName() {
return name;
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public String getHealthCheckUri() {
return healthCheckUri;
}
public UUID getUuid() {
return agent.getIden().getUUID();
}
public void join() throws MsnosException {
cloud.onJoin(this);
}
public void publish(RestApi... newApis) throws MsnosException {
cloud.publish(this, newApis);
apis.addAll(Arrays.asList(newApis));
}
@Override
public Set<RestApi> getApis() {
return Collections.unmodifiableSet(apis);
}
@Override
public Location getLocation() {
return location;
}
}