package io.airlift.airship.coordinator; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; import io.airlift.airship.shared.AgentLifecycleState; import io.airlift.airship.shared.AgentStatus; import io.airlift.airship.shared.AgentStatusRepresentation; import io.airlift.airship.shared.InstallationRepresentation; import io.airlift.airship.shared.SlotStatus; import io.airlift.airship.shared.SlotStatusRepresentation; import io.airlift.discovery.client.ServiceDescriptorsRepresentation; import io.airlift.http.client.AsyncHttpClient; import io.airlift.json.JsonCodec; import io.airlift.node.NodeInfo; public class HttpRemoteAgentFactory implements RemoteAgentFactory { private final String environment; private final AsyncHttpClient httpClient; private final JsonCodec<InstallationRepresentation> installationCodec; private final JsonCodec<AgentStatusRepresentation> agentStatusCodec; private final JsonCodec<SlotStatusRepresentation> slotStatusCodec; private final JsonCodec<ServiceDescriptorsRepresentation> serviceDescriptorsCodec; @Inject public HttpRemoteAgentFactory(NodeInfo nodeInfo, @Global AsyncHttpClient httpClient, JsonCodec<InstallationRepresentation> installationCodec, JsonCodec<SlotStatusRepresentation> slotStatusCodec, JsonCodec<AgentStatusRepresentation> agentStatusCodec, JsonCodec<ServiceDescriptorsRepresentation> serviceDescriptorsCodec) { environment = nodeInfo.getEnvironment(); this.httpClient = httpClient; this.agentStatusCodec = agentStatusCodec; this.installationCodec = installationCodec; this.slotStatusCodec = slotStatusCodec; this.serviceDescriptorsCodec = serviceDescriptorsCodec; } @Override public RemoteAgent createRemoteAgent(Instance instance, AgentLifecycleState state) { AgentStatus agentStatus = new AgentStatus(null, state, instance.getInstanceId(), instance.getInternalUri(), instance.getExternalUri(), instance.getLocation(), instance.getInstanceType(), ImmutableList.<SlotStatus>of(), ImmutableMap.<String, Integer>of()); return new HttpRemoteAgent(agentStatus, environment, httpClient, installationCodec, agentStatusCodec, slotStatusCodec, serviceDescriptorsCodec); } }