summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/wipro/www/sonhms/child
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/wipro/www/sonhms/child')
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/ChildThread.java245
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/ClusterFormation.java144
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/ClusterModification.java147
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/Detection.java87
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/Graph.java202
-rw-r--r--src/main/java/com/wipro/www/sonhms/child/StateOof.java271
6 files changed, 0 insertions, 1096 deletions
diff --git a/src/main/java/com/wipro/www/sonhms/child/ChildThread.java b/src/main/java/com/wipro/www/sonhms/child/ChildThread.java
deleted file mode 100644
index 718cc46..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/ChildThread.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-
-import com.wipro.www.sonhms.Configuration;
-import com.wipro.www.sonhms.dao.ClusterDetailsRepository;
-import com.wipro.www.sonhms.model.FapServiceList;
-import com.wipro.www.sonhms.model.ThreadId;
-import com.wipro.www.sonhms.restclient.AsyncResponseBody;
-import com.wipro.www.sonhms.utils.BeanUtil;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import org.slf4j.Logger;
-import org.slf4j.MDC;
-
-
-public class ChildThread implements Runnable {
-
- private BlockingQueue<List<String>> childStatusUpdate;
- private BlockingQueue<FapServiceList> queue = new LinkedBlockingQueue<>();
- // static BlockingQueue<AsyncResponseBody> asynchronousResponse = new
- // LinkedBlockingQueue<>();
- private static Map<Long, AsyncResponseBody> responseMap = new HashMap<>();
- private Graph cluster;
- private ThreadId threadId;
- FapServiceList fapServiceList = new FapServiceList();
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(ChildThread.class);
-
- /**
- * Constructor with parameters.
- */
- public ChildThread(BlockingQueue<List<String>> childStatusUpdate, Graph cluster,
- BlockingQueue<FapServiceList> queue, ThreadId threadId) {
- super();
- this.childStatusUpdate = childStatusUpdate;
- this.queue = queue;
- this.threadId = threadId;
- this.cluster = cluster;
- }
-
- /**
- * Puts notification in queue.
- */
- public void putInQueue(FapServiceList fapserviceList) {
- try {
- queue.put(fapserviceList);
- } catch (InterruptedException e) {
- log.error(" The Thread is Interrupted", e);
- Thread.currentThread().interrupt();
- }
- }
-
- /**
- * Puts notification in queue with notify.
- */
- public void putInQueueWithNotify(FapServiceList fapserviceList) {
- synchronized (queue) {
- try {
- queue.put(fapserviceList);
- queue.notifyAll();
- } catch (InterruptedException e) {
- log.error(" The Thread is Interrupted", e);
- Thread.currentThread().interrupt();
- }
-
- }
-
- }
-
- /**
- * Puts response in queue.
- */
- public static void putResponse(Long threadId, AsyncResponseBody obj) {
- synchronized (responseMap) {
- responseMap.put(threadId, obj);
- }
-
- }
-
- public static Map<Long, AsyncResponseBody> getResponseMap() {
- return responseMap;
- }
-
- @Override
- public void run() {
-
- threadId.setChildThreadId(Thread.currentThread().getId());
- synchronized (threadId) {
- threadId.notifyAll();
- }
-
- MDC.put("logFileName", Thread.currentThread().getName());
- log.debug("Starting child thread");
-
- try {
- fapServiceList = queue.take();
- if (log.isDebugEnabled()) {
- log.debug("fapServicelist: {}", fapServiceList);
- }
- } catch (InterruptedException e1) {
- log.error("InterruptedException is {}", e1);
- Thread.currentThread().interrupt();
- }
-
- ClusterFormation clusterFormation = new ClusterFormation(queue);
- StateOof oof = new StateOof(childStatusUpdate);
- ClusterModification clusterModification = new ClusterModification();
- Detection detect = new Detection();
-
- try {
- String networkId = fapServiceList.getCellConfig().getLte().getRan().getNeighborListInUse()
- .getLteNeighborListInUseLteCell().get(0).getPlmnid();
-
- Boolean done = false;
-
- while (!done) {
-
- Map<String, ArrayList<Integer>> collisionConfusionResult = detect.detectCollisionConfusion(cluster);
- Boolean trigger = clusterFormation.triggerOrWait(collisionConfusionResult);
-
- if (!trigger) {
- collisionConfusionResult = clusterFormation.waitForNotification(collisionConfusionResult, cluster);
- }
- oof.triggerOof(collisionConfusionResult, networkId);
-
- if (isNotificationsBuffered()) {
- List<FapServiceList> fapServiceLists = bufferNotification();
- for (FapServiceList fapService : fapServiceLists) {
- cluster = clusterModification.clustermod(cluster, fapService);
- }
- String cellPciNeighbourString = cluster.getPciNeighbourJson();
- UUID clusterId = cluster.getGraphId();
- ClusterDetailsRepository clusterDetailsRepository = BeanUtil
- .getBean(ClusterDetailsRepository.class);
- clusterDetailsRepository.updateCluster(cellPciNeighbourString, clusterId.toString());
-
- } else {
- done = true;
- }
-
- }
-
- } catch (Exception e) {
- log.error("{}", e);
- }
-
- cleanup();
- }
-
- private boolean isNotificationsBuffered() {
- synchronized (queue) {
-
- try {
- while (queue.isEmpty()) {
- queue.wait();
- }
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return false;
- }
- }
- return true;
- }
-
- /**
- * cleanup resources.
- */
- private void cleanup() {
- log.debug("cleaning up database and killing child thread");
- ClusterDetailsRepository clusterDetailsRepository = BeanUtil.getBean(ClusterDetailsRepository.class);
- clusterDetailsRepository.deleteByChildThreadId(threadId.getChildThreadId());
- log.debug("Child thread :{} {}", Thread.currentThread().getId(), "completed");
- MDC.remove("logFileName");
-
- }
-
- /**
- * Buffer Notification.
- */
- public List<FapServiceList> bufferNotification() {
-
- // Processing Buffered notifications
-
- List<FapServiceList> fapServiceLists = new ArrayList<>();
-
- Configuration config = Configuration.getInstance();
-
- int bufferTime = config.getBufferTime();
-
- Timestamp currentTime = new Timestamp(System.currentTimeMillis());
- log.debug("Current time {}", currentTime);
-
- Timestamp laterTime = new Timestamp(System.currentTimeMillis());
- log.debug("Later time {}", laterTime);
-
- long difference = laterTime.getTime() - currentTime.getTime();
- while (difference < bufferTime) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- log.error("InterruptedException {}", e);
- Thread.currentThread().interrupt();
-
- }
- laterTime = new Timestamp(System.currentTimeMillis());
- difference = laterTime.getTime() - currentTime.getTime();
-
- log.debug("Timer has run for seconds {}", difference);
-
- if (!queue.isEmpty()) {
- FapServiceList fapService;
- fapService = queue.poll();
- fapServiceLists.add(fapService);
- }
- }
- return fapServiceLists;
- }
-
-}
diff --git a/src/main/java/com/wipro/www/sonhms/child/ClusterFormation.java b/src/main/java/com/wipro/www/sonhms/child/ClusterFormation.java
deleted file mode 100644
index 7b3d5bf..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/ClusterFormation.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-import com.wipro.www.sonhms.ConfigPolicy;
-import com.wipro.www.sonhms.Configuration;
-import com.wipro.www.sonhms.dao.ClusterDetailsRepository;
-import com.wipro.www.sonhms.entity.ClusterDetails;
-import com.wipro.www.sonhms.model.FapServiceList;
-import com.wipro.www.sonhms.utils.BeanUtil;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-
-import org.slf4j.Logger;
-
-
-public class ClusterFormation {
-
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(ClusterFormation.class);
- private BlockingQueue<FapServiceList> queue;
- private ClusterModification clusterModification;
- private Detection detect;
- Properties confProp;
- ClusterDetails details = new ClusterDetails();
-
- public ClusterFormation() {
- this.detect = new Detection();
- }
-
- /**
- * parameterized constructor.
- *
- */
- public ClusterFormation(BlockingQueue<FapServiceList> queue) {
- super();
- this.queue = queue;
- this.detect = new Detection();
- this.clusterModification = new ClusterModification();
- }
-
- /**
- * Determines whether to trigger Oof or wait for notifications.
- */
- public Boolean triggerOrWait(Map<String, ArrayList<Integer>> collisionConfusionResult) {
- // determine collision or confusion
-
- Configuration configuration = Configuration.getInstance();
- int collisionSum = 0;
- int confusionSum = 0;
-
- for (Map.Entry<String, ArrayList<Integer>> entry : collisionConfusionResult.entrySet()) {
-
- ArrayList<Integer> arr;
- arr = entry.getValue();
- // check for 0 collision and confusion
- if (!arr.isEmpty()) {
- collisionSum = collisionSum + arr.get(0);
- confusionSum = confusionSum + arr.get(1);
- }
- }
- return ((collisionSum >= configuration.getMinCollision()) && (confusionSum >= configuration.getMinConfusion()));
-
- }
-
- /**
- * Waits for notifications.
- */
- public Map<String, ArrayList<Integer>> waitForNotification(Map<String, ArrayList<Integer>> collisionConfusionResult,
- Graph cluster) {
-
- FapServiceList newNotification;
- ConfigPolicy config = ConfigPolicy.getInstance();
- int timer = 60;
- try {
- timer = (int) config.getConfig().get("PCI_NEIGHBOR_CHANGE_CLUSTER_TIMEOUT_IN_SECS");
- } catch (NullPointerException e) {
- log.debug("Policy config not available. Using default timeout - 60 seconds");
- }
-
- Timestamp currentTime = new Timestamp(System.currentTimeMillis());
- log.debug("Current Time {}", currentTime);
-
- Timestamp laterTime = new Timestamp(System.currentTimeMillis());
- log.debug("LaterTime {}", laterTime);
-
- long difference = laterTime.getTime() - currentTime.getTime();
-
- int flag = 0;
-
- while (difference < (timer * 1000)) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- log.error("Interrupted Exception is {}", e);
- Thread.currentThread().interrupt();
- }
-
- laterTime = new Timestamp(System.currentTimeMillis());
- difference = laterTime.getTime() - currentTime.getTime();
-
- if ((difference < (timer * 1000)) && (!queue.isEmpty())) {
- newNotification = queue.poll();
- cluster = clusterModification.clustermod(cluster, newNotification);
-
- // update cluster in DB
- String cellPciNeighbourString = cluster.getPciNeighbourJson();
- UUID clusterId = cluster.getGraphId();
- ClusterDetailsRepository clusterDetailsRepository = BeanUtil.getBean(ClusterDetailsRepository.class);
- clusterDetailsRepository.updateCluster(cellPciNeighbourString, clusterId.toString());
- flag++;
-
- }
- }
- if (flag != 0) {
- return detect.detectCollisionConfusion(cluster);
-
- }
- return collisionConfusionResult;
- }
-
-}
diff --git a/src/main/java/com/wipro/www/sonhms/child/ClusterModification.java b/src/main/java/com/wipro/www/sonhms/child/ClusterModification.java
deleted file mode 100644
index 9926cf4..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/ClusterModification.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-import com.wipro.www.sonhms.model.CellPciPair;
-import com.wipro.www.sonhms.model.FapServiceList;
-import com.wipro.www.sonhms.model.LteNeighborListInUseLteCell;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.slf4j.Logger;
-
-
-
-public class ClusterModification {
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(ClusterModification.class);
-
- /**
- * Forms a modified cluster for the existing cluster.
- */
-
- public Graph clustermod(Graph cluster, FapServiceList fapser) {
-
- int phycellId = fapser.getX0005b9Lte().getPhyCellIdInUse();
- String cellId = fapser.getCellConfig().getLte().getRan().getCellIdentity();
- CellPciPair mainCellPciPair = new CellPciPair();
- mainCellPciPair.setCellId(cellId);
- mainCellPciPair.setPhysicalCellId(phycellId);
- List<LteNeighborListInUseLteCell> newNeighbourList;
- newNeighbourList = fapser.getCellConfig().getLte().getRan().getNeighborListInUse()
- .getLteNeighborListInUseLteCell();
-
- Map<CellPciPair, ArrayList<CellPciPair>> clusterMap;
- clusterMap = cluster.getCellPciNeighbourMap();
-
- // coe
-
- List<CellPciPair> tempCellPair = new ArrayList<>();
- for (Map.Entry<CellPciPair, ArrayList<CellPciPair>> entry : clusterMap.entrySet()) {
- CellPciPair oldClusterKeys = entry.getKey();
- tempCellPair.add(oldClusterKeys);
- }
-
- for (CellPciPair entry : tempCellPair) {
- String cell = entry.getCellId();
- int physicalCell = entry.getPhysicalCellId();
- CellPciPair mapVal = new CellPciPair();
- mapVal.setCellId(cell);
- mapVal.setPhysicalCellId(physicalCell);
-
- if (cellId.equals(cell)) {
-
- // removes the old neighbours and adds new neighbours for that cell
- cluster.updateVertex(mapVal, mainCellPciPair);
-
- }
-
- }
-
- /////// update cluster with new pci values for the same cell
-
- if (clusterMap.containsKey(mainCellPciPair)) {
- ArrayList<CellPciPair> oldClusterArray;
- oldClusterArray = clusterMap.get(mainCellPciPair);
- oldClusterArray.clear();
-
- for (int i = 0; i < newNeighbourList.size(); i++) {
- String cid = newNeighbourList.get(i).getAlias();
- int phy = newNeighbourList.get(i).getPhyCellId();
- CellPciPair val2 = new CellPciPair();
- val2.setCellId(cid);
- val2.setPhysicalCellId(phy);
- cluster.addEdge(mainCellPciPair, val2);
- }
-
- }
-
- for (CellPciPair entry : tempCellPair) {
- String cell = entry.getCellId();
- int physicalCell = entry.getPhysicalCellId();
- CellPciPair mapVal = new CellPciPair();
- mapVal.setCellId(cell);
- mapVal.setPhysicalCellId(physicalCell);
- for (int j = 0; j < newNeighbourList.size(); j++) {
- String cid1 = newNeighbourList.get(j).getAlias();
- int phy1 = newNeighbourList.get(j).getPhyCellId();
- CellPciPair val3 = new CellPciPair();
- val3.setCellId(cid1);
- val3.setPhysicalCellId(phy1);
-
- if (cid1.equals(cell)) {
-
- // removes the old neighbours and adds new neighbours for that cell
- cluster.updateVertex(mapVal, val3);
-
- }
-
- }
- }
-
- for (int j = 0; j < newNeighbourList.size(); j++) {
- String cid1 = newNeighbourList.get(j).getAlias();
- int phy1 = newNeighbourList.get(j).getPhyCellId();
- CellPciPair val3 = new CellPciPair();
- val3.setCellId(cid1);
- val3.setPhysicalCellId(phy1);
- if (clusterMap.containsKey(val3)) {
- cluster.addEdge(mainCellPciPair, val3);
- }
-
- }
-
- for (int k = 0; k < newNeighbourList.size(); k++) {
- String cid2 = newNeighbourList.get(k).getAlias();
- int phy2 = newNeighbourList.get(k).getPhyCellId();
- CellPciPair val5 = new CellPciPair();
- val5.setCellId(cid2);
- val5.setPhysicalCellId(phy2);
- cluster.addEdge(mainCellPciPair, val5);
- }
-
- log.debug("Modified Cluster {}", cluster);
-
- return cluster;
- }
-
-} \ No newline at end of file
diff --git a/src/main/java/com/wipro/www/sonhms/child/Detection.java b/src/main/java/com/wipro/www/sonhms/child/Detection.java
deleted file mode 100644
index fc2e941..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/Detection.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-import com.wipro.www.sonhms.model.CellPciPair;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.slf4j.Logger;
-
-
-public class Detection {
-
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(Detection.class);
-
- /**
- * Returns a map with key as cellid and its value is a list of its collision and
- * confusion.
- */
-
- public Map<String, ArrayList<Integer>> detectCollisionConfusion(Graph cluster) {
-
- Map<CellPciPair, ArrayList<CellPciPair>> clusterMap = cluster.getCellPciNeighbourMap();
- HashMap<String, ArrayList<Integer>> hash = new HashMap<>();
-
- for (Map.Entry<CellPciPair, ArrayList<CellPciPair>> entry : clusterMap.entrySet()) {
- int collisionCount = 0;
- int confusionCount = 0;
- CellPciPair val = entry.getKey();
- String cellId = val.getCellId();
- int pci = val.getPhysicalCellId();
- ArrayList<CellPciPair> arr;
- // getting colision and confusion count
- ArrayList<Integer> counts = new ArrayList<>();
- // gets the value for the key
- arr = entry.getValue();
- if (!arr.isEmpty()) {
- for (int i = 0; i < arr.size(); i++) {
- if (pci == arr.get(i).getPhysicalCellId()) {
- collisionCount++;
- }
-
- }
- counts.add(collisionCount);
-
- for (int j = 0; j < arr.size(); j++) {
- for (int k = j + 1; k < arr.size(); k++) {
- if (arr.get(j).getPhysicalCellId() == arr.get(k).getPhysicalCellId()) {
- confusionCount++;
-
- }
- }
-
- }
- counts.add(confusionCount);
- log.debug("count {}", counts);
-
- }
- hash.put(cellId, counts);
-
- }
- log.debug("collison and confusion map {}", hash);
-
- return hash;
- }
-
-}
diff --git a/src/main/java/com/wipro/www/sonhms/child/Graph.java b/src/main/java/com/wipro/www/sonhms/child/Graph.java
deleted file mode 100644
index 5e48dfc..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/Graph.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.wipro.www.sonhms.model.CellNeighbourList;
-import com.wipro.www.sonhms.model.CellPciPair;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.UUID;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-
-public class Graph {
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(Graph.class);
-
- // symbol table: key = string vertex, value = set of neighboring vertices
- private Map<CellPciPair, ArrayList<CellPciPair>> cellPciNeighbourMap;
- private UUID graphId;
-
- /**
- * Parameterized constructor.
- */
- @SuppressWarnings("unchecked")
- public Graph(String clusterInfo) {
- JSONArray cells = new JSONArray(clusterInfo);
-
- Map<CellPciPair, ArrayList<CellPciPair>> cellMap = new HashMap<>();
- for (int i = 0; i < cells.length(); i++) {
- JSONObject cell = (JSONObject) cells.get(i);
- CellPciPair cellPciPair = new CellPciPair(cell.getString("cellId"), cell.getInt("physicalCellId"));
- ObjectMapper mapper = new ObjectMapper();
- ArrayList<CellPciPair> neighbours = new ArrayList<>();
- try {
- neighbours = mapper.readValue(cell.getString("neighbours"), ArrayList.class);
- } catch (JSONException | IOException e) {
- log.debug("Error parsing json: {}", e);
- }
- cellMap.put(cellPciPair, neighbours);
-
- }
-
- this.cellPciNeighbourMap = cellMap;
- }
-
- public UUID getGraphId() {
- return graphId;
- }
-
- public void setGraphId(UUID graphId) {
- this.graphId = graphId;
- }
-
- public Map<CellPciPair, ArrayList<CellPciPair>> getCellPciNeighbourMap() {
- return cellPciNeighbourMap;
- }
-
- public void setCellPciNeighbourMap(Map<CellPciPair, ArrayList<CellPciPair>> cellPciNeighbourMap) {
- this.cellPciNeighbourMap = cellPciNeighbourMap;
- }
-
- /**
- * Initializes an empty graph with no vertices or edges.
- */
- public Graph() {
- this.cellPciNeighbourMap = new ConcurrentHashMap<>();
- }
-
- // throw an exception if v is not a vertex
- private void validateVertex(CellPciPair start) {
- if (!hasVertex(start)) {
- throw new IllegalArgumentException(start + " is not a vertex");
- }
- }
-
- /**
- * Adds the edge v-w to this graph (if it is not already an edge).
- */
- public void addEdge(CellPciPair start, CellPciPair end) {
- if (!hasVertex(start)) {
- addVertex(start);
- }
- if (!hasVertex(end)) {
- addVertex(end);
- }
- if (!hasEdge(start, end)) {
- this.cellPciNeighbourMap.get(start).add(end);
- }
- }
-
- /**
- * Adds vertex v to this graph (if it is not already a vertex).
- */
- public void addVertex(CellPciPair start) {
- if (!hasVertex(start)) {
- this.cellPciNeighbourMap.put(start, new ArrayList<CellPciPair>());
- }
- }
-
- /**
- * Returns true if v is a vertex in this graph.
- */
- public boolean hasVertex(CellPciPair start) {
- return this.cellPciNeighbourMap.containsKey(start);
- }
-
- /**
- * Returns true if v-w is an edge in this graph.
- */
- public boolean hasEdge(CellPciPair start, CellPciPair end) {
- validateVertex(start);
- validateVertex(end);
- return this.cellPciNeighbourMap.get(start).contains(end);
- }
-
- /**
- * Updates Vertex.
- */
- public void updateVertex(CellPciPair oldPair, CellPciPair newPair) {
- int oldPci = oldPair.getPhysicalCellId();
- int newPci = newPair.getPhysicalCellId();
-
- if (oldPci != newPci) {
-
- this.cellPciNeighbourMap.put(newPair, this.cellPciNeighbourMap.get(oldPair));
- this.cellPciNeighbourMap.remove(oldPair);
-
- }
- for (Map.Entry<CellPciPair, ArrayList<CellPciPair>> entry : this.cellPciNeighbourMap.entrySet()) {
-
- ArrayList<CellPciPair> al = entry.getValue();
- for (int i = 0; i < al.size(); i++) {
- int pci = al.get(i).getPhysicalCellId();
- if ((pci != newPci) && al.contains(oldPair)) {
- al.remove(oldPair);
- al.add(newPair);
- }
- }
- }
- log.debug("Final Map {}", cellPciNeighbourMap);
-
- }
-
- @Override
- public String toString() {
- return "Graph [cellPciNeighbourMap=" + cellPciNeighbourMap + ", graphId=" + graphId + "]";
- }
-
- /**
- * Convert Graph into a json.
- */
- public String getPciNeighbourJson() {
-
- List<CellNeighbourList> cells = new ArrayList<>();
-
- for (Entry<CellPciPair, ArrayList<CellPciPair>> entry : cellPciNeighbourMap.entrySet()) {
- CellPciPair key = entry.getKey();
- JSONArray neighbours = new JSONArray(cellPciNeighbourMap.get(key));
- CellNeighbourList cell = new CellNeighbourList(key.getCellId(), key.getPhysicalCellId(),
- neighbours.toString());
- cells.add(cell);
- }
- ObjectMapper mapper = new ObjectMapper();
- String pciNeighbourJson = "";
- try {
- pciNeighbourJson = mapper.writeValueAsString(cells);
- } catch (JsonProcessingException e) {
- log.debug("Error while processing json: {}", e);
- }
- return pciNeighbourJson;
- }
-
-}
diff --git a/src/main/java/com/wipro/www/sonhms/child/StateOof.java b/src/main/java/com/wipro/www/sonhms/child/StateOof.java
deleted file mode 100644
index 3215c46..0000000
--- a/src/main/java/com/wipro/www/sonhms/child/StateOof.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************************
- * ============LICENSE_START=======================================================
- * pcims
- * ================================================================================
- * Copyright (C) 2018 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 com.wipro.www.sonhms.child;
-
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.wipro.www.sonhms.ConfigPolicy;
-import com.wipro.www.sonhms.Configuration;
-import com.wipro.www.sonhms.dao.CellInfoRepository;
-import com.wipro.www.sonhms.dao.SonRequestsRepository;
-import com.wipro.www.sonhms.dmaap.PolicyDmaapClient;
-import com.wipro.www.sonhms.entity.CellInfo;
-import com.wipro.www.sonhms.entity.PciRequests;
-import com.wipro.www.sonhms.exceptions.ConfigDbNotFoundException;
-import com.wipro.www.sonhms.exceptions.OofNotFoundException;
-import com.wipro.www.sonhms.model.CellConfig;
-import com.wipro.www.sonhms.model.CellPciPair;
-import com.wipro.www.sonhms.model.Common;
-import com.wipro.www.sonhms.model.Configurations;
-import com.wipro.www.sonhms.model.Data;
-import com.wipro.www.sonhms.model.FapService;
-import com.wipro.www.sonhms.model.Lte;
-import com.wipro.www.sonhms.model.Payload;
-import com.wipro.www.sonhms.model.PolicyNotification;
-import com.wipro.www.sonhms.model.Ran;
-import com.wipro.www.sonhms.model.X0005b9Lte;
-import com.wipro.www.sonhms.restclient.AsyncResponseBody;
-import com.wipro.www.sonhms.restclient.OofRestClient;
-import com.wipro.www.sonhms.restclient.SdnrRestClient;
-import com.wipro.www.sonhms.restclient.Solution;
-import com.wipro.www.sonhms.restclient.SonSolution;
-import com.wipro.www.sonhms.utils.BeanUtil;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-
-import org.slf4j.Logger;
-
-public class StateOof {
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(StateOof.class);
- private BlockingQueue<List<String>> childStatusUpdate;
-
- public StateOof() {
-
- }
-
- /**
- * Parameterized Constructor.
- *
- */
- public StateOof(BlockingQueue<List<String>> childStatusUpdate) {
- super();
- this.childStatusUpdate = childStatusUpdate;
- }
-
- /**
- * Triggers OOF.
- * @throws OofNotFoundException when trigger oof fails
- */
- public void triggerOof(Map<String, ArrayList<Integer>> result, String networkId) throws OofNotFoundException {
- // check for 0 collision and 0 confusion
- ArrayList<String> cellidList = new ArrayList<>();
- ArrayList<String> cellIds = new ArrayList<>();
-
- for (Map.Entry<String, ArrayList<Integer>> entry : result.entrySet()) {
- String key = entry.getKey();
- ArrayList<Integer> arr;
- arr = entry.getValue();
- if (!arr.isEmpty()) {
- Set<Integer> set = new HashSet<>(arr);
- if (((set.size() == 1) && !set.contains(0)) || (set.size() != 1)) {
- cellIds.add(key);
-
- }
- }
-
- }
-
- for (String cell : cellIds) {
- log.debug("cellidList entries: {}", cell);
- cellidList.add(cell);
- }
- log.debug("the cells triggering the oof are {}", cellidList);
-
- UUID transactionId = UUID.randomUUID();
-
- Configuration config = Configuration.getInstance();
- int numSolutions = config.getNumSolutions();
- List<String> optimizers = config.getOptimizers();
-
- String oofResponse = OofRestClient.queryOof(numSolutions, transactionId.toString(), "create", cellidList,
- networkId, optimizers);
- log.debug("Synchronous Response {}", oofResponse);
-
- List<String> childStatus = new ArrayList<>();
- childStatus.add(Long.toString(Thread.currentThread().getId()));
- childStatus.add("triggeredOof");
- try {
- childStatusUpdate.put(childStatus);
- } catch (InterruptedException e1) {
- log.debug("Interrupted execption {}", e1);
- Thread.currentThread().interrupt();
-
- }
-
- // Store Request details in Database
-
- PciRequests pciRequest = new PciRequests();
-
- long childThreadId = Thread.currentThread().getId();
- pciRequest.setTransactionId(transactionId.toString());
- pciRequest.setChildThreadId(childThreadId);
- SonRequestsRepository pciRequestsRepository = BeanUtil.getBean(SonRequestsRepository.class);
- pciRequestsRepository.save(pciRequest);
-
- while (!ChildThread.getResponseMap().containsKey(childThreadId)) {
-
- }
-
- AsyncResponseBody asynResponseBody = ChildThread.getResponseMap().get(childThreadId);
-
- try {
- sendToPolicy(asynResponseBody, networkId);
- } catch (ConfigDbNotFoundException e1) {
- log.debug("Config DB is unreachable: {}", e1);
- }
-
- pciRequestsRepository = BeanUtil.getBean(SonRequestsRepository.class);
- pciRequestsRepository.deleteByChildThreadId(childThreadId);
-
- childStatus = new ArrayList<>();
- childStatus.add(Long.toString(Thread.currentThread().getId()));
- childStatus.add("success");
- try {
- childStatusUpdate.put(childStatus);
- } catch (InterruptedException e) {
- log.debug("InterruptedException {}", e);
- Thread.currentThread().interrupt();
-
- }
-
- }
-
- /**
- * Sends Dmaap notification to Policy.
- *
- * @throws ConfigDbNotFoundException
- * when config db is unreachable
- */
- private void sendToPolicy(AsyncResponseBody async, String networkId) throws ConfigDbNotFoundException {
-
- if (log.isDebugEnabled()) {
- log.debug(async.toString());
- }
-
- List<Solution> solutions;
- solutions = async.getSolutions();
-
- Map<String, List<CellPciPair>> pnfs = getPnfs(solutions);
-
- for (Map.Entry<String, List<CellPciPair>> entry : pnfs.entrySet()) {
- String pnfName = entry.getKey();
- List<CellPciPair> cellPciPairs = entry.getValue();
-
- String notification = getNotificationString(pnfName, cellPciPairs, networkId);
- log.debug("Policy Notification: {}", notification);
- PolicyDmaapClient policy = new PolicyDmaapClient();
- boolean status = policy.sendNotificationToPolicy(notification);
- log.debug("sent Message: {}", status);
- if (status) {
- log.debug("Message sent to policy");
- } else {
- log.debug("Sending notification to policy failed");
- }
-
- }
- }
-
- private String getNotificationString(String pnfName, List<CellPciPair> cellPciPairs, String networkId) {
- ArrayList<Configurations> configurations = new ArrayList<>();
- for (CellPciPair cellPciPair : cellPciPairs) {
- String cellId = cellPciPair.getCellId();
- int pci = cellPciPair.getPhysicalCellId();
- Configurations configuration = new Configurations(new Data(new FapService(cellId,
- new X0005b9Lte(pci, pnfName), new CellConfig(new Lte(new Ran(new Common(cellId)))))));
- configurations.add(configuration);
- }
-
- Payload payload = new Payload(configurations);
- ObjectMapper mapper = new ObjectMapper();
- String payloadString = "";
- try {
- payloadString = mapper.writeValueAsString(payload);
- } catch (JsonProcessingException e) {
- log.debug("JSON processing exception: {}", e);
- }
- PolicyNotification policyNotification = new PolicyNotification();
- ConfigPolicy configPolicy = ConfigPolicy.getInstance();
- String closedLoopControlName = (String) configPolicy.getConfig().get("PCI_MODCONFIG_POLICY_NAME");
- policyNotification.setClosedLoopControlName(closedLoopControlName);
- policyNotification.setPayload(payloadString);
-
- mapper.setSerializationInclusion(Include.NON_NULL);
- String notification = "";
- try {
- notification = mapper.writeValueAsString(policyNotification);
- } catch (JsonProcessingException e1) {
- log.debug("JSON processing exception: {}", e1);
- }
- return notification;
- }
-
- private Map<String, List<CellPciPair>> getPnfs(List<Solution> solutions) throws ConfigDbNotFoundException {
-
- Map<String, List<CellPciPair>> pnfs = new HashMap<>();
-
- for (Solution solution : solutions) {
- List<SonSolution> pciSolutions = solution.getPciSolutions();
- for (SonSolution pciSolution : pciSolutions) {
- String cellId = pciSolution.getCellId();
- int pci = pciSolution.getPci();
-
- String pnfName = "";
- CellInfoRepository cellInfoRepository = BeanUtil.getBean(CellInfoRepository.class);
- Optional<CellInfo> cellInfo = cellInfoRepository.findById(cellId);
- if (cellInfo.isPresent()) {
- pnfName = cellInfo.get().getPnfName();
- } else {
- pnfName = SdnrRestClient.getPnfName(cellId);
- cellInfoRepository.save(new CellInfo(cellId, pnfName));
- }
- if (pnfs.containsKey(pnfName)) {
- pnfs.get(pnfName).add(new CellPciPair(cellId, pci));
- } else {
- List<CellPciPair> cellPciPairs = new ArrayList<>();
- cellPciPairs.add(new CellPciPair(cellId, pci));
- pnfs.put(pnfName, cellPciPairs);
- }
- }
-
- }
- return pnfs;
- }
-
-}