2 * Copyright 2020 - 2021 Fujitsu Limited.
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
15 package org.onap.holmes.common.aai;
17 import com.google.gson.JsonArray;
18 import com.google.gson.JsonObject;
19 import com.google.gson.JsonParser;
20 import org.onap.holmes.common.aai.config.AaiConfig;
21 import org.onap.holmes.common.config.MicroServiceConfig;
22 import org.onap.holmes.common.exception.CorrelationException;
23 import org.onap.holmes.common.utils.JerseyClient;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.springframework.stereotype.Service;
28 import javax.ws.rs.client.Entity;
29 import javax.ws.rs.core.MultivaluedHashMap;
30 import javax.ws.rs.core.MultivaluedMap;
31 import java.util.HashMap;
34 import static org.onap.holmes.common.aai.AaiJsonParserUtil.getInfo;
35 import static org.onap.holmes.common.aai.AaiJsonParserUtil.getPath;
38 public class AaiQueryMdons {
40 private final Logger log = LoggerFactory.getLogger(AaiQueryMdons.class);
41 private static final String RELATIONSHIP_VALUE = "relationship-value";
42 private static final String RELATIONSHIP_LIST = "relationship-list";
43 private static final String RELATIONSHIP_DATA = "relationship-data";
44 private MultivaluedMap<String, Object> headers;
46 public static AaiQueryMdons newInstance() {
47 return new AaiQueryMdons();
50 private AaiQueryMdons() {
51 headers = new MultivaluedHashMap<>();
52 headers.add("X-TransactionId", AaiConfig.X_TRANSACTION_ID);
53 headers.add("X-FromAppId", AaiConfig.X_FROMAPP_ID);
54 headers.add("Authorization", AaiConfig.getAuthenticationCredentials());
55 headers.add("Accept", "application/json");
56 headers.add("Content-Type", "application/json");
59 private String getCompletePath(String urlTemplate, Map<String, String> pathParams) {
60 String url = urlTemplate;
61 for (Map.Entry<String, String> entry : pathParams.entrySet()) {
62 url = url.replaceAll("\\{" + entry.getKey() + "\\}", entry.getValue());
67 private String getResponse(String url) throws CorrelationException {
69 return JerseyClient.newInstance().headers(getHeaders()).get(url);
70 } catch (Exception e) {
71 throw new CorrelationException("Failed to get data from aai", e);
75 private Map<String, Object> getHeaders() {
76 Map<String, Object> headers = new HashMap<>();
77 headers.put("X-TransactionId", AaiConfig.X_TRANSACTION_ID);
78 headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID);
79 headers.put("Authorization", AaiConfig.getAuthenticationCredentials());
80 headers.put("Accept", "application/json");
84 public Map<String, String> processPnf(String pnfId) throws CorrelationException {
85 Map<String, String> accessServiceMap = new HashMap<>();
86 String url = MicroServiceConfig.getAaiAddr() + getPath(AaiConfig.AaiConsts.AAI_PNF_VALUE, "pnfName", pnfId);
87 String pnf = getResponse(url);
88 JsonObject jObject = JsonParser.parseString(pnf).getAsJsonObject();
89 JsonObject pInterfaces = AaiJsonParserUtil.extractJsonObject(jObject, "p-interfaces");
90 JsonArray pInterface = AaiJsonParserUtil.extractJsonArray(pInterfaces, "p-interface");
91 for (int i = 0; i < pInterface.size(); i++) {
92 JsonObject relationshiplist =
93 AaiJsonParserUtil.extractJsonObject(pInterface.get(i).getAsJsonObject(), RELATIONSHIP_LIST);
94 JsonArray relationship = AaiJsonParserUtil.extractJsonArray(relationshiplist, "relationship");
95 if (relationship != null) {
96 for (int j = 0; j < relationship.size(); j++) {
97 JsonObject object = relationship.get(j).getAsJsonObject();
98 if (object.get("related-to").getAsString().equals("service-instance")) {
99 String domain = object.get(RELATIONSHIP_DATA).getAsJsonArray().get(2).getAsJsonObject()
100 .get(RELATIONSHIP_VALUE).getAsString();
102 String access = getAccessServiceForDomain(domain);
103 String[] accessSplit = access.split("__");
104 accessServiceMap.put(accessSplit[0], accessSplit[1]);
112 return accessServiceMap;
115 private String getServiceInstanceAai(String serviceInstanceId) throws CorrelationException {
116 Map<String, String> paramMap = new HashMap<>();
117 paramMap.put("global-customer-id", "Orange");
118 paramMap.put("service-type", "MDONS_OTN");
119 paramMap.put("instance-id", serviceInstanceId);
120 String url = MicroServiceConfig.getAaiAddr() + getCompletePath(AaiConfig.AaiConsts.AAI_SERVICE, paramMap);
121 return getResponse(url);
124 private String getAccessServiceForDomain(String serviceInstanceId) throws CorrelationException {
125 String domainInstance = getServiceInstanceAai(serviceInstanceId);
126 JsonObject matchedObject = getInfo(domainInstance, "service-instance");
127 String accessInstanceId = matchedObject.get(RELATIONSHIP_DATA).getAsJsonArray().get(2).getAsJsonObject()
128 .get(RELATIONSHIP_VALUE).getAsString();
129 String accessName = matchedObject.get("related-to-property").getAsJsonArray().get(0).getAsJsonObject()
130 .get("property-value").getAsString();
131 return accessInstanceId + "__" + accessName;
134 public void updateLinksForAccessService(Map<String, String> accessInstanceList) throws CorrelationException {
135 for (String access : accessInstanceList.keySet()) {
136 String response = getServiceInstanceAai(access);
137 JsonObject matchedObject = getInfo(response, "logical-link");
138 if (matchedObject != null) {
139 String linkName = matchedObject.get(RELATIONSHIP_DATA).getAsJsonArray().get(0).getAsJsonObject()
140 .get(RELATIONSHIP_VALUE).getAsString();
141 updateLogicLinkStatus(linkName, "down");
148 public String getPnfNameFromPnfId(String pnfId) throws CorrelationException {
149 String url = MicroServiceConfig.getAaiAddr() + getPath(AaiConfig.AaiConsts.AAI_PNF_ID, "pnfId", pnfId);
150 String pnf = getResponse(url);
151 JsonObject jsonObject = JsonParser.parseString(pnf).getAsJsonObject();
152 JsonArray pnfList = AaiJsonParserUtil.extractJsonArray(jsonObject, "pnf");
153 return pnfList.get(0).getAsJsonObject().get("pnf-name").getAsString();
157 public void updatePnfOperationalStatus(String pnfName, String status) throws CorrelationException {
158 String url = MicroServiceConfig.getAaiAddr() + getPath(AaiConfig.AaiConsts.AAI_PNF, "pnfName", pnfName);
159 String pnf = getResponse(url);
160 JsonObject jsonObject = JsonParser.parseString(pnf).getAsJsonObject();
161 jsonObject.addProperty("operational-status", status);
162 put(url, jsonObject.toString());
166 public void updateLogicLinkStatus(String linkName, String status) throws CorrelationException {
168 MicroServiceConfig.getAaiAddr() + getPath(AaiConfig.AaiConsts.AAI_LINK_UPDATE, "linkName", linkName);
169 String response = getResponse(url);
170 JsonObject jsonObject = JsonParser.parseString(response).getAsJsonObject();
171 jsonObject.addProperty("operational-status", status);
172 put(url, jsonObject.toString());
175 private void put(String url, String content) throws CorrelationException {
177 JerseyClient.newInstance().headers(getHeaders()).put(url, Entity.json(content));
178 } catch (Exception e) {
179 throw new CorrelationException("Failed to put data in AAI", e);