From afb7bc0c146474e2492d29a70fa1c82689e8e3ed Mon Sep 17 00:00:00 2001 From: malar Date: Sun, 29 Aug 2021 17:17:21 +0000 Subject: Implement CPS Client in SON Handler Issue-ID: DCAEGEN2-2883 Signed-off-by: Malarvizhi Paramasivam Change-Id: Ife63f6eeb9e277c472a4773fe78345e18b753511 --- .../dcaegen2/services/sonhms/Configuration.java | 100 +++++++++++++- .../dcaegen2/services/sonhms/EventHandler.java | 19 +-- .../services/sonhms/child/ChildThread.java | 8 +- .../services/sonhms/child/ChildThreadUtils.java | 8 +- .../dcaegen2/services/sonhms/child/PnfUtils.java | 14 +- .../sonhms/exceptions/CpsNotFoundException.java | 41 ++++++ .../sonhms/restclient/ConfigInterface.java | 73 ++++++++++ .../sonhms/restclient/ConfigurationClient.java | 52 +++++++ .../services/sonhms/restclient/CpsClient.java | 149 +++++++++++++++++++++ .../services/sonhms/restclient/SdnrRestClient.java | 27 +++- .../services/sonhms/utils/ClusterUtils.java | 18 ++- .../sonhms/utils/SonHandlerRestTemplate.java | 3 +- 12 files changed, 473 insertions(+), 39 deletions(-) create mode 100644 src/main/java/org/onap/dcaegen2/services/sonhms/exceptions/CpsNotFoundException.java create mode 100644 src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigInterface.java create mode 100644 src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigurationClient.java create mode 100644 src/main/java/org/onap/dcaegen2/services/sonhms/restclient/CpsClient.java (limited to 'src/main') diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/Configuration.java b/src/main/java/org/onap/dcaegen2/services/sonhms/Configuration.java index 563491c..8b05f8c 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/Configuration.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/Configuration.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019-2020 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,6 +45,11 @@ public class Configuration { private String pgPassword; private List dmaapServers; private String configDbService; + private String cpsServiceUrl; + private String getCellDataUrl; + private String getNbrListUrl; + private String getPciUrl; + private String getPnfUrl; private String oofService; private String oofEndpoint; private String cg; @@ -74,6 +79,35 @@ public class Configuration { private int policyNegativeAckThreshold; private long policyFixedPciTimeInterval; private String nfNamingCode; + private String ConfigClientType; + private String CpsUsername; + private String CpsPassword; + + public String getCpsUsername() + { + return CpsUsername; + } + public void setCpsUsername(String CpsUsername) + { + this.CpsUsername = CpsUsername; + } + public String getCpsPassword() + { + return CpsPassword; + } + public void setCpsPassword(String CpsPassword) + { + this.CpsPassword = CpsPassword; + } + + public String getConfigClientType() + { + return ConfigClientType; + } + public void setConfigClientType(String ConfigClientType) + { + this.ConfigClientType = ConfigClientType; + } public int getPoorCountThreshold() { return poorCountThreshold; @@ -377,11 +411,64 @@ public class Configuration { this.nfNamingCode = nfNamingCode; } - @Override + public static Logger getLog() { + return log; + } + + public static void setLog(Logger log) { + Configuration.log = log; + } + + public String getCpsServiceUrl() { + return cpsServiceUrl; + } + + public void setCpsServiceUrl(String cpsServiceUrl) { + this.cpsServiceUrl = cpsServiceUrl; + } + + public String getGetCellDataUrl() { + return getCellDataUrl; + } + + public void setGetCellDataUrl(String getCellDataUrl) { + this.getCellDataUrl = getCellDataUrl; + } + + public String getGetNbrListUrl() { + return getNbrListUrl; + } + + public void setGetNbrListUrl(String getNbrListUrl) { + this.getNbrListUrl = getNbrListUrl; + } + + public String getGetPciUrl() { + return getPciUrl; + } + + public void setGetPciUrl(String getPciUrl) { + this.getPciUrl = getPciUrl; + } + + public String getGetPnfUrl() { + return getPnfUrl; + } + + public void setGetPnfUrl(String getPnfUrl) { + this.getPnfUrl = getPnfUrl; + } + + public static void setInstance(Configuration instance) { + Configuration.instance = instance; + } + + @Override public String toString() { return "Configuration [pgHost=" + pgHost + ", pgPort=" + pgPort + ", pgUsername=" + pgUsername + ", pgPassword=" + pgPassword + ", dmaapServers=" + dmaapServers + ", configDbService=" + configDbService - + ", oofService=" + oofService + ", oofEndpoint=" + oofEndpoint + ", cg=" + cg + ", cid=" + cid + + ", cpsServiceUrl=" + cpsServiceUrl + ", CpsUsername=" + CpsUsername + ",CpsPassword=" + CpsPassword + ",ConfigClientType=" + ConfigClientType + ", getCellDataUrl=" + getCellDataUrl + ", getNbrListUrl=" + + getNbrListUrl + ", getPciUrl=" + getPciUrl + ", getPnfUrl=" + getPnfUrl + ", oofService=" + oofService + ", oofEndpoint=" + oofEndpoint + ", cg=" + cg + ", cid=" + cid + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout + ", minCollision=" + minCollision + ", minConfusion=" + minConfusion + ", sourceId=" + sourceId + ", callbackUrl=" + callbackUrl + ", pciOptimizer=" + pciOptimizer + ", pciAnrOptimizer=" + pciAnrOptimizer @@ -410,6 +497,8 @@ public class Configuration { JsonObject publishes = jsonObject.getAsJsonObject("streams_publishes"); streamsPublishes = new Gson().fromJson(publishes, mapType); + CpsUsername = jsonObject.get("cps.username").getAsString(); + CpsPassword = jsonObject.get("cps.password").getAsString(); pgPort = jsonObject.get("postgres.port").getAsInt(); pollingInterval = jsonObject.get("sonhandler.pollingInterval").getAsInt(); pgPassword = jsonObject.get("postgres.password").getAsString(); @@ -451,6 +540,11 @@ public class Configuration { policyNegativeAckThreshold = jsonObject.get("sonhandler.policyNegativeAckThreshold").getAsInt(); policyFixedPciTimeInterval = jsonObject.get("sonhandler.policyFixedPciTimeInterval").getAsLong(); nfNamingCode = jsonObject.get("sonhandler.nfNamingCode").getAsString(); + cpsServiceUrl = jsonObject.get("cps.service.url").getAsString(); + getCellDataUrl = jsonObject.get("cps.get.celldata").getAsString(); + getPnfUrl = jsonObject.get("cps.get.pnf.url").getAsString(); + getPciUrl = jsonObject.get("cps.get.pci.url").getAsString(); + ConfigClientType = jsonObject.get("sonhandler.clientType").getAsString(); log.info("configuration from CBS {}", this); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/EventHandler.java b/src/main/java/org/onap/dcaegen2/services/sonhms/EventHandler.java index 325de6f..64d8593 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/EventHandler.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/EventHandler.java @@ -42,6 +42,7 @@ import org.onap.dcaegen2.services.sonhms.entity.ClusterDetails; import org.onap.dcaegen2.services.sonhms.exceptions.ConfigDbNotFoundException; import org.onap.dcaegen2.services.sonhms.model.CellPciPair; import org.onap.dcaegen2.services.sonhms.model.ClusterMap; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; import org.onap.dcaegen2.services.sonhms.model.FapServiceList; import org.onap.dcaegen2.services.sonhms.model.LteNeighborListInUseLteCell; import org.onap.dcaegen2.services.sonhms.model.Notification; @@ -110,8 +111,8 @@ public class EventHandler { && !faultNotificationtoClusterMapping.getCellsinCluster().isEmpty()) { try { handleMatchedFmCells(faultNotificationtoClusterMapping, clusterDetails); - } catch (ConfigDbNotFoundException e) { - log.error("Config DB Exception {}", e); + } catch (ConfigDbNotFoundException | CpsNotFoundException e) { + log.error("Config DB Exception {} or Cps Exception {} ", e); } } // unmatched new cells @@ -128,7 +129,7 @@ public class EventHandler { * */ private void handleMatchedFmCells(FaultNotificationtoClusterMapping faultNotificationtoClusterMapping, - List clusterDetails) throws ConfigDbNotFoundException { + List clusterDetails) throws ConfigDbNotFoundException, CpsNotFoundException { Map cellsinCluster = faultNotificationtoClusterMapping.getCellsinCluster(); log.info("Handling Matching cells for FM notification"); @@ -184,7 +185,7 @@ public class EventHandler { cluster.setCollisionConfusionMap(collisionConfusionMap); newClusters.add(cluster); - } catch (ConfigDbNotFoundException e) { + } catch (ConfigDbNotFoundException | CpsNotFoundException e) { log.error("Error connecting with configDB {}", e); } } @@ -198,8 +199,8 @@ public class EventHandler { Map> collisionConfusionMap = cluster.getCollisionConfusionMap(); collisionConfusionMap.put(cellId, collisionConfusionCount); cluster.setCollisionConfusionMap(collisionConfusionMap); - } catch (ConfigDbNotFoundException e) { - log.error("Config DB not found {}", e); + } catch (ConfigDbNotFoundException | CpsNotFoundException e) { + log.error("Config DB or CPS not found {}", e); } newClusters.remove(cluster); newClusters.add(modifiedCluster); @@ -244,7 +245,7 @@ public class EventHandler { } - private void handleUnMatchingCells(List newCells) throws ConfigDbNotFoundException { + private void handleUnMatchingCells(List newCells) throws ConfigDbNotFoundException, CpsNotFoundException { log.info("handling unmatched cells"); @@ -261,8 +262,8 @@ public class EventHandler { .getLteNeighborListInUseLteCell().get(0).getPlmnid()); cluster.setCollisionConfusionMap(new HashMap<>()); newClusters.add(cluster); - } catch (ConfigDbNotFoundException e) { - log.error("Error connecting with configDB {}", e); + } catch (ConfigDbNotFoundException | CpsNotFoundException e) { + log.error("Error connecting with configDB {} or CPS {}", e); } } diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThread.java b/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThread.java index fd2de30..3964927 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThread.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThread.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019-2020 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -61,8 +61,8 @@ import org.onap.dcaegen2.services.sonhms.model.Flag; import org.onap.dcaegen2.services.sonhms.model.HoDetails; import org.onap.dcaegen2.services.sonhms.model.ThreadId; import org.onap.dcaegen2.services.sonhms.restclient.AsyncResponseBody; +import org.onap.dcaegen2.services.sonhms.restclient.ConfigurationClient; import org.onap.dcaegen2.services.sonhms.restclient.PciSolutions; -import org.onap.dcaegen2.services.sonhms.restclient.SdnrRestClient; import org.onap.dcaegen2.services.sonhms.utils.BeanUtil; import org.onap.dcaegen2.services.sonhms.utils.ClusterUtils; import org.onap.dcaegen2.services.sonhms.utils.DmaapUtils; @@ -176,7 +176,7 @@ public class ChildThread implements Runnable { FixedPciCellsRepository fixedPciCellsRepository = BeanUtil.getBean(FixedPciCellsRepository.class); List fixedPciCells = fixedPciCellsRepository.getFixedPciCells(); String cellId = fixedPciCells.get(0); - JSONObject cellData = SdnrRestClient.getCellData(cellId); + JSONObject cellData = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getCellData(cellId); networkId = cellData.getJSONObject("Cell").getString("networkId"); } @@ -320,7 +320,7 @@ public class ChildThread implements Runnable { for (PciSolutions pcisolutions : pciSolutionsList) { String cellId = pcisolutions.getCellId(); - int oldPci = SdnrRestClient.getPci(cellId); + int oldPci = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getPci(cellId); int newPci = pcisolutions.getPci(); PciUpdate pciUpdate = new PciUpdate(); pciUpdate.setCellId(cellId); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThreadUtils.java b/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThreadUtils.java index d04e6cb..5876d2b 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThreadUtils.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/child/ChildThreadUtils.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019-2020 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import java.util.UUID; import org.onap.dcaegen2.services.sonhms.ConfigPolicy; import org.onap.dcaegen2.services.sonhms.Configuration; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; import org.onap.dcaegen2.services.sonhms.HoMetricsComponent; import org.onap.dcaegen2.services.sonhms.dao.SonRequestsRepository; import org.onap.dcaegen2.services.sonhms.dmaap.PolicyDmaapClient; @@ -55,6 +56,7 @@ import org.onap.dcaegen2.services.sonhms.model.Ran; import org.onap.dcaegen2.services.sonhms.model.X0005b9Lte; import org.onap.dcaegen2.services.sonhms.restclient.AsyncResponseBody; import org.onap.dcaegen2.services.sonhms.restclient.SdnrRestClient; +import org.onap.dcaegen2.services.sonhms.restclient.ConfigurationClient; import org.onap.dcaegen2.services.sonhms.restclient.Solutions; import org.onap.dcaegen2.services.sonhms.utils.BeanUtil; import org.slf4j.Logger; @@ -162,7 +164,7 @@ public class ChildThreadUtils { * @throws ConfigDbNotFoundException * when config db is unreachable */ - public Boolean sendToPolicy(AsyncResponseBody async) throws ConfigDbNotFoundException { + public Boolean sendToPolicy(AsyncResponseBody async) throws ConfigDbNotFoundException, CpsNotFoundException { if (log.isDebugEnabled()) { log.debug(async.toString()); @@ -224,7 +226,7 @@ public class ChildThreadUtils { lteCell.setBlacklisted("true"); lteCell.setPlmnId(solutions.getNetworkId()); lteCell.setCid(removeableNeighbor); - int pci = SdnrRestClient.getPci(cellId); + int pci = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getPci(cellId); lteCell.setPhyCellId(pci); lteCell.setPnfName(pnfName); lteCellList.add(lteCell); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/child/PnfUtils.java b/src/main/java/org/onap/dcaegen2/services/sonhms/child/PnfUtils.java index 66f8221..1787b3f 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/child/PnfUtils.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/child/PnfUtils.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,12 +27,16 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import org.onap.dcaegen2.services.sonhms.Configuration; import org.onap.dcaegen2.services.sonhms.dao.CellInfoRepository; import org.onap.dcaegen2.services.sonhms.entity.CellInfo; import org.onap.dcaegen2.services.sonhms.exceptions.ConfigDbNotFoundException; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; import org.onap.dcaegen2.services.sonhms.model.CellPciPair; import org.onap.dcaegen2.services.sonhms.restclient.AnrSolutions; import org.onap.dcaegen2.services.sonhms.restclient.PciSolutions; +import org.onap.dcaegen2.services.sonhms.restclient.ConfigurationClient; +import org.onap.dcaegen2.services.sonhms.restclient.CpsClient; import org.onap.dcaegen2.services.sonhms.restclient.SdnrRestClient; import org.onap.dcaegen2.services.sonhms.restclient.Solutions; import org.onap.dcaegen2.services.sonhms.utils.BeanUtil; @@ -46,7 +50,7 @@ public class PnfUtils { * get pnfs. * */ - public Map> getPnfs(Solutions solutions) throws ConfigDbNotFoundException { + public Map> getPnfs(Solutions solutions) throws ConfigDbNotFoundException, CpsNotFoundException { Map> pnfs = new HashMap<>(); List pciSolutions = solutions.getPciSolutions(); @@ -60,7 +64,7 @@ public class PnfUtils { if (cellInfo.isPresent()) { pnfName = cellInfo.get().getPnfName(); } else { - pnfName = SdnrRestClient.getPnfName(cellId); + pnfName = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getPnfName(cellId); cellInfoRepository.save(new CellInfo(cellId, pnfName)); } if (pnfs.containsKey(pnfName)) { @@ -80,14 +84,14 @@ public class PnfUtils { * */ public Map>>> getPnfsForAnrSolutions(List anrSolutions) - throws ConfigDbNotFoundException { + throws ConfigDbNotFoundException, CpsNotFoundException { Map>>> anrPnfs = new HashMap<>(); List removeableNeighbors; for (AnrSolutions anrSolution : anrSolutions) { String cellId = anrSolution.getCellId(); - String pnfName = SdnrRestClient.getPnfName(cellId); + String pnfName = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getPnfName(cellId); removeableNeighbors = anrSolution.getRemoveableNeighbors(); Map> cellRemNeighborsPair = new HashMap<>(); cellRemNeighborsPair.put(cellId, removeableNeighbors); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/exceptions/CpsNotFoundException.java b/src/main/java/org/onap/dcaegen2/services/sonhms/exceptions/CpsNotFoundException.java new file mode 100644 index 0000000..f62c9ba --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/exceptions/CpsNotFoundException.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * son-handler + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ============================================================================== + * 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========================================================= + * + *******************************************************************************/ + +package org.onap.dcaegen2.services.sonhms.exceptions; + +/** + * Exception class for CPS when CPS client is not found + * and information cannot be retrieved + * + * @see org.onap.dcaegen2.services.sonhms.restclient.CpsClient + */ + +public class CpsNotFoundException extends Exception { + + /** + * serial version. + */ + private static final long serialVersionUID = 1L; + + public CpsNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigInterface.java b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigInterface.java new file mode 100644 index 0000000..ff34cbf --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigInterface.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * son-handler + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ============================================================================== + * 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========================================================= + * + *******************************************************************************/ + +package org.onap.dcaegen2.services.sonhms.restclient; + +import org.json.JSONObject; +import org.onap.dcaegen2.services.sonhms.exceptions.ConfigDbNotFoundException; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; +import org.onap.dcaegen2.services.sonhms.model.CellPciPair; + +import java.util.List; + +/** + * An abstract base class which contains the methods for CpsClient and SdnrRestClient classes + * + * @see CpsClient,SdnrRestClient + */ + +public abstract class ConfigInterface +{ + /** + * Abstract method to get neighbour list from SDNR or CPS based on the client + * mentioned in configuration. + * + * @throws ConfigDbNotFoundException,CpsNotFoundException when request to configDB or CPS fails + * @see org.onap.dcaegen2.services.sonhms.Configuration + */ + public abstract List getNbrList(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException; + + /** + * Abstract method to get PCI from SDNR or CPS based on the client mentioned. + * + * @throws ConfigDbNotFoundException,CpsNotFoundException when request to configDB or CPS fails + * @see org.onap.dcaegen2.services.sonhms.Configuration + */ + public abstract int getPci(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException; + + /** + * Abstract method to get PNF name from SDNR or CPS based on the client mentioned. + * + * @throws ConfigDbNotFoundException,CpsNotFoundException + * when request to configDB or CPS fails + * @see org.onap.dcaegen2.services.sonhms.Configuration + */ + public abstract String getPnfName(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException; + + /** + * Abstract method to get CellData name from SDNR or CPS based on the client mentioned. + * + * @throws ConfigDbNotFoundException,CpsNotFoundException + * when request to configDB or CPS fails + * @see org.onap.dcaegen2.services.sonhms.Configuration + */ + public abstract JSONObject getCellData(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException; +} \ No newline at end of file diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigurationClient.java b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigurationClient.java new file mode 100644 index 0000000..3430469 --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/ConfigurationClient.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * son-handler + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ============================================================================== + * 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========================================================= + * + *******************************************************************************/ + +package org.onap.dcaegen2.services.sonhms.restclient; + +/** + * Class with method to get the Client type depending on the + * configuration client specified. + * + * @see org.onap.dcaegen2.services.sonhms.Configuration + */ + +public class ConfigurationClient +{ + /** + * Method to get the Client type. + * + * @param config_name client name(CPS or ConfigDB) + * @return configuration client type + * + */ + public static ConfigInterface configClient(String config_name) + { + if (config_name == null || config_name.isEmpty()) + return null; + if ("ConfigDB".equals(config_name)) { + return new SdnrRestClient(); + } + else if ("CPS".equals(config_name)) { + return new CpsClient(); + } + return null; + } +} diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/CpsClient.java b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/CpsClient.java new file mode 100644 index 0000000..20b95c7 --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/CpsClient.java @@ -0,0 +1,149 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * son-handler + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ============================================================================== + * 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========================================================= + * + *******************************************************************************/ + +package org.onap.dcaegen2.services.sonhms.restclient; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.onap.dcaegen2.services.sonhms.Configuration; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; +import org.onap.dcaegen2.services.sonhms.model.CellPciPair; +import org.onap.dcaegen2.services.sonhms.utils.SonHandlerRestTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.ResponseEntity; + +/** + * A subclass which contains the methods + * to get required information from the CPS Client + * + */ + +public class CpsClient extends ConfigInterface { + + private static Logger log = LoggerFactory.getLogger(CpsClient.class); + + public CpsClient() { + + } + + /** + * Method to get neighbour list from CPS. + * + * @throws CpsNotFoundException when request to CPS fails + */ + @Override + public List getNbrList(String cellId) throws CpsNotFoundException { + + Configuration configuration = Configuration.getInstance(); + String requestUrl = configuration.getCpsServiceUrl() + "/" + configuration.getGetNbrListUrl(); + JSONObject inputparam = new JSONObject(); + JSONObject reqbody = new JSONObject(); + inputparam.put("cellId", cellId); + reqbody.put("inputParameters", inputparam); + log.debug("request url: {}", requestUrl); + String response = sendRequest(requestUrl, reqbody); + List nbrList = new ArrayList<>(); + + JSONArray nbrListObj = new JSONArray(response); + for (int i = 0; i < nbrListObj.length(); i++) { + JSONObject cellObj = nbrListObj.getJSONObject(i); + JSONObject obj = cellObj.getJSONObject("attributes"); + if (obj.getBoolean("isHOAllowed")) { + CellPciPair cell = new CellPciPair(obj.getString("nRTCI"), obj.getInt("nRPCI")); + nbrList.add(cell); + } + } + + return nbrList; + } + + /** + * Method to get PCI from CPS. + * + * @throws CpsNotFoundException when request to CPS fails + */ + @Override + public int getPci(String cellId) throws CpsNotFoundException { + + Configuration configuration = Configuration.getInstance(); + String requestUrl = configuration.getCpsServiceUrl() + "/" + configuration.getGetPciUrl(); + JSONObject inputparam = new JSONObject(); + JSONObject reqbody = new JSONObject(); + inputparam.put("cellId", cellId); + reqbody.put("inputParameters", inputparam); + String response = sendRequest(requestUrl, reqbody); + JSONObject respObj = new JSONObject(response); + return respObj.getInt("value"); + } + + /** + * Method to get PNF name from CPS. + * + * @throws CpsNotFoundException when request to CPS fails + */ + @Override + public String getPnfName(String cellId) throws CpsNotFoundException { + Configuration configuration = Configuration.getInstance(); + String requestUrl = configuration.getCpsServiceUrl() + "/" + configuration.getGetPnfUrl(); + JSONObject inputparam = new JSONObject(); + JSONObject reqbody = new JSONObject(); + inputparam.put("cellId", cellId); + reqbody.put("inputParameters", inputparam); + String response = sendRequest(requestUrl, reqbody); + JSONObject responseObject = new JSONObject(response); + return responseObject.getString("value"); + } + + /** + * Method to get CellData name from CPS. + * + * @throws CpsNotFoundException when request to CPS fails + */ + @Override + public JSONObject getCellData(String cellId) throws CpsNotFoundException { + + Configuration configuration = Configuration.getInstance(); + String requestUrl = configuration.getCpsServiceUrl() + "/" + configuration.getGetCellDataUrl(); + JSONObject inputparam = new JSONObject(); + JSONObject reqbody = new JSONObject(); + inputparam.put("cellId", cellId); + reqbody.put("inputParameters", inputparam); + String response = sendRequest(requestUrl, reqbody); + JSONObject responseObject = new JSONObject(response); + return responseObject; + } + + private String sendRequest(String url, JSONObject reqbody) throws CpsNotFoundException { + ResponseEntity response = SonHandlerRestTemplate.sendPostRequest(url, reqbody.toString(), + new ParameterizedTypeReference() { + }); + if (response == null) { + throw new CpsNotFoundException("Cannot reach Config DB"); + } + return response.getBody(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/SdnrRestClient.java b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/SdnrRestClient.java index a390bbe..9a05b88 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/SdnrRestClient.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/restclient/SdnrRestClient.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019-2020 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,12 +37,18 @@ import org.slf4j.LoggerFactory; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.ResponseEntity; -public class SdnrRestClient { +/** + * A subclass which contains the methods + * to get required information from the SDNR Client + * + */ + +public class SdnrRestClient extends ConfigInterface { private static final String DATETIMEFORMAT = "yyyy-MM-dd HH:mm:ss"; private static Logger log = LoggerFactory.getLogger(SdnrRestClient.class); - private SdnrRestClient() { + public SdnrRestClient() { } @@ -52,7 +58,8 @@ public class SdnrRestClient { * @throws ConfigDbNotFoundException * when request to configDB fails */ - public static List getNbrList(String cellId) throws ConfigDbNotFoundException { + @Override + public List getNbrList(String cellId) throws ConfigDbNotFoundException { Configuration configuration = Configuration.getInstance(); String ts = new SimpleDateFormat(DATETIMEFORMAT).format(new Time(System.currentTimeMillis())); String requestUrl = configuration.getConfigDbService() + "/api/sdnc-config-db/v3/getNbrList" + "/" + cellId @@ -79,7 +86,9 @@ public class SdnrRestClient { * @throws ConfigDbNotFoundException * when request to configDB fails */ - public static int getPci(String cellId) throws ConfigDbNotFoundException { + + @Override + public int getPci(String cellId) throws ConfigDbNotFoundException { Configuration configuration = Configuration.getInstance(); String ts = new SimpleDateFormat(DATETIMEFORMAT).format(new Time(System.currentTimeMillis())); String requestUrl = configuration.getConfigDbService() + "/api/sdnc-config-db/v3/getPCI" + "/" + cellId + "/" @@ -95,7 +104,9 @@ public class SdnrRestClient { * @throws ConfigDbNotFoundException * when request to configDB fails */ - public static String getPnfName(String cellId) throws ConfigDbNotFoundException { + + @Override + public String getPnfName(String cellId) throws ConfigDbNotFoundException { Configuration configuration = Configuration.getInstance(); String ts = new SimpleDateFormat(DATETIMEFORMAT).format(new Time(System.currentTimeMillis())); String requestUrl = configuration.getConfigDbService() + "/api/sdnc-config-db/v3/getPnfId" + "/" + cellId + "/" @@ -111,7 +122,9 @@ public class SdnrRestClient { * @throws ConfigDbNotFoundException * when request to configDB fails */ - public static JSONObject getCellData(String cellId) throws ConfigDbNotFoundException { + + @Override + public JSONObject getCellData(String cellId) throws ConfigDbNotFoundException { Configuration configuration = Configuration.getInstance(); String requestUrl = configuration.getConfigDbService() + "/api/sdnc-config-db/v3/getCell" + "/" + cellId; String response = sendRequest(requestUrl); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/utils/ClusterUtils.java b/src/main/java/org/onap/dcaegen2/services/sonhms/utils/ClusterUtils.java index 7228f78..7198fce 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/utils/ClusterUtils.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/utils/ClusterUtils.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,16 +33,20 @@ import java.util.Set; import java.util.UUID; import org.onap.dcaegen2.services.sonhms.ClusterDetailsComponent; +import org.onap.dcaegen2.services.sonhms.Configuration; import org.onap.dcaegen2.services.sonhms.FaultNotificationtoClusterMapping; import org.onap.dcaegen2.services.sonhms.NotificationToClusterMapping; import org.onap.dcaegen2.services.sonhms.child.Graph; import org.onap.dcaegen2.services.sonhms.dao.ClusterDetailsRepository; import org.onap.dcaegen2.services.sonhms.entity.ClusterDetails; import org.onap.dcaegen2.services.sonhms.exceptions.ConfigDbNotFoundException; +import org.onap.dcaegen2.services.sonhms.exceptions.CpsNotFoundException; import org.onap.dcaegen2.services.sonhms.model.CellPciPair; import org.onap.dcaegen2.services.sonhms.model.FapServiceList; import org.onap.dcaegen2.services.sonhms.model.LteNeighborListInUseLteCell; import org.onap.dcaegen2.services.sonhms.model.Notification; +import org.onap.dcaegen2.services.sonhms.restclient.ConfigurationClient; +import org.onap.dcaegen2.services.sonhms.restclient.CpsClient; import org.onap.dcaegen2.services.sonhms.restclient.SdnrRestClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -226,8 +230,8 @@ public class ClusterUtils { /** * Create cluster. */ - public Graph createCluster(Map> clusterMap) throws ConfigDbNotFoundException { - + public Graph createCluster(Map> clusterMap) throws ConfigDbNotFoundException, CpsNotFoundException + { Graph cluster = new Graph(); log.debug("cluster formation started"); @@ -246,7 +250,7 @@ public class ClusterUtils { val1.setPhysicalCellId(phy); cluster.addEdge(val, val1); - List nbrList = SdnrRestClient.getNbrList(cell); + List nbrList = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getNbrList(cell); for (CellPciPair nbr : nbrList) { String cid = nbr.getCellId(); @@ -297,14 +301,14 @@ public class ClusterUtils { /** * Find cluster Map. */ - public Map> findClusterMap(String cellId) throws ConfigDbNotFoundException { + public Map> findClusterMap(String cellId) throws ConfigDbNotFoundException, CpsNotFoundException { log.info("indide clusterMap"); - int phyCellId = SdnrRestClient.getPci(cellId); + int phyCellId = ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getPci(cellId); CellPciPair main = new CellPciPair(); main.setCellId(cellId); main.setPhysicalCellId(phyCellId); ArrayList cellPciPairs; - cellPciPairs = (ArrayList) SdnrRestClient.getNbrList(cellId); + cellPciPairs = (ArrayList) ConfigurationClient.configClient(Configuration.getInstance().getConfigClientType()).getNbrList(cellId); Map> clusterMap = new HashMap<>(); clusterMap.put(main, cellPciPairs); log.info("clusterMap{}", clusterMap); diff --git a/src/main/java/org/onap/dcaegen2/services/sonhms/utils/SonHandlerRestTemplate.java b/src/main/java/org/onap/dcaegen2/services/sonhms/utils/SonHandlerRestTemplate.java index d32a78c..e3eb8a7 100644 --- a/src/main/java/org/onap/dcaegen2/services/sonhms/utils/SonHandlerRestTemplate.java +++ b/src/main/java/org/onap/dcaegen2/services/sonhms/utils/SonHandlerRestTemplate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * son-handler * ================================================================================ - * Copyright (C) 2019 Wipro Limited. + * Copyright (C) 2019-2021 Wipro Limited. * ============================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.onap.dcaegen2.services.sonhms.Configuration; import org.slf4j.Logger; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; -- cgit 1.2.3-korg