diff options
6 files changed, 169 insertions, 149 deletions
diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/handler/RansimPciHandler.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/handler/RansimPciHandler.java index 881d19b..6ba89c2 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/handler/RansimPciHandler.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/handler/RansimPciHandler.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * Ran Simulator Controller * ================================================================================ - * Copyright (C) 2020 Wipro Limited. + * Copyright (C) 2020-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. @@ -95,34 +95,37 @@ public class RansimPciHandler { boolean collisionDetected = false; boolean confusionDetected = false; List<Long> nbrPcis = new ArrayList<Long>(); - List<Long> ConfusionPcis = new ArrayList<Long>(); - int collisionCount = 0; - int confusionCount = 0; + String collisions = ""; + HashMap<Long, String> confusions = new HashMap<Long, String>(); CellDetails currentCell = ransimRepo.getCellDetail(cellNodeId); log.info("Setting confusion/collision for Cell :" + cellNodeId); GetNeighborList cellNbrDetails = generateNeighborList(cellNodeId); for (CellDetails firstLevelNbr : cellNbrDetails.getCellsWithHo()) { - if (nbrPcis.contains((Long) firstLevelNbr.getPhysicalCellId())) { + if (nbrPcis.contains((Long) firstLevelNbr.getPhysicalCellId())) { confusionDetected = true; - if (ConfusionPcis.contains(firstLevelNbr.getPhysicalCellId())) { - confusionCount++; + if(confusions.containsKey((Long) firstLevelNbr.getPhysicalCellId())) { + confusions.put((Long) firstLevelNbr.getPhysicalCellId(), + confusions.get((Long) firstLevelNbr.getPhysicalCellId())+","+firstLevelNbr.getNodeId()); } else { - ConfusionPcis.add(firstLevelNbr.getPhysicalCellId()); - confusionCount = confusionCount + 2; + confusions.put((Long) firstLevelNbr.getPhysicalCellId(),firstLevelNbr.getNodeId()); } - } else { - nbrPcis.add((Long) firstLevelNbr.getPhysicalCellId()); - } - if (currentCell.getPhysicalCellId() == firstLevelNbr.getPhysicalCellId()) { - collisionDetected = true; - collisionCount++; - } + } else { + nbrPcis.add((Long) firstLevelNbr.getPhysicalCellId()); + } + + if (currentCell.getPhysicalCellId() == firstLevelNbr.getPhysicalCellId()) { + collisionDetected = true; + collisions += collisions.isEmpty()?firstLevelNbr.getNodeId():","+firstLevelNbr.getNodeId(); + } } + result.setCollisions(collisions); + result.setConfusions(confusions); + currentCell.setPciCollisionDetected(collisionDetected); currentCell.setPciConfusionDetected(confusionDetected); @@ -147,9 +150,6 @@ public class RansimPciHandler { result.setProblem("No Issues"); } - result.setCollisionCount("" + collisionCount); - result.setConfusionCount("" + confusionCount); - ransimRepo.mergeCellDetails(currentCell); return result; @@ -731,54 +731,60 @@ public class RansimPciHandler { * Node Id of the cell * @param issue * Contains the collision/confusion details of the cess - * @return returns EventFm object, with all the necessary parameters. + * @return returns List of EventFm objects, with all the necessary parameters. */ - public static EventFm setEventFm(String networkId, String ncServer, String cellId, FmAlarmInfo issue) { + public static List<EventFm> setEventFm(String networkId, String ncServer, String cellId, FmAlarmInfo issue) { log.info("Inside generate FmData"); + List<EventFm> eventList = new ArrayList<EventFm>(); EventFm event = new EventFm(); try { CommonEventHeaderFm commonEventHeader = new CommonEventHeaderFm(); FaultFields faultFields = new FaultFields(); - - commonEventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000); - commonEventHeader.setSourceName(cellId); - commonEventHeader.setReportingEntityName(ncServer); - String uuid = globalFmCellIdUuidMap.get(cellId); if (uuid == null) { uuid = getUuid(); globalFmCellIdUuidMap.put(cellId, uuid); } commonEventHeader.setSourceUuid(uuid); - - if (issue.getProblem().equals("Collision") || issue.getProblem().equals("Confusion") - || issue.getProblem().equals("CollisionAndConfusion")) { - faultFields.setAlarmCondition("RanPciCollisionConfusionOccurred"); - faultFields.setEventSeverity("CRITICAL"); - faultFields.setEventSourceType("other"); - faultFields.setSpecificProblem(issue.getProblem()); - - Map<String, String> alarmAdditionalInformation = new HashMap<String, String>(); - alarmAdditionalInformation.put("networkId", networkId); - alarmAdditionalInformation.put("collisions", issue.getCollisionCount()); - alarmAdditionalInformation.put("confusions", issue.getConfusionCount()); - - faultFields.setAlarmAdditionalInformation(alarmAdditionalInformation); - + faultFields.setAlarmCondition("RanPciCollisionConfusionOccurred"); + faultFields.setEventSeverity("CRITICAL"); + faultFields.setEventSourceType("other"); + Map<String, String> alarmAdditionalInformation = new HashMap<String, String>(); + alarmAdditionalInformation.put("networkId", networkId); + faultFields.setAlarmAdditionalInformation(alarmAdditionalInformation); + + if (!issue.getCollisions().isEmpty()) { + commonEventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000); + commonEventHeader.setSourceName(cellId); + commonEventHeader.setReportingEntityName(ncServer); + faultFields.setSpecificProblem(issue.getCollisions()); + faultFields.setEventCategory("PCICollision"); + commonEventHeader.setLastEpochMicrosec(System.currentTimeMillis() * 1000); + event.setCommonEventHeader(commonEventHeader); + event.setFaultFields(faultFields); + eventList.add(event); } - commonEventHeader.setLastEpochMicrosec(System.currentTimeMillis() * 1000); - event.setCommonEventHeader(commonEventHeader); - event.setFaultFields(faultFields); + for (Map.Entry<Long, String> set : issue.getConfusions().entrySet()) { + commonEventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000); + commonEventHeader.setSourceName(cellId); + commonEventHeader.setReportingEntityName(ncServer); + faultFields.setSpecificProblem(set.getValue()); + faultFields.setEventCategory("PCIConfusion"); + commonEventHeader.setLastEpochMicrosec(System.currentTimeMillis() * 1000); + event.setCommonEventHeader(commonEventHeader); + event.setFaultFields(faultFields); + eventList.add(event); + } } catch (Exception e) { log.info("Exception: ", e); } - return event; + return eventList; } @@ -806,8 +812,8 @@ public class RansimPciHandler { if (op1.getProblem().equals("CollisionAndConfusion") || op1.getProblem().equals("Collision") || op1.getProblem().equals("Confusion")) { log.info("op1: " + op1); - EventFm lci = setEventFm(cell.getNetworkId(), cell.getServerId(), cell.getNodeId(), op1); - listCellIssue.add(lci); + List<EventFm> lci = setEventFm(cell.getNetworkId(), cell.getServerId(), cell.getNodeId(), op1); + listCellIssue.addAll(lci); ncs.add(cell.getServerId()); log.info("Generating Fm data for: " + cell.getNodeId()); } @@ -820,9 +826,9 @@ public class RansimPciHandler { if (source.equals("GUI")) { if (op2.getProblem().equals("CollisionAndConfusion") || op2.getProblem().equals("Collision") || op2.getProblem().equals("Confusion")) { - EventFm lci = setEventFm(nbrCell.getNetworkId(), nbrCell.getServerId(), nbrCell.getNodeId(), op2); + List<EventFm> lci = setEventFm(nbrCell.getNetworkId(), nbrCell.getServerId(), nbrCell.getNodeId(), op2); log.info("FmData added:" + nbrCell.getNodeId()); - listCellIssue.add(lci); + listCellIssue.addAll(lci); ncs.add(nbrCell.getServerId()); log.info("Generating Fm data for: " + nbrCell.getNodeId()); } diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/FmAlarmInfo.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/FmAlarmInfo.java index 2b7dd39..ef81d3b 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/FmAlarmInfo.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/FmAlarmInfo.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * Ran Simulator Controller * ================================================================================ - * Copyright (C) 2020 Wipro Limited. + * Copyright (C) 2020-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. @@ -20,52 +20,59 @@ package org.onap.ransim.rest.api.models; -public class FmAlarmInfo { +import java.util.HashMap; +public class FmAlarmInfo { + private String problem; - private String collisionCount; - private String confusionCount; + private String collisions; + private HashMap<Long, String> confusions; + public FmAlarmInfo() { super(); } - + /** * Constructor with all fields. - * - * @param problem Collision or Confusion - * @param collisionCount No of cells that causes collision. - * @param confusionCount No od cells that causes confusion. + * + * @param problem + * Collision or Confusion + * @param collisions + * Cell ids that causes collision. + * @param confusions + * Cell ids that causes confusion. */ - public FmAlarmInfo(String problem, String collisionCount, String confusionCount) { + public FmAlarmInfo(String problem, String collisions, HashMap<Long, String> confusions) { super(); this.problem = problem; - this.collisionCount = collisionCount; - this.confusionCount = confusionCount; + this.collisions = collisions; + this.confusions = confusions; } - + public String getProblem() { return problem; } - + public void setProblem(String problem) { this.problem = problem; } - public String getCollisionCount() { - return collisionCount; + public String getCollisions() { + return collisions; } - public void setCollisionCount(String collisionCount) { - this.collisionCount = collisionCount; + public void setCollisions(String collisions) { + this.collisions = collisions; } - public String getConfusionCount() { - return confusionCount; + public HashMap<Long, String> getConfusions(){ + return confusions; } - public void setConfusionCount(String confusionCount) { - this.confusionCount = confusionCount; + public void setConfusions(HashMap<Long, String> confusions) { + this.confusions = confusions; } + } diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/PLMNInfoModel.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/PLMNInfoModel.java index cab1c47..1151ef9 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/PLMNInfoModel.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/models/PLMNInfoModel.java @@ -30,7 +30,7 @@ public class PLMNInfoModel { private String status; private String gnbType; private String gnbId; - private int nrCellId; + private Integer nrCellId; private String nearrtricid; private List<ConfigData> configData; @@ -38,7 +38,7 @@ public class PLMNInfoModel { } - public PLMNInfoModel(String pLMNId, String snssai, String status, String gnbType, String gnbId, int nrCellId, + public PLMNInfoModel(String pLMNId, String snssai, String status, String gnbType, String gnbId, Integer nrCellId, String nearrtricid, List<ConfigData> configData) { super(); this.pLMNId = pLMNId; @@ -91,11 +91,11 @@ public class PLMNInfoModel { this.gnbId = gnbId; } - public int getNrCellId() { + public Integer getNrCellId() { return nrCellId; } - public void setNrCellId(int nrCellId) { + public void setNrCellId(Integer nrCellId) { this.nrCellId = nrCellId; } diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/services/RansimControllerServices.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/services/RansimControllerServices.java index 235bc80..514666f 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/services/RansimControllerServices.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/rest/api/services/RansimControllerServices.java @@ -1379,66 +1379,60 @@ public class RansimControllerServices { log.info("handle Intelligent Slicing data From Sdnr : " + message); org.onap.ransim.rest.api.models.PLMNInfoModel plmnInfoModel = new Gson().fromJson(message, org.onap.ransim.rest.api.models.PLMNInfoModel.class); - String[] ipPortlist = ipPort.split(":"); - List<NetconfServers> netconfServers = (List<NetconfServers>) netconfServersRepo.findAll(); - for (NetconfServers server : netconfServers) { - if (!(Objects.isNull(server.getNetconfPort()))) { - if (server.getNetconfPort().equalsIgnoreCase(ipPortlist[1].trim())) { - String netconfServerId = server.getServerId(); - log.info("netconfServerId: " + netconfServerId); - List<GNBCUCPModel> gNBCUCPModelList = new ArrayList<>(); - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - HttpEntity<Void> requestEntity = new HttpEntity<>(headers); - try { - RestTemplate restTemplate = new RestTemplate(); - - ResponseEntity<List<GNBCUCPModel>> response = restTemplate.exchange( - "http://" + "localhost" + ":" + "8081" + "/ransim/api/ransim-db/v4/cucp-list/", - HttpMethod.GET, requestEntity, new ParameterizedTypeReference<List<GNBCUCPModel>>() {}); - gNBCUCPModelList = response.getBody(); - gNBCUCPModelList.forEach(gnb -> { - GNBCUCPModel gNBCUCPModel = gnb; - log.info("gNBCUCPModel: " + gNBCUCPModel.toString()); - List<NRCellCUModel> nRCellCUModelList = gnb.getCellCUList(); - for (NRCellCUModel nrcell : nRCellCUModelList) { - if ((int) nrcell.getCellLocalId() == Integer - .parseInt(plmnInfoModel.getConfigData().get(0).getConfigParameter())) { - plmnInfoModel.setGnbId(Integer.toString(gnb.getgNBId())); - List<PLMNInfoModel> pLMNInfoModelList = nrcell.getpLMNInfoList(); - pLMNInfoModelList.forEach(plmn -> { - if (plmn.getpLMNId().equalsIgnoreCase(plmnInfoModel.getpLMNId())) { - if (plmn.getsNSSAI().getsNSSAI() - .equalsIgnoreCase(plmnInfoModel.getSnssai())) { - plmnInfoModel.setStatus(plmn.getsNSSAI().getStatus()); - log.info("plmn status set"); - } - } - }); - NetconfClient netconfClient = new NetconfClient("ransim", "admin", "admin", - netconfServerId, server.getIp(), Integer.parseInt(server.getNetconfPort())); - - netconfClient.editConfig(netconfClient - .sendUpdatedPLMNInfoForIntelligentSlicing(plmnInfoModel, netconfServerId)); - log.info("Intelligent Slicing Data sent successfully : "); - plmnInfoModel.getConfigData().get(0).setConfigParameter("maxNumberOfConns"); - try { - ObjectMapper obj = new ObjectMapper(); - String plmnString = obj.writeValueAsString(plmnInfoModel); - handlePLMNInfoUpdateFromSdnr(plmnString, session, ipPort); - } catch (Exception e) { - log.info("Exception while parsing:", e); + plmnInfoModel.getConfigData().get(0).setConfigParameter("maxNumberOfConns"); + log.info("plmnInfoModel: " + plmnInfoModel.toString()); + List<GNBCUCPModel> gNBCUCPModelList = new ArrayList<>(); + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + HttpEntity<Void> requestEntity = new HttpEntity<>(headers); + try { + RestTemplate restTemplate = new RestTemplate(); + + ResponseEntity<List<GNBCUCPModel>> response = restTemplate.exchange( + "http://" + "localhost" + ":" + "8081" + "/ransim/api/ransim-db/v4/cucp-list/", HttpMethod.GET, + requestEntity, new ParameterizedTypeReference<List<GNBCUCPModel>>() {}); + gNBCUCPModelList = response.getBody(); + gNBCUCPModelList.forEach(gnb -> { + GNBCUCPModel gNBCUCPModel = gnb; + log.info("gNBCUCPModel: " + gNBCUCPModel.toString()); + List<NRCellCUModel> nRCellCUModelList = gnb.getCellCUList(); + for (NRCellCUModel nrcell : nRCellCUModelList) { + if (nrcell.getCellLocalId().equals(plmnInfoModel.getNrCellId())) { + plmnInfoModel.setGnbId(gnb.getgNBCUName()); + List<PLMNInfoModel> pLMNInfoModelList = nrcell.getpLMNInfoList(); + pLMNInfoModelList.forEach(plmn -> { + if (plmn.getpLMNId().equalsIgnoreCase(plmnInfoModel.getpLMNId())) { + if (plmn.getsNSSAI().getsNSSAI().equalsIgnoreCase(plmnInfoModel.getSnssai())) { + if (Objects.isNull(plmnInfoModel.getStatus())) { + plmnInfoModel.setStatus(plmn.getsNSSAI().getStatus()); + log.info("plmn status set"); } - - break; } } }); - } catch (Exception e) { - log.info("Exception:", e); + String serverId = plmnInfoModel.getGnbId(); + String ipPortKey = serverIdIpPortMapping.get(serverId); + String[] ipPortlist = ipPortKey.split(":"); + NetconfClient netconfClient = new NetconfClient("ransim", "admin", "admin", serverId, + ipPortlist[0], Integer.parseInt(ipPortlist[1])); + + netconfClient.editConfig( + netconfClient.sendUpdatedPLMNInfoForIntelligentSlicing(plmnInfoModel, serverId)); + log.info("Intelligent Slicing Data sent successfully : "); + try { + ObjectMapper obj = new ObjectMapper(); + String plmnString = obj.writeValueAsString(plmnInfoModel); + handlePLMNInfoUpdateFromSdnr(plmnString, session, ipPort); + } catch (Exception e) { + log.info("Exception while parsing:", e); + } + + break; } } - } + }); + } catch (Exception e) { + log.info("Exception:", e); } } diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/websocket/model/FaultFields.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/websocket/model/FaultFields.java index 17fed3c..38c24c9 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/websocket/model/FaultFields.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/main/java/org/onap/ransim/websocket/model/FaultFields.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * Ran Simulator Controller * ================================================================================ - * Copyright (C) 2020 Wipro Limited. + * Copyright (C) 2020-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. @@ -23,65 +23,76 @@ package org.onap.ransim.websocket.model; import java.util.Map; public class FaultFields { - + private String alarmCondition; private String eventSourceType; private String specificProblem; private String eventSeverity; + private String eventCategory; private Map<String, String> alarmAdditionalInformation; - + public FaultFields() { super(); + // TODO Auto-generated constructor stub } - - public FaultFields(String alarmCondition, String eventSourceType, String specificProblem, String eventSeverity, - Map<String, String> alarmAdditionalInformation) { + + public FaultFields(String alarmCondition, String eventSourceType, String specificProblem, + String eventSeverity, String eventCategory, Map<String, String> alarmAdditionalInformation) { super(); this.alarmCondition = alarmCondition; this.eventSourceType = eventSourceType; this.specificProblem = specificProblem; this.eventSeverity = eventSeverity; + this.eventCategory = eventCategory; this.alarmAdditionalInformation = alarmAdditionalInformation; } - + public String getAlarmCondition() { return alarmCondition; } - + public void setAlarmCondition(String alarmCondition) { this.alarmCondition = alarmCondition; } - + public String getEventSourceType() { return eventSourceType; } - + public void setEventSourceType(String eventSourceType) { this.eventSourceType = eventSourceType; } - + public String getSpecificProblem() { return specificProblem; } - + public void setSpecificProblem(String specificProblem) { this.specificProblem = specificProblem; } - + public String getEventSeverity() { return eventSeverity; } - + public void setEventSeverity(String eventSeverity) { this.eventSeverity = eventSeverity; } + public String getEventCategory(){ + return eventCategory; + } + + public void setEventCategory(String eventCategory) { + this.eventCategory = eventCategory; + } + public Map<String, String> getAlarmAdditionalInformation() { return alarmAdditionalInformation; } - + public void setAlarmAdditionalInformation(Map<String, String> alarmAdditionalInformation) { this.alarmAdditionalInformation = alarmAdditionalInformation; } - + } diff --git a/ransim/ransimctrlr/RANSIM-CTRLR/src/test/java/org/onap/ransim/rest/api/controller/TestRansimController.java b/ransim/ransimctrlr/RANSIM-CTRLR/src/test/java/org/onap/ransim/rest/api/controller/TestRansimController.java index 4c886e3..400089f 100644 --- a/ransim/ransimctrlr/RANSIM-CTRLR/src/test/java/org/onap/ransim/rest/api/controller/TestRansimController.java +++ b/ransim/ransimctrlr/RANSIM-CTRLR/src/test/java/org/onap/ransim/rest/api/controller/TestRansimController.java @@ -187,11 +187,9 @@ public class TestRansimController { RansimControllerServices rscontroller = Mockito.mock(RansimControllerServices.class); Map<String, String> alarmAdditionalInformation = new HashMap<String, String>(); alarmAdditionalInformation.put("networkId", "abc"); - alarmAdditionalInformation.put("collisions", "1"); - alarmAdditionalInformation.put("confusions", "0"); CommonEventHeaderFm commonEventHeader = new CommonEventHeaderFm("Chn00", "", "nc1", 0, 0); FaultFields faultFields = new FaultFields("RanPciCollisionConfusionOccurred", "other", "Collision", "CRITICAL", - alarmAdditionalInformation); + "PCICollision", alarmAdditionalInformation); EventFm checkObj = new EventFm(commonEventHeader, faultFields); new MockUp<RansimControllerServices>() { @@ -210,7 +208,11 @@ public class TestRansimController { String networkId = "abc"; String ncServer = "nc1"; String cellId = "Chn00"; - FmAlarmInfo issue = new FmAlarmInfo("Collision", "1", "0"); + String collisions = ""; + HashMap<Long,String> confusions = new HashMap<Long,String>(); + collisions += "Chn00"+","+"Chn00"; + confusions.put(Long.valueOf(0),"Chn00");confusions.put(Long.valueOf(1),"Chn00"); + FmAlarmInfo issue = new FmAlarmInfo("Collision", collisions, confusions); /* * EventFm eventObj = rscontroller.setEventFm(networkId, ncServer, cellId, * issue); |