diff options
Diffstat (limited to 'src/main/java/org/onap')
-rw-r--r-- | src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java | 2599 |
1 files changed, 1299 insertions, 1300 deletions
diff --git a/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java b/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java index e3d10c756..365e3a699 100644 --- a/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java +++ b/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java @@ -1,1300 +1,1299 @@ -/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
- * reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END============================================
- * ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-
-package org.onap.clamp.clds.client;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.node.TextNode;
-
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.ws.rs.BadRequestException;
-
-import org.apache.commons.csv.CSVFormat;
-import org.apache.commons.csv.CSVRecord;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.clamp.clds.client.req.SdcReq;
-import org.onap.clamp.clds.exception.SdcCommunicationException;
-import org.onap.clamp.clds.model.CldsAlarmCondition;
-import org.onap.clamp.clds.model.CldsDBServiceCache;
-import org.onap.clamp.clds.model.CldsSdcArtifact;
-import org.onap.clamp.clds.model.CldsSdcResource;
-import org.onap.clamp.clds.model.CldsSdcResourceBasicInfo;
-import org.onap.clamp.clds.model.CldsSdcServiceDetail;
-import org.onap.clamp.clds.model.CldsSdcServiceInfo;
-import org.onap.clamp.clds.model.CldsServiceData;
-import org.onap.clamp.clds.model.CldsVfData;
-import org.onap.clamp.clds.model.CldsVfKPIData;
-import org.onap.clamp.clds.model.CldsVfcData;
-import org.onap.clamp.clds.model.prop.Global;
-import org.onap.clamp.clds.model.prop.ModelProperties;
-import org.onap.clamp.clds.model.refprop.RefProp;
-import org.onap.clamp.clds.util.LoggingUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class SdcCatalogServices {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcCatalogServices.class);
- protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-
- private static final String RESOURCE_VF_TYPE = "VF";
- private static final String RESOURCE_VFC_TYPE = "VFC";
-
- @Autowired
- private RefProp refProp;
-
- /**
- * This method get the SDC services Information with the corresponding
- * Service UUID.
- *
- * @param uuid
- * The service UUID
- * @return A Json String with all the service list
- */
- public String getSdcServicesInformation(String uuid) {
- Date startTime = new Date();
- String baseUrl = refProp.getStringValue("sdc.serviceUrl");
- String basicAuth = SdcReq.getSdcBasicAuth(refProp);
- LoggingUtils.setTargetContext("SDC", "getSdcServicesInformation");
-
- try {
- String url = baseUrl;
- if (uuid != null) {
- url = baseUrl + "/" + uuid + "/metadata";
- }
- URL urlObj = new URL(url);
-
- HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
-
- conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
- conn.setRequestProperty("Authorization", basicAuth);
- conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
- conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
- conn.setRequestMethod("GET");
-
- String resp = getResponse(conn);
- if (resp != null) {
- logger.info(resp.toString());
- // metrics log
- LoggingUtils.setResponseContext("0", "Get sdc services success", this.getClass().getName());
- return resp;
- }
- } catch (IOException e) {
- LoggingUtils.setResponseContext("900", "Get sdc services failed", this.getClass().getName());
- LoggingUtils.setErrorContext("900", "Get sdc services error");
- logger.error("not able to get any service information from sdc for uuid:" + uuid, e);
- } finally {
- LoggingUtils.setTimeContext(startTime, new Date());
- metricsLogger.info("getSdcServicesInformation complete");
- }
-
- return "";
- }
-
- /**
- * To remove duplicate serviceUUIDs from sdc services List.
- *
- * @param rawCldsSdcServiceList
- * A list of CldsSdcServiceInfo
- * @return A list of CldsSdcServiceInfo without duplicate service UUID
- */
- public List<CldsSdcServiceInfo> removeDuplicateServices(List<CldsSdcServiceInfo> rawCldsSdcServiceList) {
- List<CldsSdcServiceInfo> cldsSdcServiceInfoList = null;
- if (rawCldsSdcServiceList != null && !rawCldsSdcServiceList.isEmpty()) {
- // sort list
- Collections.sort(rawCldsSdcServiceList);
- // and then take only the services with the max version (last in the
- // list with the same name)
- cldsSdcServiceInfoList = new ArrayList<>();
- for (int i = 1; i < rawCldsSdcServiceList.size(); i++) {
- // compare name with previous - if not equal, then keep the
- // previous (it's the last with that name)
- CldsSdcServiceInfo prev = rawCldsSdcServiceList.get(i - 1);
- if (!rawCldsSdcServiceList.get(i).getName().equals(prev.getName())) {
- cldsSdcServiceInfoList.add(prev);
- }
- }
- // add the last in the list
- cldsSdcServiceInfoList.add(rawCldsSdcServiceList.get(rawCldsSdcServiceList.size() - 1));
- }
- return cldsSdcServiceInfoList;
- }
-
- /**
- * To remove duplicate serviceUUIDs from sdc resources List.
- *
- * @param rawCldsSdcResourceList
- * @return
- */
- public List<CldsSdcResource> removeDuplicateSdcResourceInstances(List<CldsSdcResource> rawCldsSdcResourceList) {
- List<CldsSdcResource> cldsSdcResourceList = null;
- if (rawCldsSdcResourceList != null && !rawCldsSdcResourceList.isEmpty()) {
- // sort list
- Collections.sort(rawCldsSdcResourceList);
- // and then take only the resources with the max version (last in
- // the list with the same name)
- cldsSdcResourceList = new ArrayList<>();
- for (int i = 1; i < rawCldsSdcResourceList.size(); i++) {
- // compare name with previous - if not equal, then keep the
- // previous (it's the last with that name)
- CldsSdcResource prev = rawCldsSdcResourceList.get(i - 1);
- if (!rawCldsSdcResourceList.get(i).getResourceInstanceName().equals(prev.getResourceInstanceName())) {
- cldsSdcResourceList.add(prev);
- }
- }
- // add the last in the list
- cldsSdcResourceList.add(rawCldsSdcResourceList.get(rawCldsSdcResourceList.size() - 1));
- }
- return cldsSdcResourceList;
- }
-
- /**
- * To remove duplicate basic resources with same resourceUUIDs.
- *
- * @param rawCldsSdcResourceListBasicList
- * @return
- */
- public List<CldsSdcResourceBasicInfo> removeDuplicateSdcResourceBasicInfo(
- List<CldsSdcResourceBasicInfo> rawCldsSdcResourceListBasicList) {
- List<CldsSdcResourceBasicInfo> cldsSdcResourceBasicInfoList = null;
- if (rawCldsSdcResourceListBasicList != null && !rawCldsSdcResourceListBasicList.isEmpty()) {
- // sort list
- Collections.sort(rawCldsSdcResourceListBasicList);
- // and then take only the resources with the max version (last in
- // the list with the same name)
- cldsSdcResourceBasicInfoList = new ArrayList<>();
- for (int i = 1; i < rawCldsSdcResourceListBasicList.size(); i++) {
- // compare name with previous - if not equal, then keep the
- // previous (it's the last with that name)
- CldsSdcResourceBasicInfo prev = rawCldsSdcResourceListBasicList.get(i - 1);
- if (!rawCldsSdcResourceListBasicList.get(i).getName().equals(prev.getName())) {
- cldsSdcResourceBasicInfoList.add(prev);
- }
- }
- // add the last in the list
- cldsSdcResourceBasicInfoList
- .add(rawCldsSdcResourceListBasicList.get(rawCldsSdcResourceListBasicList.size() - 1));
- }
- return cldsSdcResourceBasicInfoList;
- }
-
- /**
- * To get ServiceUUID by using serviceInvariantUUID.
- *
- * @param invariantId
- * The invariant ID
- * @return The service UUID
- */
- public String getServiceUuidFromServiceInvariantId(String invariantId) {
- String serviceUuid = "";
- String responseStr = getSdcServicesInformation(null);
- List<CldsSdcServiceInfo> rawCldsSdcServicesList = getCldsSdcServicesListFromJson(responseStr);
- List<CldsSdcServiceInfo> cldsSdcServicesList = removeDuplicateServices(rawCldsSdcServicesList);
- if (cldsSdcServicesList != null && !cldsSdcServicesList.isEmpty()) {
- for (CldsSdcServiceInfo currCldsSdcServiceInfo : cldsSdcServicesList) {
- if (currCldsSdcServiceInfo != null && currCldsSdcServiceInfo.getInvariantUUID() != null
- && currCldsSdcServiceInfo.getInvariantUUID().equalsIgnoreCase(invariantId)) {
- serviceUuid = currCldsSdcServiceInfo.getUuid();
- break;
- }
- }
- }
- return serviceUuid;
- }
-
- /**
- * To get CldsAsdsServiceInfo class by parsing json string.
- *
- * @param jsonStr
- * The Json string that must be decoded
- * @return The list of CldsSdcServiceInfo, if there is a failure it return
- * an empty list
- */
- public List<CldsSdcServiceInfo> getCldsSdcServicesListFromJson(String jsonStr) {
- ObjectMapper objectMapper = new ObjectMapper();
- if (StringUtils.isBlank(jsonStr)) {
- return new ArrayList<>();
- }
- try {
- return objectMapper.readValue(jsonStr,
- objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcServiceInfo.class));
- } catch (IOException e) {
- logger.error("Error when attempting to decode the JSON containing CldsSdcServiceInfo", e);
- return new ArrayList<>();
- }
- }
-
- /**
- * To get List of CldsSdcResourceBasicInfo class by parsing json string.
- *
- * @param jsonStr
- * The JSOn string that must be decoded
- * @return The list of CldsSdcResourceBasicInfo, an empty list in case of
- * issues
- */
- public List<CldsSdcResourceBasicInfo> getAllSdcResourcesListFromJson(String jsonStr) {
- ObjectMapper objectMapper = new ObjectMapper();
- if (StringUtils.isBlank(jsonStr)) {
- return new ArrayList<>();
- }
-
- try {
- return objectMapper.readValue(jsonStr,
- objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcResourceBasicInfo.class));
- } catch (IOException e) {
- logger.error("Exception occurred when attempting to decode the list of CldsSdcResourceBasicInfo JSON", e);
- return new ArrayList<>();
- }
- }
-
- /**
- * To get CldsAsdsResource class by parsing json string.
- *
- * @param jsonStr
- * @return
- * @throws IOException
- */
- public CldsSdcResource getCldsSdcResourceFromJson(String jsonStr) throws IOException {
- ObjectMapper objectMapper = new ObjectMapper();
- return objectMapper.readValue(jsonStr, CldsSdcResource.class);
- }
-
- /**
- * To get CldsSdcServiceDetail by parsing json string.
- *
- * @param jsonStr
- * @return
- */
- public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) {
- ObjectMapper objectMapper = new ObjectMapper();
- try {
- return objectMapper.readValue(jsonStr, CldsSdcServiceDetail.class);
- } catch (IOException e) {
- logger.error("Exception when attempting to decode the CldsSdcServiceDetail JSON", e);
- return null;
- }
- }
-
- /**
- * To upload artifact to sdc based on serviceUUID and resource name on url.
- *
- * @param prop
- * @param userid
- * @param url
- * @param formattedSdcReq
- * @return
- */
- public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatttedSdcReq) {
- // Verify whether it is triggered by Validation Test button from UI
- if (prop.isTest()) {
- return "sdc artifact upload not executed for test action";
- }
- try {
- logger.info("userid=" + userid);
- String md5Text = SdcReq.calculateMD5ByString(formatttedSdcReq);
- byte[] postData = SdcReq.stringToByteArray(formatttedSdcReq);
- int postDataLength = postData.length;
- HttpURLConnection conn = getSdcHttpUrlConnection(userid, postDataLength, url, md5Text);
- try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
- wr.write(postData);
- }
- boolean requestFailed = true;
- int responseCode = conn.getResponseCode();
- logger.info("responseCode=" + responseCode);
- if (responseCode == 200) {
- requestFailed = false;
- }
-
- String responseStr = getResponse(conn);
- if (responseStr != null && requestFailed) {
- logger.error("requestFailed - responseStr=" + responseStr);
- throw new BadRequestException(responseStr);
- }
- return responseStr;
- } catch (IOException e) {
- logger.error("Exception when attempting to communicate with SDC", e);
- throw new SdcCommunicationException("Exception when attempting to communicate with SDC", e);
- }
-
- }
-
- private HttpURLConnection getSdcHttpUrlConnection(String userid, int postDataLength, String url, String md5Text) {
- try {
- logger.info("userid=" + userid);
- String basicAuth = SdcReq.getSdcBasicAuth(refProp);
- String sdcXonapInstanceId = refProp.getStringValue("sdc.sdcX-InstanceID");
- URL urlObj = new URL(url);
- HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
- conn.setDoOutput(true);
- conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), sdcXonapInstanceId);
- conn.setRequestProperty("Authorization", basicAuth);
- conn.setRequestProperty("Content-Type", "application/json");
- conn.setRequestProperty("Content-MD5", md5Text);
- conn.setRequestProperty("USER_ID", userid);
- conn.setRequestMethod("POST");
- conn.setRequestProperty("charset", "utf-8");
- conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
- conn.setUseCaches(false);
- conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
- return conn;
- } catch (IOException e) {
- logger.error("Exception when attempting to open connection with SDC", e);
- throw new SdcCommunicationException("Exception when attempting to open connection with SDC", e);
- }
- }
-
- private String getResponse(HttpURLConnection conn) {
- try (InputStream is = getInputStream(conn)) {
- if (is != null) {
- try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) {
- StringBuilder response = new StringBuilder();
- String inputLine;
- while ((inputLine = in.readLine()) != null) {
- response.append(inputLine);
- }
- return response.toString();
- }
- } else {
- return null;
- }
- } catch (IOException e) {
- logger.error("Exception when attempting to open SDC response", e);
- throw new SdcCommunicationException("Exception when attempting to open SDC response", e);
- }
- }
-
- private InputStream getInputStream(HttpURLConnection conn) {
- try {
- InputStream inStream = conn.getErrorStream();
- if (inStream == null) {
- inStream = conn.getInputStream();
- }
- return inStream;
- } catch (IOException e) {
- logger.error("Exception when attempting to open SDC error stream", e);
- throw new SdcCommunicationException("Exception when attempting to open SDC error stream", e);
- }
- }
-
- public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) {
- try {
- CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache();
- cldsDbServiceCache.setCldsDataInstream(cldsServiceData);
- cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID());
- cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID());
- return cldsDbServiceCache;
- } catch (IOException e) {
- logger.error("Exception when getting service in cache", e);
- throw new SdcCommunicationException("Exception when getting service in cache", e);
- }
- }
-
- public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData) {
- boolean expired = false;
- if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {
- String cachedServiceUuid = cldsServiceData.getServiceUUID();
- String latestServiceUuid = getServiceUuidFromServiceInvariantId(cldsServiceData.getServiceInvariantUUID());
- String defaultRecordAge = refProp.getStringValue("CLDS_SERVICE_CACHE_MAX_SECONDS");
- if ((!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null
- && cldsServiceData.getAgeOfRecord() > Long.parseLong(defaultRecordAge))) {
- expired = true;
- }
- } else {
- expired = true;
- }
- return expired;
- }
-
- public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) {
- String url = refProp.getStringValue("sdc.serviceUrl");
- String catalogUrl = refProp.getStringValue("sdc.catalog.url");
- String serviceUuid = getServiceUuidFromServiceInvariantId(invariantServiceUuid);
- String serviceDetailUrl = url + "/" + serviceUuid + "/metadata";
- String responseStr = getCldsServicesOrResourcesBasedOnURL(serviceDetailUrl, false);
- ObjectMapper objectMapper = new ObjectMapper();
- CldsServiceData cldsServiceData = new CldsServiceData();
- if (responseStr != null) {
- CldsSdcServiceDetail cldsSdcServiceDetail;
- try {
- cldsSdcServiceDetail = objectMapper.readValue(responseStr, CldsSdcServiceDetail.class);
- } catch (IOException e) {
- logger.error("Exception when decoding the CldsServiceData JSON from SDC", e);
- throw new SdcCommunicationException("Exception when decoding the CldsServiceData JSON from SDC", e);
- }
- cldsServiceData.setServiceUUID(cldsSdcServiceDetail.getUuid());
- cldsServiceData.setServiceInvariantUUID(cldsSdcServiceDetail.getInvariantUUID());
-
- // To remove duplicate resources from serviceDetail and add valid
- // vfs to service
- if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null) {
- List<CldsSdcResource> cldsSdcResourceList = removeDuplicateSdcResourceInstances(
- cldsSdcServiceDetail.getResources());
- if (cldsSdcResourceList != null && !cldsSdcResourceList.isEmpty()) {
- List<CldsVfData> cldsVfDataList = new ArrayList<>();
- for (CldsSdcResource currCldsSdcResource : cldsSdcResourceList) {
- if (currCldsSdcResource != null && currCldsSdcResource.getResoucreType() != null
- && "VF".equalsIgnoreCase(currCldsSdcResource.getResoucreType())) {
- CldsVfData currCldsVfData = new CldsVfData();
- currCldsVfData.setVfName(currCldsSdcResource.getResourceInstanceName());
- currCldsVfData.setVfInvariantResourceUUID(currCldsSdcResource.getResourceInvariantUUID());
- cldsVfDataList.add(currCldsVfData);
- }
- }
- cldsServiceData.setCldsVfs(cldsVfDataList);
- // For each vf in the list , add all vfc's
- getAllVfcForVfList(cldsVfDataList, catalogUrl);
- logger.info("value of cldsServiceData:" + cldsServiceData);
- logger.info("value of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID());
- }
- }
- }
- return cldsServiceData;
- }
-
- private void getAllVfcForVfList(List<CldsVfData> cldsVfDataList, String catalogUrl) {
- // todo : refact this..
- if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {
- List<CldsSdcResourceBasicInfo> allVfResources = getAllSdcVForVfcResourcesBasedOnResourceType(
- RESOURCE_VF_TYPE);
- List<CldsSdcResourceBasicInfo> allVfcResources = getAllSdcVForVfcResourcesBasedOnResourceType(
- RESOURCE_VFC_TYPE);
- for (CldsVfData currCldsVfData : cldsVfDataList) {
- if (currCldsVfData != null && currCldsVfData.getVfInvariantResourceUUID() != null) {
- String resourceUuid = getResourceUuidFromResourceInvariantUuid(
- currCldsVfData.getVfInvariantResourceUUID(), allVfResources);
- if (resourceUuid != null) {
- String vfResourceUuidUrl = catalogUrl + "resources" + "/" + resourceUuid + "/metadata";
- String vfResponse = getCldsServicesOrResourcesBasedOnURL(vfResourceUuidUrl, false);
- if (vfResponse != null) {
- // Below 2 line are to get the KPI(field path) data
- // associated with the VF's
- List<CldsVfKPIData> cldsVfKPIDataList = getFieldPathFromVF(vfResponse);
- currCldsVfData.setCldsKPIList(cldsVfKPIDataList);
-
- List<CldsVfcData> vfcDataListFromVfResponse = getVfcDataListFromVfResponse(vfResponse);
- if (vfcDataListFromVfResponse != null) {
- currCldsVfData.setCldsVfcs(vfcDataListFromVfResponse);
- if (!vfcDataListFromVfResponse.isEmpty()) {
- // To get artifacts for every VFC and get
- // alarm conditions from artifact
- for (CldsVfcData currCldsVfcData : vfcDataListFromVfResponse) {
- if (currCldsVfcData != null
- && currCldsVfcData.getVfcInvariantResourceUUID() != null) {
- String resourceVfcUuid = getResourceUuidFromResourceInvariantUuid(
- currCldsVfcData.getVfcInvariantResourceUUID(), allVfcResources);
- if (resourceVfcUuid != null) {
- String vfcResourceUuidUrl = catalogUrl + "resources" + "/"
- + resourceVfcUuid + "/metadata";
- String vfcResponse = getCldsServicesOrResourcesBasedOnURL(
- vfcResourceUuidUrl, false);
- if (vfcResponse != null) {
- List<CldsAlarmCondition> alarmCondtionsFromVfc = getAlarmCondtionsFromVfc(
- vfcResponse);
- currCldsVfcData.setCldsAlarmConditions(alarmCondtionsFromVfc);
- }
- } else {
- logger.info("No resourceVFC UUID found for given invariantID:"
- + currCldsVfcData.getVfcInvariantResourceUUID());
- }
- }
- }
- }
- }
- }
- } else {
- logger.info("No resourceUUID found for given invariantREsourceUUID:"
- + currCldsVfData.getVfInvariantResourceUUID());
- }
- }
- }
- }
- }
-
- private List<CldsVfcData> getVfcDataListFromVfResponse(String vfResponse) {
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode vfResponseNode;
- try {
- vfResponseNode = (ObjectNode) mapper.readTree(vfResponse);
- } catch (IOException e) {
- logger.error("Exception when decoding the JSON list of CldsVfcData", e);
- return new ArrayList<>();
- }
- ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources");
- List<CldsVfcData> cldsVfcDataList = new ArrayList<>();
- if (vfcArrayNode != null) {
- for (JsonNode vfcjsonNode : vfcArrayNode) {
- CldsVfcData currCldsVfcData = new CldsVfcData();
- ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;
- TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");
- if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
- TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
- TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID");
- currCldsVfcData.setVfcName(vfcResourceName.textValue());
- currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue());
- cldsVfcDataList.add(currCldsVfcData);
- } else if (resourceTypeNode != null && "CVFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
- cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue()));
- }
- }
- }
- return cldsVfcDataList;
- }
-
- private List<CldsVfcData> getVFCfromCVFC(String resourceUUID) {
- String catalogUrl = refProp.getStringValue("sdc.catalog.url");
- List<CldsVfcData> cldsVfcDataList = new ArrayList<>();
-
- if (resourceUUID != null) {
- String vfcResourceUUIDUrl = catalogUrl + "resources" + "/" + resourceUUID + "/metadata";
- try {
- String vfcResponse = getCldsServicesOrResourcesBasedOnURL(vfcResourceUUIDUrl, false);
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfcResponse);
- ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources");
-
- if (vfcArrayNode != null) {
- for (JsonNode vfcjsonNode : vfcArrayNode) {
- CldsVfcData currCldsVfcData = new CldsVfcData();
- ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;
- TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");
- if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
- TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
- TextNode vfcInvariantResourceUUID = (TextNode) currVfcNode.get("resourceInvariantUUID");
- currCldsVfcData.setVfcName(vfcResourceName.textValue());
- currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUUID.textValue());
- cldsVfcDataList.add(currCldsVfcData);
- }
- }
- }
- } catch (IOException e) {
- logger.error("Exception during JSON analyzis", e);
- }
- }
- return cldsVfcDataList;
- }
-
- private String removeUnwantedBracesFromString(String id) {
- return (id != null) ? id.replaceAll("\"", "") : "";
- }
-
- private List<CldsAlarmCondition> getAlarmCondtionsFromVfc(String vfcResponse) {
- List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode vfcResponseNode;
- try {
- vfcResponseNode = (ObjectNode) mapper.readTree(vfcResponse);
- } catch (IOException e) {
- logger.error("Exception when decoding the JSON list of CldsAlarmCondition", e);
- return cldsAlarmConditionList;
- }
- ArrayNode artifactsArrayNode = (ArrayNode) vfcResponseNode.get("artifacts");
-
- if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) {
- for (int index = 0; index < artifactsArrayNode.size(); index++) {
- ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);
- TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");
- if (artifactUrlNode != null) {
- String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());
- cldsAlarmConditionList.addAll(parseCsvToGetAlarmConditions(responsesFromArtifactUrl));
- logger.info(responsesFromArtifactUrl);
- }
- }
- }
- return cldsAlarmConditionList;
- }
-
- private List<CldsAlarmCondition> parseCsvToGetAlarmConditions(String allAlarmCondsValues) {
- try {
- List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();
- Reader alarmReader = new StringReader(allAlarmCondsValues);
- Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader);
- if (records != null) {
- Iterator<CSVRecord> it = records.iterator();
- if (it.hasNext()) {
- it.next();
- }
- it.forEachRemaining(record -> processRecord(cldsAlarmConditionList, record));
- }
- return cldsAlarmConditionList;
- } catch (IOException e) {
- logger.error("Exception when attempting to parse the CSV containing the alarm", e);
- return new ArrayList<>();
- }
- }
-
- // Method to get the artifact for any particular VF
- private List<CldsVfKPIData> getFieldPathFromVF(String vfResponse) {
- List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode vfResponseNode;
- try {
- vfResponseNode = (ObjectNode) mapper.readTree(vfResponse);
- } catch (IOException e) {
- logger.error("Exception when decoding the JSON list of CldsVfKPIData", e);
- return cldsVfKPIDataList;
- }
- ArrayNode artifactsArrayNode = (ArrayNode) vfResponseNode.get("artifacts");
-
- if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) {
- for (int index = 0; index < artifactsArrayNode.size(); index++) {
- ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);
- TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");
- TextNode artifactNameNode = (TextNode) currArtifactNode.get("artifactName");
- String artifactName = "";
- if (artifactNameNode != null) {
- artifactName = artifactNameNode.textValue();
- artifactName = artifactName.substring(artifactName.lastIndexOf('.') + 1);
- }
- if (artifactUrlNode != null && artifactName != null && !artifactName.isEmpty()
- && artifactName.equalsIgnoreCase("csv")) {
- String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());
- cldsVfKPIDataList.addAll(parseCsvToGetFieldPath(responsesFromArtifactUrl));
- logger.info(responsesFromArtifactUrl);
- }
- }
- }
- return cldsVfKPIDataList;
- }
-
- private CldsVfKPIData convertCsvRecordToKpiData(CSVRecord record) {
- if (record.size() < 6) {
- logger.debug("invalid csv field path Record,total columns less than 6: " + record);
- return null;
- }
-
- if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))
- || StringUtils.isBlank(record.get(5))) {
- logger.debug("Invalid csv field path Record,one of column is having blank value : " + record);
- return null;
- }
-
- CldsVfKPIData cldsVfKPIData = new CldsVfKPIData();
- cldsVfKPIData.setNfNamingCode(record.get(0).trim());
- cldsVfKPIData.setNfNamingValue(record.get(1).trim());
-
- cldsVfKPIData.setFieldPath(record.get(2).trim());
- cldsVfKPIData.setFieldPathValue(record.get(3).trim());
-
- cldsVfKPIData.setThresholdName(record.get(4).trim());
- cldsVfKPIData.setThresholdValue(record.get(5).trim());
- return cldsVfKPIData;
-
- }
-
- // Method to get the artifactURL Data and set the CldsVfKPIData node
- private List<CldsVfKPIData> parseCsvToGetFieldPath(String allFieldPathValues) {
- try {
- List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();
- Reader alarmReader = new StringReader(allFieldPathValues);
- Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader);
- if (records != null) {
- for (CSVRecord record : records) {
- CldsVfKPIData kpiData = this.convertCsvRecordToKpiData(record);
- if (kpiData != null) {
- cldsVfKPIDataList.add(kpiData);
- }
- }
- }
- return cldsVfKPIDataList;
- } catch (IOException e) {
- logger.error("Exception when attempting to parse the CSV containing the alarm kpi data", e);
- return new ArrayList<>();
- }
- }
-
- private void processRecord(List<CldsAlarmCondition> cldsAlarmConditionList, CSVRecord record) {
- if (record == null) {
- return;
- }
- if (record.size() < 5) {
- logger.debug("invalid csv alarm Record,total columns less than 5: " + record);
- return;
- }
- if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))
- || StringUtils.isBlank(record.get(4))) {
- logger.debug("invalid csv alarm Record,one of column is having blank value : " + record);
- return;
- }
- CldsAlarmCondition cldsAlarmCondition = new CldsAlarmCondition();
- cldsAlarmCondition.setEventSourceType(record.get(1));
- cldsAlarmCondition.setEventName(record.get(2));
- cldsAlarmCondition.setAlarmConditionKey(record.get(3));
- cldsAlarmCondition.setSeverity(record.get(4));
- cldsAlarmConditionList.add(cldsAlarmCondition);
- }
-
- public String getResponsesFromArtifactUrl(String artifactsUrl) {
- String hostUrl = refProp.getStringValue("sdc.hostUrl");
- String artifactsUrlReworked = artifactsUrl.replaceAll("\"", "");
- String artifactUrl = hostUrl + artifactsUrlReworked;
- logger.info("value of artifactURl:" + artifactUrl);
- String currArtifactResponse = getCldsServicesOrResourcesBasedOnURL(artifactUrl, true);
- logger.info("value of artifactResponse:" + currArtifactResponse);
- return currArtifactResponse;
- }
-
- /**
- * Service to services/resources/artifacts from sdc.Pass alarmConditions as
- * true to get alarmconditons from artifact url and else it is false
- *
- * @param url
- * @param alarmConditions
- * @return
- */
- public String getCldsServicesOrResourcesBasedOnURL(String url, boolean alarmConditions) {
- Date startTime = new Date();
- try {
- LoggingUtils.setTargetContext("SDC", "getCldsServicesOrResourcesBasedOnURL");
- String urlReworked = removeUnwantedBracesFromString(url);
- URL urlObj = new URL(urlReworked);
-
- HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
- String basicAuth = SdcReq.getSdcBasicAuth(refProp);
- conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
- conn.setRequestProperty("Authorization", basicAuth);
- conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
- conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
- conn.setRequestMethod("GET");
-
- int responseCode = conn.getResponseCode();
- logger.info("Sdc resource url - " + urlReworked + " , responseCode=" + responseCode);
- StringBuilder response;
- try (BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
- response = new StringBuilder();
- String inputLine;
- while ((inputLine = in.readLine()) != null) {
- if (!inputLine.isEmpty()) {
- response.append(inputLine);
- }
- if (alarmConditions) {
- response.append("\n");
- }
- }
- }
- LoggingUtils.setResponseContext("0", "Get sdc resources success", this.getClass().getName());
- return response.toString();
- } catch (IOException e) {
- LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
- LoggingUtils.setErrorContext("900", "Get sdc resources error");
- logger.error("Exception occurred during query to SDC", e);
- return "";
- } finally {
- LoggingUtils.setTimeContext(startTime, new Date());
- metricsLogger.info("getCldsServicesOrResourcesBasedOnURL completed");
- }
-
- }
-
- /**
- * To create properties object by using cldsServicedata.
- *
- * @param globalProps
- * @param cldsServiceData
- * @return
- */
- public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) {
- String totalPropsStr;
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode globalPropsJson;
- if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {
-
- // Objectnode to save all byservice, byvf , byvfc and byalarm nodes
- ObjectNode byIdObjectNode = mapper.createObjectNode();
-
- // To create vf ResourceUUID node with serviceInvariantUUID
- ObjectNode invariantUuidObjectNodeWithVf = createVfObjectNodeByServiceInvariantUuid(mapper,
- cldsServiceData);
- byIdObjectNode.putPOJO("byService", invariantUuidObjectNodeWithVf);
-
- // To create byVf and vfcResourceNode with vfResourceUUID
- ObjectNode vfcObjectNodeByVfUuid = createVfcObjectNodeByVfUuid(mapper, cldsServiceData.getCldsVfs());
- byIdObjectNode.putPOJO("byVf", vfcObjectNodeByVfUuid);
-
- // To create byKpi
- ObjectNode kpiObjectNode = mapper.createObjectNode();
- if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {
- for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
- if (currCldsVfData != null) {
- createKpiObjectNodeByVfUuid(mapper, kpiObjectNode, currCldsVfData.getCldsKPIList());
- }
- }
- }
- byIdObjectNode.putPOJO("byKpi", kpiObjectNode);
-
- // To create byVfc and alarmCondition with vfcResourceUUID
- ObjectNode vfcResourceUuidObjectNode = mapper.createObjectNode();
- if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {
- for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
- if (currCldsVfData != null) {
- createAlarmCondObjectNodeByVfcUuid(mapper, vfcResourceUuidObjectNode,
- currCldsVfData.getCldsVfcs());
- }
- }
- }
- byIdObjectNode.putPOJO("byVfc", vfcResourceUuidObjectNode);
-
- // To create byAlarmCondition with alarmConditionKey
- List<CldsAlarmCondition> allAlarmConditions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,
- "alarmCondition");
- ObjectNode alarmCondObjectNodeByAlarmKey = createAlarmCondObjectNodeByAlarmKey(mapper, allAlarmConditions);
-
- byIdObjectNode.putPOJO("byAlarmCondition", alarmCondObjectNodeByAlarmKey);
-
- // To create byAlertDescription with AlertDescription
- List<CldsAlarmCondition> allAlertDescriptions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,
- "alertDescription");
- ObjectNode alertDescObjectNodeByAlert = createAlarmCondObjectNodeByAlarmKey(mapper, allAlertDescriptions);
-
- byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert);
-
- globalPropsJson = decodeGlobalProp(globalProps, mapper);
-
- globalPropsJson.putPOJO("shared", byIdObjectNode);
- logger.info("value of objNode:" + globalPropsJson);
- } else {
- /**
- * to create json with total properties when no serviceUUID passed
- */
- globalPropsJson = decodeGlobalProp(globalProps, mapper);
- }
- totalPropsStr = globalPropsJson.toString();
- return totalPropsStr;
- }
-
- private ObjectNode decodeGlobalProp(String globalProps, ObjectMapper mapper) {
- try {
- return (ObjectNode) mapper.readValue(globalProps, JsonNode.class);
- } catch (IOException e) {
- logger.error("Exception occurred during decoding of the global props, returning an empty objectNode", e);
- return mapper.createObjectNode();
- }
- }
-
- /**
- * Method to get alarm conditions/alert description from Service Data.
- *
- * @param cldsServiceData
- * CldsServiceData the Service Data to analyze
- * @param eventName
- * The String event name that will be used to filter the alarm
- * list
- * @return The list of CldsAlarmCondition for the event name specified
- */
- public List<CldsAlarmCondition> getAllAlarmConditionsFromCldsServiceData(CldsServiceData cldsServiceData,
- String eventName) {
- List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
- if (cldsServiceData != null && cldsServiceData.getCldsVfs() != null
- && !cldsServiceData.getCldsVfs().isEmpty()) {
- for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
- alarmCondList.addAll(getAllAlarmConditionsFromCldsVfData(currCldsVfData, eventName));
- }
- }
- return alarmCondList;
- }
-
- /**
- * Method to get alarm conditions/alert description from VF Data.
- *
- * @param currCldsVfData
- * The Vf Data to analyze
- * @param eventName
- * The String event name that will be used to filter the alarm
- * list
- * @return The list of CldsAlarmCondition for the event name specified
- */
- private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfData(CldsVfData currCldsVfData, String eventName) {
- List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
-
- if (currCldsVfData != null && currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {
- for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {
- alarmCondList.addAll(getAllAlarmConditionsFromCldsVfcData(currCldsVfcData, eventName));
- }
- }
- return alarmCondList;
- }
-
- /**
- * Method to get alarm conditions/alert description from VFC Data.
- *
- * @param currCldsVfcData
- * The VfC Data to analyze
- * @param eventName
- * The String event name that will be used to filter the alarm
- * list
- * @return The list of CldsAlarmCondition for the event name specified
- */
- private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfcData(CldsVfcData currCldsVfcData,
- String eventName) {
- List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
-
- if (currCldsVfcData != null && currCldsVfcData.getCldsAlarmConditions() != null
- && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {
- for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {
- if (currCldsAlarmCondition != null
- && currCldsAlarmCondition.getEventName().equalsIgnoreCase(eventName)) {
- alarmCondList.add(currCldsAlarmCondition);
- }
- }
- }
- return alarmCondList;
- }
-
- private ObjectNode createAlarmCondObjectNodeByAlarmKey(ObjectMapper mapper,
- List<CldsAlarmCondition> cldsAlarmCondList) {
- ObjectNode alarmCondKeyNode = mapper.createObjectNode();
-
- if (cldsAlarmCondList != null && !cldsAlarmCondList.isEmpty()) {
- for (CldsAlarmCondition currCldsAlarmCondition : cldsAlarmCondList) {
- if (currCldsAlarmCondition != null) {
- ObjectNode alarmCondNode = mapper.createObjectNode();
- alarmCondNode.put("eventSourceType", currCldsAlarmCondition.getEventSourceType());
- alarmCondNode.put("eventSeverity", currCldsAlarmCondition.getSeverity());
- alarmCondKeyNode.putPOJO(currCldsAlarmCondition.getAlarmConditionKey(), alarmCondNode);
- }
- }
- } else {
- ObjectNode alarmCondNode = mapper.createObjectNode();
- alarmCondNode.put("eventSourceType", "");
- alarmCondNode.put("eventSeverity", "");
- alarmCondKeyNode.putPOJO("", alarmCondNode);
- }
- return alarmCondKeyNode;
- }
-
- private ObjectNode createVfObjectNodeByServiceInvariantUuid(ObjectMapper mapper, CldsServiceData cldsServiceData) {
- ObjectNode invariantUuidObjectNode = mapper.createObjectNode();
- ObjectNode vfObjectNode = mapper.createObjectNode();
- ObjectNode vfUuidNode = mapper.createObjectNode();
- List<CldsVfData> cldsVfsList = cldsServiceData.getCldsVfs();
- if (cldsVfsList != null && !cldsVfsList.isEmpty()) {
- for (CldsVfData currCldsVfData : cldsVfsList) {
- if (currCldsVfData != null) {
- vfUuidNode.put(currCldsVfData.getVfInvariantResourceUUID(), currCldsVfData.getVfName());
- }
- }
- } else {
- vfUuidNode.put("", "");
- }
- vfObjectNode.putPOJO("vf", vfUuidNode);
- invariantUuidObjectNode.putPOJO(cldsServiceData.getServiceInvariantUUID(), vfObjectNode);
- return invariantUuidObjectNode;
- }
-
- private void createKpiObjectNodeByVfUuid(ObjectMapper mapper, ObjectNode vfResourceUuidObjectNode,
- List<CldsVfKPIData> cldsVfKpiDataList) {
- if (cldsVfKpiDataList != null && !cldsVfKpiDataList.isEmpty()) {
- for (CldsVfKPIData currCldsVfKpiData : cldsVfKpiDataList) {
- if (currCldsVfKpiData != null) {
- ObjectNode thresholdNameObjectNode = mapper.createObjectNode();
-
- ObjectNode fieldPathObjectNode = mapper.createObjectNode();
- ObjectNode nfNamingCodeNode = mapper.createObjectNode();
-
- fieldPathObjectNode.put(currCldsVfKpiData.getFieldPathValue(),
- currCldsVfKpiData.getFieldPathValue());
- nfNamingCodeNode.put(currCldsVfKpiData.getNfNamingValue(), currCldsVfKpiData.getNfNamingValue());
-
- thresholdNameObjectNode.putPOJO("fieldPath", fieldPathObjectNode);
- thresholdNameObjectNode.putPOJO("nfNamingCode", nfNamingCodeNode);
-
- vfResourceUuidObjectNode.putPOJO(currCldsVfKpiData.getThresholdValue(), thresholdNameObjectNode);
- }
- }
- }
- }
-
- private void createAlarmCondObjectNodeByVfcUuid(ObjectMapper mapper, ObjectNode vfcResourceUuidObjectNode,
- List<CldsVfcData> cldsVfcDataList) {
- ObjectNode vfcObjectNode = mapper.createObjectNode();
- ObjectNode alarmCondNode = mapper.createObjectNode();
- ObjectNode alertDescNode = mapper.createObjectNode();
- if (cldsVfcDataList != null && !cldsVfcDataList.isEmpty()) {
- for (CldsVfcData currCldsVfcData : cldsVfcDataList) {
- if (currCldsVfcData != null) {
- if (currCldsVfcData.getCldsAlarmConditions() != null
- && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {
- for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {
- alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
- currCldsAlarmCondition.getAlarmConditionKey());
- if (currCldsAlarmCondition.getEventName().equalsIgnoreCase("alarmCondition")) {
- alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
- currCldsAlarmCondition.getAlarmConditionKey());
- } else {
- alertDescNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
- currCldsAlarmCondition.getAlarmConditionKey());
- }
- }
- }
-
- vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);
- vfcObjectNode.putPOJO("alertDescription", alertDescNode);
- vfcResourceUuidObjectNode.putPOJO(currCldsVfcData.getVfcInvariantResourceUUID(), vfcObjectNode);
- }
- }
- } else {
- alarmCondNode.put("", "");
- vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);
- alertDescNode.put("", "");
- vfcObjectNode.putPOJO("alertDescription", alarmCondNode);
- vfcResourceUuidObjectNode.putPOJO("", vfcObjectNode);
- }
- }
-
- /**
- * Method to create vfc and kpi nodes inside vf node
- *
- * @param mapper
- * @param cldsVfDataList
- * @return
- */
- private ObjectNode createVfcObjectNodeByVfUuid(ObjectMapper mapper, List<CldsVfData> cldsVfDataList) {
- ObjectNode vfUuidObjectNode = mapper.createObjectNode();
-
- if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {
- for (CldsVfData currCldsVfData : cldsVfDataList) {
- if (currCldsVfData != null) {
- ObjectNode vfObjectNode = mapper.createObjectNode();
- ObjectNode vfcUuidNode = mapper.createObjectNode();
- ObjectNode kpiObjectNode = mapper.createObjectNode();
- if (currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {
- for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {
- vfcUuidNode.put(currCldsVfcData.getVfcInvariantResourceUUID(),
- currCldsVfcData.getVfcName());
- }
- } else {
- vfcUuidNode.put("", "");
- }
- if (currCldsVfData.getCldsKPIList() != null && !currCldsVfData.getCldsKPIList().isEmpty()) {
- for (CldsVfKPIData currCldsVfKPIData : currCldsVfData.getCldsKPIList()) {
- kpiObjectNode.put(currCldsVfKPIData.getThresholdValue(),
- currCldsVfKPIData.getThresholdValue());
- }
- } else {
- kpiObjectNode.put("", "");
- }
- vfObjectNode.putPOJO("vfc", vfcUuidNode);
- vfObjectNode.putPOJO("kpi", kpiObjectNode);
- vfUuidObjectNode.putPOJO(currCldsVfData.getVfInvariantResourceUUID(), vfObjectNode);
- }
- }
- } else {
- ObjectNode vfcUuidNode = mapper.createObjectNode();
- vfcUuidNode.put("", "");
- ObjectNode vfcObjectNode = mapper.createObjectNode();
- vfcObjectNode.putPOJO("vfc", vfcUuidNode);
- vfUuidObjectNode.putPOJO("", vfcObjectNode);
- }
- return vfUuidObjectNode;
- }
-
- /**
- * This method searches the equivalent artifact UUID for a specific
- * artifactName in a SdcServiceDetail.
- *
- * @param cldsSdcServiceDetail
- * The SdcServiceDetail that will be analyzed
- * @param artifactName
- * The artifact name that will be searched
- * @return The artifact UUID found
- */
- public String getArtifactIdIfArtifactAlreadyExists(CldsSdcServiceDetail cldsSdcServiceDetail, String artifactName) {
- String artifactUuid = null;
- boolean artifactExists = false;
- if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null
- && !cldsSdcServiceDetail.getResources().isEmpty()) {
- for (CldsSdcResource currCldsSdcResource : cldsSdcServiceDetail.getResources()) {
- if (artifactExists) {
- break;
- }
- if (currCldsSdcResource != null && currCldsSdcResource.getArtifacts() != null
- && !currCldsSdcResource.getArtifacts().isEmpty()) {
- for (CldsSdcArtifact currCldsSdcArtifact : currCldsSdcResource.getArtifacts()) {
- if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null
- && currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) {
- artifactUuid = currCldsSdcArtifact.getArtifactUUID();
- artifactExists = true;
- break;
- }
- }
- }
- }
- }
- return artifactUuid;
- }
-
- public String updateControlLoopStatusToDcae(String dcaeUrl, String invariantResourceUuid,
- String invariantServiceUuid, String artifactName) {
- String baseUrl = refProp.getStringValue("sdc.serviceUrl");
- String basicAuth = SdcReq.getSdcBasicAuth(refProp);
- String postStatusData = "{ \n" + "\"event\" : \"" + "Created" + "\",\n" + "\"serviceUUID\" : \""
- + invariantServiceUuid + "\",\n" + "\"resourceUUID\" :\"" + invariantResourceUuid + "\",\n"
- + "\"artifactName\" : \"" + artifactName + "\",\n" + "} \n";
- try {
- String url = baseUrl;
- if (invariantServiceUuid != null) {
- url = dcaeUrl + "/closed-loops";
- }
- URL urlObj = new URL(url);
-
- HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
- conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
- conn.setRequestProperty("Authorization", basicAuth);
- conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
- conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
- conn.setRequestMethod("POST");
-
- byte[] postData = SdcReq.stringToByteArray(postStatusData);
- try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
- wr.write(postData);
- }
-
- int responseCode = conn.getResponseCode();
- logger.info("responseCode=" + responseCode);
-
- String resp = getResponse(conn);
- if (resp != null) {
- return resp;
- }
- } catch (IOException e) {
- logger.error("Not able to get any service information from sdc for uuid:" + invariantServiceUuid, e);
- }
- return "";
- }
-
- /**
- * To get all sdc VF/VFC Resources basic info.
- *
- * @param resourceType
- * The resourceType
- * @return The list of CldsSdcResourceBasicInfo
- */
- private List<CldsSdcResourceBasicInfo> getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) {
- String catalogUrl = refProp.getStringValue("sdc.catalog.url");
- String resourceUrl = catalogUrl + "resources?resourceType=" + resourceType;
- String allSdcVfcResources = getCldsServicesOrResourcesBasedOnURL(resourceUrl, false);
- return removeDuplicateSdcResourceBasicInfo(getAllSdcResourcesListFromJson(allSdcVfcResources));
- }
-
- private String getResourceUuidFromResourceInvariantUuid(String resourceInvariantUuid,
- List<CldsSdcResourceBasicInfo> resourceInfoList) {
- String resourceUuid = null;
- if (resourceInfoList != null && !resourceInfoList.isEmpty()) {
- for (CldsSdcResourceBasicInfo currResource : resourceInfoList) {
- if (currResource != null && currResource.getInvariantUUID() != null && currResource.getUuid() != null
- && currResource.getInvariantUUID().equalsIgnoreCase(resourceInvariantUuid)) {
- resourceUuid = currResource.getUuid();
- break;
- }
- }
- }
- return resourceUuid;
- }
-
- /**
- * Method to get service invariant uuid from model properties.
- *
- * @param props
- * The Clds model properties
- * @return The Service Id
- */
- private String getServiceInvariantUuidFromProps(ModelProperties props) {
- String invariantUuid = "";
- Global globalProps = props.getGlobal();
- if (globalProps != null && globalProps.getService() != null) {
- invariantUuid = globalProps.getService();
- }
- return invariantUuid;
- }
-
- /**
- * This method upload the BluePrint to SDC.
- *
- * @param prop
- * The Clds model Properties
- * @param userid
- * The user id for SDC
- * @param sdcReqUrlsList
- * The list of SDC URL to try
- * @param formattedSdcReq
- * The blueprint to upload
- * @param formattedSdcLocationReq
- * THe location Blueprint to upload
- * @param artifactName
- * The artifact name from where we can get the Artifact UUID
- * @param locationArtifactName
- * The location artifact name from where we can get the Artifact
- * UUID
- *
- */
- public void uploadToSdc(ModelProperties prop, String userid, List<String> sdcReqUrlsList, String formattedSdcReq,
- String formattedSdcLocationReq, String artifactName, String locationArtifactName) {
- logger.info("userid=" + userid);
- String serviceInvariantUuid = getServiceInvariantUuidFromProps(prop);
- if (sdcReqUrlsList != null && !sdcReqUrlsList.isEmpty()) {
- for (String url : sdcReqUrlsList) {
- if (url != null) {
- String originalServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);
- logger.info("ServiceUUID used before upload in url:" + originalServiceUuid);
- String sdcServicesInformation = getSdcServicesInformation(originalServiceUuid);
- CldsSdcServiceDetail cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);
- String uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,
- artifactName);
- // Upload artifacts to sdc
- String updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;
- String responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcReq);
- logger.info("value of sdc Response of uploading to sdc :" + responseStr);
- String updatedServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);
- if (!originalServiceUuid.equalsIgnoreCase(updatedServiceUuid)) {
- url = url.replace(originalServiceUuid, updatedServiceUuid);
- }
- logger.info("ServiceUUID used after upload in ulr:" + updatedServiceUuid);
- sdcServicesInformation = getSdcServicesInformation(updatedServiceUuid);
- cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);
- uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,
- locationArtifactName);
- // To send location information also to sdc
- updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;
- responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcLocationReq);
- logger.info("value of sdc Response of uploading location to sdc :" + responseStr);
- }
- }
- }
- }
-}
+/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.client; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.node.TextNode; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +import javax.ws.rs.BadRequestException; + +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVRecord; +import org.apache.commons.lang3.StringUtils; +import org.onap.clamp.clds.client.req.SdcReq; +import org.onap.clamp.clds.exception.SdcCommunicationException; +import org.onap.clamp.clds.model.CldsAlarmCondition; +import org.onap.clamp.clds.model.CldsDBServiceCache; +import org.onap.clamp.clds.model.CldsSdcArtifact; +import org.onap.clamp.clds.model.CldsSdcResource; +import org.onap.clamp.clds.model.CldsSdcResourceBasicInfo; +import org.onap.clamp.clds.model.CldsSdcServiceDetail; +import org.onap.clamp.clds.model.CldsSdcServiceInfo; +import org.onap.clamp.clds.model.CldsServiceData; +import org.onap.clamp.clds.model.CldsVfData; +import org.onap.clamp.clds.model.CldsVfKPIData; +import org.onap.clamp.clds.model.CldsVfcData; +import org.onap.clamp.clds.model.prop.Global; +import org.onap.clamp.clds.model.prop.ModelProperties; +import org.onap.clamp.clds.model.refprop.RefProp; +import org.onap.clamp.clds.util.LoggingUtils; +import org.springframework.beans.factory.annotation.Autowired; + +public class SdcCatalogServices { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(SdcCatalogServices.class); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + + private static final String RESOURCE_VF_TYPE = "VF"; + private static final String RESOURCE_VFC_TYPE = "VFC"; + + @Autowired + private RefProp refProp; + + /** + * This method get the SDC services Information with the corresponding + * Service UUID. + * + * @param uuid + * The service UUID + * @return A Json String with all the service list + */ + public String getSdcServicesInformation(String uuid) { + Date startTime = new Date(); + String baseUrl = refProp.getStringValue("sdc.serviceUrl"); + String basicAuth = SdcReq.getSdcBasicAuth(refProp); + LoggingUtils.setTargetContext("SDC", "getSdcServicesInformation"); + + try { + String url = baseUrl; + if (uuid != null) { + url = baseUrl + "/" + uuid + "/metadata"; + } + URL urlObj = new URL(url); + + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + + conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool"); + conn.setRequestProperty("Authorization", basicAuth); + conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + conn.setRequestMethod("GET"); + + String resp = getResponse(conn); + if (resp != null) { + logger.info(resp); + // metrics log + LoggingUtils.setResponseContext("0", "Get sdc services success", this.getClass().getName()); + return resp; + } + } catch (IOException e) { + LoggingUtils.setResponseContext("900", "Get sdc services failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Get sdc services error"); + logger.error("not able to get any service information from sdc for uuid:" + uuid, e); + } finally { + LoggingUtils.setTimeContext(startTime, new Date()); + metricsLogger.info("getSdcServicesInformation complete"); + } + + return ""; + } + + /** + * To remove duplicate serviceUUIDs from sdc services List. + * + * @param rawCldsSdcServiceList + * A list of CldsSdcServiceInfo + * @return A list of CldsSdcServiceInfo without duplicate service UUID + */ + public List<CldsSdcServiceInfo> removeDuplicateServices(List<CldsSdcServiceInfo> rawCldsSdcServiceList) { + List<CldsSdcServiceInfo> cldsSdcServiceInfoList = null; + if (rawCldsSdcServiceList != null && !rawCldsSdcServiceList.isEmpty()) { + // sort list + Collections.sort(rawCldsSdcServiceList); + // and then take only the services with the max version (last in the + // list with the same name) + cldsSdcServiceInfoList = new ArrayList<>(); + for (int i = 1; i < rawCldsSdcServiceList.size(); i++) { + // compare name with previous - if not equal, then keep the + // previous (it's the last with that name) + CldsSdcServiceInfo prev = rawCldsSdcServiceList.get(i - 1); + if (!rawCldsSdcServiceList.get(i).getName().equals(prev.getName())) { + cldsSdcServiceInfoList.add(prev); + } + } + // add the last in the list + cldsSdcServiceInfoList.add(rawCldsSdcServiceList.get(rawCldsSdcServiceList.size() - 1)); + } + return cldsSdcServiceInfoList; + } + + /** + * To remove duplicate serviceUUIDs from sdc resources List. + * + * @param rawCldsSdcResourceList + * @return + */ + public List<CldsSdcResource> removeDuplicateSdcResourceInstances(List<CldsSdcResource> rawCldsSdcResourceList) { + List<CldsSdcResource> cldsSdcResourceList = null; + if (rawCldsSdcResourceList != null && !rawCldsSdcResourceList.isEmpty()) { + // sort list + Collections.sort(rawCldsSdcResourceList); + // and then take only the resources with the max version (last in + // the list with the same name) + cldsSdcResourceList = new ArrayList<>(); + for (int i = 1; i < rawCldsSdcResourceList.size(); i++) { + // compare name with previous - if not equal, then keep the + // previous (it's the last with that name) + CldsSdcResource prev = rawCldsSdcResourceList.get(i - 1); + if (!rawCldsSdcResourceList.get(i).getResourceInstanceName().equals(prev.getResourceInstanceName())) { + cldsSdcResourceList.add(prev); + } + } + // add the last in the list + cldsSdcResourceList.add(rawCldsSdcResourceList.get(rawCldsSdcResourceList.size() - 1)); + } + return cldsSdcResourceList; + } + + /** + * To remove duplicate basic resources with same resourceUUIDs. + * + * @param rawCldsSdcResourceListBasicList + * @return + */ + public List<CldsSdcResourceBasicInfo> removeDuplicateSdcResourceBasicInfo( + List<CldsSdcResourceBasicInfo> rawCldsSdcResourceListBasicList) { + List<CldsSdcResourceBasicInfo> cldsSdcResourceBasicInfoList = null; + if (rawCldsSdcResourceListBasicList != null && !rawCldsSdcResourceListBasicList.isEmpty()) { + // sort list + Collections.sort(rawCldsSdcResourceListBasicList); + // and then take only the resources with the max version (last in + // the list with the same name) + cldsSdcResourceBasicInfoList = new ArrayList<>(); + for (int i = 1; i < rawCldsSdcResourceListBasicList.size(); i++) { + // compare name with previous - if not equal, then keep the + // previous (it's the last with that name) + CldsSdcResourceBasicInfo prev = rawCldsSdcResourceListBasicList.get(i - 1); + if (!rawCldsSdcResourceListBasicList.get(i).getName().equals(prev.getName())) { + cldsSdcResourceBasicInfoList.add(prev); + } + } + // add the last in the list + cldsSdcResourceBasicInfoList + .add(rawCldsSdcResourceListBasicList.get(rawCldsSdcResourceListBasicList.size() - 1)); + } + return cldsSdcResourceBasicInfoList; + } + + /** + * To get ServiceUUID by using serviceInvariantUUID. + * + * @param invariantId + * The invariant ID + * @return The service UUID + */ + public String getServiceUuidFromServiceInvariantId(String invariantId) { + String serviceUuid = ""; + String responseStr = getSdcServicesInformation(null); + List<CldsSdcServiceInfo> rawCldsSdcServicesList = getCldsSdcServicesListFromJson(responseStr); + List<CldsSdcServiceInfo> cldsSdcServicesList = removeDuplicateServices(rawCldsSdcServicesList); + if (cldsSdcServicesList != null && !cldsSdcServicesList.isEmpty()) { + for (CldsSdcServiceInfo currCldsSdcServiceInfo : cldsSdcServicesList) { + if (currCldsSdcServiceInfo != null && currCldsSdcServiceInfo.getInvariantUUID() != null + && currCldsSdcServiceInfo.getInvariantUUID().equalsIgnoreCase(invariantId)) { + serviceUuid = currCldsSdcServiceInfo.getUuid(); + break; + } + } + } + return serviceUuid; + } + + /** + * To get CldsAsdsServiceInfo class by parsing json string. + * + * @param jsonStr + * The Json string that must be decoded + * @return The list of CldsSdcServiceInfo, if there is a failure it return + * an empty list + */ + public List<CldsSdcServiceInfo> getCldsSdcServicesListFromJson(String jsonStr) { + ObjectMapper objectMapper = new ObjectMapper(); + if (StringUtils.isBlank(jsonStr)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(jsonStr, + objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcServiceInfo.class)); + } catch (IOException e) { + logger.error("Error when attempting to decode the JSON containing CldsSdcServiceInfo", e); + return new ArrayList<>(); + } + } + + /** + * To get List of CldsSdcResourceBasicInfo class by parsing json string. + * + * @param jsonStr + * The JSOn string that must be decoded + * @return The list of CldsSdcResourceBasicInfo, an empty list in case of + * issues + */ + public List<CldsSdcResourceBasicInfo> getAllSdcResourcesListFromJson(String jsonStr) { + ObjectMapper objectMapper = new ObjectMapper(); + if (StringUtils.isBlank(jsonStr)) { + return new ArrayList<>(); + } + + try { + return objectMapper.readValue(jsonStr, + objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcResourceBasicInfo.class)); + } catch (IOException e) { + logger.error("Exception occurred when attempting to decode the list of CldsSdcResourceBasicInfo JSON", e); + return new ArrayList<>(); + } + } + + /** + * To get CldsAsdsResource class by parsing json string. + * + * @param jsonStr + * @return + * @throws IOException + */ + public CldsSdcResource getCldsSdcResourceFromJson(String jsonStr) throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(jsonStr, CldsSdcResource.class); + } + + /** + * To get CldsSdcServiceDetail by parsing json string. + * + * @param jsonStr + * @return + */ + public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + return objectMapper.readValue(jsonStr, CldsSdcServiceDetail.class); + } catch (IOException e) { + logger.error("Exception when attempting to decode the CldsSdcServiceDetail JSON", e); + return null; + } + } + + /** + * To upload artifact to sdc based on serviceUUID and resource name on url. + * + * @param prop + * @param userid + * @param url + * @param formatedSdcReq + * @return + */ + public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatedSdcReq) { + // Verify whether it is triggered by Validation Test button from UI + if (prop.isTest()) { + return "sdc artifact upload not executed for test action"; + } + try { + logger.info("userid=" + userid); + String md5Text = SdcReq.calculateMD5ByString(formatedSdcReq); + byte[] postData = SdcReq.stringToByteArray(formatedSdcReq); + int postDataLength = postData.length; + HttpURLConnection conn = getSdcHttpUrlConnection(userid, postDataLength, url, md5Text); + try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { + wr.write(postData); + } + boolean requestFailed = true; + int responseCode = conn.getResponseCode(); + logger.info("responseCode=" + responseCode); + if (responseCode == 200) { + requestFailed = false; + } + + String responseStr = getResponse(conn); + if (responseStr != null && requestFailed) { + logger.error("requestFailed - responseStr=" + responseStr); + throw new BadRequestException(responseStr); + } + return responseStr; + } catch (IOException e) { + logger.error("Exception when attempting to communicate with SDC", e); + throw new SdcCommunicationException("Exception when attempting to communicate with SDC", e); + } + + } + + private HttpURLConnection getSdcHttpUrlConnection(String userid, int postDataLength, String url, String md5Text) { + try { + logger.info("userid=" + userid); + String basicAuth = SdcReq.getSdcBasicAuth(refProp); + String sdcXonapInstanceId = refProp.getStringValue("sdc.sdcX-InstanceID"); + URL urlObj = new URL(url); + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + conn.setDoOutput(true); + conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), sdcXonapInstanceId); + conn.setRequestProperty("Authorization", basicAuth); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("Content-MD5", md5Text); + conn.setRequestProperty("USER_ID", userid); + conn.setRequestMethod("POST"); + conn.setRequestProperty("charset", "utf-8"); + conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); + conn.setUseCaches(false); + conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + return conn; + } catch (IOException e) { + logger.error("Exception when attempting to open connection with SDC", e); + throw new SdcCommunicationException("Exception when attempting to open connection with SDC", e); + } + } + + private String getResponse(HttpURLConnection conn) { + try (InputStream is = getInputStream(conn)) { + if (is != null) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) { + StringBuilder response = new StringBuilder(); + String inputLine; + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + return response.toString(); + } + } else { + return null; + } + } catch (IOException e) { + logger.error("Exception when attempting to open SDC response", e); + throw new SdcCommunicationException("Exception when attempting to open SDC response", e); + } + } + + private InputStream getInputStream(HttpURLConnection conn) { + try { + InputStream inStream = conn.getErrorStream(); + if (inStream == null) { + inStream = conn.getInputStream(); + } + return inStream; + } catch (IOException e) { + logger.error("Exception when attempting to open SDC error stream", e); + throw new SdcCommunicationException("Exception when attempting to open SDC error stream", e); + } + } + + public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) { + try { + CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache(); + cldsDbServiceCache.setCldsDataInstream(cldsServiceData); + cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID()); + cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID()); + return cldsDbServiceCache; + } catch (IOException e) { + logger.error("Exception when getting service in cache", e); + throw new SdcCommunicationException("Exception when getting service in cache", e); + } + } + + public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData) { + boolean expired = false; + if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) { + String cachedServiceUuid = cldsServiceData.getServiceUUID(); + String latestServiceUuid = getServiceUuidFromServiceInvariantId(cldsServiceData.getServiceInvariantUUID()); + String defaultRecordAge = refProp.getStringValue("CLDS_SERVICE_CACHE_MAX_SECONDS"); + if ((!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null + && cldsServiceData.getAgeOfRecord() > Long.parseLong(defaultRecordAge))) { + expired = true; + } + } else { + expired = true; + } + return expired; + } + + public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) { + String url = refProp.getStringValue("sdc.serviceUrl"); + String catalogUrl = refProp.getStringValue("sdc.catalog.url"); + String serviceUuid = getServiceUuidFromServiceInvariantId(invariantServiceUuid); + String serviceDetailUrl = url + "/" + serviceUuid + "/metadata"; + String responseStr = getCldsServicesOrResourcesBasedOnURL(serviceDetailUrl, false); + ObjectMapper objectMapper = new ObjectMapper(); + CldsServiceData cldsServiceData = new CldsServiceData(); + if (responseStr != null) { + CldsSdcServiceDetail cldsSdcServiceDetail; + try { + cldsSdcServiceDetail = objectMapper.readValue(responseStr, CldsSdcServiceDetail.class); + } catch (IOException e) { + logger.error("Exception when decoding the CldsServiceData JSON from SDC", e); + throw new SdcCommunicationException("Exception when decoding the CldsServiceData JSON from SDC", e); + } + cldsServiceData.setServiceUUID(cldsSdcServiceDetail.getUuid()); + cldsServiceData.setServiceInvariantUUID(cldsSdcServiceDetail.getInvariantUUID()); + + // To remove duplicate resources from serviceDetail and add valid + // vfs to service + if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null) { + List<CldsSdcResource> cldsSdcResourceList = removeDuplicateSdcResourceInstances( + cldsSdcServiceDetail.getResources()); + if (cldsSdcResourceList != null && !cldsSdcResourceList.isEmpty()) { + List<CldsVfData> cldsVfDataList = new ArrayList<>(); + for (CldsSdcResource currCldsSdcResource : cldsSdcResourceList) { + if (currCldsSdcResource != null && currCldsSdcResource.getResoucreType() != null + && "VF".equalsIgnoreCase(currCldsSdcResource.getResoucreType())) { + CldsVfData currCldsVfData = new CldsVfData(); + currCldsVfData.setVfName(currCldsSdcResource.getResourceInstanceName()); + currCldsVfData.setVfInvariantResourceUUID(currCldsSdcResource.getResourceInvariantUUID()); + cldsVfDataList.add(currCldsVfData); + } + } + cldsServiceData.setCldsVfs(cldsVfDataList); + // For each vf in the list , add all vfc's + getAllVfcForVfList(cldsVfDataList, catalogUrl); + logger.info("value of cldsServiceData:" + cldsServiceData); + logger.info("value of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID()); + } + } + } + return cldsServiceData; + } + + private void getAllVfcForVfList(List<CldsVfData> cldsVfDataList, String catalogUrl) { + // todo : refact this.. + if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) { + List<CldsSdcResourceBasicInfo> allVfResources = getAllSdcVForVfcResourcesBasedOnResourceType( + RESOURCE_VF_TYPE); + List<CldsSdcResourceBasicInfo> allVfcResources = getAllSdcVForVfcResourcesBasedOnResourceType( + RESOURCE_VFC_TYPE); + for (CldsVfData currCldsVfData : cldsVfDataList) { + if (currCldsVfData != null && currCldsVfData.getVfInvariantResourceUUID() != null) { + String resourceUuid = getResourceUuidFromResourceInvariantUuid( + currCldsVfData.getVfInvariantResourceUUID(), allVfResources); + if (resourceUuid != null) { + String vfResourceUuidUrl = catalogUrl + "resources" + "/" + resourceUuid + "/metadata"; + String vfResponse = getCldsServicesOrResourcesBasedOnURL(vfResourceUuidUrl, false); + if (vfResponse != null) { + // Below 2 line are to get the KPI(field path) data + // associated with the VF's + List<CldsVfKPIData> cldsVfKPIDataList = getFieldPathFromVF(vfResponse); + currCldsVfData.setCldsKPIList(cldsVfKPIDataList); + + List<CldsVfcData> vfcDataListFromVfResponse = getVfcDataListFromVfResponse(vfResponse); + if (vfcDataListFromVfResponse != null) { + currCldsVfData.setCldsVfcs(vfcDataListFromVfResponse); + if (!vfcDataListFromVfResponse.isEmpty()) { + // To get artifacts for every VFC and get + // alarm conditions from artifact + for (CldsVfcData currCldsVfcData : vfcDataListFromVfResponse) { + if (currCldsVfcData != null + && currCldsVfcData.getVfcInvariantResourceUUID() != null) { + String resourceVfcUuid = getResourceUuidFromResourceInvariantUuid( + currCldsVfcData.getVfcInvariantResourceUUID(), allVfcResources); + if (resourceVfcUuid != null) { + String vfcResourceUuidUrl = catalogUrl + "resources" + "/" + + resourceVfcUuid + "/metadata"; + String vfcResponse = getCldsServicesOrResourcesBasedOnURL( + vfcResourceUuidUrl, false); + if (vfcResponse != null) { + List<CldsAlarmCondition> alarmCondtionsFromVfc = getAlarmCondtionsFromVfc( + vfcResponse); + currCldsVfcData.setCldsAlarmConditions(alarmCondtionsFromVfc); + } + } else { + logger.info("No resourceVFC UUID found for given invariantID:" + + currCldsVfcData.getVfcInvariantResourceUUID()); + } + } + } + } + } + } + } else { + logger.info("No resourceUUID found for given invariantREsourceUUID:" + + currCldsVfData.getVfInvariantResourceUUID()); + } + } + } + } + } + + private List<CldsVfcData> getVfcDataListFromVfResponse(String vfResponse) { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode vfResponseNode; + try { + vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsVfcData", e); + return new ArrayList<>(); + } + ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources"); + List<CldsVfcData> cldsVfcDataList = new ArrayList<>(); + if (vfcArrayNode != null) { + for (JsonNode vfcjsonNode : vfcArrayNode) { + CldsVfcData currCldsVfcData = new CldsVfcData(); + ObjectNode currVfcNode = (ObjectNode) vfcjsonNode; + TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType"); + if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) { + TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName"); + TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID"); + currCldsVfcData.setVfcName(vfcResourceName.textValue()); + currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue()); + cldsVfcDataList.add(currCldsVfcData); + } else if (resourceTypeNode != null && "CVFC".equalsIgnoreCase(resourceTypeNode.textValue())) { + cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue())); + } + } + } + return cldsVfcDataList; + } + + private List<CldsVfcData> getVFCfromCVFC(String resourceUUID) { + String catalogUrl = refProp.getStringValue("sdc.catalog.url"); + List<CldsVfcData> cldsVfcDataList = new ArrayList<>(); + + if (resourceUUID != null) { + String vfcResourceUUIDUrl = catalogUrl + "resources" + "/" + resourceUUID + "/metadata"; + try { + String vfcResponse = getCldsServicesOrResourcesBasedOnURL(vfcResourceUUIDUrl, false); + ObjectMapper mapper = new ObjectMapper(); + ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfcResponse); + ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources"); + + if (vfcArrayNode != null) { + for (JsonNode vfcjsonNode : vfcArrayNode) { + CldsVfcData currCldsVfcData = new CldsVfcData(); + ObjectNode currVfcNode = (ObjectNode) vfcjsonNode; + TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType"); + if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) { + TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName"); + TextNode vfcInvariantResourceUUID = (TextNode) currVfcNode.get("resourceInvariantUUID"); + currCldsVfcData.setVfcName(vfcResourceName.textValue()); + currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUUID.textValue()); + cldsVfcDataList.add(currCldsVfcData); + } + } + } + } catch (IOException e) { + logger.error("Exception during JSON analyzis", e); + } + } + return cldsVfcDataList; + } + + private String removeUnwantedBracesFromString(String id) { + return (id != null) ? id.replaceAll("\"", "") : ""; + } + + private List<CldsAlarmCondition> getAlarmCondtionsFromVfc(String vfcResponse) { + List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + ObjectNode vfcResponseNode; + try { + vfcResponseNode = (ObjectNode) mapper.readTree(vfcResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsAlarmCondition", e); + return cldsAlarmConditionList; + } + ArrayNode artifactsArrayNode = (ArrayNode) vfcResponseNode.get("artifacts"); + + if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) { + for (int index = 0; index < artifactsArrayNode.size(); index++) { + ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index); + TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL"); + if (artifactUrlNode != null) { + String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue()); + cldsAlarmConditionList.addAll(parseCsvToGetAlarmConditions(responsesFromArtifactUrl)); + logger.info(responsesFromArtifactUrl); + } + } + } + return cldsAlarmConditionList; + } + + private List<CldsAlarmCondition> parseCsvToGetAlarmConditions(String allAlarmCondsValues) { + try { + List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>(); + Reader alarmReader = new StringReader(allAlarmCondsValues); + Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader); + if (records != null) { + Iterator<CSVRecord> it = records.iterator(); + if (it.hasNext()) { + it.next(); + } + it.forEachRemaining(record -> processRecord(cldsAlarmConditionList, record)); + } + return cldsAlarmConditionList; + } catch (IOException e) { + logger.error("Exception when attempting to parse the CSV containing the alarm", e); + return new ArrayList<>(); + } + } + + // Method to get the artifact for any particular VF + private List<CldsVfKPIData> getFieldPathFromVF(String vfResponse) { + List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>(); + ObjectMapper mapper = new ObjectMapper(); + ObjectNode vfResponseNode; + try { + vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsVfKPIData", e); + return cldsVfKPIDataList; + } + ArrayNode artifactsArrayNode = (ArrayNode) vfResponseNode.get("artifacts"); + + if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) { + for (int index = 0; index < artifactsArrayNode.size(); index++) { + ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index); + TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL"); + TextNode artifactNameNode = (TextNode) currArtifactNode.get("artifactName"); + String artifactName = ""; + if (artifactNameNode != null) { + artifactName = artifactNameNode.textValue(); + artifactName = artifactName.substring(artifactName.lastIndexOf('.') + 1); + } + if (artifactUrlNode != null && "csv".equalsIgnoreCase(artifactName)) { + String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue()); + cldsVfKPIDataList.addAll(parseCsvToGetFieldPath(responsesFromArtifactUrl)); + logger.info(responsesFromArtifactUrl); + } + } + } + return cldsVfKPIDataList; + } + + private CldsVfKPIData convertCsvRecordToKpiData(CSVRecord record) { + if (record.size() < 6) { + logger.debug("invalid csv field path Record,total columns less than 6: " + record); + return null; + } + + if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3)) + || StringUtils.isBlank(record.get(5))) { + logger.debug("Invalid csv field path Record,one of column is having blank value : " + record); + return null; + } + + CldsVfKPIData cldsVfKPIData = new CldsVfKPIData(); + cldsVfKPIData.setNfNamingCode(record.get(0).trim()); + cldsVfKPIData.setNfNamingValue(record.get(1).trim()); + + cldsVfKPIData.setFieldPath(record.get(2).trim()); + cldsVfKPIData.setFieldPathValue(record.get(3).trim()); + + cldsVfKPIData.setThresholdName(record.get(4).trim()); + cldsVfKPIData.setThresholdValue(record.get(5).trim()); + return cldsVfKPIData; + + } + + // Method to get the artifactURL Data and set the CldsVfKPIData node + private List<CldsVfKPIData> parseCsvToGetFieldPath(String allFieldPathValues) { + try { + List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>(); + Reader alarmReader = new StringReader(allFieldPathValues); + Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader); + if (records != null) { + for (CSVRecord record : records) { + CldsVfKPIData kpiData = this.convertCsvRecordToKpiData(record); + if (kpiData != null) { + cldsVfKPIDataList.add(kpiData); + } + } + } + return cldsVfKPIDataList; + } catch (IOException e) { + logger.error("Exception when attempting to parse the CSV containing the alarm kpi data", e); + return new ArrayList<>(); + } + } + + private void processRecord(List<CldsAlarmCondition> cldsAlarmConditionList, CSVRecord record) { + if (record == null) { + return; + } + if (record.size() < 5) { + logger.debug("invalid csv alarm Record,total columns less than 5: " + record); + return; + } + if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3)) + || StringUtils.isBlank(record.get(4))) { + logger.debug("invalid csv alarm Record,one of column is having blank value : " + record); + return; + } + CldsAlarmCondition cldsAlarmCondition = new CldsAlarmCondition(); + cldsAlarmCondition.setEventSourceType(record.get(1)); + cldsAlarmCondition.setEventName(record.get(2)); + cldsAlarmCondition.setAlarmConditionKey(record.get(3)); + cldsAlarmCondition.setSeverity(record.get(4)); + cldsAlarmConditionList.add(cldsAlarmCondition); + } + + public String getResponsesFromArtifactUrl(String artifactsUrl) { + String hostUrl = refProp.getStringValue("sdc.hostUrl"); + String artifactsUrlReworked = artifactsUrl.replaceAll("\"", ""); + String artifactUrl = hostUrl + artifactsUrlReworked; + logger.info("value of artifactURl:" + artifactUrl); + String currArtifactResponse = getCldsServicesOrResourcesBasedOnURL(artifactUrl, true); + logger.info("value of artifactResponse:" + currArtifactResponse); + return currArtifactResponse; + } + + /** + * Service to services/resources/artifacts from sdc.Pass alarmConditions as + * true to get alarmconditons from artifact url and else it is false + * + * @param url + * @param alarmConditions + * @return + */ + public String getCldsServicesOrResourcesBasedOnURL(String url, boolean alarmConditions) { + Date startTime = new Date(); + try { + LoggingUtils.setTargetContext("SDC", "getCldsServicesOrResourcesBasedOnURL"); + String urlReworked = removeUnwantedBracesFromString(url); + URL urlObj = new URL(urlReworked); + + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + String basicAuth = SdcReq.getSdcBasicAuth(refProp); + conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool"); + conn.setRequestProperty("Authorization", basicAuth); + conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + conn.setRequestMethod("GET"); + + int responseCode = conn.getResponseCode(); + logger.info("Sdc resource url - " + urlReworked + " , responseCode=" + responseCode); + StringBuilder response; + try (BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { + response = new StringBuilder(); + String inputLine; + while ((inputLine = in.readLine()) != null) { + if (!inputLine.isEmpty()) { + response.append(inputLine); + } + if (alarmConditions) { + response.append("\n"); + } + } + } + LoggingUtils.setResponseContext("0", "Get sdc resources success", this.getClass().getName()); + return response.toString(); + } catch (IOException e) { + LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName()); + LoggingUtils.setErrorContext("900", "Get sdc resources error"); + logger.error("Exception occurred during query to SDC", e); + return ""; + } finally { + LoggingUtils.setTimeContext(startTime, new Date()); + metricsLogger.info("getCldsServicesOrResourcesBasedOnURL completed"); + } + + } + + /** + * To create properties object by using cldsServicedata. + * + * @param globalProps + * @param cldsServiceData + * @return + */ + public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) { + String totalPropsStr; + ObjectMapper mapper = new ObjectMapper(); + ObjectNode globalPropsJson; + if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) { + + // Objectnode to save all byservice, byvf , byvfc and byalarm nodes + ObjectNode byIdObjectNode = mapper.createObjectNode(); + + // To create vf ResourceUUID node with serviceInvariantUUID + ObjectNode invariantUuidObjectNodeWithVf = createVfObjectNodeByServiceInvariantUuid(mapper, + cldsServiceData); + byIdObjectNode.putPOJO("byService", invariantUuidObjectNodeWithVf); + + // To create byVf and vfcResourceNode with vfResourceUUID + ObjectNode vfcObjectNodeByVfUuid = createVfcObjectNodeByVfUuid(mapper, cldsServiceData.getCldsVfs()); + byIdObjectNode.putPOJO("byVf", vfcObjectNodeByVfUuid); + + // To create byKpi + ObjectNode kpiObjectNode = mapper.createObjectNode(); + if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) { + for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) { + if (currCldsVfData != null) { + createKpiObjectNodeByVfUuid(mapper, kpiObjectNode, currCldsVfData.getCldsKPIList()); + } + } + } + byIdObjectNode.putPOJO("byKpi", kpiObjectNode); + + // To create byVfc and alarmCondition with vfcResourceUUID + ObjectNode vfcResourceUuidObjectNode = mapper.createObjectNode(); + if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) { + for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) { + if (currCldsVfData != null) { + createAlarmCondObjectNodeByVfcUuid(mapper, vfcResourceUuidObjectNode, + currCldsVfData.getCldsVfcs()); + } + } + } + byIdObjectNode.putPOJO("byVfc", vfcResourceUuidObjectNode); + + // To create byAlarmCondition with alarmConditionKey + List<CldsAlarmCondition> allAlarmConditions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData, + "alarmCondition"); + ObjectNode alarmCondObjectNodeByAlarmKey = createAlarmCondObjectNodeByAlarmKey(mapper, allAlarmConditions); + + byIdObjectNode.putPOJO("byAlarmCondition", alarmCondObjectNodeByAlarmKey); + + // To create byAlertDescription with AlertDescription + List<CldsAlarmCondition> allAlertDescriptions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData, + "alertDescription"); + ObjectNode alertDescObjectNodeByAlert = createAlarmCondObjectNodeByAlarmKey(mapper, allAlertDescriptions); + + byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert); + + globalPropsJson = decodeGlobalProp(globalProps, mapper); + + globalPropsJson.putPOJO("shared", byIdObjectNode); + logger.info("value of objNode:" + globalPropsJson); + } else { + /** + * to create json with total properties when no serviceUUID passed + */ + globalPropsJson = decodeGlobalProp(globalProps, mapper); + } + totalPropsStr = globalPropsJson.toString(); + return totalPropsStr; + } + + private ObjectNode decodeGlobalProp(String globalProps, ObjectMapper mapper) { + try { + return (ObjectNode) mapper.readValue(globalProps, JsonNode.class); + } catch (IOException e) { + logger.error("Exception occurred during decoding of the global props, returning an empty objectNode", e); + return mapper.createObjectNode(); + } + } + + /** + * Method to get alarm conditions/alert description from Service Data. + * + * @param cldsServiceData + * CldsServiceData the Service Data to analyze + * @param eventName + * The String event name that will be used to filter the alarm + * list + * @return The list of CldsAlarmCondition for the event name specified + */ + public List<CldsAlarmCondition> getAllAlarmConditionsFromCldsServiceData(CldsServiceData cldsServiceData, + String eventName) { + List<CldsAlarmCondition> alarmCondList = new ArrayList<>(); + if (cldsServiceData != null && cldsServiceData.getCldsVfs() != null + && !cldsServiceData.getCldsVfs().isEmpty()) { + for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) { + alarmCondList.addAll(getAllAlarmConditionsFromCldsVfData(currCldsVfData, eventName)); + } + } + return alarmCondList; + } + + /** + * Method to get alarm conditions/alert description from VF Data. + * + * @param currCldsVfData + * The Vf Data to analyze + * @param eventName + * The String event name that will be used to filter the alarm + * list + * @return The list of CldsAlarmCondition for the event name specified + */ + private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfData(CldsVfData currCldsVfData, String eventName) { + List<CldsAlarmCondition> alarmCondList = new ArrayList<>(); + + if (currCldsVfData != null && currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) { + for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) { + alarmCondList.addAll(getAllAlarmConditionsFromCldsVfcData(currCldsVfcData, eventName)); + } + } + return alarmCondList; + } + + /** + * Method to get alarm conditions/alert description from VFC Data. + * + * @param currCldsVfcData + * The VfC Data to analyze + * @param eventName + * The String event name that will be used to filter the alarm + * list + * @return The list of CldsAlarmCondition for the event name specified + */ + private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfcData(CldsVfcData currCldsVfcData, + String eventName) { + List<CldsAlarmCondition> alarmCondList = new ArrayList<>(); + + if (currCldsVfcData != null && currCldsVfcData.getCldsAlarmConditions() != null + && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) { + for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) { + if (currCldsAlarmCondition != null + && currCldsAlarmCondition.getEventName().equalsIgnoreCase(eventName)) { + alarmCondList.add(currCldsAlarmCondition); + } + } + } + return alarmCondList; + } + + private ObjectNode createAlarmCondObjectNodeByAlarmKey(ObjectMapper mapper, + List<CldsAlarmCondition> cldsAlarmCondList) { + ObjectNode alarmCondKeyNode = mapper.createObjectNode(); + + if (cldsAlarmCondList != null && !cldsAlarmCondList.isEmpty()) { + for (CldsAlarmCondition currCldsAlarmCondition : cldsAlarmCondList) { + if (currCldsAlarmCondition != null) { + ObjectNode alarmCondNode = mapper.createObjectNode(); + alarmCondNode.put("eventSourceType", currCldsAlarmCondition.getEventSourceType()); + alarmCondNode.put("eventSeverity", currCldsAlarmCondition.getSeverity()); + alarmCondKeyNode.putPOJO(currCldsAlarmCondition.getAlarmConditionKey(), alarmCondNode); + } + } + } else { + ObjectNode alarmCondNode = mapper.createObjectNode(); + alarmCondNode.put("eventSourceType", ""); + alarmCondNode.put("eventSeverity", ""); + alarmCondKeyNode.putPOJO("", alarmCondNode); + } + return alarmCondKeyNode; + } + + private ObjectNode createVfObjectNodeByServiceInvariantUuid(ObjectMapper mapper, CldsServiceData cldsServiceData) { + ObjectNode invariantUuidObjectNode = mapper.createObjectNode(); + ObjectNode vfObjectNode = mapper.createObjectNode(); + ObjectNode vfUuidNode = mapper.createObjectNode(); + List<CldsVfData> cldsVfsList = cldsServiceData.getCldsVfs(); + if (cldsVfsList != null && !cldsVfsList.isEmpty()) { + for (CldsVfData currCldsVfData : cldsVfsList) { + if (currCldsVfData != null) { + vfUuidNode.put(currCldsVfData.getVfInvariantResourceUUID(), currCldsVfData.getVfName()); + } + } + } else { + vfUuidNode.put("", ""); + } + vfObjectNode.putPOJO("vf", vfUuidNode); + invariantUuidObjectNode.putPOJO(cldsServiceData.getServiceInvariantUUID(), vfObjectNode); + return invariantUuidObjectNode; + } + + private void createKpiObjectNodeByVfUuid(ObjectMapper mapper, ObjectNode vfResourceUuidObjectNode, + List<CldsVfKPIData> cldsVfKpiDataList) { + if (cldsVfKpiDataList != null && !cldsVfKpiDataList.isEmpty()) { + for (CldsVfKPIData currCldsVfKpiData : cldsVfKpiDataList) { + if (currCldsVfKpiData != null) { + ObjectNode thresholdNameObjectNode = mapper.createObjectNode(); + + ObjectNode fieldPathObjectNode = mapper.createObjectNode(); + ObjectNode nfNamingCodeNode = mapper.createObjectNode(); + + fieldPathObjectNode.put(currCldsVfKpiData.getFieldPathValue(), + currCldsVfKpiData.getFieldPathValue()); + nfNamingCodeNode.put(currCldsVfKpiData.getNfNamingValue(), currCldsVfKpiData.getNfNamingValue()); + + thresholdNameObjectNode.putPOJO("fieldPath", fieldPathObjectNode); + thresholdNameObjectNode.putPOJO("nfNamingCode", nfNamingCodeNode); + + vfResourceUuidObjectNode.putPOJO(currCldsVfKpiData.getThresholdValue(), thresholdNameObjectNode); + } + } + } + } + + private void createAlarmCondObjectNodeByVfcUuid(ObjectMapper mapper, ObjectNode vfcResourceUuidObjectNode, + List<CldsVfcData> cldsVfcDataList) { + ObjectNode vfcObjectNode = mapper.createObjectNode(); + ObjectNode alarmCondNode = mapper.createObjectNode(); + ObjectNode alertDescNode = mapper.createObjectNode(); + if (cldsVfcDataList != null && !cldsVfcDataList.isEmpty()) { + for (CldsVfcData currCldsVfcData : cldsVfcDataList) { + if (currCldsVfcData != null) { + if (currCldsVfcData.getCldsAlarmConditions() != null + && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) { + for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) { + alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(), + currCldsAlarmCondition.getAlarmConditionKey()); + if ("alarmCondition".equalsIgnoreCase(currCldsAlarmCondition.getEventName())) { + alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(), + currCldsAlarmCondition.getAlarmConditionKey()); + } else { + alertDescNode.put(currCldsAlarmCondition.getAlarmConditionKey(), + currCldsAlarmCondition.getAlarmConditionKey()); + } + } + } + + vfcObjectNode.putPOJO("alarmCondition", alarmCondNode); + vfcObjectNode.putPOJO("alertDescription", alertDescNode); + vfcResourceUuidObjectNode.putPOJO(currCldsVfcData.getVfcInvariantResourceUUID(), vfcObjectNode); + } + } + } else { + alarmCondNode.put("", ""); + vfcObjectNode.putPOJO("alarmCondition", alarmCondNode); + alertDescNode.put("", ""); + vfcObjectNode.putPOJO("alertDescription", alarmCondNode); + vfcResourceUuidObjectNode.putPOJO("", vfcObjectNode); + } + } + + /** + * Method to create vfc and kpi nodes inside vf node + * + * @param mapper + * @param cldsVfDataList + * @return + */ + private ObjectNode createVfcObjectNodeByVfUuid(ObjectMapper mapper, List<CldsVfData> cldsVfDataList) { + ObjectNode vfUuidObjectNode = mapper.createObjectNode(); + + if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) { + for (CldsVfData currCldsVfData : cldsVfDataList) { + if (currCldsVfData != null) { + ObjectNode vfObjectNode = mapper.createObjectNode(); + ObjectNode vfcUuidNode = mapper.createObjectNode(); + ObjectNode kpiObjectNode = mapper.createObjectNode(); + if (currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) { + for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) { + vfcUuidNode.put(currCldsVfcData.getVfcInvariantResourceUUID(), + currCldsVfcData.getVfcName()); + } + } else { + vfcUuidNode.put("", ""); + } + if (currCldsVfData.getCldsKPIList() != null && !currCldsVfData.getCldsKPIList().isEmpty()) { + for (CldsVfKPIData currCldsVfKPIData : currCldsVfData.getCldsKPIList()) { + kpiObjectNode.put(currCldsVfKPIData.getThresholdValue(), + currCldsVfKPIData.getThresholdValue()); + } + } else { + kpiObjectNode.put("", ""); + } + vfObjectNode.putPOJO("vfc", vfcUuidNode); + vfObjectNode.putPOJO("kpi", kpiObjectNode); + vfUuidObjectNode.putPOJO(currCldsVfData.getVfInvariantResourceUUID(), vfObjectNode); + } + } + } else { + ObjectNode vfcUuidNode = mapper.createObjectNode(); + vfcUuidNode.put("", ""); + ObjectNode vfcObjectNode = mapper.createObjectNode(); + vfcObjectNode.putPOJO("vfc", vfcUuidNode); + vfUuidObjectNode.putPOJO("", vfcObjectNode); + } + return vfUuidObjectNode; + } + + /** + * This method searches the equivalent artifact UUID for a specific + * artifactName in a SdcServiceDetail. + * + * @param cldsSdcServiceDetail + * The SdcServiceDetail that will be analyzed + * @param artifactName + * The artifact name that will be searched + * @return The artifact UUID found + */ + public String getArtifactIdIfArtifactAlreadyExists(CldsSdcServiceDetail cldsSdcServiceDetail, String artifactName) { + String artifactUuid = null; + boolean artifactExists = false; + if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null + && !cldsSdcServiceDetail.getResources().isEmpty()) { + for (CldsSdcResource currCldsSdcResource : cldsSdcServiceDetail.getResources()) { + if (artifactExists) { + break; + } + if (currCldsSdcResource != null && currCldsSdcResource.getArtifacts() != null + && !currCldsSdcResource.getArtifacts().isEmpty()) { + for (CldsSdcArtifact currCldsSdcArtifact : currCldsSdcResource.getArtifacts()) { + if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null + && currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) { + artifactUuid = currCldsSdcArtifact.getArtifactUUID(); + artifactExists = true; + break; + } + } + } + } + } + return artifactUuid; + } + + public String updateControlLoopStatusToDcae(String dcaeUrl, String invariantResourceUuid, + String invariantServiceUuid, String artifactName) { + String baseUrl = refProp.getStringValue("sdc.serviceUrl"); + String basicAuth = SdcReq.getSdcBasicAuth(refProp); + String postStatusData = "{ \n" + "\"event\" : \"" + "Created" + "\",\n" + "\"serviceUUID\" : \"" + + invariantServiceUuid + "\",\n" + "\"resourceUUID\" :\"" + invariantResourceUuid + "\",\n" + + "\"artifactName\" : \"" + artifactName + "\",\n" + "} \n"; + try { + String url = baseUrl; + if (invariantServiceUuid != null) { + url = dcaeUrl + "/closed-loops"; + } + URL urlObj = new URL(url); + + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool"); + conn.setRequestProperty("Authorization", basicAuth); + conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + conn.setRequestMethod("POST"); + + byte[] postData = SdcReq.stringToByteArray(postStatusData); + try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { + wr.write(postData); + } + + int responseCode = conn.getResponseCode(); + logger.info("responseCode=" + responseCode); + + String resp = getResponse(conn); + if (resp != null) { + return resp; + } + } catch (IOException e) { + logger.error("Not able to get any service information from sdc for uuid:" + invariantServiceUuid, e); + } + return ""; + } + + /** + * To get all sdc VF/VFC Resources basic info. + * + * @param resourceType + * The resourceType + * @return The list of CldsSdcResourceBasicInfo + */ + private List<CldsSdcResourceBasicInfo> getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) { + String catalogUrl = refProp.getStringValue("sdc.catalog.url"); + String resourceUrl = catalogUrl + "resources?resourceType=" + resourceType; + String allSdcVfcResources = getCldsServicesOrResourcesBasedOnURL(resourceUrl, false); + return removeDuplicateSdcResourceBasicInfo(getAllSdcResourcesListFromJson(allSdcVfcResources)); + } + + private String getResourceUuidFromResourceInvariantUuid(String resourceInvariantUuid, + List<CldsSdcResourceBasicInfo> resourceInfoList) { + String resourceUuid = null; + if (resourceInfoList != null && !resourceInfoList.isEmpty()) { + for (CldsSdcResourceBasicInfo currResource : resourceInfoList) { + if (currResource != null && currResource.getInvariantUUID() != null && currResource.getUuid() != null + && currResource.getInvariantUUID().equalsIgnoreCase(resourceInvariantUuid)) { + resourceUuid = currResource.getUuid(); + break; + } + } + } + return resourceUuid; + } + + /** + * Method to get service invariant uuid from model properties. + * + * @param props + * The Clds model properties + * @return The Service Id + */ + private String getServiceInvariantUuidFromProps(ModelProperties props) { + String invariantUuid = ""; + Global globalProps = props.getGlobal(); + if (globalProps != null && globalProps.getService() != null) { + invariantUuid = globalProps.getService(); + } + return invariantUuid; + } + + /** + * This method upload the BluePrint to SDC. + * + * @param prop + * The Clds model Properties + * @param userid + * The user id for SDC + * @param sdcReqUrlsList + * The list of SDC URL to try + * @param formattedSdcReq + * The blueprint to upload + * @param formattedSdcLocationReq + * THe location Blueprint to upload + * @param artifactName + * The artifact name from where we can get the Artifact UUID + * @param locationArtifactName + * The location artifact name from where we can get the Artifact + * UUID + * + */ + public void uploadToSdc(ModelProperties prop, String userid, List<String> sdcReqUrlsList, String formattedSdcReq, + String formattedSdcLocationReq, String artifactName, String locationArtifactName) { + logger.info("userid=" + userid); + String serviceInvariantUuid = getServiceInvariantUuidFromProps(prop); + if (sdcReqUrlsList != null && !sdcReqUrlsList.isEmpty()) { + for (String url : sdcReqUrlsList) { + if (url != null) { + String originalServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid); + logger.info("ServiceUUID used before upload in url:" + originalServiceUuid); + String sdcServicesInformation = getSdcServicesInformation(originalServiceUuid); + CldsSdcServiceDetail cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation); + String uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail, + artifactName); + // Upload artifacts to sdc + String updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url; + String responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcReq); + logger.info("value of sdc Response of uploading to sdc :" + responseStr); + String updatedServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid); + if (!originalServiceUuid.equalsIgnoreCase(updatedServiceUuid)) { + url = url.replace(originalServiceUuid, updatedServiceUuid); + } + logger.info("ServiceUUID used after upload in ulr:" + updatedServiceUuid); + sdcServicesInformation = getSdcServicesInformation(updatedServiceUuid); + cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation); + uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail, + locationArtifactName); + // To send location information also to sdc + updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url; + responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcLocationReq); + logger.info("value of sdc Response of uploading location to sdc :" + responseStr); + } + } + } + } +} |