package io.airlift.airship.coordinator;
import com.google.inject.Inject;
import io.airlift.airship.shared.CoordinatorLifecycleState;
import io.airlift.airship.shared.CoordinatorStatus;
import io.airlift.airship.shared.CoordinatorStatusRepresentation;
import io.airlift.http.client.AsyncHttpClient;
import io.airlift.json.JsonCodec;
import io.airlift.node.NodeInfo;
public class HttpRemoteCoordinatorFactory
implements RemoteCoordinatorFactory
{
private final String environment;
private final AsyncHttpClient httpClient;
private final JsonCodec<CoordinatorStatusRepresentation> coordinatorStatusCodec;
@Inject
public HttpRemoteCoordinatorFactory(NodeInfo nodeInfo,
@Global AsyncHttpClient httpClient,
JsonCodec<CoordinatorStatusRepresentation> coordinatorStatusCodec)
{
environment = nodeInfo.getEnvironment();
this.coordinatorStatusCodec = coordinatorStatusCodec;
this.httpClient = httpClient;
}
@Override
public RemoteCoordinator createRemoteCoordinator(Instance instance, CoordinatorLifecycleState state)
{
CoordinatorStatus coordinatorStatus = new CoordinatorStatus(null,
state,
instance.getInstanceId(),
instance.getInternalUri(),
instance.getExternalUri(),
instance.getLocation(),
instance.getInstanceType());
return new HttpRemoteCoordinator(coordinatorStatus, environment, httpClient, coordinatorStatusCodec);
}
}