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