From e68b499fab138086c7d5d49363f31e5944765a9a Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Tue, 6 Feb 2018 16:19:19 +0100 Subject: Add Direct call DCAE. Rework the logs to add info, and add a method for DCAE direct call Issue-ID: CLAMP-85,CLAMP-90 Change-Id: Id75c89e1788a0ed829582a67013570003f5bf204 Signed-off-by: Determe, Sebastien (sd378r) --- .../clamp/clds/client/DcaeInventoryServices.java | 110 +++++++++++++++++---- 1 file changed, 89 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index 53d17aaf..94ebacae 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,12 +26,16 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.Date; import java.util.List; +import javax.ws.rs.BadRequestException; + import org.apache.commons.codec.DecoderException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -48,23 +52,20 @@ import org.onap.clamp.clds.util.LoggingUtils; import org.springframework.beans.factory.annotation.Autowired; /** - * * This class implements the communication with DCAE for the service inventory. - * - * - * */ public class DcaeInventoryServices { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + private static final String DCAE_INVENTORY_URL = "DCAE_INVENTORY_URL"; @Autowired - private RefProp refProp; + private RefProp refProp; @Autowired - private CldsDao cldsDao; + private CldsDao cldsDao; /** - * * Set the event inventory. * * @param cldsModel @@ -89,13 +90,7 @@ public class DcaeInventoryServices { artifactName = artifactName + ".yml"; } try { - /* - * - * Below are the properties required for calling the dcae inventory - * - * url call - * - */ + // Below are the properties required for calling the dcae inventory ModelProperties prop = new ModelProperties(cldsModel.getName(), cldsModel.getControlName(), null, false, "{}", cldsModel.getPropText()); Global global = prop.getGlobal(); @@ -105,14 +100,19 @@ public class DcaeInventoryServices { if (resourceUuidList != null && !resourceUuidList.isEmpty()) { resourceUuid = resourceUuidList.get(0); } - /* Invemtory service url is called in this method */ + /* Inventory service url is called in this method */ isDcaeInfoAvailable = getDcaeInformation(artifactName, invariantServiceUuid, resourceUuid); /* set dcae events */ dcaeEvent.setArtifactName(artifactName); dcaeEvent.setEvent(DcaeEvent.EVENT_DISTRIBUTION); + LoggingUtils.setResponseContext("0", "Set inventory success", this.getClass().getName()); } catch (JsonProcessingException e) { + LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Set inventory error"); logger.error("Error during JSON decoding", e); } catch (IOException ex) { + LoggingUtils.setResponseContext("900", "Set inventory failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Set inventory error"); logger.error("Error during DCAE communication", ex); } finally { LoggingUtils.setTimeContext(startTime, new Date()); @@ -135,7 +135,8 @@ public class DcaeInventoryServices { if (jsonObj.get("typeName") != null) { cldsModel.setTypeName(jsonObj.get("typeName").toString()); } - if (oldTypeId == null || !oldTypeId.equalsIgnoreCase(newTypeId)) { + if (oldTypeId == null || !oldTypeId.equalsIgnoreCase(newTypeId) + || cldsModel.getEvent().getActionCd().equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE)) { CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), userId, dcaeEvent.getCldsActionCd(), CldsEvent.ACTION_STATE_RECEIVED, null); } @@ -159,7 +160,6 @@ public class DcaeInventoryServices { * In case of issues with the stream * @throws ParseException * In case of issues with the Json parsing - * */ public String getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid) throws IOException, ParseException { @@ -167,7 +167,7 @@ public class DcaeInventoryServices { LoggingUtils.setTargetContext("DCAE", "getDcaeInformation"); String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName=" + artifactName; - String fullUrl = refProp.getStringValue("DCAE_INVENTORY_URL") + "/dcae-service-types" + queryString; + String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString; logger.info("Dcae Inventory Service full url - " + fullUrl); String daceInventoryResponse = null; String responseStr = DcaeHttpConnectionManager.doDcaeHttpQuery(fullUrl, "GET", null, null); @@ -184,8 +184,76 @@ public class DcaeInventoryServices { daceInventoryResponse = dcaeServiceType0.toString(); logger.info(daceInventoryResponse); } + LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName()); LoggingUtils.setTimeContext(startTime, new Date()); metricsLogger.info("getDcaeInformation complete: number services returned=" + numServices); return daceInventoryResponse; } + + /** + * Inserts a new DCAEServiceType or updates an existing instance. If the + * typeName is same second time(already exists) then the + * DCAEServiceTypeRequest is updated + * + * @param blueprintTemplate + * blueprint content + * @param owner + * owner of the data + * @param typeName + * The type/artifact Name + * @param typeVersion + * type version + * @param asdcServiceId + * The service UUID + * @param asdcResourceId + * The vf UUID + * @return The DCAE inventory type id + */ + public String createUpdateDCAEServiceType(String blueprintTemplate, String owner, String typeName, int typeVersion, + String asdcServiceId, String asdcResourceId) { + Date startTime = new Date(); + LoggingUtils.setTargetContext("DCAE", "createDCAEServiceType"); + String typeId = null; + try { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode dcaeServiceTypeRequest = mapper.createObjectNode(); + dcaeServiceTypeRequest.put("blueprintTemplate", blueprintTemplate); + dcaeServiceTypeRequest.put("owner", owner); + dcaeServiceTypeRequest.put("typeName", typeName); + dcaeServiceTypeRequest.put("typeVersion", typeVersion); + dcaeServiceTypeRequest.put("asdcServiceId", asdcServiceId); + dcaeServiceTypeRequest.put("asdcResourceId", asdcResourceId); + String apiBodyString = dcaeServiceTypeRequest.toString(); + logger.info("Dcae api Body String - " + apiBodyString); + String url = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types"; + String responseStr = DcaeHttpConnectionManager.doDcaeHttpQuery(url, "POST", apiBodyString, + "application/json"); + // If the DCAEServiceTypeRequest is created successfully it will + // return a json object responce containing a node for newly created + // "typeId" + // The newly generated DCAEServiceTypeRequest can then be accessed + // via URL: https:///dcae-service-types/ + JSONParser parser = new JSONParser(); + Object obj0 = parser.parse(responseStr); + JSONObject jsonObj = (JSONObject) obj0; + typeId = (String) jsonObj.get("typeId"); // need to save this + // as + // service_type_id + // in model table + } catch (IOException | ParseException e) { + logger.error("Exception occurred during createupdateDCAEServiceType Operation with DCAE", e); + throw new BadRequestException("Exception occurred during createupdateDCAEServiceType Operation with DCAE", + e); + } finally { + if(typeId != null) { + LoggingUtils.setResponseContext("0", "Create update DCAE ServiceType success", this.getClass().getName()); + } else { + LoggingUtils.setResponseContext("900", "Create update DCAE ServiceType failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Create update DCAE ServiceType error"); + } + LoggingUtils.setTimeContext(startTime, new Date()); + metricsLogger.info("createupdateDCAEServiceType complete"); + } + return typeId; + } } -- cgit 1.2.3-korg