\r
package org.onap.clamp.clds.client;\r
\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+import com.fasterxml.jackson.databind.node.ObjectNode;\r
+\r
import java.io.BufferedReader;\r
import java.io.DataOutputStream;\r
+import java.io.IOException;\r
import java.io.InputStream;\r
import java.io.InputStreamReader;\r
import java.net.URL;\r
+import java.util.Date;\r
import java.util.stream.Collectors;\r
\r
import javax.net.ssl.HttpsURLConnection;\r
+import javax.ws.rs.BadRequestException;\r
\r
import org.json.simple.JSONObject;\r
import org.json.simple.parser.JSONParser;\r
+import org.onap.clamp.clds.exception.DcaeDeploymentException;\r
import org.onap.clamp.clds.model.refprop.RefProp;\r
+import org.onap.clamp.clds.util.LoggingUtils;\r
import org.springframework.beans.factory.annotation.Autowired;\r
\r
-import com.att.eelf.configuration.EELFLogger;\r
-import com.att.eelf.configuration.EELFManager;\r
-\r
/**\r
- *\r
+ * This class implements the communication with DCAE for the service\r
+ * deployments.\r
*\r
*/\r
public class DcaeDispatcherServices {\r
protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();\r
\r
@Autowired\r
- private RefProp refProp;\r
+ private RefProp refProp;\r
\r
/**\r
- *\r
+ * Delete the deployment on DCAE.\r
+ * \r
* @param deploymentId\r
- * @return\r
- * @throws Exception\r
+ * The deployment ID\r
+ * @return Return the URL Status\r
+ * @throws IOException\r
+ * In case of issues with the Stream\r
*/\r
- public String deleteDeployment(String deploymentId) throws Exception {\r
+ public String deleteDeployment(String deploymentId) throws IOException {\r
\r
String statusUrl = null;\r
InputStream in = null;\r
+ Date startTime = new Date();\r
+ LoggingUtils.setTargetContext("DCAE", "deleteDeployment");\r
try {\r
String url = refProp.getStringValue("DCAE_DISPATCHER_URL") + "/dcae-deployments/" + deploymentId;\r
logger.info("Dcae Dispatcher url - " + url);\r
URL obj = new URL(url);\r
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();\r
+ conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
conn.setRequestMethod("DELETE");\r
int responseCode = conn.getResponseCode();\r
\r
if (inStream != null) {\r
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inStream));\r
String inputLine = null;\r
- StringBuffer response = new StringBuffer();\r
+ StringBuilder response = new StringBuilder();\r
while ((inputLine = bufferedReader.readLine()) != null) {\r
response.append(inputLine);\r
}\r
responseStr = response.toString();\r
}\r
\r
- if (responseStr != null) {\r
- if (requestFailed) {\r
- logger.error("requestFailed - responseStr=" + responseStr);\r
- throw new Exception(responseStr);\r
- }\r
+ if (responseStr != null && requestFailed) {\r
+ logger.error("requestFailed - responseStr=" + responseStr);\r
+ throw new BadRequestException(responseStr);\r
}\r
\r
logger.debug("response code " + responseCode);\r
logger.debug("Status URL: " + statusUrl);\r
\r
} catch (Exception e) {\r
- logger.error(e.getClass().getName() + " " + e.getMessage());\r
- throw e;\r
+ logger.error("Exception occurred during Delete Deployment Operation with DCAE", e);\r
+ throw new DcaeDeploymentException("Exception occurred during Delete Deployment Operation with DCAE", e);\r
} finally {\r
if (in != null) {\r
in.close();\r
}\r
+ LoggingUtils.setTimeContext(startTime, new Date());\r
+ metricsLogger.info("deleteDeployment complete");\r
}\r
\r
return statusUrl;\r
}\r
\r
/**\r
- *\r
+ * Get the Operation Status from a specified URL.\r
+ * \r
* @param statusUrl\r
- * @return\r
- * @throws Exception\r
+ * The URL provided by a previous DCAE Query\r
+ * @return The status\r
+ * @throws IOException\r
+ * In case of issues with the Stream\r
+ * \r
*/\r
- public String getOperationStatus(String statusUrl) throws Exception {\r
+ public String getOperationStatus(String statusUrl) throws IOException {\r
\r
- //Assigning processing status to monitor operation status further\r
+ // Assigning processing status to monitor operation status further\r
String opStatus = "processing";\r
InputStream in = null;\r
+ Date startTime = new Date();\r
+ LoggingUtils.setTargetContext("DCAE", "getOperationStatus");\r
try {\r
URL obj = new URL(statusUrl);\r
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();\r
conn.setRequestMethod("GET");\r
+ conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
int responseCode = conn.getResponseCode();\r
logger.debug("Deployment operation status response code - " + responseCode);\r
- if(responseCode == 200){\r
+ if (responseCode == 200) {\r
in = conn.getInputStream();\r
String res = new BufferedReader(new InputStreamReader(in)).lines().collect(Collectors.joining("\n"));\r
JSONParser parser = new JSONParser();\r
opStatus = status;\r
}\r
} catch (Exception e) {\r
- logger.debug(e.getClass().getName() + " " + e.getMessage());\r
+ logger.error("Exception occurred during getOperationStatus Operation with DCAE", e);\r
logger.debug(e.getMessage()\r
+ " : got exception while retrieving status, trying again until we get 200 response code");\r
} finally {\r
if (in != null) {\r
in.close();\r
}\r
+ LoggingUtils.setTimeContext(startTime, new Date());\r
+ metricsLogger.info("getOperationStatus complete");\r
}\r
-\r
return opStatus;\r
}\r
\r
/**\r
- *\r
- * @throws Exception\r
+ * This method send a getDeployments operation to DCAE.\r
+ * \r
+ * @throws IOException\r
+ * In case of issues with the Stream\r
*/\r
- public void getDeployments() throws Exception {\r
+ public void getDeployments() throws IOException {\r
InputStream in = null;\r
+ Date startTime = new Date();\r
+ LoggingUtils.setTargetContext("DCAE", "getDeployments");\r
try {\r
String url = refProp.getStringValue("DCAE_DISPATCHER_URL") + "/dcae-deployments";\r
logger.info("Dcae Dispatcher deployments url - " + url);\r
URL obj = new URL(url);\r
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();\r
conn.setRequestMethod("GET");\r
+ conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
int responseCode = conn.getResponseCode();\r
logger.debug("response code " + responseCode);\r
in = conn.getInputStream();\r
String res = new BufferedReader(new InputStreamReader(in)).lines().collect(Collectors.joining("\n"));\r
logger.debug("res:" + res);\r
} catch (Exception e) {\r
- logger.error("Exception occurred during DCAE communication", e);\r
- throw e;\r
+ logger.error("Exception occurred during getDeployments Operation with DCAE", e);\r
+ throw new DcaeDeploymentException("Exception occurred during getDeployments Operation with DCAE", e);\r
} finally {\r
if (in != null) {\r
in.close();\r
}\r
+ LoggingUtils.setTimeContext(startTime, new Date());\r
+ metricsLogger.info("getDeployments complete");\r
}\r
}\r
\r
/**\r
- * Returns status URL for deployment operation\r
+ * Returns status URL for createNewDeployment operation.\r
*\r
* @param deploymentId\r
+ * The deployment ID\r
* @param serviceTypeId\r
- * @return\r
- * @throws Exception\r
+ * Service type ID\r
+ * @return The status URL\r
+ * @throws IOException\r
+ * In case of issues with the Stream\r
*/\r
- public String createNewDeployment(String deploymentId, String serviceTypeId) throws Exception {\r
+ public String createNewDeployment(String deploymentId, String serviceTypeId) throws IOException {\r
\r
String statusUrl = null;\r
InputStream inStream = null;\r
BufferedReader in = null;\r
+ Date startTime = new Date();\r
+ LoggingUtils.setTargetContext("DCAE", "createNewDeployment");\r
try {\r
- String apiBodyString = "{\"serviceTypeId\": \"" + serviceTypeId + "\"}";\r
+ ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("dcae.deployment.template");\r
+ ((ObjectNode) rootNode).put("serviceTypeId", serviceTypeId);\r
+ String apiBodyString = rootNode.toString();\r
+\r
logger.info("Dcae api Body String - " + apiBodyString);\r
String url = refProp.getStringValue("DCAE_DISPATCHER_URL") + "/dcae-deployments/" + deploymentId;\r
logger.info("Dcae Dispatcher Service url - " + url);\r
URL obj = new URL(url);\r
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();\r
conn.setRequestMethod("PUT");\r
+ conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
conn.setRequestProperty("Content-Type", "application/json");\r
conn.setDoOutput(true);\r
try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {\r
\r
String inputLine = null;\r
\r
- StringBuffer response = new StringBuffer();\r
+ StringBuilder response = new StringBuilder();\r
\r
while ((inputLine = in.readLine()) != null) {\r
response.append(inputLine);\r
responseStr = response.toString();\r
}\r
\r
- if (responseStr != null) {\r
- if (requestFailed) {\r
- logger.error("requestFailed - responseStr=" + responseStr);\r
- throw new Exception(responseStr);\r
- }\r
+ if (responseStr != null && requestFailed) {\r
+ logger.error("requestFailed - responseStr=" + responseStr);\r
+ throw new BadRequestException(responseStr);\r
}\r
\r
logger.debug("response code " + responseCode);\r
statusUrl = (String) linksObj.get("status");\r
logger.debug("Status URL: " + statusUrl);\r
} catch (Exception e) {\r
- logger.error("Exception occurred during the DCAE communication", e);\r
- throw e;\r
+ logger.error("Exception occurred during createNewDeployment Operation with DCAE", e);\r
+ throw new DcaeDeploymentException("Exception occurred during createNewDeployment Operation with DCAE", e);\r
} finally {\r
if (inStream != null) {\r
inStream.close();\r
if (in != null) {\r
in.close();\r
}\r
+ LoggingUtils.setTimeContext(startTime, new Date());\r
+ metricsLogger.info("createNewDeployment complete");\r
}\r
return statusUrl;\r
}\r
\r
/**\r
- *\r
+ * Returns status URL for deleteExistingDeployment operation.\r
+ * \r
* @param deploymentId\r
+ * The deployment ID\r
* @param serviceTypeId\r
- * @return\r
- * @throws Exception\r
+ * The service Type ID\r
+ * @return The status URL\r
+ * @throws IOException\r
+ * In case of issues with the Stream\r
*/\r
- public String deleteExistingDeployment(String deploymentId, String serviceTypeId) throws Exception {\r
+ public String deleteExistingDeployment(String deploymentId, String serviceTypeId) throws IOException {\r
\r
String statusUrl = null;\r
InputStream in = null;\r
+ Date startTime = new Date();\r
+ LoggingUtils.setTargetContext("DCAE", "deleteExistingDeployment");\r
try {\r
String apiBodyString = "{\"serviceTypeId\": \"" + serviceTypeId + "\"}";\r
logger.debug(apiBodyString);\r
URL obj = new URL(url);\r
HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();\r
conn.setRequestMethod("DELETE");\r
+ conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
conn.setRequestProperty("Content-Type", "application/json");\r
conn.setDoOutput(true);\r
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());\r
statusUrl = (String) linksObj.get("status");\r
logger.debug("Status URL: " + statusUrl);\r
} catch (Exception e) {\r
- logger.error("Exception occurred during DCAE communication", e);\r
- throw e;\r
+ logger.error("Exception occurred during deleteExistingDeployment Operation with DCAE", e);\r
+ throw new DcaeDeploymentException("Exception occurred during deleteExistingDeployment Operation with DCAE",\r
+ e);\r
} finally {\r
if (in != null) {\r
in.close();\r
}\r
+ LoggingUtils.setTimeContext(startTime, new Date());\r
+ metricsLogger.info("deleteExistingDeployment complete");\r
}\r
return statusUrl;\r
}\r