package com.sequenceiq.cloudbreak.orchestrator.yarn.handler; import java.net.MalformedURLException; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException; import com.sequenceiq.cloudbreak.orchestrator.model.ContainerConfig; import com.sequenceiq.cloudbreak.orchestrator.model.ContainerConstraint; import com.sequenceiq.cloudbreak.orchestrator.model.ContainerInfo; import com.sequenceiq.cloudbreak.orchestrator.model.OrchestrationCredential; import com.sequenceiq.cloudbreak.orchestrator.yarn.client.YarnHttpClient; import com.sequenceiq.cloudbreak.orchestrator.yarn.model.request.ApplicationDetailRequest; import com.sequenceiq.cloudbreak.orchestrator.yarn.model.response.ApplicationErrorResponse; import com.sequenceiq.cloudbreak.orchestrator.yarn.model.response.ResponseContext; import com.sequenceiq.cloudbreak.orchestrator.yarn.util.ApplicationUtils; @Service public class ApplicationDetailHandler { @Inject private ApplicationUtils applicationUtils; public ContainerInfo getContainerInfo(ContainerConfig config, OrchestrationCredential cred, ContainerConstraint constraint, int componentNumber) throws CloudbreakOrchestratorFailedException { String applicationName = applicationUtils.getApplicationName(constraint, componentNumber); // Build the ApplicationDetailRequest ApplicationDetailRequest applicationDetailRequest = new ApplicationDetailRequest(); applicationDetailRequest.setName(applicationName); try { // Validate that the app exists YarnHttpClient yarnHttpClient = new YarnHttpClient(cred.getApiEndpoint()); ResponseContext appDetailResponseContext = yarnHttpClient.getApplicationDetail(applicationDetailRequest); if (appDetailResponseContext.getResponseError() != null) { ApplicationErrorResponse applicationErrorResponse = appDetailResponseContext.getResponseError(); throw new CloudbreakOrchestratorFailedException(String.format("ERROR: HTTP Return: %d Error: %s.", appDetailResponseContext.getStatusCode(), applicationErrorResponse.getDiagnostics())); } // Return the details String componentHostName = applicationUtils.getComponentHostName(constraint, cred, componentNumber); String image = String.format("%s:%s", config.getName(), config.getVersion()); return new ContainerInfo(applicationName, applicationName, componentHostName, image); } catch (MalformedURLException e) { String msg = String.format("ERROR: URL is malformed: %s", cred.getApiEndpoint()); throw new CloudbreakOrchestratorFailedException(msg, e); } } }